Protection des serveurs Linux. Que faire en premier lieu

Protection des serveurs Linux. Que faire en premier lieu
Habib M’henni / Wikimedia Commons, CC BY-SA

De nos jours, mettre en place un serveur sur un hébergement ne prend que quelques minutes et quelques clics de souris. Mais juste aprÚs son lancement, il se retrouve dans un environnement hostile, car il est ouvert à tout Internet comme une jeune fille innocente dans une disco rock. Il sera rapidement repéré par des scanners et constaté par des milliers de bots automatiques qui parcourent le web à la recherche de vulnérabilités et de configurations incorrectes. Il y a plusieurs actions à entreprendre immédiatement aprÚs le lancement pour assurer une protection de base.

Contenu

Utilisateur non-root

La premiÚre étape consiste à créer un utilisateur non-root. En effet, un utilisateur root a des privilÚges absolus dans le systÚme, et si vous lui autorisez l'administration à distance, vous ferez la moitié du travail d'un hacker en lui laissant un nom d'utilisateur valide.

C'est pourquoi il est nécessaire de créer un autre utilisateur et de désactiver l'administration à distance pour le root via SSH.

Le nouvel utilisateur est créé avec la commande useradd:

useradd [options]

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

passwd

Enfin, cet utilisateur doit ĂȘtre ajoutĂ© Ă  un groupe ayant le droit d'exĂ©cuter des commandes avec Ă©lĂ©vation de privilĂšges sudo. En fonction de la distribution Linux, cela peut varier. Par exemple, sur CentOS et Red Hat, l'utilisateur est ajoutĂ© au groupe wheel:

usermod -aG wheel

Sur Ubuntu, il est ajouté au groupe sudo:

usermod -aG sudo

Clés au lieu de mots de passe SSH

Les attaques par brute force ou les fuites de mots de passe sont des vecteurs d'attaque standard, il est donc préférable de désactiver l'authentification par mot de passe sur SSH (Secure Shell) et d'utiliser à la place l'authentification par clés.

Il existe plusieurs programmes pour mettre en Ɠuvre le protocole SSH, comme lsh et Dropbear, mais le plus populaire est OpenSSH. Installation du client OpenSSH sur Ubuntu :

sudo apt install openssh-client

Installation sur le serveur :

sudo apt install openssh-server

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

sudo systemctl start sshd

Démarrage automatique du démon à chaque chargement :

sudo systemctl enable sshd

Il est Ă  noter que la partie serveur d'OpenSSH inclut le client. C'est-Ă -dire via openssh-server vous pouvez vous connecter Ă  d'autres serveurs. De plus, depuis votre machine cliente, vous pouvez crĂ©er un tunnel SSH depuis le serveur distant vers un hĂŽte externe, et cet hĂŽte extĂ©rieur considĂ©rera le serveur distant comme la source des requĂȘtes. Une fonctionnalitĂ© trĂšs pratique pour masquer votre systĂšme. Voir l'article pour plus de dĂ©tails «Conseils pratiques, exemples et tunnels SSH».

Il n'est généralement pas nécessaire d'installer un serveur complet sur la machine cliente afin d'éviter la possibilité de connexion distante à l'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 vous connecterez 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, sous root, créez un répertoire SSH dans le répertoire personnel de l'utilisateur sur le serveur et ajoutez la clé publique SSH dans le 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 permissions correctes pour le fichier:

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

et changez la propriété de ce répertoire à cet utilisateur:

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

Du 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 de l'utilisateur avec cette clé:

ssh [username]@hostname

AprÚs autorisation, vous pouvez utiliser la commande scp pour copier des fichiers, ainsi que l'outil sshfs pour le montage à distance des systÚmes 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 absolument aucun moyen d'accéder à votre serveur.

Comme mentionné précédemment, il faut désactiver l'authentification pour root (c'est pourquoi nous avons créé un nouvel utilisateur).

Sous CentOS/Red Hat, recherchez la ligne PermitRootLogin yes dans le fichier de configuration /etc/ssh/sshd_config et modifiez-la:

PermitRootLogin no

Sous Ubuntu, ajoutez une ligne PermitRootLogin no dans le 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 afin d'éliminer le risque d'extraction ou de brute force. Maintenant, pour accéder au serveur, un attaquant devra obtenir la clé privée.

Sous CentOS/Red Hat, recherchez la ligne PasswordAuthentication yes dans le fichier de configuration /etc/ssh/sshd_config et nous la modifions comme suit :

PasswordAuthentication no

Sous Ubuntu, ajoutez une ligne PasswordAuthentication no dans le fichier 10-my-sshd-settings.conf:

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

Pour un guide sur la connexion avec l'authentification Ă  deux facteurs via SSH, voir ici.

Pare-feu

