Protection du serveur Linux. Que faire en premier

Protection du serveur Linux. Que faire en premier
Habib M'henni/Wikimedia Commons, CC BY-SA

De nos jours, monter un serveur sur un hébergement ne prend que quelques minutes et quelques clics de souris. Mais immédiatement après le lancement, il se retrouve dans un environnement hostile, car il est ouvert à tout Internet comme une fille innocente dans une disco rockeuse. Les scanners le trouveront rapidement et détecteront des milliers de bots automatiquement programmés qui parcourent le réseau à la recherche de vulnérabilités et de mauvaises configurations. Il y a quelques choses que vous devez faire juste après le lancement pour assurer une protection de base.

Teneur

Utilisateur non root

La première étape consiste à créer un utilisateur non root pour vous-même. Le fait est que l'utilisateur root privilèges absolus dans le système, et si vous lui permettez l'administration à distance, vous ferez alors la moitié du travail pour le pirate, en lui laissant un nom d'utilisateur valide.

Par conséquent, vous devez créer un autre utilisateur et désactiver l'administration à distance via SSH pour root.

Un nouvel utilisateur est démarré par la commande useradd:

useradd [options] <username>

Ensuite, un mot de passe lui est ajouté avec la commande passwd:

passwd <username>

Enfin, cet utilisateur doit être ajouté à un groupe qui a le droit d'exécuter des commandes élevées sudo. Selon la distribution Linux, il peut s'agir de groupes différents. Par exemple, dans CentOS et Red Hat, l'utilisateur est ajouté au groupe wheel:

usermod -aG wheel <username>

Dans Ubuntu, il est ajouté au groupe sudo:

usermod -aG sudo <username>

Clés au lieu de mots de passe SSH

La force brute ou les fuites de mot de passe sont un vecteur d'attaque standard, il est donc préférable de désactiver l'authentification par mot de passe dans SSH (Secure Shell) et d'utiliser l'authentification par clé à la place.

Il existe différents programmes pour implémenter le protocole SSH, tels que lsh и dropbear, mais le plus populaire est OpenSSH. Installation du client OpenSSH sur Ubuntu :

sudo apt install openssh-client

Installation du serveur :

sudo apt install openssh-server

Démarrage du démon SSH (sshd) sur le serveur Ubuntu :

sudo systemctl start sshd

Démarrez automatiquement le démon à chaque démarrage :

sudo systemctl enable sshd

Il convient de noter que la partie serveur d'OpenSSH inclut la partie client. C'est-à-dire à travers openssh-server vous pouvez vous connecter à d'autres serveurs. De plus, depuis votre machine cliente, vous pouvez démarrer un tunnel SSH depuis un serveur distant vers un hôte tiers, puis l'hôte tiers considérera le serveur distant comme la source des requêtes. Une fonction très pratique pour masquer votre système. Voir l'article pour les détails "Conseils pratiques, exemples et tunnels SSH".

Sur une machine cliente, cela n'a généralement aucun sens d'installer un serveur à part entière afin d'empêcher la possibilité d'une connexion à distance à un ordinateur (pour des raisons de sécurité).

Ainsi, pour votre nouvel utilisateur, vous devez d'abord générer des clés SSH sur l'ordinateur à partir duquel vous accéderez au serveur :

ssh-keygen -t rsa

La clé publique est stockée dans un fichier .pub et ressemble à une chaîne de caractères aléatoires commençant par ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Ensuite, à partir de la racine, créez un répertoire SSH sur le serveur dans le répertoire personnel de l'utilisateur et ajoutez la clé publique SSH au fichier authorized_keys, en utilisant un éditeur de texte comme Vim :

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Enfin, définissez les autorisations correctes pour le fichier :

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

et changez la propriété en cet utilisateur :

chown -R username:username /home/username/.ssh

Côté client, vous devez spécifier l'emplacement de la clé secrète pour l'authentification :

ssh-add DIR_PATH/keylocation

Vous pouvez maintenant vous connecter au serveur sous le nom d'utilisateur à l'aide de cette clé :

ssh [username]@hostname

Après autorisation, vous pouvez utiliser la commande scp pour copier des fichiers, l'utilitaire sshfs pour monter à distance un système de fichiers ou des répertoires.

Il est conseillé de faire plusieurs copies de sauvegarde de la clé privée, car si vous désactivez l'authentification par mot de passe et que vous la perdez, vous n'aurez aucun moyen de vous connecter à votre propre serveur.

Comme mentionné ci-dessus, dans SSH, vous devez désactiver l'authentification pour root (c'est la raison pour laquelle nous avons créé un nouvel utilisateur).

Sur CentOS/Red Hat on retrouve la ligne PermitRootLogin yes dans le fichier de configuration /etc/ssh/sshd_config et changez-le :

PermitRootLogin no

Sur Ubuntu, ajoutez la ligne PermitRootLogin no au fichier de configuration 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Après avoir vérifié que le nouvel utilisateur s'authentifie avec sa clé, vous pouvez désactiver l'authentification par mot de passe pour éliminer le risque de fuite de mot de passe ou de force brute. Désormais, pour accéder au serveur, un attaquant devra obtenir une clé privée.

Sur CentOS/Red Hat on retrouve la ligne PasswordAuthentication yes dans le fichier de configuration /etc/ssh/sshd_config et changez-le comme ceci:

PasswordAuthentication no

Sur Ubuntu, ajoutez la ligne PasswordAuthentication no déposer 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Pour obtenir des instructions sur l'activation de l'authentification à deux facteurs via SSH, voir ici.

