====== 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 [[linux:goaccess-apache-report|GoAccess]] permettra de voir la liste des URL que vous devriez bannir avec fail2ban. ===== Installer fail2ban ===== Commencer par installer le package fail2ban apt install fail2ban ===== Configuration ===== Créer le fichier ''/etc/fail2ban/jail.local'' avec ce contenu : [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 : #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) .* "(GET|POST|HEAD) .*(%(badurls)s).* HTTP.*" (403|404) .*$ ^(?i) .* "(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 fail2ban-client start apache-antibot Vérification des jails actives fail2ban-client status Vous pouvez aussi ajouter une IP aux exceptions (utile pour vos tests) fail2ban-client set apache-antibot addignoreip Pour l'enlever : fail2ban-client set apache-antibot delignoreip Redémarrage de fail2ban au besoin : service fail2ban restart En cas de ban intempestif de votre IP, vous pouvez vous débannir : fail2ban-client set YOURJAILNAMEHERE unbanip IPADDRESSHERE Pour voir les ip en ban actuellement : iptables -L ===== Rapport dans un fichier ===== Le script suivant permet de créer un fichier listant les IP bannies et le pays associé. #!/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. ===== Sources ===== [[http://fips.at/how-to-get-rid-of-http-bots-with-fail2ban.html|fips.at]] - [[http://www.fail2ban.org/wiki/index.php/Commands|fail2ban.org]]