{{tag>fr fr:linux fr:serveur fr:web fr:base_de_données}} ====== Fail2Ban ====== Fail2Ban est un petit utilitaire très pratique pour bloquer les attaques brute force inhérentes à toute machine directement accessible sur Internet. Le principe est simple : * les journaux de logs sont analysés en permanence * en cas d'échec trop importants dans une courte période, l'IP source est bloquée temporairement via iptables * à la fin de la période de ban, l'IP est à nouveau autorisée ===== Installation ===== L'installation est réalisée sur [[Debian]] en ajoutant le paquet : * fail2ban ===== Configuration ===== La structure de la configuration de fail2ban est la suivante : * /etc/fail2ban/jail.conf constitue le majeure partie de la configuration, notamment les services à protéger. * /etc/fail2ban/filter.d/ contient les filtres appliqués sur les logs afin d'identifier une tentative d'attaque * /etc/fail2ban/action.d/ contient les actions utilisables en cas d'attaque * /etc/fail2ban/fail2ban.conf contient quelques paramètres de configuration supplémentaires Par défaut, sous Debian, fail2ban est configuré ainsi : * seul le serveur ssh est protégé * un attaquant est bloqué après 6 tentatives de connexions infructueuses * le temps de ban est 10 minutes * l'IP 127.0.0.1 est exclue du ban * une ligne est ajoutée au log de fail2ban sans envoie de mail ==== Alerte par mail ==== Il est possible d'activer l'alerte par mail en changeant le paramètre suivant : # Choose default action. To change, just override value of 'action' with the # interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local # globally (section [DEFAULT]) or per specific section action = %(action_)s Les valeurs suivantes sont des raccourcis : * action_ : blocage sans mail * action_mw : blocage avec envoie du whois de l'attaquant * action_mwl : blocage avec envoie du whois de l'attaquant et des logs générant le blocage ==== Exclure des IP ==== Vous pouvez empêcher Fail2ban de bloquer vos IP avec le paramètre "ignoreip", par exemple : ignoreip = 127.0.0.1 192.168.1.1 ==== Changer la durée de ban ==== La durée est configurée avec "bantime", pour bloquer pendant 5 minutes : bantime = 300 ==== Définition d'un service à protéger ==== Les services sont déclarés ainsi : [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6 Description des paramètres : * enabled : permet d'activer ou de désactiver la protection * port : définit le port à bloquer * filter : définit le filtre à utiliser, les filtres sont situés dans le sous répertoire //filter.d// * logpath : le fichier de log à parser * maxretry : le nombre de tentatives autorisées avant blocage ===== Protéger phpmyadmin ===== Il est possible de protéger phpmyadmin avec fail2ban, pour cela il faut : * modifier le log apache pour loguer les actions phpmyadmin * créer un filtre pour identifier les tentatives de connexion * ajouter une configuration de service dans fail2ban Pour l'installation de phpmyadmin, voir [[phpmyadmin]].\\ Pour la configuration d'apache, voir [[serveur web]]. ==== Loguer les actions phpmyadmin ==== phpmyadmin offre des variables personnalisées disponibles pour les logs, en particulier le nom et le status de l'utilisateur. Nous allons les utiliser pour détecter les tentatives de connexion. Pour cela, modifier le format des logs ainsi : LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined CustomLog ${APACHE_LOG_DIR}/access.log pma_combined En consultant les logs, vous devez voir apparaître les nouveaux champs à la fin des lignes. Une tentative d'accès erroné sera logué ainsi : 192.168.1.1 - - [09/Jan/2012:22:24:48 +0100] "GET /phpmyadmin/index.php?token=d6ba5c4997bd3d7a07404e6123396ed3 HTTP/1.1" 200 2508 "https://192.168.1.2/phpmyadmin/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1" root mysql-denied ==== Créer un filtre fail2ban ==== Pour détecter les tentatives, il faut donc identifier "mysql-denied" à la fin des logs, sans oublier de mémoriser l'IP au début. Créer le fichier ///etc/fail2ban/filter.d/phpmyadmin.conf// avec le contenu suivant : # Fail2Ban configuration file # # Author: Matthieu Bouthors # # [Definition] # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named "host". The tag "" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P[\w\-.^_]+) # Values: TEXT # failregex = .* mysql-denied # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex = ==== jail.conf ==== Enfin il faut ajouter la déclaration suivante dans jail.conf : [phpmyadmin] enabled = true port = http,https filter = phpmyadmin logpath = /var/log/apache2/access.log maxretry = 6 Sans oublier de redémarrer fail2ban après la modification : /etc/init.d/fail2ban restart ===== Backup ===== * /etc/fail2ban ===== Links ===== * http://www.fail2ban.org * [[phpmyadmin]]