我正在从 ufw 迁移到 iptables。
ufw 中有一个默认的“限制”规则,如果某个 IP 地址在 30 秒内发起 6 个以上连接,该规则就会生效 ( sudo ufw limit ssh
)。我对 SSH 流量(端口 22)使用该限制规则。
我在 iptables 中读过很多不同的方法来做到这一点,这真是令人困惑。我不确定是否使用connlimit
或limit
或其他一些模块。
将这条规则 1:1 映射到 iptables 的最简单方法是什么?
答案1
ufw
操作 iptables,所以既然你从 ufw 转移过来,我想你可以捕获你的 iptables 并看看 ufw 在那里做了什么。
答案2
使用recent
扩展
根据@Tomasz的想法,我在ufw中创建了规则并在iptables中检查了结果。似乎 ufw 使用recent
扩展名:
:LOG_REJECT - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 -j LOG_REJECT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A LOG_REJECT -m limit --limit 3/min -j LOG --log-prefix "[LIMITED SSH]"
-A LOG_REJECT -j REJECT --reject-with icmp-port-unreachable
使用limit
扩展
哪个稍微整洁/简单:
:LOG_REJECT - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 12/minute -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j LOG_REJECT
-A LOG_REJECT -m limit --limit 3/minute -j LOG --log-prefix "[LIMITED SSH]" --log-level 7
-A LOG_REJECT -j REJECT --reject-with icmp-port-unreachable
(尽管我不确定icmp-port-unreachable
在这种情况下是否是正确的拒绝消息。)
使用connlimit
扩展
...也许其他人可以添加这一点。 :)