Blocage d'adresse ip
Quand on dispose d'un serveur afin d'héberger différents services (courriels, cloud, peertube etc ...), il n'est pas rare de voir passer dans les logs des tentatives d'intrusions. Elles sont souvent menées par des "zombies", c'est à dire des ordinateurs qui ont été détournés pour effectuer des requêtes vers des serveurs. Dans ce cas, ces zombies envoient des requêtes sans relâche en testant d'innombrables combinaisons d'identifiants/mot de passe.
L'importance des mots de passe
Les attaques par dictionnaires sont monnaies courantes aujourd'hui. De mon expérience personnelle, j'ai pu voir passer des tentatives avec par exemple les couples :
- test/test
- admin/admin
- root/1234
etc ...
Il est donc très important de bien choisir ses mots de passe et éviter à tout prix les "classiques" ! Une bonne solution à ça est de choisir un gestionnaire de mots de passe, qui lui permet à la fois d'en générer aléatoirement et arbitrairement long, mais aussi de les stocker de manière sécurisée. Je pense notamment à KeepassXC.
Bannir les adresses IP trop agressives
Si vos mots de passes sont robuste, la probabilité pour que les attaquants tombent dessus est faible, mais jamais nulle ! Pour réduire encore la possibilité d'attaque, il faut alors limiter le nombre de leurs tentatives. Pour ce faire on peut utiliser un logiciel comme fail2ban, qui permet de reconnaître dans les logs des motifs en utilisant des expressions régulières. On peut alors déclencher une action lorsqu'un de ces motifs est reconnu.
Dans la plus part des cas on utilise fail2ban avec iptables, qui permet de créer des règles de gestions des paquets réseau, y compris des règles pour les bloquer.
Aller plus loin
Si comme moi vous possédez un routeur fonctionnant sous openWRT, il est alors possible d'aller un peu plus loin. Car en utilisant le couple fail2ban/iptables, les requêtes malveillantes rentreront, seront traités et redirigés par votre routeur vers votre serveur qui lui les bloquera. Le routeur effectue donc une certaines quantité de travail pour rien ... Le but de cette section est de montrer qu'il est possible de les faire communiquer afin que ça soit le routeur qui bloque les paquets afin d'éviter un traitement et un trafic inutile.
Problématique
Avant de se lancer tête baissée il faut déjà se poser la question de comment les faire communiquer de façon sécurisée. Histoire que personne d'autre que le serveur puisse donner des ordres au routeur. En suite il faut s'assurer que le serveur ne puisse pas demander n'importe quoi au routeur.
La solution que j'ai retenue se décompose dans les points suivants :
- création d'un utilisateur sans droit particulier sur le routeur
- création d'une paire de clef sans mot de passe pour SSH
- ajout de la clef publique dans le fichier /home/utilisateur/ssh/authorized_keys sur le routeur
- création d'un script pour effectuer les blocages/déblocages
- modification du fichier /etc/sudoers, pour restreindre l'utilisation de sudo pour cet utilisateur uniquement pour ce script
- création d'une action dans fail2ban pour lancer ce script via ssh