Bloquer l'accès à Apache via la chaîne de l'agent utilisateur

8

J'ai un scripteur qui utilise un proxy pour attaquer un site Web que je sers.

J'ai remarqué qu'ils ont tendance à accéder au site via un logiciel avec une certaine chaîne d'agent utilisateur commune (par exemple http://www.itsecteam.com/en/projects/project1_page2.htm "Havij advanced sql injection software" avec une chaîne user_agent de Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Havij). Je suis conscient que tout logiciel de crack qui vaut son sel sera probablement en mesure de modifier sa chaîne d'agent utilisateur, mais je suis d'accord avec le scripteur devant gérer cette fonctionnalité à un moment donné.

Alors, existe-t-il un logiciel pour bloquer automatiquement l'accès et la liste noire permanente en faisant correspondre les chaînes d'agent utilisateur?

Kzqai
la source

Réponses:

18

vous pouvez refuser l'accès par BrowserMatch et Deny à partir de SetEnvIf Exemple:

SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot
<Directory "/var/www">
        Order Allow,Deny
        Allow from all
        Deny from env=bad_bot
</Directory>

Pour les bloquer définitivement, vous devez écrire un fichier journal personnalisé et utiliser fail2ban par exemple pour les interdire avec iptables

Par exemple, créez LogFormat

LogFormat "%a %{User-agent}i" ipagent

Ajoutez la journalisation à votre vhost / à l'échelle du serveur

CustomLog /var/log/apache2/useragent.log ipagent

/etc/fail2ban/filter.d/baduseragent.conf

[Definition]
failregex = ^<HOST> Mozilla/4\.0 \(compatible; MSIE 7\.0; Windows NT 5\.1; SV1; \.NET CLR 2\.0\.50727\) Havij$

/etc/fail2ban/jail.conf

[apache-bad-user-agent]

enabled  = true
port     = 80,443
protocol = tcp
filter   = baduseragent
maxretry = 1
bantime  = 86400
logpath  = /var/log/apache2/useragent.log
Dmytro Leonenko
la source
Oui, cela bloquerait les chaînes d'agent utilisateur incorrectes, mais je cherche à aller plus loin et à interdire automatiquement les ips associés aux chaînes d'agent utilisateur incorrectes, de sorte que l'utilisation de la chaîne d'agent utilisateur vous interdise à partir de ce point. sur cette ip. J'utiliserais fail2ban mais je n'ai pas trouvé de moyen de bien l'appliquer aux requêtes http à ce stade.
Kzqai
Essayez ma suggestion dans le post édité
Dmytro Leonenko
6

Je pense que je comprends votre question. Je fournirai une explication plus détaillée si c'est ce que vous recherchez. (cela fonctionnera aussi comme un piège pour d'autres choses)

  • Activer le moteur mod_rewrite dans apache2
  • Créez un trap.php, la visite peut faire ce que vous voulez. Par exemple, je l'ai fait ajouter tous les visiteurs ip à une liste noire qui refuse l'accès à mon site Web.
  • Créez un fichier des agents utilisateurs que vous n'aimez pas, un par ligne comme celui-ci
    bas_useragent [tab] noir
    useragent_bad [tab} noir
  • Maintenant, ajoutez votre mod_rewrite qui correspond à la carte des mauvais utilisateurs, puis reqitez à votre piège s'il y a une carte. La règle peut ressembler à ceci:

    RewriteMap badlist txt:~/bad_useragent_list
    RewriteCond %{HTTP_USER_AGENT} .* [NC]
    RewriteCond ${badlist:%1|white} ^black$ [NC]
    RewriteRule (.*) "/trap.php" [L]

  • Cela correspond essentiellement à l'agent utilisateur aux clés de votre fichier, s'il n'est pas trouvé, il est supposé être "blanc" et la demande n'est pas modifiée. S'il est trouvé et que la valeur associée est "noire", la demande est réécrite pour aller dans votre fichier trap.php, qui fait ce que vous voulez.
  • Quelques idées possibles. Demandez à un autre script de regarder un fichier commun sur lequel trap.php écrit une adresse IP. Si ce fichier commun change, cet observateur lit les nouvelles informations, analyse les adresses IP et ajoute une règle aux tables IP qui bloque tout le trafic provenant de cette adresse. J'espère que ça aide! Encore une fois, si vous souhaitez plus de détails, répondez simplement ici.
blerbl
la source
presque oublié, vous pouvez lire sur mod_rewrite ici: httpd.apache.org/docs/current/mod/mod_rewrite.html
blerbl