====== 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.