SSH : Sécuriser un serveur SSH
Par Yoann le mercredi, 29 avril 2009, 16:21 - L1nuX and c0 - Lien permanent
Ce billet est la suite de celui sur l'utilisation des clefs publique et privée ave SSH.
Nous verrons ici comment sécuriser notre serveur SSH (le daemon sshd)
PermitEmptyPasswords
Sur le serveur dans /etc/ssh/sshd_config, vous pouvez ajouter la ligne
PermitEmptyPasswords no
Ceci interdit de pouvoir ce logger avec un mot de passe vide.
PermitRootLogin
Sur le serveur dans /etc/ssh/sshd_config, vous pouvez ajouter la ligne
PermitRootLogin no
Ceci interdit de pouvoir ce logger avec l'utilisateur root. Effectivement celui-ci existe sur toutes les machines linux, et il ne resterait donc aux pirates qu'a trouver le mot de passe au lieu d'avoir a chercher un couple login + mot de passe.
PermitRootLogin without-password
Si l'utilisation du login root est requis - ex. pour un system de backup distant - vous pouvez authoriser la connexion en root uniquement par l'utilisation de clefs
PermitRootLogin forced-commands-only
Il est aussi possible de limiter l'acces root a utiliser des commandes spécifiques
Port
Aujourd'hui les pirates, scan nos serveurs, et si il trouve un port 22 (celui de SSH) à l'ecoute, ils risquent de vouloir essayer de ce connecter. Pour cela, une solution simple est de changer le port sur lequel ecoute le daemon SSH
port 2222
PasswordAuthentication
Sur le serveur dans /etc/ssh/sshd_config, vous pouvez ajouter la ligne
PasswordAuthentication no
Attention, ceci desactive l'authentification par mot de passe, vous ne pourrez alors utiliser que l'authentification par clefs.
Protocol
Sur le serveur dans /etc/ssh/sshd_config, vous pouvez ajouter la ligne
Protocol 2
Ceci n'authorise que l'utilisation de la version 2 de SSH. La verison 1 n'etant plus sûr.
StrictModes
Sur le serveur dans /etc/ssh/sshd_config, la ligne "StrictModes yes" indique que le serveur va être très pointilleux sur les droits du compte sur lequel on se connecte en ssh. Ceci permet de bloquer les connexions ssh si :
- Le group, ou tout le monde peut ecrire dans le dossier de l'utilisateur
- Le dossier ~/.ssh n'est pas accessible en lecture/ecriture qu'a l'utilisateur
- Le dossier ~/.ssh/authorized_keys n'est pas accessible en lecture qu'a l'utilisateur
Pour tout bien faire comme il faut :
serveur$ chmod go-w ~/ serveur$ chmod 700 ~/.ssh serveur$ chmod 600 ~/.ssh/authorized_keys
Sur le client, dans /etc/ssh/ssh_config, rajoutez la ligne "PreferredAuthentications publickey"
MaxStartups
Sur le serveur dans /etc/ssh/sshd_config, vous pouvez ajouter la ligne
MaxStartups 10
Spécifie un nombre maximal de connexions concurrentes au démon sshd non authentifiées. Les connexions supplémentaires sont purgées si elles ne peuvent pas s'authentifier ou si le délai de grâce défini à l'aide de l'option LoginGraceTime expire pour une connexion. Par défaut 10.
MaxStartups 10:30:60
Par ailleurs, on peut activer une purge hâtive aléatoire en spécifiant un triplet « début:taux:total » (par exemple, « 10:30:60 »). sshd refuse les tentatives de connexion avec une probabilité de « taux/100 » (30 %) s'il y a « début » (10) connexions non authentifiées en cours. La probabilité augmente linéairement et toutes les tentatives de connexion sont refusées si le nombre de connexions non authentifiées atteint « total » (60).
AllowUsers
Sur le serveur dans /etc/ssh/sshd_config, vous pouvez ajouter la ligne
AllowUsers john david
Cela pécifie les logins des seuls utilisateurs autorisés à se connecter (ici john & david)
Ressources
- http://www.delafond.org/traducmanfr/man/man5/sshd_config.5.html
- http://fedorasolved.org/post-install-solutions/securing-ssh
Commentaires
Afin de contrer les attaques brute force SSH j'installe le logiciel Denyhosts qui va blacklister dans hosts.deny les IP qui échouent de trop nombreuses fois à s'authentifier. un petit tuto existe ici : http://doc.ubuntu-fr.org/denyhosts