Comment sécuriser efficacement votre serveur SSH avec SSH-Audit

La sécurité SSH est souvent négligée… jusqu’au jour où une attaque brute force ou une mauvaise configuration vous met à genoux. Heureusement, il existe un outil open source simple, rapide et redoutablement efficace pour auditer la sécurité de votre serveur SSH : SSH-Audit.

Dans ce guide, on va voir ensemble comment utiliser SSH-Audit pour scanner, comprendre les failles et corriger les erreurs sur un serveur Ubuntu 24.04.

Installer SSH-Audit avec Python

SSH-Audit est un script Python autonome. Pas besoin de bibliothèque externe, pas de dépendances lourdes. Juste Python, un terminal et c’est parti :

pipx install ssh-audit

Résultat:

  installed package ssh-audit 3.3.0, installed using Python 3.12.3
  These apps are now globally available
    - ssh-audit
done! ✨ 🌟 ✨Code language: CSS (css)

Vous pouvez lancer l’audit depuis votre fenêtre de terminal:

ssh-audit monserveur.exemple.com -pPORTNUMBERCode language: CSS (css)

Si vous voulez tester sans rien installer, vous pouvez aussi passer par le service en ligne ssh-audit.com : entrez simplement l’adresse IP ou le nom de domaine de votre serveur, SSH-Audit vous renvoie un rapport clair et lisible.

Voici le rapport de ssh-audit pour un Ubuntu Server de base, avant optimisation :

# general
(gen) banner: SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.12
(gen) software: OpenSSH 9.6p1
(gen) compatibility: OpenSSH 9.6+, Dropbear SSH 2020.79+
(gen) compression: enabled (zlib@openssh.com)

# key exchange algorithms
(kex) sntrup761x25519-sha512@openssh.com    -- [info] available since OpenSSH 8.5
                                            `- [info] default key exchange from OpenSSH 9.0 to 9.8
                                            `- [info] hybrid key exchange based on post-quantum resistant algorithm and proven conventional X25519 algorithm
(kex) curve25519-sha256                     -- [info] available since OpenSSH 7.4, Dropbear SSH 2018.76
                                            `- [info] default key exchange from OpenSSH 7.4 to 8.9
(kex) curve25519-sha256@libssh.org          -- [info] available since OpenSSH 6.4, Dropbear SSH 2013.62
                                            `- [info] default key exchange from OpenSSH 6.5 to 7.3
(kex) ecdh-sha2-nistp256                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) ecdh-sha2-nistp384                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) ecdh-sha2-nistp521                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) diffie-hellman-group-exchange-sha256 (3072-bit) -- [info] available since OpenSSH 4.4
                                                      `- [info] OpenSSH's GEX fallback mechanism was triggered during testing. Very old SSH clients will still be able to create connections using a 2048-bit modulus, though modern clients will use 3072. This can only be disabled by recompiling the code (see https://github.com/openssh/openssh-portable/blob/V_9_4/dh.c#L477).
(kex) diffie-hellman-group16-sha512         -- [info] available since OpenSSH 7.3, Dropbear SSH 2016.73
(kex) diffie-hellman-group18-sha512         -- [info] available since OpenSSH 7.3
(kex) diffie-hellman-group14-sha256         -- [warn] 2048-bit modulus only provides 112-bits of symmetric strength
                                            `- [info] available since OpenSSH 7.3, Dropbear SSH 2016.73
(kex) ext-info-s                            -- [info] available since OpenSSH 9.6
                                            `- [info] pseudo-algorithm that denotes the peer supports RFC8308 extensions
(kex) kex-strict-s-v00@openssh.com          -- [info] pseudo-algorithm that denotes the peer supports a stricter key exchange method as a counter-measure to the Terrapin attack (CVE-2023-48795)

# host-key algorithms
(key) rsa-sha2-512 (3072-bit)               -- [info] available since OpenSSH 7.2
(key) rsa-sha2-256 (3072-bit)               -- [info] available since OpenSSH 7.2, Dropbear SSH 2020.79
(key) ecdsa-sha2-nistp256                   -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                            `- [warn] using weak random number generator could reveal the key
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(key) ssh-ed25519                           -- [info] available since OpenSSH 6.5, Dropbear SSH 2020.79

