iptables:使用“conntrack”和“最近”模块来阻止未经请求的数据包

iptables:使用“conntrack”和“最近”模块来阻止未经请求的数据包

当我仅允许数据包以及RELATED其他所有内容时,我的防火墙规则运行良好,没有任何问题:ESTABLISHEDDROP

### VARIANT A
-A INPUT -i wlan0 -m conntrack   --ctstate RELATED,ESTABLISHED       -j ACCEPT
-A INPUT -i wlan0                                                    -j   DROP

然而,我想更进一步,将所有IP向我发送“未经请求”的数据包列入黑名单。我修改了我的规则:

### VARIANT B
-A INPUT -i wlan0 -m recent --name PORTSCAN --update --seconds 3600  -j   DROP
-A INPUT -i wlan0 -m conntrack   --ctstate RELATED,ESTABLISHED       -j ACCEPT
-A INPUT -i wlan0 -m recent --name PORTSCAN --set                    -j   DROP

规则的运作方式如下:

Rule 1: checks whether IP address is already blacklisted and drops it if yes
Rule 2: allows RELATED,ESTABLISHED packets
Rule 3: all other packets which fail RELATED,ESTABLISHED test are blacklisted

这些规则在 99.9% 的情况下都能按预期工作,但只有少数网站出现问题。 Stack Exchange 网站就是这样的例子之一。看起来 stackexchange.com 正在向我发送数据包,但conntrack模块未将其识别为相关或已建立。因此,这些数据包不会通过rule 2,并被列入黑名单rule 3

这种情况通常发生在我处于编辑模式时(即提出问题或编辑现有问题)。

在这种情况下,我必须刷新黑名单:

echo / >/proc/net/xt_recent/PORTSCAN

然后一切又恢复正常了。

这个问题可能有两种解释:

a) the conntrack module is deficient, in that it does not recognize
   legitimate packets as being RELATED/ESTABLISHED
b) SE websites are indeed sending unsolicited packets

我相信这b更有可能是正确的,因为以下推理:

我的 iptables 规则的变体 A 会丢弃所有它无法识别的数据包RELATED/ESTABLISHED。由于一切都运行良好,因此我的会话不需要这些数据包。这些确实是不请自来的数据包,一开始就不应该发送给我。

我的 iptables 规则的变体 B 更进了一步,它“惩罚”违规行为IP并将其添加到黑名单中。

问:如何修改我的 iptables 规则,使其也适用于 SE 站点?

我也很感谢有关我对问题的分析的评论

这是我在 meta.unix.stackexchange.com 上的相关帖子: stackexchange.com 向我发送未经请求的数据包(因此被防火墙阻止)

相关内容