--- date: 2020-09-18T15:58:58+02:00 description: "Configurer le serveur SSH pour une configuration plus sécurisée, que celle par défaut." draft: false tags: ['SSH','harden'] title: "OpenSSH : Durcir la configuration du serveur SSH" translationKey: 'sshd-harden' --- ## Description Par défaut, même sous OpenBSD, la configuration de SSH n'est pas des plus sécurisées. Les algorithmes NISTP - *susceptibles d'être une porte dérobée de la NSA ; mais attention, ce n'est qu'une rumeur* -, voire du SHA1, sont encore utilisés. {{}} Il est impératif QUE la version du serveur OpenSSH utilisée soit supérieure à la version 6.5 ! {{}} ## Configuration * Le fichier de configuration : `/etc/ssh/sshd_config` --- Bien sûr, hormis le fait de : * n'utiliser **QUE la Version 2** du protocole, * NE **PAS** permettre au compte **root** de se connecter, * **désactiver l'authentification par mot de passe**, * n'utiliser **QUE l'authentification par clés**. ### Recréation des clés d'Hôte ```sh $ cd /etc/ssh # rm ssh_host_* # ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N "" # ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key -N "" -o -a 64 ``` {{< note info >}} Ne mettez pas de passphrases lors de la génération, autrement le serveur ne sera pas capable de les lire… De toute facon, le fichier `/var/log/auth` vous le dira ! {{}} --- Ensuite, il faut veillez aux choses ci-dessous : ### HostKey {{< note warning >}} {{< color red >}}NE PAS utiliser les protocoles de chiffrement DSA, ECDSA{{}} {{}} **Commentez** les déclarations `HostKey` pour ne garder que celles relatives au chiffrement RSA et ED25519. ```cfg HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ed25519_key ``` {{< note tip >}} Vous pouvez très bien n'utiliser que les clés à courbe elliptiques, de type ed25519. Dans ce cas-là, veillez à ce que tous vos clients puissent utiliser aussi ce mode de chiffrement. {{}} ### Chiffrements Les **chiffrements** à autoriser sont : `Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com` ### Échange de clés Les **algorithmes d'échanges de clé** à privilégier sont : `KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org` ### Algorithmes de clé Hôte Les **algorithmes de clé d'Hôte** sont : `HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-512,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com` {{< note info >}} Il est possible que selon la version de votre serveur, cette définition d'algorithme provoque une erreur. Veuillez lire la section "{{< anchor "Dépannage" "Bad key types" >}}" ! {{}} ### Message Authentication Codes Les algorithmes des **Codes d'Authentification de Messages** sont : `MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com` ### Le fichier Moduli Le fichier moduli est un fichier contenant les nombres premiers et les générateurs à utiliser par le serveur SSH dans la méthode d'échange des clés de groupe {{< abbr DH "Diffie-Hellman" >}}. {{< note warning >}} Depuis 2017, le [bogue #2793](https://bugzilla.mindrot.org/show_bug.cgi?id=2793) explique que dans certains contextes le bon fonctionnement échoue, suite aux recommandations ci-dessous. Si vous n'arrivez plus à vous connecter, envisagez de revenir en arrière sur cette modification ! {{}} #### Moduli / Linux Il est recommandé de le recréer de telle manière : ```sh awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.safe mv /etc/ssh/moduli.safe /etc/ssh/moduli ``` #### Moduli / OpenBSD S'il est possible de le créer ainsi :
`ssh-keygen -G /etc/ssh/moduli -b 3072` attention, la génération sera longue et dépend très fortement de la puissance machine de votre serveur. Néanmoins, sachez que depuis quelques années/versions, le fichier est déjà généré et se trouve être : `/etc/moduli` Pour en savoir plus, lisez le manpage {{< man moduli 5 >}} ### Sandbox {{< note warning >}} Cette option est obsolète depuis la version 7.5. Veillez à ne plus l'utiliser ! {{< /note >}} ## TL;DR Voici un exemple minimaliste du fichier de configuration sécurisée côté serveur : ```cfg Port 22 ListenAddress 192.168.xxx.yyy ListenAddress fd00:abcd:efg0::1 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ed25519_key Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-512,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128-etm@openssh.com PermitRootLogin no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no ``` ## Dépannage ### Bad key types Si vous avez l'erreur suivante :
`/etc/ssh/sshd_config line 26: Bad key types 'ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-512,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com'` Enlevez les deux déclarations suivantes `sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com` et {{< anchor testez test >}} à nouveau, puis si c'est **OK**, relancez le service. ### LoginGraceTime Du fait de générer des clés RSA + PKBDF, ou ed25519, si vous avez paramétré l'option `LoginGraceTime`, pour la diminuer au strict minimum, pensez à **augmenter sa valeur, sinon** vous aurez **le droit à ne pas pouvoir vous connecter, sans aucun message d'erreur** dans le log d'authentification. --- ### Test * Vérifier la configuration : `# sshd -t` --- #### ssh-audit Pour tester la configuration de votre serveur, il existe un outil nommé `ssh-audit`. Installez-le et exécutez à l'encontre de votre serveur SSH : `$ ssh-audit adresse-ip-serveur-ssh` * Tout message en rouge est à corriger URGEMMENT. * Tout message en vert signifie que l'analyse en question est bonne. #### sshaudit internet Il est possible de tester la valeur de la configuration de votre serveur sur le site **sshaudit** : https://www.sshaudit.com --- ## Documentation ### Manpages * {{< man sshd 8 >}}, {{< man sshd_config 5 >}}, {{< man sftp-server 8 >}} * {{< man moduli 5 >}} ### Autres * https://infosec.mozilla.org/guidelines/openssh * https://www.sshaudit.com/hardening_guides.html ---