# encryption algorithms (ciphers)
(enc) chacha20-poly1305@openssh.com         -- [info] available since OpenSSH 6.5, Dropbear SSH 2020.79
                                            `- [info] default cipher since OpenSSH 6.9
(enc) aes128-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52
(enc) aes192-ctr                            -- [info] available since OpenSSH 3.7
(enc) aes256-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52
(enc) aes128-gcm@openssh.com                -- [info] available since OpenSSH 6.2
(enc) aes256-gcm@openssh.com                -- [info] available since OpenSSH 6.2

# message authentication code algorithms
(mac) umac-64-etm@openssh.com               -- [warn] using small 64-bit tag size
                                            `- [info] available since OpenSSH 6.2
(mac) umac-128-etm@openssh.com              -- [info] available since OpenSSH 6.2
(mac) hmac-sha2-256-etm@openssh.com         -- [info] available since OpenSSH 6.2
(mac) hmac-sha2-512-etm@openssh.com         -- [info] available since OpenSSH 6.2
(mac) hmac-sha1-etm@openssh.com             -- [fail] using broken SHA-1 hash algorithm
                                            `- [info] available since OpenSSH 6.2
(mac) umac-64@openssh.com                   -- [warn] using encrypt-and-MAC mode
                                            `- [warn] using small 64-bit tag size
                                            `- [info] available since OpenSSH 4.7
(mac) umac-128@openssh.com                  -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 6.2
(mac) hmac-sha2-256                         -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 5.9, Dropbear SSH 2013.56
(mac) hmac-sha2-512                         -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 5.9, Dropbear SSH 2013.56
(mac) hmac-sha1                             -- [fail] using broken SHA-1 hash algorithm
                                            `- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 2.1.0, Dropbear SSH 0.28

# fingerprints
(fin) ssh-ed25519: SHA256:YnkJfR0z/UMb2wQ+wYvEwgTJPheozRsMH41BvEXL56Q
(fin) ssh-rsa: SHA256:Ax+2iFsBx5juS8y+bVXxvs3DT0bdoX4nKAdGje1iknQ

# algorithm recommendations (for OpenSSH 9.6)
(rec) -ecdh-sha2-nistp256                   -- kex algorithm to remove
(rec) -ecdh-sha2-nistp384                   -- kex algorithm to remove
(rec) -ecdh-sha2-nistp521                   -- kex algorithm to remove
(rec) -ecdsa-sha2-nistp256                  -- key algorithm to remove
(rec) -hmac-sha1                            -- mac algorithm to remove
(rec) -hmac-sha1-etm@openssh.com            -- mac algorithm to remove
(rec) -diffie-hellman-group14-sha256        -- kex algorithm to remove
(rec) -hmac-sha2-256                        -- mac algorithm to remove
(rec) -hmac-sha2-512                        -- mac algorithm to remove
(rec) -umac-128@openssh.com                 -- mac algorithm to remove
(rec) -umac-64-etm@openssh.com              -- mac algorithm to remove
(rec) -umac-64@openssh.com                  -- mac algorithm to removeCode language: PHP (php)

Et le résultat en image :

