Les notes de Clément

Spécialiste de rien // Partageur de tout
Billets avec le mot-clé sécurité

Sécuriser son accès SSH

Afin de pouvoir contrôler son Raspberry Pi sans avoir besoin d’y connecter un écran, une souris et un écran, il est très commode de s’y connecter via un accès SSH. Un serveur SSH étant installé par défaut sur Raspbian, il n’y a alors aucune configuration particulière à faire, et on peut brancher son Raspberry Pi, le connecter à son réseau avec un câble Ethernet, et depuis son ordinateur personnel (connecté au même réseau), faire :

ssh pi@raspberry

Ensuite, si l’on ajoute une règle NAT sur sa box pour rediriger le port 22 (celui du serveur SSH), on peut se connecter, en utilisant l’adresse IP externe à la place de raspberry, à son Raspberry Pi de n’importe où ! Et ce n’importe quand ! C’est super n’est-ce pas ? Sauf qu’il serait bon que n’importe qui ne puisse pas le faire… On va donc voir quelles règles simples appliquées pour réduire les chances qu’un petit malin se connecte sur votre réseau.

Pourquoi se protéger ?

Pour commencer, il faut dire qu’il y a pénurie d’adresse IP dans le monde, car leur nombre n’est pas infinie et il y a de plus en plus d’appareils reliés à internet ! C’est pourquoi il existe une nouvelle norme IPv6, mais elle n’est pas encore majoritairement utilisée. De plus, sur toute machine Linux, il y a pas défaut un compte root, qui est le super administrateur de la machine ! En bref, il peut tout faire, et c’est par lui que vous passer dès lors que vous modifier votre système (voir la commande sudo par exemple, qui veut dire « super user do »). Donc en faisant :

ssh root@adresse_aleatoire

J’ai plutôt de bonne chance d’essayer de me connecter à un ordinateur existant, ayant un serveur SSH utilisant le port 22, et ayant un utilisateur s’appelant root ! Ensuite, rien de m’empêche d’essayer automatiquement des milliers de mots de passe, et avec un peu de chance, je le trouverais ! Il suffit d’un programme qui teste méthodiquement toutes les chaînes de caractères, à raison d’un essai par seconde, on peut tester 86400 mots de passe par jour ! Même si le nombre de combinaisons possibles est largement plus grand que ça, avec le temps nécessaire, un pirate pourra alors se connecter en root à votre Raspberry Pi !

Mais il va faire quoi ? Ecouter ma musique ?!

Il y a peu de chance… Son intérêt sera plutôt d’installer un programme sur votre système, qu’il pourra utiliser à sa guise plus tard s’il désire lancer une attaque vers un site en particulier. Votre ordinateur est alors devenu ce que l’on appelle un zombie, faisant partie d’un BotNet !

Quelques règles simples

Pour éviter ce scénario, on peut appliquer les quelques règles suivantes.

Changer le port

Rien de plus simple, éditer la configuration de votre serveur ssh, qui est décrite dans le fichier /etc/ssh/sshd_config, pour y faire figurer la ligne :

Port 1337

Attention : vous risquez d’être déconnecté si vous faite l’opération en étant justement connecté en SSH… Donc vous pouvez dans un premier temps utiliser 2 ports, le 22 et le 1337 en dupliquant cette ligne. Puis supprimer la ligne Port 22 ultérieurement. Vous pouvez remplacer 1337 par n’importe quel numéro compris entre 1024 et 65537, en vérifiant qu’il n’est pas déjà utilisé par un autre programme.

Il faut alors penser à changer la règle NAT dans votre box, pour rediriger le port 1337 (et plus le 22). Pour vous connecter maintenant, utilisez l’option -p de la commande ssh :

ssh -p 1337 pi@raspberry

Désactiver la connexion root

Pour éviter à quiconque (vous y compris) de vous connecter directement en super utilisateur à votre Raspberry Pi . Il faut également éditer le fichier /etc/ssh/sshd_config, pour modifier la ligne:

PermitRootLogin no

Installation d’un logiciel qui bannit en cas d’échec

Pour éviter les attaques de type « brute force » qui consiste à essayer le plus possible de mots de passe, il est possible d’installer un logiciel qui va se charger de bannir une adresse IP si un utilisateur échoue à se connecter plus d’un certain nombre de fois. J’utilise personnellement le logiciel fail2ban (il y en a d’autres !), disponible dans les dépôts. Il y a pas grand chose à faire pour le configurer, on modifie le fichier /etc/fail2ban/jail.conf, les paramètres intéressants sont les suivants :

ignoreip = 127.0.0.1/8
bantime  = 600
maxretry = 3

destemail = votre_adresse@mail.com

action = %(action_mwl)s

ignoreip permet de ne pas se faire bannir depuis le Raspberry Pi lui même, bantime est le temps de bannissement en secondes (10 minutes par défaut donc), maxretry le nombre d’échecs pour être bannit. Ensuite, destmail est l’adresse email à laquelle seront envoyés les alertes, et surtout action sera l’action en cas de bannissement. J’aime bien action_mwl qui est celle qui envoie le plus d’informations. Cette action (les autres aussi) peut  elle-même être personnalisée en éditant le fichier  /etc/fail2ban/action.d/sendmail-whois-lines.conf

Remarque : pour que l’envoi des mail se passe correctement, il vous faudra avoir correctement installé et configuré un MTA sur votre système, et j’ai déjà expliqué comment faire dans ce billet : Installation d’un serveur web (Envoi de mail)

Ne pas utiliser de mot de passe

Finalement, il est possible de ne pas utiliser de mot de passe pour se connecter, mais de passer par la génération de clé de cryptage. Cette méthode est très bien pour des installations critiques, mais je trouve que l’on perd alors en flexibilité, et je ne l’utilise personnellement pas… Je ne détaillerai donc pas ici comme procéder, mais il existe de nombreux tutoriels en ligne, par exemple : lea-linux.org : Connection_SSH_sans_mot_de_passe

Sources