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