Protéger et sécruriser l’accès SSH de son Raspberry Pi grâce à fail2ban


Bonjour à tous ! Aujourd’hui, on va faire un petit détour dans le monde de la sécurité informatique. Votre Raspberry est en SSH et vous voulez y accéder de partout via internet, mais vous craignez que cela ne soit une faille de sécurité ? Je vais vous présenter fail2ban, un charmant utilitaire Linux qui va vous apporter une couche de sécurité contre le Brute Force. Un bon moyen simple et efficace de sécuriser son Raspberry.

Le SSH et le problème du brute force

Pourquoi le SSH peut-il poser problème ?

Si vous connaissez le ssh, vous savez certainement ce qu’il permet de faire : se connecter à une machine à distance. Ainsi vous pourrez accéder au Raspberry depuis internet. C’est super pour vous qui voulez accéder à vos données de n’importe où, mais c’est aussi super pour les méchants hackers qui rêvent, eux aussi, d’accéder à vos données ou mieux, d’installer des softs sur votre machine sans que vous ne le sachiez.

Les plus aguerris d’entrevous me diront « il suffit de désactiver la connexion SSH par mot de passe et de n’utiliser que la connexion par clé SSH ». Ce à quoi je réponds « Oui, mais … », car cette solution règle le problème, MAIS partiellement. En effet, dans certains cas, il est nécessaire de conserver l’identification par mot de passe. Dans ce cas, il est important de savoir se protéger.

Les attaques sur le SSH

Le SSH est particulièrement sujet à deux types d’attaques assez simples (il y en a d’autres, mais plus complexes). Ces attaques se concentrent sur la récupération du mot de passe d’accès SSH.

Les deux méthodes les plus utilisées sont :

  1. Les attaques par dictionnaire : on essaye les mots de passe connus les plus utilisés (tel que « azerty » et « 123456789 » qui ne sont bien entendu pas des solutions viables pour des mots de passe ! )
  2. Le brute force : on essaye un ensemble de combinaisons jusqu’à trouver le mot de passe (méthode bourrin)

Quand on y pense, l’attaque par dictionnaire est aussi un type d’attaque par brute force, puisqu’on va essayer un ensemble de possibilités et de combinaisons connues.

Ce qu’il faut retenir, c’est que pour obtenir le mot de passe/identification, le hacker (ou plutôt le robot qui va s’en occuper), va essayer de se connecter à votre machine, à de nombreuses reprises et sans succès. C’est là que fail2ban va intervenir. Cependant, je tiens à insister sur le fait que la meilleure protection est et restera toujours d’avoir un mot de passe solide ! Prenez une phrase courte avec des chiffres et des caractères spéciaux et vous n’aurez rien à craindre.

Fail2ban est là pour vous !

Si vous avez retenu le plus important, vous avez compris que le moyen le plus simple de repérer une tentative d’attaque est de regarder si quelqu’un essaye, sans succès, de se connecter en SSH et ce à plusieurs reprises.

Imaginons que cette situation se produise. Si vous n’avez pas fail2ban, le robot pourra essayer autant de possibilités qu’il voudra sans blocage. Maintenant, si vous avez installé et configuré fail2ban, ce dernier va bannir, pendant un temps donné, l’IP d’où proviennent ces requêtes. Empêchant ainsi le robot de faire son travail. Fail2ban n’est pas au niveau d’un pare-feu mais il va faire une partie du travail.

Pour cela, fail2ban va avoir besoin d’un fichier de log où récupérer ses informations. Dans le cas du SSH, fail2ban va analyser le fichier de log et essayer de trouver les tentatives ratées ainsi que l’IP associé. Si une IP dépasse une certaine limite de tentatives échouée, on dit que fail2ban va la mettre en prison (jail en anglais). Pendant un temps donné, cette IP ne pourra plus essayer d’accéder à votre machine. Pour cela, fail2ban va configurer des règles IPtables (pour plus de détails sur les IPTables) de façon à bloquer l’adresse IP en question. Justement IPtables est un outil puissant qui peut être utilisé comme pare-feu sur Raspberry. Autrement dit, il va bannir l’adresse en question pendant plusieurs minutes.

Voyons maintenant comment configurer tout ça.

Configuration de fail2ban

Installation de fail2ban

Pour installer fail2ban, rien de plus simple, on va comme toujours utiliser l’utilitaire apt :

sudo apt-get install fail2ban

Configuration de fail2ban pour le SSH

Maintenant, nous allons configurer fail2ban afin de protéger l’accès en SSH de notre machine (ici un Raspberry).

