Tengo un servidor con apache y recientemente instalé mod_security2 porque esto me atacó mucho:
Mi versión de apache es apache v2.2.3 y uso mod_security2.c
Estas fueron las entradas del registro de errores:
[Wed Mar 24 02:35:41 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:31 2010] [error]
[client 202.75.211.90] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:48:03 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
Aquí están los errores de access_log:
202.75.211.90 - -
[29/Mar/2010:10:43:15 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:11:40:41 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:12:37:19 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
Intenté configurar mod_security2 así:
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Lo que hay en mod_security2 es que SecFilterSelective no se puede usar, me da errores. En cambio, uso una regla como esta:
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Incluso esto no funciona. Ya no sé qué hacer. ¿Alguien tiene algún consejo?
Actualización 1
Veo que nadie puede resolver este problema usando mod_security. Hasta ahora, usar ip-tables parece ser la mejor opción para hacer esto, pero creo que el archivo se volverá extremadamente grande porque la ip cambia varias veces al día.
Se me ocurrieron otras 2 soluciones, ¿alguien puede comentar sobre ser bueno o no?
La primera solución que se me ocurre es excluir estos ataques de mis registros de errores de apache. Esto hará que sea más fácil para mí detectar otros errores urgentes a medida que ocurren y no tengo que escupir a través de un registro largo.
Creo que la segunda opción es mejor, y es bloquear hosts que no se envían de la manera correcta. En este ejemplo, el ataque w00tw00t se envía sin nombre de host, por lo que creo que puedo bloquear los hosts que no están en la forma correcta.
Actualización 2
Después de analizar las respuestas, llegué a las siguientes conclusiones.
Tener un registro personalizado para apache consumirá algunos recursos innecesarios, y si realmente hay un problema, es probable que desee ver el registro completo sin que falte nada.
Es mejor ignorar los aciertos y concentrarse en una mejor manera de analizar sus registros de errores. El uso de filtros para sus registros es un buen enfoque para esto.
Reflexiones finales sobre el tema.
El ataque mencionado anteriormente no llegará a su máquina si al menos tiene un sistema actualizado, por lo que básicamente no hay preocupaciones.
Puede ser difícil filtrar todos los ataques falsos de los reales después de un tiempo, porque los registros de errores y los registros de acceso se vuelven extremadamente grandes.
Evitar que esto suceda de cualquier manera le costará recursos y es una buena práctica no desperdiciar sus recursos en cosas sin importancia.
La solución que uso ahora es Linux logwatch . Me envía resúmenes de los registros y se filtran y agrupan. De esta manera, puede separar fácilmente lo importante de lo no importante.
Gracias a todos por la ayuda, y espero que esta publicación también pueda ser útil para alguien más.