Le pare-feu garantit que seul le trafic sur les ports que vous avez explicitement autorisés atteindra le serveur. Cela protÚge contre l'exploitation des ports qui se sont accidentellement activés avec d'autres services, réduisant ainsi considérablement la surface d'attaque.

Avant d'installer le pare-feu, veillez à ce que SSH figure sur la liste des exceptions et ne soit pas bloqué. Sinon, aprÚs le démarrage du pare-feu, nous ne pourrons pas nous connecter au serveur.

Le systĂšme Ubuntu est livrĂ© avec Uncomplicated Firewall (ufw), tandis qu'avec CentOS/Red Hat — firewalld.

Autorisation de 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, utilisez cette commande :

sudo ufw enable

Fail2Ban

Service Fail2Ban analyse les journaux sur le serveur et compte le nombre de tentatives d'accĂšs depuis chaque adresse IP. Dans les paramĂštres, des rĂšgles sont dĂ©finies pour le nombre de tentatives d'accĂšs autorisĂ©es sur un intervalle donnĂ© — aprĂšs quoi cette adresse IP est bloquĂ©e pendant une pĂ©riode spĂ©cifiĂ©e. Par exemple, nous autorisons 5 tentatives d'authentification Ă©chouĂ©es par SSH sur une pĂ©riode de 2 heures, aprĂšs quoi cette adresse IP est bloquĂ©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

Lancement :

systemctl start fail2ban
systemctl enable fail2ban

Le programme contient deux fichiers de configuration : /etc/fail2ban/fail2ban.conf et /etc/fail2ban/jail.conf. Les restrictions pour le ban sont indiquées dans le second fichier.

Le jail pour SSH est activé par défaut avec des paramÚtres par défaut (5 tentatives, intervalle de 10 minutes, ban de 10 minutes).

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5

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

Mises à jour de sécurité automatiques

Comme chacun sait, de nouvelles vulnérabilités sont constamment découvertes dans tous les logiciels. AprÚs la publication des informations, des exploits sont ajoutés dans des packs d'exploits populaires, largement utilisés par des hackers et des adolescents lors du scan de tous les serveurs. Il est donc crucial d'installer les mises à jour de sécurité dÚs qu'elles apparaissent.

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

Sur CentOS/Red Hat, il faut installer l'application dnf-automatic et activer le timer :

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

Vérification du timer :

sudo systemctl status dnf-automatic.timer

Changement des ports par défaut

SSH a été développé en 1995 pour remplacer telnet (port 23) et ftp (port 21), c'est pourquoi l'auteur du programme, Tatu Ylönen, a choisi le port 22 par défaut, et il a été approuvé par l'IANA.

Évidemment, tous les attaquants savent sur quel port fonctionne SSH — et le scanent avec les autres ports standards pour connaĂźtre la version du logiciel, vĂ©rifier les mots de passe par dĂ©faut pour root, etc.

Changer les ports standards — une forme d'obscurcissement — rĂ©duit considĂ©rablement le volume du trafic indĂ©sirable, la taille des logs et la charge sur le serveur, tout en diminuant la surface d'attaque. Bien que certains critiquent cette mĂ©thode de "protection par l'incertitude" (security through obscurity). La raison en est que cette technique s'oppose Ă  une protection architecturale fondamentale. Ainsi, par exemple, l'Institut national des normes et de la technologie des États-Unis dans son "Guide de sĂ©curitĂ© des serveurs" indique la nĂ©cessitĂ© d'une architecture serveur ouverte : "La sĂ©curitĂ© du systĂšme ne doit pas reposer sur la furtivitĂ© de la mise en Ɠuvre de ses composants", est-il Ă©crit dans le document.

Théoriquement, changer les ports par défaut contredit la pratique de l'architecture ouverte. Mais en pratique, le volume du trafic malveillant est effectivement réduit, donc c'est 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 spĂ©cifiĂ© par l'option -p dans sshd. Le client SSH et les programmes sftp supportent Ă©galement cette option -p.

ParamĂštre -p qui peut ĂȘtre utilisĂ©e pour indiquer le numĂ©ro de port lors de la connexion via la commande ssh sous Linux. Dans sftp et scp il est utilisĂ© l'option -P (titre P). L'instruction de la ligne de commande remplace toute valeur dans les fichiers de configuration.

S'il y a plusieurs serveurs, presque toutes ces actions de protection du 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 le processus manuellement.

En tant que publicité

Commandez et commencez Ă  travailler immĂ©diatement ! CrĂ©ation de VDS de n'importe quelle configuration et avec n'importe quel systĂšme d'exploitation en une minute. La configuration maximale permettra de dĂ©ployer pleinement — 128 cƓurs CPU, 512 Go de RAM, 4000 Go NVMe. Épique 🙂

Protection des serveurs Linux. Que faire en premier lieu

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster