Acabei de perceber uma solução simples:
-
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
-
iptables -A INPUT -p tcp --syn -j DROP
- Continue a fazer o que quiser
Eu sei que posso usar iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
para limitar a aceitação de tcp syn
pacotes.
Portanto, se os pacotes tcp syn
não cruzarem essa taxa, eles passarão para ACCEPT
.
Existe uma maneira de escrever essa regra na direção oposta?
Eu quero escrever regras da seguinte forma:
If ok (doesn't cross the rate), continue down. Else drop
< - (1)
???
iptables -A INPUT -j OTHER_CHAIN_STUFF
Existe uma maneira de escrever (1)
?
Eu tentei iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j DROP
, mas funciona como:
Largar até atingir a taxa, então, quando você passar o limite de taxa não apenas para DROP
não mais, então ele continua para baixo - isso não é o que eu quero.
Existe uma maneira de escrever o que eu procuro?
Algo como: iptables -A INPUT -p tcp --syn ! -m limit --limit 1/s -j DROP
(preste atenção no !
)
Uma maneira simples pode ser usar o módulo hashlimit
em vez disso, se você o tiver.
iptables -A INPUT -p tcp --syn -m hashlimit --hashlimit-name mylimit --hashlimit-above 1/s -j DROP
É um pouco menos eficiente que o módulo limit
de acordo com man iptables-extensions
no meu Fedora 23.
Tags networking iptables firewall linux