我不了解 conntrack 模块的一些基本概念。
首先,我确定它已在我的系统(Ubuntu 18.04)中启用,modinfo
显示有关 nf_conntrack 的信息,并且/proc/modules
文件告诉 nf_conntrack 是“实时的”。
其次,我有以下测试设置:
机器 A (192.168.1.2) <-----> 路由器机器 (192.168.1.1 & 192.168.2.1) <----> 机器 B (192.168.2.2)
在路由器机器上,我有以下 iptables 规则:
iptables -t filter -A FORWARD -m set --match-set BlackListPort dst -j DROP
BlackListPort 是一个 ipset 表。
现在我建立了从机器 A (1.2) 到机器 B (2.2) 的 SSH 连接。在我确认它有效后,我将端口 22(SSH 默认)添加到 BlackListPort 表。
SSH 连接冻结/挂起,直到我从该 ipset 表中删除端口 22。
现在的问题是:由于我的系统中存在 conntrack,为什么 SSH 阻止成功?SSH 连接是在端口 22 添加到 ipset 之前建立的,因此 conntrack 应该跳过所有数据包,允许 SSH 工作。