Audit SSH sous un serveur Ubuntu avant optimisation, pas top!
Audit SSH sous un serveur Ubuntu avant optimisation, pas top :(

Ce n’est pas vraiment idéal ! Passons à l’étape suivante pour sécuriser le service SSH.

Sécuriser SSH sur Ubuntu Server 24.04 pas à pas

Maintenant que nous avons analysé les failles grâce à SSH-Audit, il est temps de sécuriser concrètement notre serveur Ubuntu 24.04.


Nous allons renforcer la configuration d’OpenSSH en plusieurs étapes claires et ciblées :

  • Recréer les clés hôtes avec des algorithmes robustes
  • Supprimer les groupes Diffie-Hellman trop faibles
  • Restreindre les algorithmes d’échange, de chiffrement et de signature
  • Appliquer un pare-feu basique pour limiter les attaques DoS
  • Et bien sûr, redémarrer proprement les services

⚠️ Toutes les commandes suivantes doivent être exécutées en tant que root.

1. Recréer les clés hôtes ED25519 et RSA

On commence par supprimer les anciennes clés, souvent générées automatiquement et potentiellement faibles.

rm /etc/ssh/ssh_host_*
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""Code language: JavaScript (javascript)

Cela garantit que vos clés sont à jour, solides, et conformes aux recommandations actuelles.

2. Supprimer les moduli DH trop petits

Le fichier /etc/ssh/moduli contient des paramètres pour l’échange Diffie-Hellman. Filtrons ceux inférieurs à 3071 bits :

awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.safe
mv /etc/ssh/moduli.safe /etc/ssh/moduliCode language: JavaScript (javascript)

Cela évite d’utiliser des paramètres cryptographiques vulnérables pendant l’échange de clés.

3. Forcer l’utilisation des bonnes clés hôtes

On spécifie explicitement les clés à utiliser dans sshd_config :

echo -e "\nHostKey /etc/ssh/ssh_host_ed25519_key\nHostKey /etc/ssh/ssh_host_rsa_key" >> /etc/ssh/sshd_configCode language: JavaScript (javascript)

4. Restreindre les algorithmes supportés

On applique une configuration rigide mais sécurisée via un fichier dédié :

echo -e "# Durcissement SSH recommandé par ssh-audit.com\nKexAlgorithms sntrup761x25519-sha512@openssh.com,gss-curve25519-sha256-,curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha256,gss-group16-sha512-,diffie-hellman-group16-sha512\n\nCiphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-gcm@openssh.com,aes128-ctr\n\nMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com\n\nRequiredRSASize 3072\n\nHostKeyAlgorithms sk-ssh-ed25519-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256\n\nCASignatureAlgorithms sk-ssh-ed25519@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256\n\nGSSAPIKexAlgorithms gss-curve25519-sha256-,gss-group16-sha512-\n\nHostbasedAcceptedAlgorithms sk-ssh-ed25519-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256\n\nPubkeyAcceptedAlgorithms sk-ssh-ed25519-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256" > /etc/ssh/sshd_config.d/ssh-audit_hardening.confCode language: CSS (css)

Cette config limite les échanges aux algorithmes modernes et résistants aux attaques quantiques (sntrup761), supprime les ciphers obsolètes, et impose une taille de clé RSA minimale de 3072 bits.

5. Redémarrer le service SSH

Appliquez les nouvelles configurations :

service ssh restart

6. Activer la limitation du taux de connexion SSH

Pour contrer les attaques DoS comme DHEat, on limite le nombre de connexions entrantes par IP via iptables :

iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 -j DROP

ip6tables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
ip6tables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 -j DROPCode language: PHP (php)

Pour rendre cette règle persistante même après redémarrage :

DEBIAN_FRONTEND=noninteractive apt install -q -y netfilter-persistent iptables-persistent
service netfilter-persistent save

Remarque : en raison d’un bug dans OpenSSH, des moduli Diffie-Hellman de 2048 bits seront encore utilisés dans certains cas spécifiques. Il n’est donc pas possible d’obtenir un score supérieur à 95 %.

Voici le résultat de la sécurisation du service SSH sur notre serveur dédié :

Notre service SSH est maintenant bien plus sécurisé ^^
Notre service SSH est maintenant bien plus sécurisé ^^

Conclusion : un serveur SSH (presque) blindé

En quelques commandes et un bon coup d’œil avec SSH-Audit, vous venez de transformer un serveur SSH standard en un système beaucoup plus résilient face aux attaques modernes.

Vous avez :

  • Recréé des clés hôtes solides (ED25519 et RSA 4096)
  • Nettoyé les paramètres DH trop faibles
  • Durci les algorithmes supportés selon les meilleures pratiques
  • Activé une défense simple contre les attaques par saturation (DHEat)
  • Et appliqué tout cela proprement, sans toucher à l’existant

Dernier conseil : planifiez un audit régulier avec ssh-audit.com, surtout après des mises à jour majeures d’OpenSSH. Cela vous permettre de garder un niveau de sécurité optimal et largement suffisant pour la production.

Besoin d’un partenaire fiable pour votre projet WordPress/WooCommerce ? Je mets mon expertise à votre service pour des résultats concrets.

Bénéficiez d’un accompagnement personnalisé »

Matt

Développeur certifié WordPress & WooCommerce chez Codeable, administrateur système et enseignant-chercheur, je mets mon expertise au service de vos projets web.

Ma priorité : des sites performants, fiables et sécurisés, pensés pour offrir la meilleure expérience utilisateur. J’accompagne chaque client avec écoute et pédagogie, pour transformer vos idées en solutions concrètes et durables.

Profitez de solutions WordPress et WooCommerce sur-mesure, pensées pour optimiser durablement votre site.
Explorez les leviers pour booster l’impact de votre site web.

Opinions