Introduction

Suite au très bon article de hmichael intitulé "Sécuriser OpenSSH", je me suis interrogé sur mon niveau de sécurité actuel concernant ce service.

Jusqu'à présent, je pensais avoir un niveau de sécurité correct sur ce service grâce à la configuration suivante :

  • 🔑 Authentification par clés
  • Désactivation de l'authentification par mot de passe
  • Désactivation de l'authentification via root
  • Spécifier manuellement les utilisateurs autorisés à se connecter
  • Forcer l'utilisation du protocole SSH version 2
  • N'autoriser que 3 essais successifs

De plus, fail2ban assure une surveillance des logs et banni via mon firewall les méchants bots faisant du brute force, mais c'est un autre sujet (à creuser si vous ne connaissez pas !).

📝 Voici mon fichier de configuration actuel (/etc/ssh/sshd_config) :

# Utilisation de la version 2 du protocole SSH
Protocol 2
# Utilisation du port 22. Il est possible de le modifier
Port 22
# Interdit à root de s'identifier
PermitRootLogin no
PermitEmptyPasswords no
# On indique ici la liste des utilisateurs ayant la permission d'utiliser SSH
AllowUsers utilisateur
# Nombre d'essais avant fermeture de la connexion
MaxAuthTries 3
UsePAM no
# Authentification par clés
PubkeyAuthentication yes
# Lieux où sont stockées les clés publiques --> /home/user/.ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication yes
# Désactivation de l'authentification par mot de passe
PasswordAuthentication no
IgnoreRhosts yes
HostbasedAuthentication no
AcceptEnv LANG LC_*
Subsystem       sftp    /usr/lib/openssh/sftp-server
PrintMotd no
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
X11Forwarding no

Concernant le choix du port 22 : je souhaite respecter les standards d'Internet notamment pour que l'interopérabilité entre mes services soit maximale. Vous pouvez bien sûr modifier ce port par n'importe quel autre (à condition qu'il ne soit pas déjà utilisé).
Sachez tout de même que si vous ne faites que changer le port d'écoute, un simple scan de votre machine permettra à l'attaquant de déterminer le nouveau port.
Je vous conseille donc de changer le port d'écoute ET d'utiliser un logiciel tel que Portsentry qui bloque les scans.

Suite à la lecture de son article, je me suis rendu sur le site https://www.ssh-audit.com/ afin de tester mon serveur.

Le résultat tombe :
resultat

Moi qui croyais avoir un niveau de sécurité satisfaisant sur mon serveur SSH, c'est la douche froide 🥶 ...

Voyons comment j'ai pu passer d'un F à un A+

Actuellement, le serveur accepte l'utilisation de nombreux types de chiffrement et d'algorithme d'échange de clé.
Nous allons devoir forcer le serveur à utiliser ceux qui sont, à l'heure actuelle, les plus robustes.

# Régénération de la clé ED25519 du serveur
rm -f /etc/ssh/ssh_host_*
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
# Retrait des moduli Diffie-Hellman faible
awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.safe
mv -f /etc/ssh/moduli.safe /etc/ssh/moduli
# Désactivation des clés DSA/ECDSA & RSA
sed -i 's/^HostKey \/etc\/ssh\/ssh_host_\(dsa\|ecdsa\|rsa\)_key$/\#HostKey \/etc\/ssh\/ssh_host_\1_key/g' /etc/ssh/sshd_config
# Restriction des ciphers, clés d’échange et des codes d’authentification
echo -e "\nKexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512\nCiphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr\nMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com" >> /etc/ssh/sshd_config
# Redémarrage du serveur SSH
systemctl restart sshd.service

📝 Voici le fichier de configuration (/etc/ssh/sshd_config) après modifications :

Protocol 2
Port 22
PermitRootLogin no
PermitEmptyPasswords no
AllowUsers john
MaxAuthTries 3
UsePAM no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication yes
PasswordAuthentication no
IgnoreRhosts yes
HostbasedAuthentication no
AcceptEnv LANG LC_*
Subsystem       sftp    /usr/lib/openssh/sftp-server
PrintMotd no
X11Forwarding no

KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com

Résultat

resultatA

Mission accomplie !
Pour avoir plus de détails je vous encourage vivement à aller consulter l'article de hmichael !

Sources :

Partager cet article :