Renforcer la sécurité de son serveur SSH
Le protocole SSH est utilisé pour transmettre des informations de manière sécurisé entre deux terminaux. Par exemple comme se loguer sur une machine distante, ou échanger des fichiers, le tout crypté. Il est de par sa conception très sécurisé, mais une mauvaise configuration peut tout gâcher.
Fichiers de configuration par défaut
- /etc/ssh/sshd_config - Fichier de configuration du serveur SSH.
- /etc/ssh/ssh_config – Fichier de configuration du client SSH
- ~/.ssh/ – Répertoire de configuration SSH d’un utilisateur.
- /etc/nologin – Si ce fichier existe, personne ne peut se connecter à part root.
- /etc/hosts.allow et /etc/hosts.deny : Blacklist et whitelist .
- SSH port par défaut : TCP 22
Utiliser le protocole SSH 2
Le protocole 1 est obsolète et vulnérable à de nombreuses attaques (comme man-in-the-middle). Il doit être évité à tout pris. Vérifiez dans le sshd_config que la ligne suivante existe :
Protocol 2
Choisir les utilisateurs
Par défaut n’importe quel utilisateur à le droit de se connecter en SSH. Par exemple un utilisateur ftp à la possibilité de se connecter. Ce n’est pas super pertinent. Alors on peut restreindre le serveur SSH à n’autoriser que certains compte utilisateur. Pour ça on peut utiliser (toujours dans le sshd_config) :
AllowUsers root rydgel
Qui autorise ces 2 utilisateurs à pouvoir se connecter. Inversement la commande DenyUsers, permet de refuser la connexion.
Désactiver les fichiers .rhosts
Ces fichiers permettent de se connecter automatiquement au serveur sans avoir besoin de retaper le mot de passe. Sympa pour les feignants mais pas sécurisé du tout. Donc il vaut mieux désactiver l’utilisation de ces fichiers avant que quelqu’un ne tombe dessus ;)
IgnoreRhosts yes
Ajouter un timeout sur l’inactivité
Garder la session ouverte indéfiniment n’est pas non plus une bonne idée. Vous êtes au boulot, vous vous absentez une heure ou deux et vous oubliez de fermer votre session, n’importe qui peut attraper votre shell en root et faire ce qu’il veut pendant votre absence.
ClientAliveInterval 360 ClientAliveCountMax 0
Désactiver le login de root
Une autre manière de sécuriser est de désactiver le login de root et d’utiliser un user avec des droits moindres + sudo.
PermitRootLogin no
Changer le port par défaut d’openSSH
Le port 22 est connu par tous les pirates pour être celui d’openSSH. Les robots scannent en priorité ce port, pour le changer c’est tout simple :
Port 6345
N’autoriser que certaines IP à se connecter
Par exemple si je veux que seulement ces 2 adresses IP ait le droit de se connecter sur mon serveur (192.168.1.5 et 202.54.1.5). Il y a deux solutions. La première est d’utiliser les fichiers /etc/hosts.allow et /etc/hosts.deny. On commence par bloquer toutes les IPs dans le hosts.deny, puis on autorise seulement celles que l’on veut.
dans /etc/hosts.deny : sshd: ALL On bloque par défaut toutes les IPs, puis dans le /etc/hosts.allow : sshd: 192.168.1.5 sshd: 202.54.1.5
La deuxième solution (et la meilleure à mon avis) est d’utiliser le firewall du système (iptables, pf) et d’autoriser seulement les IPs que l’on veut sur le port d’OpenSSH.
Utiliser un bon mot de passe
On voit encore trop souvent des mots de passe du style ‘12345′ ou ‘admin’. Le plus simple est de se créer un mot passe aléatoirement avec des chiffres, des lettres (majuscules et minuscules) et des caractères spéciaux. http://www.goodpassword.com/ est un site qui permet de le faire pour vous :)
Personne ne doit avoir un mot de passe vide
Vérifiez que les utilisateurs de votre machine n’ont pas de mot de passe vide. On peut aussi dire à OpenSSH de ne pas accepter les connexions d’utilisateurs sans mot de passe.
PermitEmptyPasswords no
Garder OpenSSH et votre système à jour
On ne le dira jamais assez mais les mises-à-jour sont vraiment importantes. Elles corrigent la plupart du temps des failles qui peuvent être utilisées par des pirates pour compromettre votre système. Personnellement je regarde si des mises à jours de sécurité sont disponibles tous les jours.
Désactiver OpenSSH si vous ne l’utilisez pas
Ça ne sert à rien de laisser des services ouverts sur l’ordinateur si vous ne vous en servez pas. Désinstallez le serveur openSSH s’il n’est pas utilisé. Ça fera toujours une porte de moins pour accéder à votre machine.
Conclusion
Il y a encore des dizaines de manips possibles pour augmenter encore plus la sécurité, comme le chrootage des utilisateurs, la configuration d’un firewall, l’installation de fail2ban contre les attaques brute-force etc. Mais je pense que ce petit article est un bon début, pour éviter de faire des bêtises sur son serveur.