我知道我可以使用iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
来限制tcp syn
数据包的接受。
因此,如果tcp syn
数据包未超过此速率,它们将跳转到ACCEPT
。
有没有办法把这条规则写成相反的方向?
我想编写如下规则:
If ok (doesn't cross the rate), continue down. Else drop
<-- (1)
???
iptables -A INPUT -j OTHER_CHAIN_STUFF
有办法写吗(1)
?
我尝试过,iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j DROP
但它的工作原理是:
下降直到达到速率,然后,当您超过速率限制时,不要再继续DROP
下降,所以它会继续下降 - 这不是我想要的。
有没有办法写出我想要的内容?
类似于:(iptables -A INPUT -p tcp --syn ! -m limit --limit 1/s -j DROP
注意!
)
答案1
一个简单的方法可能是使用该hashlimit
模块(如果有)。
iptables -A INPUT -p tcp --syn -m hashlimit --hashlimit-name mylimit --hashlimit-above 1/s -j DROP
limit
它比man iptables-extensions
我的 Fedora 23 上的模块效率稍低。
答案2
我刚刚意识到一个简单的解决方案:
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
- 继续做我想做的事