Protéger son serveur des attaques par brute force avec fail2ban
Fail2ban est un petit outil qui permet de surveiller les erreurs d'authentification répétée dans les fichiers logs de plusieurs services. Après un nombre défini d'authentification ratée, fail2ban banni temporairement l'ip ayant essayé de se loguer.
Installation
Installez fail2ban :
aptitude install fail2ban
Configuration
Le fichier /etc/fail2ban/jail.conf
contient les options de configuration par défaut de fail2ban.
Copiez les directives qui vous intéressent dans le fichier /etc/fail2ban/jail.local
afin de ne pas modifier la configuration par défaut du programme. Considérez en particulier :
ignoreip
suivi d'une liste d'adresses ip qui ne seront jamais bannidestemail
suivi de l'adresse email où les alertes seront envoyéesaction
que vous définirez selon les choix proposés par fail2ban.
Voici mon fichier /etc/fail2ban/jail.local
:
[DEFAULT] ignoreip = 127.0.0.1 ip_du_serveur votre_ip bantime = 1800 maxretry = 3 destemail = CSNU-security@list.csnu.org action = %(action_mwl)s
Si vous souhaitez modifier d'autres fichiers de configuration de fail2ban, copiez le fichier en question en changeant l'extension de .conf
à .local
. Vous pourrez ensuite modifier le fichier .local et éviter de toucher à la configuration par défaut de fail2ban.
Compléments
Si une ip vous harcèle, vous pouvez la bannir définitivement avec iptables. Pour simplifier les opérations, j'ai créé un petit script bash :
#! /bin/sh #conf banned_file=/srv/link/banned.list #script me=`dirname $0`/ if [ "$2" = "quiet" ]; then quiet=1; else quiet=0; fi case "$1" in start) /sbin/iptables -N morales /sbin/iptables -A INPUT -p tcp -m multiport --dports ssh,telnet,ftp,ftp-data,ftps,ftps-data,http,https,pop3,pop3s,imap,imaps,submission -j morales if [ -f "$banned_file" ]; then for ligne in `cat "$banned_file"`; do /sbin/iptables -A morales -s $ligne -j DROP done else touch "$banned_file" fi if [ $quiet = 0 ]; then echo "Started"; fi exit 0 ;; stop) /sbin/iptables -F morales /sbin/iptables -D INPUT -p tcp -m multiport --dports ssh,telnet,ftp,ftp-data,ftps,ftps-data,http,https,pop3,pop3s,imap,imaps,submission -j morales /sbin/iptables -X morales if [ $quiet = 0 ]; then echo "Stoped"; fi exit 0 ;; restart) $0 stop $2 $0 start $2 exit 0 ;; add) if [ "$2" = "" ]; then echo "Usage: $0 add <ip>" exit 1 fi /sbin/iptables -A morales -s $2 -j DROP if [ "$?" = "0" ]; then echo "$2" >> "$banned_file" echo "Added $2" exit 0 else echo "Error" exit 1 fi exit 0 ;; del) if [ "$2" = "" ]; then echo "Usage: $0 del <ip>" exit 1 fi /sbin/iptables -D morales -s $2 -j DROP if [ "$?" = "0" ]; then sed /$2/d "$banned_file" > "$banned_file".tmp mv "$banned_file".tmp "$banned_file" echo "Removed $2" exit 0 else echo "Error" exit 1 fi exit 0 ;; flush) /sbin/iptables -F morales rm -f "$banned_file" touch "$banned_file" echo "ok" exit 0 ;; list) echo "Currently banned ips :" /sbin/iptables -L morales exit 0 ;; *) echo "Usage: $0 {start|stop|restart|add|del|flush|list} [quiet]" exit 1 ;; esac