====== Fail2ban ====== ====== Introduction ====== Fail2ban permet de bannir une ip lorsqu'elle effectue de nombreuses requêtes ratée sur un service (ssh, ftp, apache, ...). Fail2ban crée des prisons par service avec différents paramètres (filtre de recherche, log, temps de bannissement, ...) et lorsqu'il trouve X requêtes ratées dans le fichier de log, banni l'ip. ====== Installation ====== ===== Debian & Co ===== <code># aptitude install fail2ban </code> ====== Configuration ====== Le dossier qui contient les fichiers de configuration est: <code>/etc/fail2ban </code> Descriptif des fichiers/dossiers: <code>jail.conf: sûrement le fichier principal, il contient la définition de nos prisons. fail2ban.conf: contient quelques paramètres pour Fail2ban (fichier de log, niveau de log, ...) filter.d/ : Ensemble des filtres à utiliser dans jail.conf action.d/ : Ensemble des scripts utiliser pour réaliser les différentes actions </code> Pour modifier un fichier de configuration, il est tout à fait possible de modifier directement %%*%%%%*%%%%*%%%%*%%.conf, mais il est mieux de créer %%*%%%%*%%%%*%%%%*%%.local dans le même dossier. Ainsi Fail2ban regarde d'abord %%*%%%%*%%%%*%%%%*%%.conf pour sa configuration puis regarde %%*%%%%*%%%%*%%%%*%%.local et applique les différences. Ça permet également de garder un fichier de config propre au cas ou. ===== SSH ===== Si ce n'est pas encore fait, on commence par dupliquer le fichier de config puis le modifier: <code># cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # vi /etc/fail2ban/jail.local </code> Se rendre dans la partie [ssh]: <code>[ssh] enabled = true port = ssh,sftp filter = sshd banaction = iptables-multiport[name=SSH,port=22,protocol=tcp] mail[dest="[[your@mail.com|your@mail.com]]",name="ssh",sender="[[fail2ban@mail.com|fail2ban@mail.com]]"] # Analyse les 600 dernières secondes (10minutes) findtime = 600 # bantime de 25h bantime = 90000 # Fichier de log analysé: logpath = /var/log/auth.log # Maximum d'essais ratés: 3 maxretry = 3 </code> Avec cette configuration, un mail d'avertissement sera envoyé pour dire qu'une ip a été bloquée pour les 25 heures suite à 3 essais ratés dans les 10 dernières minutes. Un mail sera également envoyé à chaque arrêt/démarrage de la prison ssh. On peut aussi mettre un banissement de 60 secondes pour les tests^^ On applique les modifications: <code># fail2ban-client reload </code> Vous devriez recevoir un mail pour vous indiquer que le service fail2ban a redémarré. Pour voir l'état de la prison ssh: <code># fail2ban-client status ssh Status for the jail: ssh |- filter | |- File list: /var/log/auth.log | |- Currently failed: 0 | `- Total failed: 0 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 0 </code> ===== Logs Fail2ban ===== Le fichier de log de Fail2ban par défaut (cf fail2ban.conf) est: <code>/var/log/fail2ban.log </code> Il est possible de modifier son niveau de verbosité dans le fichier /etc/fail2ban/fail2ban.{conf,local}: <code>loglevel = 4 </code> \\ Si une IP insiste dans la durée ou sur plusieurs services, il est possible de le bannir plus longtemps d'une manière simple: créer une prison pour Fail2ban. Le fichier de log de Fail2ban sera analysé et des actions seront appliquées en conséquence: [[http://gardouilleland.free.fr/wordpress/?p=353|http://gardouilleland.free.fr/wordpress/?p=353]] ====== Utilisation ====== ===== Débannir une adresse ip ===== Pour connaître la liste des adresses ip bannies: <code># iptables -L ... **Chain fail2ban-ssh** </font> (1 reference) target prot opt source destination **DROP all --** </font> **XX.YY.WWW.ZZZ** </font> **anywhere** </font> RETURN all -- anywhere anywhere ... </code> Il y a trois méthodes pour débloquer une adresse ip : <code>iptables -D **nom_de_la_chaine** </font> **numéro_de_la_ligne** </font> iptables -D **fail2ban-ssh** </font> **1** </font> iptables -D INPUT -s **XX.YY.WWW.ZZZ** </font> -j DROP </code> Attention: L'ip ne sera pas rebannie si elle se trompe à nouveau X fois. Pour réactiver le bannissement automatique, il faut soit redémarrer la machine, soit redémarrer le service: <code># fail2ban-client restart </code>