我有一个 LAN 配置,其中在网关上应用了 iptables 伪装规则,以启用 LAN 中的计算机访问互联网。它工作正常,但是即使在删除伪装规则后,现有连接仍然存在。例如:ping 8.8.8.8
即使在删除伪装规则后,LAN 中的计算机上仍会继续。再次 ping 时不起作用。因此,删除伪装规则后,现有连接不会被终止。我添加的规则是:
iptables -A POSTROUTING -o eth0 -j MASQUERADE
任何修改此规则/其他解决方案以终止现有连接的建议。 ?
答案1
只要 conntrack 条目存在(icmp (ping) 超时 30),nat 表就不再使用。它只是被 conntrack 条目短路了。
您可以使用以下命令实时检查此行为conntrack -E
(如果没有该命令,请安装 conntrack 软件包)。每一条[NEW]
记录都意味着一个新的流出现并且nat表被读取一次。然后就不再用了。
要删除剩余的条目,请使用conntrack -D
[...] 。检查手册。例如,在删除 MASQUERADE 规则后,同时对 8.8.8.8 的 ping 操作仍然有效,请执行以下操作:
conntrack -D --orig-dst 8.8.8.8
应该会破坏这个 ping。请注意,您的内部 IP 将泄漏到互联网(直到它被不喜欢互联网上不可路由源 IP 的路由器阻止)。
在不删除 MASQUERADE 规则的情况下终止连接的其他方法:
请注意,NAT 不适用于防火墙。使用 NAT 通常提供像防火墙一样的保护只是一个副作用。您应该使用过滤表来阻止流量。
在 FORWARD 链的早期,如果存在,则在通常-m conntrack --state ESTABLISHED -j ACCEPT
放置(跳转到)称为黑名单的新链之前。在此链中,只需插入与您要终止的当前连接相匹配的任何规则,无论是特定的源 ip、目标 ip、端口……您还可以使用该set
模块和ipset
命令。请参阅中的示例man iptables-extensions
:iptables -A FORWARD -m set --match-set test src,dst
只需将其放入黑名单链中并添加-j DROP
.