---
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
---