我想根据源或目标 IP 地址以自动方式删除一些 NAT POSTROUTING 规则。
我知道源 IP 和目标 IP,但我不一定知道哪些策略已经存在。
例如,我可能有这个:
-A POSTROUTING -s 10.10.10.10/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 1.2.3.4
-A POSTROUTING -s 10.10.10.10/32 -p tcp -m tcp --dport 443 -j SNAT --to-source 1.2.3.4
-A POSTROUTING -s 10.10.10.10/32 -j ACCEPT
或者我可能只有这个:
-A POSTROUTING -s 10.10.10.10/32 -j SNAT --to-source 1.2.3.4
我想从旧计算机取消分配该 NAT 地址并将其分配给新计算机。这都是自动化的,所以我无法手动查找。
删除该 IP 的旧策略的最佳方法是什么?我可以使用 list + grep 命令吗?我通常在 Windows 世界中闲逛,所以我不确定在这里处理这个问题的最佳方法。
您可以通过精确指定删除规则并使用
-D
(--delete
) 而不是来匹配删除规则-A
。例如:为了编写这个脚本,匹配一个特定的 IP 地址,并且不因竞争条件而丢失任何规则,让我们尝试这样的事情。这将删除 nat 表中包含给定 IP 地址的所有规则:
对此的一些注意事项:我们用于
grep -w
确保 IP 地址完全匹配,例如,以25
不匹配结尾的给定地址250
。从-A
to的转换-D
是sed
在循环中完成的。我们使用xargs
将每个规则扩展为参数。iptables -t nat -L POSTROUTING -n --line-numbers | grep -w 1.2.3.4 | awk '{print $1}'
这将 grep 您想要的 IP 并获取防火墙规则的行号。然后使用
iptables -t nat -D POSTROUTING 1
删除规则 1 或您想要的任何数字。