Como detectar e banir ips atacando usando php

1

Eu tenho uma hospedagem que não permite editar o iptables. De vez em quando eu tenho ataques de DoS leves (cerca de 300 solicitações por segundo) (geralmente não distribuídos). Eu decidi escrever um script PHP que irá bloquear esses ips. Primeiro, tentei armazenar todas as solicitações dos últimos 10 segundos no banco de dados e procurar endereços abusivos para cada solicitação. Mas eu percebi rapidamente que dessa forma eu tenho que fazer pelo menos uma requisição para o banco de dados para cada requisição DoS, e isso não é bom. Então otimizei essa abordagem da seguinte forma:

Read 'deny.txt' with blocked ip's
If it contains request ip, then die()
--- at this point we have filtered out all known attacking ips ---
store requesting ip in database
clean all requests older than 10 secs
count requests from this ip, if it is greater than threshold, add it to 'deny.txt'

Dessa forma, o novo ip de ataque fará somente Threshold de pedidos no banco de dados e será bloqueado.

Então, a questão é: essa abordagem tem desempenho ótimo? Existe uma maneira melhor de fazer essa tarefa?

    
por Poma 05.11.2011 / 13:09

1 resposta

3

Se a requisição puder acertar o seu servidor de qualquer forma (mesmo que você possa editar o iptables), ele ainda estará mastigando a largura de banda. Se o seu servidor puder processar 300 solicitações por segundo, não se preocupe com isso. Se você ficar chocado por largura de banda, então você terá que lidar com isso a montante. Se você não puder editar o iptables em seu servidor, provavelmente terá hospedagem compartilhada, então é provável que seu host veja um ataque e espere que ele seja limitado antes que fique fora de controle.

    
por 05.11.2011 / 13:39