Bloqueo del acceso a Apache a través de una cadena de agente de usuario

8

Tengo un scripter que está usando un proxy para atacar un sitio web que estoy sirviendo.

Me di cuenta de que tienden a acceder al sitio a través de software con una determinada cadena de agente de usuario común (es decir, http://www.itsecteam.com/en/projects/project1_page2.htm "Havij advanced sql injection software" con una cadena user_agent de Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Havij). Soy consciente de que cualquier software de craqueo que valga la pena probablemente pueda modificar su cadena de agente de usuario, pero estoy de acuerdo con que el scripter tenga que lidiar con esa característica en algún momento.

Entonces, ¿hay algún software para bloquear automáticamente el acceso y poner en la lista negra de forma permanente las cadenas de agente de usuario coincidentes?

Kzqai
fuente

Respuestas:

18

puede denegar el acceso mediante BrowserMatch y Denegar desde SetEnvSi Ejemplo:

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>

Para bloquearlos permanentemente, debe escribir un archivo de registro personalizado y usar fail2ban, por ejemplo, para prohibirlos con iptables

Por ejemplo, cree LogFormat

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

Agregue el registro a su vhost / servidor

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
fuente
Sí, eso bloquearía las cadenas de agente de usuario defectuosas, pero estoy buscando ir un paso más allá y prohibir automáticamente los ips asociados con las cadenas de agente de usuario incorrecto, de modo que el uso de la cadena de agente de usuario lo excluye a partir de ese punto en adelante. en esa ip. Usaría fail2ban pero no he encontrado una manera de aplicarlo bien a las solicitudes http en este momento.
Kzqai
Prueba mi sugerencia en la publicación editada
Dmytro Leonenko el
6

Creo que entiendo tu pregunta. Proporcionaré una explicación más detallada si esto es lo que está buscando. (Esto también funcionará como una trampa para otras cosas)

  • Habilite el motor mod_rewrite en apache2
  • Crea un trap.php, visitar puede hacer lo que quieras. Por ejemplo, hice que agregara todos los visitantes ip a una lista negra que niega el acceso a mi web.
  • Cree un archivo de los agentes de uso que no le gusten, uno por línea como este
    bas_useragent [tab] black
    useragent_bad [tab} black
  • Ahora, agregue su mod_rewrite que coincida con el mapa de agentes de uso incorrectos, luego vuelva a escribir en su trampa si hay un mapa. La regla puede verse así:

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

  • Básicamente, esto coincide con el agente de uso con las claves en su archivo, si no se encuentra se supone que es "blanco" y la solicitud no se modifica. Si se encuentra y el valor asociado es "negro", la solicitud se reescribe para ir a su archivo trap.php, que hace lo que quiera.
  • Algunas ideas posibles. Haga que otro script vea un archivo común en el que trap.php escribe una IP. Si este archivo común cambia, este observador lee la nueva información, analiza las direcciones IP y agrega una regla a las tablas IP que bloquea todo el tráfico de esa dirección. ¡Espero que esto ayude! Nuevamente, si desea más detalles, solo responda aquí.
blerbl
fuente
casi olvidado, puedes leer sobre mod_rewrite aquí: httpd.apache.org/docs/current/mod/mod_rewrite.html
blerbl