Sécuriser son serveur Linux avec Fail2ban

26 Août 2015 | Serveur dédié | 0 commentaires

Dans mon précédent article, je vous ai montré comment protéger son serveur avec le firewall Iptables. Nous allons voir aujourd’hui comment ajouter une couche de sécurité supplémentaire en installant Fail2ban, un programme qui va analyser les logs de notre serveur et bloquer les indésirables (tentatives d’intrusion) pendant un temps défini.

Le principe de Fail2ban est simple, nous allons configurer des filtres et des règles, et d’après ces informations il va analyser les logs de notre serveur, et s’il décèle une tentative d’intrusion, il va ajouter une règle à Iptables pendant un certain temps afin de bloquer l’adresse IP de l’attaquant.

Analyse des logs

Avant de commencer l’installation et la configuration de Fail2ban, attardons-nous sur les logs de notre serveur. Sur un serveur Debian, les logs se trouvent dans le répertoire /var/log/.

Les logs étant de simples fichiers texte, nous pouvons utiliser différentes commandes pour les afficher. Par exemple la commande suivante va afficher la totalité du log des connexions au serveur, principalement via SSH :

[root@server:~] cat /var/log/auth.log

La commande suivante nous permettra de n’avoir que les 10 dernières lignes ajoutées à ce même fichier de log :

[root@server:~] tail /var/log/auth.log

Si vous désirez voir plus de lignes, par exemple les 20 dernières lignes, nous ajoutons l’option -n suivie du nombre de ligne à afficher :

[root@server:~] tail -n 20 /var/log/auth.log

Enfin, la dernière option de la mort qui tue, l’option -f, qui vous permet d’afficher au fur et à mesure les lignes qui sont ajoutées au fichier de log. Vous pourrez peut-être ainsi voir un jour une tentative d’intrusion en live :

[root@server:~] tail -n 20 -f /var/log/auth.log

Installation de Fail2ban

Bien, maintenant que les bases sont posées, passons aux choses sérieuses. Pour installer Fail2ban, saisissez la commande suivante :

[root@server:~] apt-get install fail2ban

Si vous êtes sur un serveur OVH et que vous avez mis en place le firewall que je vous ai présenté dans mon article précédent, il vous faut d’abord modifier le fichier de configuration du firewall (/etc/init.d/firewall) pour accepter les connexions HTTP et FTP. Pour ce faire, dé-commentez (enlevez le #) les lignes correspondantes (IPv4 et IPv6) puis redémarrez votre firewall avec la commande suivante :

[root@server:~] /etc/init.d/firewall restart

Configuration de Fail2ban

La configuration se passe dans le répertoire /etc/fail2ban/ où vous trouverez 2 dossiers (action.d et filter.d) et 2 fichiers (fail2ban.conf et jail.conf). Nous allons copier les deux fichiers et les renommer en fail2ban.local et jail.local.

[root@server:~] cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
[root@server:~] cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Cette opération n’est pas obligatoire, mais il se peut que les fichiers originaux soient remplacés lors d’une mise à jour du programme, et si nous y apportons des modifications elles seront supprimées, alors que les nouveaux fichiers (fail2ban.local et jail.local) ne seront jamais remplacés. Ces nouveaux fichiers sont lus par le programme après les fichiers originaux, et leurs instructions supplantent celles inscrites dans les fichiers en .conf.

La partie la plus importante de la configuration se passe dans le fichier nouvellement créé jail.local. Par défaut, quelques sections sont insérées comme templates. Nous devons activer les sections qui nous intéressent et les adapter à notre configuration. Voici un exemple de section :

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Avec ces quelques réglages par défaut, voici ce qui va se passer :

  1. la section ssh est activée (enabled = true)
  2. le port  ssh est surveillé
  3. le filtre sshd.conf du sous-répertoire filter.d sera utilisé
  4. le fichier de log analysé par le filtre est /var/log/auth.log
  5. le nombre de tentatives autorisées avant blocage est de 6

Nous allons effectuer quelques modifications que je commenterai (seules les modifications sont affichées).

  • Section [ssh] :
    enabled = true (nous activons la section)
    maxretry = 3 (nombre de tentatives possibles avant blocage)
  • Section [ssh-ddos] :
    enabled = true (nous activos la section)
    maxretry = 3 (nombre de tentatives possibles avant blocage)

Nous laissons le reste tel quel pour le moment. Vous êtes libres d’activer les sections nécessaires en fonctions des programmes que vous avez installé.Il ne nous reste plus qu’à redémarrer Fail2ban pour qu’il prenne en charge nos modifications :

[root@server:~] service fail2ban restart

Vous pouvez maintenant aller voir dans les logs de Fail2ban (/var/log/fail2ban.log) que nos modifications sont bien prises en compte.Limitations

Il est assez difficile d’évaluer le temps de réaction de Fail2ban, car il attend une seconde avant de vérifier s’il y a de nouveaux logs à scanner. Dans la plupart des cas cela ne pose aucun problème, mais parfois il est possible qu’il y ait plus de tentatives d’intrusions que spécifié par maxretry car il peut y avoir un certain nombre de tentatives en une seconde.

Conclusion

Une fois Fail2ban activé, votre serveur bénéficie d’une bonne protection supplémentaire. Après quelques temps vous pourrez voir le nombre de tentatives que Fail2ban aura bloqué. Pour en avoir une meilleure vue et découvrir les adresses IP les plus souvent bannies, je vous invite à lire mon article sur comment compter et classer les adresses IP bannies par Fail2ban. Si vous vous apercevez qu’une ou plusieurs adresses IP sont régulièrement bannies, je vous recommande de mettre en place le script que je vous présente dans mon article Bannir définitivement les adresses IP bannies fréquemment par Fail2ban.

Vous avez des questions ? Des remarques à propos de cet article ? Vous utilisez une autre méthode pour prévenir les intrusions sur votre serveur ? Partagez-les avec nous dans les commentaires ci-dessous.

0 commentaires

Soumettre un commentaire

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