Commençons par définir les paramètres du blocage :

  • Nombre d’échecs avant bannissement : 5
  • Temps de bannissement : 30 min
  • Fichier à analyser : /var/log./auth.log
  • Action IPTables : iptables[name=SSH, port=ssh, protocol=tcp]

Libre à vous de modifier ces paramètres (nombre d’échec et temps de bannissement) selon votre envie.

Maintenant plus qu’à donner ces paramètres à fail2ban. On va modifier la section [ssh] du fichier jail qui se trouve dans /etc/fail2ban/jail.conf.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
iptables[name=SSH, port=ssh, protocol=tcp]
bantime = 1800
maxretry = 5

Voilà, on sauvegarde et il ne nous reste plus qu’à redémarrer le service :

sudo service fail2ban restart

On vérifie que le service tourne bien :

sudo service fail2ban status

● fail2ban.service – LSB: Start/stop fail2ban
Loaded: loaded (/etc/init.d/fail2ban)
Active: active (running) since lun. 2017-01-23 20:59:43 UTC; 3s ago
Process: 7300 ExecStop=/etc/init.d/fail2ban stop (code=exited, status=0/SUCCESS)
Process: 7318 ExecStart=/etc/init.d/fail2ban start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/fail2ban.service
└─7330 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid

janv. 23 20:59:43 rasp-home fail2ban[7318]: Starting authentication failure monitor: fail2ban.
janv. 23 20:59:43 rasp-home systemd[1]: Started LSB: Start/stop fail2ban.

Voilà, votre fail2ban devrait filtrer le SSH pour votre sécurité et sans que vous n’ayez à vous occuper de quoi que ce soit.

Si vous avez 30 min à perdre, vous pouvez toujours vous amuser à vous connecter 5 fois avec le mauvais couple id/pwd et vous voir banni de votre propre machine. Gare à ceux qui ont l’habitude des claviers qwerty et azerty, au-delà de 5 essais, vous n’aurez plus qu’à attendre sagement 30min. Si vous êtes certain de ne jamais vous tromper de mot de passe et que vous êtes un accro de la sécurité sur Raspbian, vous pouvez augmenter le temps de bannissement et diminuer le nombre d’échec autorisé.

Pour aller plus loin

Sachez que fail2ban ne fonctionne pas que pour le SSH. Il est capable de fonctionner avec la plupart des serveurs web comme apache ou nginx mais aussi avec beaucoup d’autres services. Vous pouvez alors securiser un serveur web sur raspberry.
Il pourra ainsi vous protéger des DDOS sur votre site web ou encore protéger votre VPN. Le web déborde de  scripts pour l’adapter à beaucoup de services et ainsi mieux vous protéger.

Encore autre chose, j’ai appris dernièrement via un commentaire sur cet article (merci à Azlux), que fail2ban n’est pas compatible avec l’IPv6. Ce qui apporte une faille non négligeable.

Je vous copie/colle le commentaire en question d’Azlux, qui apporte une solution pour l’IPv6 :

Coucou,
Peu être utile de préciser que fail2ban n’est pas compatible IPv6 nativement. Donc si vous avez de l’ipv6 penser à le protéger aussi, avec des rate-limite de SYN au niveau du par-feu ou en appliquant les patch (https://translate.google.com/translate?sl=de&tl=en&u=crycode.de%2Flinux%2F77-fail2ban-mit-ipv6) en attendant la prochaines realease qui aura le blocage ipv6.

De plus si la sécurité de votre Raspberry Pi vous intéresse, je vous invite à lire mon article concernant un malware qui s’attaque au Raspberry Pi pour miner de la crypto-monnaie.

~~~~

Nous voilà arrivés à la fin de cet article qui vous explique comment sécuriser son Raspberry Pi. En espérant qu’il vous aura plus. N’hésitez pas à laisser un commentaire et à nous expliquer pour quel service vous utilisez fail2ban et avec quels paramètres. Comme toujours, si l’article vous a plu, je vous invite à le partager sur les réseaux sociaux.

 

 

 

 

2 commentaires

    1. Salut Azlux !

      Merci pour ton commentaire. Un commentaire très constructif comme toujours 😉

      Désolé pour ma réponse tardive, j’ai été très occupé dernièrement.

      J’ignorais que fail2ban se limitait à l’IPv4 et c’est bien dommage.

      Je met de suite un petit commentaire à ce propos dans l’article et je vais regarder de plus près ce patch pour l’ajouter sur mes PC 😉

      Et comme tu le dis, vivement la prochaine release de fail2ban qui supportera le blocage de l’IpV6 en natif.

      David

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *