Hardener le service SSH

Le service SSH est probablement le plus critique puisqu’il va permettre à des utilisateurs de se connecter sur notre serveur. La première chose à faire c’est de désactiver l’authentification root.

Pour cela il faudra ajouter (ou modifier suivant si la ligne est présente ou non) cette ligne

PermitRootLogin no

Ensuite nous allons whitelister les utilisateurs qui ont le droit de se connecter en SSH. Pour cela on va se servir de la directive AllowUsers :

AllowUsers defte

Ici je n’autorise que l’utilisateur defte à se connecter via SSH mais on pourrait aussi très bien dire que l’utilisateur defte n’a le droit de se connecter qu’à partir de l’IP 192.168.0.24 :

AllowUsers defte@192.168.0.24

Petit aparté, cette gestion via whitelist peut aussi être faite via PAM. Pour cela il faudra ajouter  la ligne suivante dans le fichier /etc/pam.d/ssh :

auth required pam_listfile.so item=user sense=allow file=/etc/sshd/sshd.allow onerr=fail

Cette ligne indique juste que la liste des utilisateurs autorisés à se connecter en SSH sont présents dans le fichier /etc/sshd/sshd.allow.


Ce qu’on pourrait faire aussi c’est supprimer l’authentification par mot de passe. Ainsi la seule manière de se connecter serait de disposer d’un ensemble de clés privé/publique. Pour cela il faudrait que j’ajoute cette ligne :

PasswordAuthentication no

Cette méthode reste assez dangereuse puisque le jour où vous perdez votre clé privé eh bien vous perdez l’accès à votre serveur. Chez moi j’ai une raspberry pi dont le port SSH est exposé sur Internet. Dans la configuration SSH de ma pi j’ai indiqué que je désactivais toute authentification par password sauf pour les IP faisant partie de la plage 192.168.0.0/24 :

Match address 192.0.0.0/24
    PasswordAuthentication yes

Ensuite on pourra aussi empêcher tout X11Forwarding puisque de toute façon notre serveur ne dispose pas d’interface graphique. Pour cela on utilisera cette directive :

X11Forwarding no

Pour finir il faudra s’assurer que le protocole utilisé est bien le 2 :

Protocol 2

Nous n’aurons plus qu’à reload notre service pour que les changements soient appliqués :

systemctl reload sshd