我分别在端口8006和8007上托管特殊的HTTP和HTTPS服务。我使用iptables来“激活”服务器;即路由传入的HTTP和HTTPS端口:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007
这就像一个咒语。然而,我想创建另一个脚本,再次禁用我的服务器;例如,将iptables恢复到运行上述代码行之前的状态。然而,我很难弄清楚删除这些规则的语法。唯一有效的方法是同花:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
但这也会删除其他不需要的iptables规则。
假设要删除NAT规则,
使用下面的命令列出附加的IPtables,
# sudo iptables -L -t nat -v
Chain PREROUTING (policy ACCEPT 18 packets, 1382 bytes)
pkts bytes target prot opt in out source destination
7 420 DNAT tcp -- any any anywhere saltmaster tcp dpt:http to:172.31.5.207:80
0 0 DNAT tcp -- eth0 any anywhere anywhere tcp dpt:http to:172.31.5.207:8080
如果您想从IPtables中删除nat规则,只需执行以下命令,
# sudo iptables -F -t nat -v
Flushing chain `PREROUTING'
Flushing chain `INPUT'
Flushing chain `OUTPUT'
Flushing chain `POSTROUTING'
然后,你可以验证,
# sudo iptables -L -t nat -v
你也可以使用规则的编号(——line-numbers):
iptables -L INPUT --line-numbers
示例输出:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udp dpt:domain
2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain
3 ACCEPT udp -- anywhere anywhere udp dpt:bootps
4 ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
所以如果你想删除第二条规则:
iptables -D INPUT 2
更新
如果你使用(d)一个特定的表(例如nat),你必须把它添加到删除命令(谢谢@ThorSummoner的评论)
sudo iptables -t nat -D PREROUTING 1
对我来说最好的解决方案是这样的:
1. 添加一些注释的临时规则:
comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION
2. 当添加了规则并且你希望删除它(或带有此注释的所有内容)时,执行以下操作:
iptables-save | grep -v "${comment}" | iptables-restore
因此,您将100%删除与$注释匹配的所有规则,并保持其他行不变。这个解决方案在过去的2个月里工作,每天大约改变100个规则-没有问题。希望,有帮助