我正在尝试使用 iptables 编写自适应防火墙,但不清楚最近的模块是如何工作的。例如,参见http://blog.zioup.org/2008/iptables_recent/
我的 iptables 的片段:
...input stuff, established, etc...
-A INPUT -m conntrack --ctstate NEW -j limiter
... more input stuff...
# very end of chain, nothing matches. Likely unauthorized port
-A INPUT -m conntrack --ctstate NEW -m recent --name PORTSCAN --set
# limiter table
-A limiter -m recent --update --name PORTSCAN
-A limiter -m recent --rcheck --name PORTSCAN --hitcount 10 --seconds 300 -j LOG
这个设置有效。观察 /proc/net/xt_recent/PORTSCAN,在关闭的端口上运行 nmap 添加我的 IP,然后尝试连接到端口 80(打开)更新列表。此外,如果我仅连接到开放端口,则不会将我添加到列表中。
我的问题是,当我尝试将限制器表中的两行合并为一行时,它不再起作用。
#-A limiter -m recent --update --name PORTSCAN
#-A limiter -m recent --rcheck --name PORTSCAN --hitcount 10 --seconds 300 -j LOG
-A limiter -m recent --update --name PORTSCAN --hitcount 10 --seconds 300 -j LOG
在关闭端口之后扫描开放端口不会更新列表(尽管如果超出 10 个数据包/300 秒的限制,则会记录下来)。
我的理解是更新行将等同于其他两条。为什么不?