清除所有 iptables 规则的最佳方法

清除所有 iptables 规则的最佳方法

我目前有这个片段:

# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X

运行此命令后,是否有可能某些不受影响的规则仍然有效?

这个想法是拥有一个完全干净的 iptables 配置,可以轻松地被新的规则集替换(不用担心路由/ifconfig 的参数)。

答案1

简洁地回答你的问题,不会:刷新每个表后不会有任何“剩余”规则。但为了彻底起见,你可能还想将内置INPUTFORWARD链的策略设置为ACCEPT

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

清除 ip6tables 规则:

ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X

...这样就行了。iptables -nvL应该产生这个(或非常类似)输出:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

答案2

这将正确地将你的 iptables 系统完全重置为非常基本的状态:

iptables-save | awk '/^[*]/ { print $1 } 
                     /^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
                     /COMMIT/ { print $0; }' | iptables-restore

所有策略将重置为“接受”,并刷新当前使用的每个表。除内置链之外的所有链都将不复存在。

答案3

将配置备份到 iptables_backup.conf 并清除所有规则。

iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore

要恢复以前的配置:

iptables-restore < iptables_backup.conf

答案4

只需 1 或 2 个命令即可完成此操作:

 $ sudo iptables-save > iptables.bak
 $ sudo iptables -F

结果:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 3138 packets, 5567K bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3602 packets, 6547K bytes)
pkts bytes target     prot opt in     out     source               destination         

相关内容