Eu tenho um servidor com apache e recentemente instalei o mod_security2 porque sou muito atacado por isso:
Minha versão do apache é o apache v2.2.3 e eu uso o mod_security2.c
Estas foram as entradas do log de erros:
[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:)
Aqui estão os erros do 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 "-" "-"
Eu tentei configurar mod_security2 assim:
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:\)"
A coisa no mod_security2 é que o SecFilterSelective não pode ser usado, isso me dá erros. Em vez disso, uso uma regra 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:\)"
Mesmo isso não funciona. Não sei mais o que fazer. Alguém tem algum conselho?
Atualização 1
Vejo que ninguém pode resolver esse problema usando o mod_security. Até agora, usar tabelas de ip parece ser a melhor opção para fazer isso, mas acho que o arquivo se tornará extremamente grande porque o ip muda de servidor vezes por dia.
Eu vim com duas outras soluções, alguém pode comentar sobre eles ser bom ou não.
A primeira solução que me vem à cabeça é excluir esses ataques dos meus logs de erro do apache. Isso tornará mais fácil para mim detectar outros erros urgentes à medida que ocorrem e não precisar cuspir em um longo registro.
A segunda opção é melhor, eu acho, e isso está bloqueando hosts que não são enviados da maneira correta. Neste exemplo, o ataque w00tw00t é enviado sem o nome do host, então acho que posso bloquear os hosts que não estão na forma correta.
Atualização 2
Após analisar as respostas, cheguei às seguintes conclusões.
Ter um log personalizado para o apache consumirá alguns recursos desnecessários e, se houver realmente um problema, você provavelmente desejará examinar o log completo sem que nada falte.
É melhor simplesmente ignorar as ocorrências e se concentrar em uma maneira melhor de analisar seus logs de erros. Usar filtros para seus logs é uma boa abordagem para isso.
Considerações finais sobre o assunto
O ataque mencionado acima não chegará à sua máquina se você tiver pelo menos um sistema atualizado; portanto, basicamente não há preocupações.
Pode ser difícil filtrar todos os ataques falsos dos reais depois de um tempo, porque os logs de erros e de acesso ficam extremamente grandes.
Impedir que isso aconteça de qualquer maneira custará recursos e é uma boa prática não desperdiçar seus recursos em coisas sem importância.
A solução que eu uso agora é o Linux logwatch . Ele me envia resumos dos logs e eles são filtrados e agrupados. Dessa forma, você pode facilmente separar o importante do sem importância.
Obrigado a todos pela ajuda, e espero que este post também possa ser útil para outra pessoa.