¿Cómo puedo bloquear un agente de usuario de todos los sitios en mi servidor?

9

Originalmente publiqué esto en webmasters.stackexchange.com , pero me dijeron que obtendría una mejor recepción aquí.


Durante los últimos días, he estado sufriendo de lo que parece ser un ataque DDOS (presumiblemente inadvertido). He recibido tantas solicitudes de un agente que se identifica como "Mozilla / 4.0 (compatible; ICS)" que apache consume toda la memoria disponible.

En consecuencia, me gustaría bloquear todas las solicitudes acompañadas por este agente de usuario, así que intenté hacer esto en httpd.conf:

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

Pero cuando reinicio apache, se queja de usar denyaquí. Sin tener que envolverlo en un bloque locationo directory, lo que significaría que tendría que agregar un nuevo bloque para cada sitio, ¿hay alguna forma de negar el acceso a todo el servidor?


ACTUALIZACIÓN: El error que obtengo

  • Reinicio del servidor web Apache2
    Error de sintaxis en la línea 4 de /etc/apache2/httpd.conf: negar no permitido aquí [error]
Tom Wright
fuente

Respuestas:

7

Parece una vieja pregunta ahora, pero quería hacer lo mismo y encontré la respuesta desde arriba. No es tan correcto como es, me parece que debería ser <Location "/">, y SetEnvIfnecesita una expresión regular, por lo que los paréntesis deben citarse.

Esto me funcionó para aplicar el control de acceso en todos los vhosts:

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

Solo incluye eso antes de las definiciones de vhost.

usuario3061288
fuente
(Para el equivalente en Apache 2.4) Tenga cuidado al usarlo, <Location>ya que anula cualquier otra restricción de autorización <Directory>, a menos que agregue AuthMerging And. Consulte la advertencia de seguridad Requireen los documentos de Apache: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight
4

mod_rewrite se puede configurar a nivel del servidor de acuerdo con los documentos:

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

No te olvides de escapar de la expresión regular en el RewriteCond

fukawi2
fuente
1
Precaución: el guión no es un guión real cuando se copia. Intenté editar, pero SF se quejará de que mi edición es demasiado pequeña. Gracias de todos modos, funciona de maravilla!
Thibaut Barrère
@ ThibautBarrère si realmente lo necesita, puede omitir el pequeño límite de edición agregando un invisible <!-- -->a la edición
hanshenrik
1

Siempre que la sintaxis en las líneas SetEnv sea correcta, debería poder incluirla en la configuración de la siguiente manera:

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

Debería permitir que eso funcione en todos los hosts virtuales: recién probado en 2.2.24, funcionó de maravilla.

nervio
fuente
Esto es mejor porque no hay ningún error, pero mientras falsifico mi agente de usuario no me niegan. ¿Alguna idea de por qué podría ser eso?
Tom Wright el