====== Fail2ban ======
[[http://www.fail2ban.org|Fail2ban]] est un utilitaire qui lit les fichiers de journalisation afin de détecter des attaques et d'y remédier en ajoutant une règles iptables (par exemple).
===== Exemple d'attaque =====
Dans mon cas, mon serveur est souvent « attaqué » sur le services DNS :
May 11 15:48:01 serveur ntpd[3189]: kernel time sync status change 4001
May 11 15:52:17 serveur named[2322]: client 168.75.65.199#32780: query (cache) './NS/IN' denied
May 11 15:52:17 serveur named[2322]: client 168.75.65.199#32780: query (cache) './NS/IN' denied
May 11 15:52:17 serveur named[2322]: client 168.75.65.199#32780: query (cache) './NS/IN' denied
May 11 15:58:24 serveur named[2322]: client 209.249.141.45#32809: query (cache) './NS/IN' denied
May 11 15:58:24 serveur named[2322]: client 209.249.141.45#32809: query (cache) './NS/IN' denied
May 11 15:58:24 serveur named[2322]: client 64.74.15.250#32796: query (cache) './NS/IN' denied
May 11 15:58:24 serveur named[2322]: client 209.249.141.45#32809: query (cache) './NS/IN' denied
May 11 15:58:24 serveur named[2322]: client 64.74.15.250#32796: query (cache) './NS/IN' denied
May 11 15:58:24 serveur named[2322]: client 64.74.15.250#32796: query (cache) './NS/IN' denied
May 11 15:59:02 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
May 11 15:59:02 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
May 11 15:59:02 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
May 11 16:01:23 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
May 11 16:01:23 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
May 11 16:01:23 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
May 11 16:01:24 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
May 11 16:01:24 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
May 11 16:01:24 serveur named[2322]: client 209.249.141.181#33159: query (cache) './NS/IN' denied
Le principe de fail2ban est d'autoriser une certain nombre de requêtes invalides (//maxretry//), puis de bloquer l'accès au service en utilisant iptable, host.deny ou autre, pendant une petite durée (//bantime//).
===== Installation, configuration =====
Sous Debian, fail2ban est disponible directement :
sudo aptitude install fail2ban
La configuration se situe sous /etc/fail2ban. Le fichier //jail.conf// contient la définition des services à surveiller, le répertoire //filter.d// contient les regexp qui détectent les attaques pour chaque service, le répertoire //action.d// contient la définition des actions possibles (filtre iptable, host.deny, shorewall, mail, ...)
Il est conseillé de ne pas modifier la configuration par défaut, mais d'utiliser un fichier //*.local// pour surcharger le fichier voulu.
Je n'ai que le services DNS à protégé, donc je créé le fichier //jail.local//. Par défaut seul le service //ssh// est protégé :
[ssh]
enabled = false
[named-refused-udp]
enabled = true
logpath = /var/log/daemon.log
Bind journalise dans //syslog// et dans //daemon.log//, je préfère prendre le fichier qui a le moins de trafic.
===== Résultat =====
Les actions de fail2ban sont journalisées dans /var/log/fail2ban.log :
2009-05-11 16:32:21,261 fail2ban.actions: WARNING [named-refused-udp] Ban 168.75.65.198
Le site officiel explique qu'il est même possible d'avoir une carte mondial des attaques en utilisant geoip : http://www.fail2ban.org/wiki/index.php/HOWTOs.