iptables problema do módulo de limite de taxa

3

Estou usando o módulo de limite de taxa do iptables para evitar ataques DoS (sei que ele não pode parar um DDoS em grande escala, mas pelo menos pode ajudar com ataques menores).

Nas minhas regras eu tenho algo como:

/sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m limit --limit 20/minute --limit-burst 20 -j ACCEPT

Funciona bem até a noite passada, quando alguém estava atingindo minha porta 80 sem parar. A conexão estava sendo descartada de acordo com a regra (como mostrado no log). No entanto, isso também torna o servidor indisponível para outros usuários legítimos.

Eu não entendo porque aconteceu assim. Eu pensei que isso não afetaria nenhum outro usuário além daquele que está inundando o servidor.

É porque o iptables foi sobrecarregado?

Qualquer comentário seria muito apreciado.

Obrigado!

    
por TopQ 12.09.2011 / 20:31

2 respostas

2

Sua regra não parece especificar uma origem específica. Depois de aceitar 20 NOVAS conexões em um minuto, ele pára de aceitar NOVAS conexões.

Você precisa usar o módulo recent para o iptables lembrar de onde as conexões estão vindo e bloquear as pessoas que se conectam muito rápido no mesmo endereço. Isso leva duas regras: uma para o iptables para "aprender" o endereço e, em seguida, uma para o iptables para ver quantas vezes esse endereço atingiu o servidor no tempo especificado:

/sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m recent --set
/sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m recent --update --seconds 60 --hitcount 20 -j DROP

Este artigo entra em mais detalhes.

    
por 12.09.2011 / 20:46
2

Ele também bloqueia o tráfego de usuários legítimos porque você não especificou um endereço IP de origem para aplicar essa regra. Se você alterou a regra para ter um endereço de origem, então seria RateLimit'ing esse endereço específico. Como sua regra está agora, esse RateLimit está em vigor para todos os endereços.

Eu tenho a configuração do RateLimit para limitar todos os IPs, exceto aqueles especificados por certas regras. Minha configuração é a seguinte:

  • -I INPUT -m tcp -p tcp --dportar 80 -d xx.xxx.xx.xx -j ACEITAR

  • -A ENTRADA -m tcp -p tcp --dporta 80 -m hashlimit --hashlimit-upto 400 / min - hashlimit-burst 500 --homem de modo de hlimit - nome-do-hslimite ratelimit -j ACEITAR

  • -A ENTRADA -p tcp -m tcp --dota 80 -j RateLimit

Eu tenho um monte de regras como

  • -A RateLimit -s xx.xxx.xx.x -j ACCEPT

Isto permitirá comunicações na porta 80, com um limite de conexão e burst configurado, e limite por ip de origem (o srcip --hashlimit-mode). Os IPs serão verificados quanto à existência no RateLimit (--hashlimit-name ratelimit).

Talvez algo assim seja mais o que você está procurando?

    
por 12.09.2011 / 20:44