Filtrage des robots sur Apache et Fail2ban

Filtrage des robots sur Apache et Fail2ban

MISE A JOUR:un mise ajour se trouve ici. Certains robots d’indexation (dont ceux de google) se font piéger par cette version

Ce tuto s’inspire fortement de la discutions de ce thread des forums d’OVH. Après quelques passages de robots sur le serveur dont les intentions sont mauvaises: Ils recherchent sur le serveur des scripts qui possèdent des failles afin d’être exploité par le propriétaire du robot.

L’idéal est de ne pas avoir de scripts avec des failles connu,… utopique n’est-ce pas…

Une première méthode pour contrer ces recherches  est de supprimer tous les accès à apache sans non de domaine ou mauvais nom de domaine: (cas des wildcard avec dyndns par exemple). En effet aucun utilisateur arrivera sur votre sites en utilisant l’IP de votre machine…. Par contre il peut arriver que des utilisateurs se trompent de nom de domaine donc faites attention…

Commencer par faire un dossier vide:

sudo mkdir /var/empty

Maintenant on va créer un serveur virtuel qui récupère tous les noms de domaine qui ne sont pas déclaré. Dans /etc/apache2/sites-avaible/default, mettre:

<VirtualHost *>
        DocumentRoot /var/empty/
        <Directory /var/empty>
              Order Deny,
              Allow Deny from All
        </Directory>
</VirtualHost>

tous les autre sites garde la forme:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName ffwill.homelinux.com

        ......
</VirtualHost>

recharger apache:

sudo /etc/init.d/apache2 reload

Maintenant tous les robots qui accèdent à votre serveur n’utilisant pas un de vos nom de domaine ou votre adresse IP se verra refoulé.

Une autre étape est de rajouter ces « attaques » dans le système de détection de fail2ban.
Pour cela on va rajouter une section dans /etc/fail2ban/jail.conf:

[apache_nodnsuse]
enabled = true
port    = http,https
filter  = apache-nodnsuse
logpath = /var/log/apache*/*error.log
maxretry = 1

dans le cas de DNS avec wildcard, éviter de mettre « maxretry » à 1.
puis on rajoute le filtre correspondant /etc/fail2ban/filter.d/apache_nodnsuse.conf qui contiendra:

[Definition]
failregex = [[]client []] client denied by server configuration: /var/empty/.*
ignoreregex=