Como posso bloquear um agente de usuário de todos os sites no meu servidor?

9

Originalmente, eu publiquei isso em webmasters.stackexchange.com , mas me disseram que eu receberia uma recepção melhor aqui.


Nos últimos dias, tenho sofrido com o que parece ser um ataque de DDOS (presumivelmente inadvertido). Eu recebi muitas solicitações de um agente identificando como "Mozilla / 4.0 (compatível; ICS)" que o apache consome toda a memória disponível.

Consequentemente, eu gostaria de bloquear todas as solicitações acompanhadas por este agente de usuário, então tentei fazer isso no httpd.conf:

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

Mas quando eu reinicio o apache, ele reclama sobre o uso denyaqui. Sem precisar envolvê-lo em um bloco locationou directory, o que significaria que eu teria que adicionar um novo bloco para cada site, existe alguma maneira de negar o acesso a todo o servidor?


UPDATE: O erro que recebo

  • Reiniciando o servidor da web apache2
    Erro de sintaxe na linha 4 de /etc/apache2/httpd.conf: negar não é permitido aqui [falha]
Tom Wright
fonte

Respostas:

7

Parece uma pergunta antiga agora, mas eu queria fazer o mesmo e encontrei a resposta do nervo acima. Não está bem como está - parece-me que deveria estar <Location "/">, e SetEnvIfprecisa de uma expressão regular para que os parênteses precisem ser citados.

Isso funcionou para eu aplicar o controle de acesso em todos os vhosts:

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

Apenas inclua isso antes das definições de vhost.

user3061288
fonte
(Para o equivalente no Apache 2.4), tenha cuidado ao usar <Location>, pois substitui outras restrições de autorização <Directory>, a menos que você adicione AuthMerging And. Consulte o aviso de segurança Requirenos documentos do apache: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight
4

mod_rewrite pode ser configurado no nível do servidor de acordo com os documentos:

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

Não se esqueça de escapar da regex no RewriteCond

fukawi2
fonte
1
Cuidado: o traço não é um traço real quando copiado. Tentei editar, mas SF reclamará que minha edição é muito pequena. Obrigado mesmo assim, funciona um prazer!
Thibaut Barrère
@ ThibautBarrère se você realmente precisar, você pode ignorar o limite pequeno editar, adicionando um invisível <!-- -->ao editar
hanshenrik
1

Desde que a sintaxe nas linhas SetEnv esteja correta, você poderá lançá-lo no conf da seguinte maneira:

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

Deve permitir que isso funcione em todos os hosts virtuais - apenas testado no 2.2.24, funcionou como um encanto.

nervo
fonte
É melhor que não haja erros, mas, enquanto falsifico meu agente de usuário, não sou negado. Alguma idéia do porquê disso?
Tom Wright