[Technique] Renforcer la sécurité de son serveur SSH
Renforcer la sécurité de son serveur SSH
Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé.
Le protocole de connexion impose un échange de clés de chiffrement en début de connexion.
Par la suite, tous les segments TCP/IP sont authentifiés et chiffrés.
Il devient donc difficile (voir impossible) d’utiliser un « sniffer » pour voir ce que fait l’utilisateur.
Le protocole SSH a été conçu avec l’objectif de remplacer les différents programmes rlogin, telnet, rcp, ftp et rsh.
Le protocole SSH est de par sa conception très sécurisé, mais une mauvaise configuration peut mette en péril la sécurité de votre serveur ou votre station de travail surtout si elle à pignon sur internet.
Sources : fr.wikipedia.org
Fichiers de configuration par défaut
Utiliser le protocole SSH 2
La version 2 est depuis 2006 largement utilisée à travers le monde.
Cette version est beaucoup plus sûre au niveau cryptographique que la version précédente (version 1) et possède en plus un protocole de transfert de fichiers complet, le SSH File Transfer Protocol (SFTP).
Vérifiez simplement la présence de cette ligne dans le fichier /etc/ssh/sshd_config
Protocol 2
Ainsi que pour le le SSH File Transfer Protocol (SFTP)
Subsystem sftp /usr/lib/openssh/sftp-server
Choisir les utilisateurs
Par défaut n’importe quel utilisateur (possédant un shell – Interface en ligne de commande : le programme fonctionne alors à partir d’instructions en mode texte) à le droit de se connecter en SSH.
On peut donc restreindre le serveur SSH à n’autoriser que certains compte(s) utilisateur(s).
/etc/ssh/sshd_config :
AllowUsers fpicard jconnor
: Autorise ces 2 utilisateurs à pouvoir se connecter.
Inversement
DenyUsers fpicard jconnor
: Permet de refuser la connexion.
Idem pour un ou plusieurs groupe(s) d’utilisateur(s), je vous laisse en déduire la synthaxe 😉
Désactiver le(s) fichier(s) .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 top coté sécurisé.
IgnoreRhosts yes
Il existe une solution bien plus sécurisée : c’est l’utilisation des clé RSA ou DSA
Voici un article décrivant les étapes : ici
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 37.187.121.27).
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, on bloque par défaut toutes les IPs :
sshd: ALL
Puis dans le /etc/hosts.allow :
sshd: 192.168.1.5 sshd: 37.187.121.27
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.
Au besoin référez-vous à cet article : ici
Utiliser un bon mot de passe
On voit encore trop souvent des mots de passe du style ‘azerty’ ou ‘admin’ voir ‘password’
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.
Voici un petit outil que j’utilise très régulièrement pour générer mes mots de passe
sudo apt-get install pwgen
Utilisation :
pwgen ay1Su6eD ooYaiqu9 oGhu3Sho xei0uf2F ohB0lil7 Aesh0pha iuh6Aix5 ooquoo2G eey5seeM Thohsh3e eiChe8ie lahZ2lai bi8ou4Ei aig2Yae9 Ho7pe1ph Nujo0chi woo4Rong ieke0Mae ev8Ceika Nie9ahhu ke2oaWii aPhi6see vi8ohHoL daPh7och hahB1owa eiTo1Us7 EQu0yap3 eiZ7uale Phooku0I uhaa6Fau Ipueth5A zoh2Quai iez5ho2A mauT9Pha aeph5Air Ailo0eim aen6eo2L adiec4Ae Joi1uuSa ic0ageSa ueY8euwa Ro0aiFoo Jaew2dae NiuvaeS2 quo0ohGi iGo2rie8 eiN3wa9N laisi3Yi Wahneiv3 IeGh7zah uFoh8od2 saBo7iub iorie2Ju loonai1I ahpei2He wei9Sai7 ohKup1Ni ro1Boogi iez7ohQu aD6uaxae wei7bahS ka5AeR1o saedos5O uV7Aivae quai0Ohr EXa8jain Moh2un9E XaH4ehea eich3Ipa fiN2uHo4 Lu5AhNgi aeD3KuaW shahGh4a Ush5bu6E aiF7dulu ahf5ieCh taeG3eiz IB2aih0f ohK2thie ooWooph3 Xaen9pu8 ER1wiesa OhliiF5i Taeyu5Ho Fae6iech Eipha7Xo ufahFo5i Shei2aec xooch2Fu OoTeer3c Gee0eiJo Mogh8ree gei4ooTh thahS9ti iehaiT4b ooga8ahG coh3Iaph Quoo2ogh Aim0ohJ5 alaiDaa4 AhThae4u Wai2aequ Uchae7ha ooGhe9ia MohQu7ki ahZ8quu6 Sod3ohGh ohphao0U ooRohg8A uu1ooB9Z EeGh9ing Uibie4bi fahpe9Me Quohbay4 sueph1Ei Tai1oLai kuT9Ooph Loh2aesh Uev7eepe Ohbie4ai la1ool5N Osh0ahji ohQue5Ai ieKe9zae mahJa9po Ooh3Thun kieVeo7o eH6ki0ui Eixae4ko Aingi5ex Fee7Rere maem7Phi lae8IuPa eQu9ud1j eex6Suu8 EoChu6oh rohGh4Sa ue3Ceibu UHiu7Eec ohNgaiv4 fooluW2a zohnai2I shue7Ish Ohgh9xij eiV5geis shieHae4 ayie8euG uciF2soh Uo3edeeh AeGeeph7 viuf7Ait ioboe2Vu ahdooQu4 aeT8deoL ahVai3oC oQui9ieC EiTha1et ookaiy7O ohPh9tie Aizieh7
Avec Options :
pwgen [ OPTION ] [ pw_length ] [ num_pw ]
-y insère au moins 1 caractère spécial (comme & # [ ~ > = …) -1 affiche un mot de passe par ligne -0 génère des mots de passe ne contenant pas de chiffres -A génère des mots de passe ne contenant pas de lettres majuscules -c inclut au moins une lettre majuscule dans le mot de passe généré -B ne met pas de caractères qui pourraient porter à confusion (comme 1 et l ou O et 0) -s génère des mots de passe complètement aléatoires, difficiles à mémoriser. Conseillé pour les mots de passe qui doivent être vraiment sécurisés (mot de passe root, mot de passe de serveur web, etc.)
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 répétera jamais assez, mais maintenir son OS à jour permet aussi de diminuer les risques, régulièrement des patchs de sécurité sont publié et corrige les failles de sécurités connues.
Dans la mesure ou vous ne souhaitez pas utiliser SSH, le plus simple reste de désactiver le service (n’oublier pas de supprimer les liens permettant le démarrage automatique du service au démarrage de votre serveur ou poste de travail)