Pare-feu

Le pare-feu garantit que seul le trafic sur les ports que vous autorisez directement ira au serveur. Cela protège contre l'exploitation des ports activés accidentellement avec d'autres services, ce qui réduit considérablement la surface d'attaque.

Avant d'installer un pare-feu, vous devez vous assurer que SSH est inclus dans la liste des exceptions et ne sera pas bloqué. Sinon, après avoir démarré le pare-feu, nous ne pourrons pas nous connecter au serveur.

La distribution Ubuntu est livrée avec un pare-feu simple (ufw), et avec CentOS/Red Hat - pare-feu.

Autoriser SSH dans le pare-feu sur Ubuntu :

sudo ufw allow ssh

Sur CentOS/Red Hat, utilisez la commande firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Après cette procédure, vous pouvez démarrer le pare-feu.

Sur CentOS/Red Hat, démarrez le service systemd pour firewalld :

sudo systemctl start firewalld
sudo systemctl enable firewalld

Sur Ubuntu, nous utilisons la commande suivante :

sudo ufw enable

Fail2Ban

Service Fail2Ban analyse les logs sur le serveur et compte le nombre de tentatives d'accès depuis chaque adresse IP. Les paramètres spécifient les règles pour combien de tentatives d'accès sont autorisées pour un certain intervalle - après quoi cette adresse IP est bloquée pendant une période de temps spécifiée. Par exemple, autorisons 5 tentatives d'authentification SSH infructueuses en 2 heures, puis bloquons l'adresse IP donnée pendant 12 heures.

Installation de Fail2Ban sur CentOS et Red Hat :

sudo yum install fail2ban

Installation sur Ubuntu et Debian :

sudo apt install fail2ban

Lancer:

systemctl start fail2ban
systemctl enable fail2ban

Le programme a deux fichiers de configuration : /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Les restrictions d'interdiction sont spécifiées dans le deuxième fichier.

La prison pour SSH est activée par défaut avec les paramètres par défaut (5 tentatives, intervalle de 10 minutes, interdiction de 10 minutes).

[DÉFAUT] ignorecommand=bantime=10m findtime=10m maxretry=5

En plus de SSH, Fail2Ban peut protéger d'autres services sur le serveur Web nginx ou Apache.

Mises à jour de sécurité automatiques

Comme vous le savez, de nouvelles vulnérabilités sont constamment découvertes dans tous les programmes. Une fois les informations publiées, des exploits sont ajoutés aux packs d'exploits populaires, qui sont massivement utilisés par les pirates et les adolescents lors de l'analyse de tous les serveurs à la suite. Par conséquent, il est très important d'installer les mises à jour de sécurité dès qu'elles apparaissent.

Sur le serveur Ubuntu, les mises à jour de sécurité automatiques sont activées par défaut, donc aucune autre action n'est requise.

Sur CentOS/Red Hat, vous devez installer l'application dnf-automatique et allumez la minuterie :

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Vérification de la minuterie :

sudo systemctl status dnf-automatic.timer

Modification des ports par défaut

SSH a été développé en 1995 pour remplacer telnet (port 23) et ftp (port 21), ainsi l'auteur du programme, Tatu Iltonen sélectionné le port 22 par défaut, et a été approuvé par l'IANA.

Naturellement, tous les attaquants savent sur quel port SSH s'exécute - et l'analysent avec le reste des ports standard pour connaître la version du logiciel, vérifier les mots de passe root standard, etc.

Changer les ports standard - obfuscation - réduit plusieurs fois la quantité de trafic de déchets, la taille des journaux et la charge sur le serveur, ainsi que la surface d'attaque. Bien que certains critiquer cette méthode de "protection par l'obscurité" (sécurité par l'obscurité). La raison en est que cette technique s'oppose au principe fondamental protection architecturale. Ainsi, par exemple, le National Institute of Standards and Technology des États-Unis à "Guide de sécurité du serveur" indique la nécessité d'une architecture serveur ouverte : « La sécurité d'un système ne doit pas reposer sur le secret de l'implémentation de ses composants », indique le document.

Théoriquement, changer les ports par défaut va à l'encontre de la pratique de l'architecture ouverte. Mais en pratique, la quantité de trafic malveillant est en fait réduite, il s'agit donc d'une mesure simple et efficace.

Le numéro de port peut être configuré en modifiant la directive Port 22 dans le fichier de configuration / etc / ssh / sshd_config. Il est également indiqué par le paramètre -p <port> в sshd. Client et programmes SSH Sftp prend également en charge l'option -p <port>.

Paramètre -p <port> peut être utilisé pour spécifier le numéro de port lors de la connexion avec la commande ssh sous linux. DANS Sftp и scp paramètre est utilisé -P <port> (P majuscule). L'instruction de la ligne de commande remplace toute valeur dans les fichiers de configuration.

S'il y a beaucoup de serveurs, presque toutes ces actions pour protéger le serveur Linux peuvent être automatisées dans un script. Mais s'il n'y a qu'un seul serveur, il est préférable de contrôler manuellement le processus.

Comme la publicité

Commandez et commencez tout de suite ! Création de VDS n'importe quelle configuration et avec n'importe quel système d'exploitation en une minute. La configuration maximale vous permettra de tirer le meilleur parti - 128 cœurs de processeur, 512 Go de RAM, 4000 Go NVMe. Épique 🙂

Protection du serveur Linux. Que faire en premier

Source: habr.com