Phollow.me

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.