Ceci est une ancienne révision du document !
−Table des matières
Fail2ban et Apache - Bannir les scans d'url d'administration (antibot)
Information
Testé sur Debian 8
Si on analyse les logs apache, on remarque beaucoup de bots qui scannent les URL potientiellement associées à des outils d'administration.
Faire l'analyse des 404 dans vos logs apache avec un outil comme GoAccess permettra de voir la liste des URL que vous devriez bannir avec fail2ban.
Installer fail2ban
Commencer par installer le package fail2ban
1 |
apt install fail2ban |
Configuration
Créer le fichier /etc/fail2ban/jail.local
avec ce contenu :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[apache-antibot] enabled = true filter = apache-antibot port = http,https #Fichier ou dossier de logs à surveiller (prends en compte logrotate) logpath = /home/www-data/logs/apache2/*.log* # Nombre de match dans les logs avant de bannir maxretry = 3 # Période max surveillée findtime = 432000 # Ban de 10 jours bantime = 864000 #Décommenter pour envoyer un email en cas de ban #mta = mail #destemail = user@email.com #Ban, mail avec whois et log #action = %(action_mwl)s #Ban action = %(action_)s |
Adapter la ligne logpath
à vos fichiers de logs.
Je recommande de passer bantime
à 60 (secondes) pour vos tests. maxretry
est le nombre de correspondances avant de déclencher le ban. findtime
est la période à analyser dans les fichiers de log.
Créer le fichier /etc/fail2ban/filter.d/apache-antibot.conf
avec ce contenu :
1 2 3 4 5 6 7 8 |
#Modifier 'badurls' selon votre besoin [Definition] badurls = stat|phpmyadmin|myadmin|mysql|phpadmin|sql|msd|mysqldumper|msd1.24.4|msd1.24.4stable|sqlite|sqlitemanager|webdb|soapCaller|manager|setup\.php|shell.\php|pma|status|jmx-console|HNAP1|wp-config\.txt|wp-config\.orig|wp-config\.php\.orig|wp-config\.old|wp-config\.php\.old|wp-config\.bak|wp-config\.php\.bak|wp-config\.php\.save|wp-config\.php_bak failregex = ^(?i)<HOST> .* "(GET|POST|HEAD) .*(%(badurls)s).* HTTP.*" (403|404) .*$ ^(?i)<HOST> .* "(GET|POST|HEAD) / HTTP.*" (403|404) .*$ ignoreregex = |
Adapter la ligne badurls pour les chemins sur lesquels vous voulez provoquer un ban par iptables.
Activation de votre jail
Activation
1 |
fail2ban-client start apache-antibot |
Vérification des jails actives
1 |
fail2ban-client status |
Vous pouvez aussi ajouter une IP aux exceptions (utile pour vos tests)
1 |
fail2ban-client set apache-antibot addignoreip <IP> |
Pour l'enlever :
1 |
fail2ban-client set apache-antibot delignoreip <IP> |
Redémarrage de fail2ban au besoin :
1 |
service fail2ban restart |
En cas de ban intempestif de votre IP, vous pouvez vous débannir :
1 |
fail2ban-client set YOURJAILNAMEHERE unbanip IPADDRESSHERE |
Pour voir les ip en ban actuellement :
1 |
iptables -L |
Rapport dans un fichier
Le script suivant permet de créer un fichier listant les IP bannies et le pays associé.
1 2 3 4 5 |
#!/bin/bash fail2ban-client status apache-antibot | grep 'IP list' | sed -n 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/\nip&\n/gp' | grep ip | sed 's/ip//' | sort | uniq > /dev/shm/f2b .txt fail2ban-client status apache-antibot | grep 'IP list' | sed -n 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/\nip&\n/gp' | grep ip | sed 's/ip//' | sort | uniq | xargs -n 1 geoiplookup { } | sed -e 's/GeoIP Country Edition: //g' > /dev/shm/f2bgeo .txt paste /dev/shm/f2b .txt /dev/shm/f2bgeo .txt > /home/www-data/domain .info /f2b-bans .txt |
Remarques
Attention si les fichiers de logs analysés sont affectés par logrotate
. Ne pas ajouter compress
et delay compress
. fail2ban ne sais pas lire les fichier compressés par défaut.