Bloqueando o acesso apache por meio da sequência de agentes do usuário

8

Eu tenho um scripter que está usando um proxy para atacar um site que estou servindo.

Percebi que eles tendem a acessar o site via software com uma determinada string de agente de usuário comum (por exemplo, http://www.itsecteam.com/en/projects/project1_page2.htm "Havij software avançado de injeção de sql" com uma string user_agent de Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Havij). Estou ciente de que qualquer software de crack que valha a pena provavelmente será capaz de modificar sua sequência de agentes do usuário, mas estou bem com o script ter que lidar com esse recurso em algum momento.

Então, existe algum software disponível para bloquear automaticamente o acesso e a lista negra permanente combinando as cadeias de agentes do usuário?

Kzqai
fonte

Respostas:

18

você pode negar o acesso pelo BrowserMatch e Negar no SetEnvIf. Exemplo:

SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot
<Directory "/var/www">
        Order Allow,Deny
        Allow from all
        Deny from env=bad_bot
</Directory>

Para bloqueá-los permanentemente, você deve escrever um arquivo de log personalizado e usar fail2ban, por exemplo, para bani-los com iptables

Por exemplo, crie LogFormat

LogFormat "%a %{User-agent}i" ipagent

Adicione registro ao seu vhost / todo o servidor

CustomLog /var/log/apache2/useragent.log ipagent

/etc/fail2ban/filter.d/baduseragent.conf

[Definition]
failregex = ^<HOST> Mozilla/4\.0 \(compatible; MSIE 7\.0; Windows NT 5\.1; SV1; \.NET CLR 2\.0\.50727\) Havij$

/etc/fail2ban/jail.conf

[apache-bad-user-agent]

enabled  = true
port     = 80,443
protocol = tcp
filter   = baduseragent
maxretry = 1
bantime  = 86400
logpath  = /var/log/apache2/useragent.log
Dmytro Leonenko
fonte
Sim, isso bloquearia cadeias ruins de agente de usuário, mas estou procurando dar um passo adiante e banir automaticamente os ips associados a cadeias de agente ruim, de modo que o uso da cadeia de agente de usuário faça com que você seja banido desse ponto em diante. nesse ip. Eu usaria o fail2ban, mas ainda não encontrei uma maneira de aplicá-lo bem a solicitações de HTTP.
Kzqai
Tente minha sugestão no post editado
Dmytro Leonenko
6

Eu acho que entendi sua pergunta. Fornecerei uma explicação mais detalhada, caso seja esse o que você está procurando. (isso também funcionará como uma armadilha para outras coisas)

  • Ative o mecanismo mod_rewrite no apache2
  • Crie um trap.php, a visita pode fazer o que você quiser. Por exemplo, eu fiz adicionar todos os visitantes ip a uma lista negra que nega acesso à minha web.
  • Crie um arquivo com os useragents que você não gosta, um por linha como este
    bas_useragent [tab] black
    useragent_bad [tab} black
  • Agora, adicione seu mod_rewrite que corresponda ao mapa de maus agentes de usuário e, em seguida, re-rite na sua armadilha se houver um mapa. A regra pode ser assim:

    RewriteMap badlist txt:~/bad_useragent_list
    RewriteCond %{HTTP_USER_AGENT} .* [NC]
    RewriteCond ${badlist:%1|white} ^black$ [NC]
    RewriteRule (.*) "/trap.php" [L]

  • Isso basicamente combina o agente do usuário com as chaves do seu arquivo, se não for encontrado, é considerado "branco" e a solicitação não é modificada. Se for encontrado, e o valor associado for "preto", a solicitação será reescrita para ir para o seu arquivo trap.php, que faz o que você quiser.
  • Algumas idéias possíveis. Tenha outro script assistindo a um arquivo comum no qual o trap.php grava um IP. Se esse arquivo comum for alterado, esse inspetor lê as novas informações, analisa os endereços IP e adiciona uma regra às tabelas IP que bloqueiam todo o tráfego desse endereço. Eu espero que isso ajude! Novamente, se você quiser obter mais detalhes, basta responder aqui.
blerbl
fonte
quase esqueci, você pode ler sobre mod_rewrite aqui: httpd.apache.org/docs/current/mod/mod_rewrite.html
blerbl