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 permet de configurer les options par défaut de fail2ban. Ajoutez les adresses ip et ip6 de votre serveur à la directive ignoreip pour éviter que le serveur se bannisse lui même.
Entrez l'adresse email à laquelle vous souhaitez envoyer les alertes à la ligne destemail. Personnellement, j'utilise une mailing-list centraliser les mails de fail2ban.
Enfin, changez la ligne action = en :
action = %(action_mwl)s
La suite du fichier de configuration est divisée est section. Voici la configuration de ma section [ssh] :
[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6
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
banned_file=/srv/link/banned.list
me=`dirname $0`/
case "$1" in
start)
iptables -N morales
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
iptables -A morales -s $ligne -j DROP
done
else
touch $banned_list
fi
echo "Started"
exit 0
;;
stop)
iptables -F morales
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
iptables -X morales
echo "Stopped"
exit 0
;;
restart)
$0 stop
$0 start
exit 0
;;
add)
if [ "$2" = "" ]; then
echo "Usage: $0 add <ip>"
exit 1
fi
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
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)
iptables -F morales
rm -f "$banned_file"
touch "$banned_file"
echo "ok"
exit 0
;;
list)
echo "Currently banned ips :"
iptables -L morales
exit 0
;;
*)
echo "Usage: $0 {start|stop|restart|add|del|flush|list}"
exit 1
;;
esac