Pour Apache, Fail2ban ne sert à rien ou presque !
Devant la pression amicale de mes commentateurs, j’ai donc ce matin entreprise de configurer Fail2ban sur ma Fedora. Pour rien ou presque ! Et, en plus, Fail2ban charge mon CPU à près de 50%, en moyenne. J’ai dû changé les directives loglevel à CRITICAL et backend à systemd. C’est mieux !!!
Installation classique
yum install fail2ban
Configuration pour les erreurs 40x et 50x
J’ai ajouté dans le répertoire /etc/fail2ban/jail.d le fichier apache.conf configuré comme suit :
[apache] enabled=true port=http,https filter=apache logpath=/var/log/httpd/vm-access_log /var/log/httpd/dsfc-access_log maxretry=2 bantime=86400 findtime=60 banaction=iptables-multiport[name=apache,port="http,https",protocol=tcp]
Pour votre compréhension, je tiens à préciser que la directive banaction fait référence au fichier iptables-multiport.conf défini dans le répertoire /etc/fail2ban/action.d. Au passage, j’ai remplacé la directive REJECT par DROP dans le fichier iptables-blocktype.conf.
Il faut ensuite créer un filtre dans le répertoire /etc/fail2ban/filter.d avec le nom défini au niveau de la directive filter. Je l’ai donc appelé apache.conf :
[Definition] failregex = ^<HOST> - - .* "(GET|POST) .* HTTP/1.1" 4[0-3][0-9] ignoreregex = proxad\.net
Je vous incite au niveau de la directive ignoreregex à ajouter le nom de domaine associé à votre connexion, fourni par votre FAI. Par exemple, proxad\.net pour Free !
L’expression est obligatoire. Elle permet d’extraire l’adresse ip de la machine. Et c’est là que le bas blesse. Les attaques nous parviennent aujourd’hui sans aucune indication quant à l’adresse ip de la machine assaillante ou à partir de machines dont le nom ne peut pas être résolu !!! Et, dans ce cas, Fail2ban nous sert à rien, sauf à nous protéger des bizuts. Si vous cherchez une solution, je vous renvoie à l’article que j’ai publié récemment sur la manière de faire face à une attaque de type DDoS au niveau de votre serveur Apache !
Regardez bien la 1ère ligne des logs du site Voie Militante : aucune ip, aucun nom de machine ! Juste un point. CQFD.
Le module Apache mod_remoteip (avec des pincettes)
Il permet d’identifier plus finement la machine qui émet la requête, même si ce n’est pas fiable à 100%. Pour lister les modules installés dans Apache, tapez la commande :
apachectl -t -D DUMP_MODULES
Pour activer le module mod_remoteip sous Fedora, vous devez décommenter, dans le fichier /etc/httpd/conf.modules.d/00-base.conf, la ligne :
LoadModule remoteip_module modules/mod_remoteip.so
Dans les fichiers de configuration au niveau du format du fichier de log, remplacez alors le %h par le %a.
Je vous recommande, pour ma part, de désactiver la résolution DNS au niveau des logs en passant la directive HostnameLookups à off !
La liste des machines bloquées
Pour visualiser la liste des machines bloquées, il suffit de taper en ligne de commandes : iptables – L.