Como bloquear automaticamente e temporariamente um endereço IP fazendo muitos acessos no servidor em um curto período de tempo?

18

Um dos meus servidores LAMP foi recentemente derrubado por algum tipo de robô de script procurando por exploits. Pelo que parece, ele estava fazendo tantos pedidos por segundo, que sobrecarregou a RAM no servidor e derrubou todo o meu site por uma hora. Aquele "attacK" veio de um único endereço IP.

Então, como eu posso bloquear automaticamente e temporariamente um endereço IP fazendo muitos acessos no meu Servidor LAMP em um curto período de tempo? Qual é a melhor ferramenta para o trabalho, e devo resolver isso no nível do sistema operacional ou via PHP?

    
por ProgrammerGirl 21.08.2012 / 21:57

5 respostas

24

Fail2Ban . O padrão ouro / solução padrão para este problema na plataforma Linux.

    
por 21.08.2012 / 22:01
4

Você deve evitar tentar fazer isso com o PHP. No momento em que o PHP se envolve, já é tarde demais - a memória já foi alocada.

Você pode proibir endereços IP em qualquer camada, mas o nível mais baixo que usa a menor quantidade de recursos é a rota que você deseja seguir. Isso geralmente é o firewall. No mínimo, o iptables (firewall linux) é o que você deseja usar. Existem ferramentas que outros mencionaram, como o Fail2Ban, que podem automatizar isso para você. Firewall externo seria melhor.

Além de tentar proibir os endereços IP ofensivos, você deve tentar usar melhor seus recursos. Se uma solicitação exigir menos recursos, levará mais tempo para que um ataque seja eficaz.

O Apache também usa muita memória. Se você está usando mod_php, é ainda pior porque o PHP é carregado dentro de cada processo filho do Apache. Isso significa que mesmo solicitações para conteúdo estático (css / js / images) estão carregando o PHP mesmo quando o PHP não está sendo usado. Você pode resolver esse problema usando FastCGI em vez disso. mod_fcgid é uma boa opção.

Existem também outros servidores da Web que são mais eficientes em termos de recursos. Nginx é meu favorito. Há também o Lighttpd. Muitas pessoas gostam do Litespeed (substitua o Apache).

Se você quiser ficar com o Apache, considere ajustá-lo da melhor maneira possível. Considere desabilitar o .htaccess. Aqui está uma boa explicação do porquê .

    
por 15.09.2012 / 21:03
1

Para controlar ou bloquear o tráfego HTTP, você pode usar:

No entanto, esteja ciente de que essa ferramenta também pode bloquear / desacelerar os webspiders e, portanto, afetar o SEO.

    
por 21.08.2012 / 22:27
1
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

ossec pode fazer esse tipo de coisa de forma automática e transparente com base nos syslogs.

    
por 21.08.2012 / 22:10
-3

NoooBS

--- inundação ---

iptables -N logdrop iptables -A logdrop -m recent --set --name lista negra

iptables -A log-in -m limit --limit 1 / s --limit-burst 1 -j LOG --log-prefixo "Flood:"

iptables -A log-d DROP

iptables -N ddos iptables -A ddos -m recent --rcheck --name lista negra --segundos 300 --hitcount 1 -j logdrop iptables -A ddos -m recent --set --name denovo iptables -A ddos -m recent --update --name again --segundos 60 --hitcount 2 -j logdrop iptables -A ddos -j RETURN

    
por 11.04.2018 / 14:45