link pode fazer o que você quiser.
Meu servidor da web (apache2) é continuamente atacado por bots mal-intencionados, solicitando URLs como estes:
/blog/tag/pnphpbb2//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 301
//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200
/wiki/index.php/Main:Some_Wiki_Pagename//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200
/wiki/index.php//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200
/blog/2009/01/title-of-post-here//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 301
Gostaria que um processo diário do cron localizasse qualquer host que solicitasse um URL "malicioso" e os adicionasse a um equivalente HTTP para hosts.deny.
Eu imaginaria que haveria um conjunto de regexps definindo URLs maliciosas, bem como possivelmente algum plugin do apache para fazer facilmente o host negar (sem ter que fazer um httpd reiniciar todas as noites).
Existe algo assim?
link pode fazer o que você quiser.
fail2ban verifica arquivos de log como / var / log / apache / error_log e proíbe o IP que os automatiza varreduras baseadas em expressões regulares (chamadas filtros). Por padrão, ele atualiza o firewall (iptables) para bloquear o IP incorreto. É muito fácil escrever novas ações e implementar um para atualizar um .htaccess deve ser bastante simples, existem vários exemplos disponíveis na distribuição fail2ban.
Eu irei o segundo fail2ban . Ele funciona ao vivo, pode banir temporariamente e pode adicionar endereços IP ao seu firewall, então o Apache não precisa perder tempo com isso.
Ainda mais eficiente quando acoplado ao módulo ipset netfilter para o iptables (que é mais rápido para lidar com grandes quantidades de endereços), e pode bani-los instantaneamente para que eles façam apenas um ou dois pedidos antes de serem bloqueados.
Se você realmente odeia essas pessoas e está executando o Linux, você também pode tentar implementar tarpitting para o iptables (uma pesquisa rápida não encontrou nenhum patch compatível com o 2.6). Isso aceitará a conexão e, em seguida, definirá imediatamente o tamanho da janela como 0 (evitando que os dados sejam transferidos), mas também impedirá que a extremidade remota feche a conexão, ou seja, qualquer aplicativo que esteja se conectando terá que esperar entre três e vinte ( !!) minutos antes da conexão expirar em seu final.
Isso é ótimo para parar os scanners de portas também, porque os faz receber ordens de magnitude mais longas do que normalmente.
Se for o Apache 2.0, você pode tentar o mod_access: link
No Apache 2.2, é o mod_authz_host: link
Parece claro que você terá que sinalizar ao Apache para recarregar sua configuração para fazer alterações na configuração do módulo, no entanto.
Editar: O Modsecurity se parece com o que você quer, ao contrário de construir configurações de negação estática, usando os arquivos de log e usando uma das opções acima. Eu vou avaliar a resposta agora.
Outra possibilidade é usar o mod_rewite para combinar com o URL e enviar ao cliente um 403 (ou o código que você quiser). Exemplo:
RewriteEngine on
RewriteRule ^/.*passwd.*/ - [L,NC,G]
Ou para diversão:
RewriteEngine on
RewriteRule ^/(.*passwd.*)/ http://127.0.0.1/$1 [L,NC,R=301]
Eu certamente olharia para o OSSEC. Ele detecta esses padrões e pode bloquear os endereços IP. Ele também procura verificações (vários 404s, por exemplo) e bloqueia o IP do ofensor.
E sim, isso é feito por padrão.
Link: link
Um exemplo seria:
<Location /> Order Deny,Allow Deny from 123.123.123.123 231.213.123.0/24 Allow from all </location>
Eu recomendo ter isso em um arquivo separado que você inclua na sua configuração principal e apenas reescreva esse pequeno fragmento. Você pode fazer um recarregamento para pegar a alteração, o que não interrompe seu servidor como um reinício faria.