Eu estava pensando em adicionar a seguinte regra às minhas tabelas de IP:
-A INPUT -p tcp -m state --state NEW -m recent --update --dport 80 --seconds 5 --hitcount 10 -j DROP
-A INPUT -p tcp -m state --state NEW -m recent --set --dport 80 -j ACCEPT
para evitar abuso acidental baseado em Ajax (muitas solicitações) da minha API da web.
Esse tipo de filtragem com estado é considerado intensivo em recursos ou de outra forma um desperdício devido à comumidade das solicitações da porta 80 (em comparação com algo como a porta 22 com limitação de taxa, que resultaria em muito menos estado)? Sei que fazer isso em um firewall dedicado seria o ideal, mas estou tentando ver o que posso realizar no meu servidor.
Responder1
Não sei sobre o desempenho do uso do módulo de estado versus a filtragem de pacotes SYN (o que efetivamente faria o mesmo truque).
Talvez você possa testar isso... tente adicionar sua regra - e então use o Apache Bench ou similar para gerar tantas solicitações quanto possível enquanto monitora o uso da CPU e da memória do seu servidor. Em seguida, tente adicionar a seguinte regra:
-N tcpsyn
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j tcpsyn
-A tcpsyn -p tcp --dport 80 -m limit --limit 5/second --limit-burst 20 -j RETURN
-A tcpsyn -p tcp --dport 80 -j DROP
... e avaliar isso.