我当前有以下代码段:

# 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


评论


您忘记了“原始”:iptables -t raw -F iptables -t raw -X

–kK-Storm
15年11月12日在12:59



刷新每个表后不会有任何“剩余”规则OP不会刷新每个表。你也没有如果想全面了解,这是它的外观。您可能想要添加iptables -t“ $ table” -Z。请注意,这种方式是对表及其链列表进行硬编码。因此,我将认真考虑保存-还原解决方案。或者,您可以仅卸载iptables。

–x-yuri
19年6月29日在20:34

#2 楼

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

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


所有策略都将重置为ACCEPT,并刷新当前使用的每个表。除内置链以外的所有链将不再存在。

评论


整洁的骇客!不过,我不会依赖它,因为对保存/恢复格式的细微更改很可能会破坏它。最好坚持使用iptables工具明确提供的API IMO。

–周一星期一
2010年11月11日,下午4:44

我改变了主意:数据格式已被广泛使用,因此不太可能再改变。 +1。

–周一星期一
2010年11月11日,下午4:54

+1,有趣的骇客

–山姆·哈利克(Sam Halicke)
2010年11月11日,下午5:55

这设法摆脱了剩余的UFW链,这是公认的答案没有做到的事情。

–l0b0
19年6月20日在11:06

这是次要的细节,但您可能希望将第一张打印纸$ 1替换为打印纸$ 0以保持一致:)

–x-yuri
19年6月28日在15:40

#3 楼

每当我需要禁用防火墙时,都是这样的:


iptables-save > iptables.bak

service iptables stop(我在fedora上)


#4 楼

您只需从内核中卸载iptables'模块即可:

modprobe -r iptable_raw iptable_mangle iptable_security iptable_nat iptable_filter


UPD不幸的是,太好了,难以置信。只要表中存在规则或用户定义的链,则相应模块的引用计数为1,并且modprobe -r失败。您可能会删除规则和用户定义的链,例如:

echo $'*raw\nCOMMIT\n*mangle\nCOMMIT\n*security\nCOMMIT\n*nat\nCOMMIT\n*filter\nCOMMIT' | iptables-restore


或:

iptables-save | awk '/^[*]/ { print  "\nCOMMIT" }' | iptables-restore


您可能希望以这种方式卸载模块(没有硬编码模块名称):

lsmod | egrep ^iptable_ | awk '{print }' | xargs -rd\n modprobe -r


好的一面,在此iptables-save产生漂亮的空输出之后:)

评论


那可能是这里的锤子。谢谢。

– Konrad Gajewski
19年6月29日在21:45

#5 楼

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

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


要恢复以前的配置:

iptables-restore < iptables_backup.conf


#6 楼

一个人可以用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         


评论


如果默认策略当前设置为DROP,这是一种锁定服务器的快速方法。因此,不是,这不是一个1或2的命令过程。如果尚未设置,则需要首先设置为ACCEPT。

– RyanH
18年5月17日在16:35

#7 楼

我最近不得不阻止所有连接,最终我要做的是

iptables-policy INPUT DROP
iptables-policy OUTPUT DROP
iptables-policy FORWARD DROP


为节省起见,我建议使用以下内容

Ubuntu :

/etc/init.d/iptables save
/sbin/service iptables save


RedHat / CentOS:

/etc/init.d/iptables save
/sbin/iptables-save


除了备份所有当前的ufw规则之外,Ive还使用了此规则过去

cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION> 
cp /lib/ufw/{user.rules,user6.rules} ./


我认为这可能对将来的参考很有用。以为我会分享。

#8 楼

这是我删除所有DROP规则的方法:

iptables -S |grep DROP| sed 's/-A/-D/' >rules  # -A becomes -D: delete
nano rules  # check that everything is correct
cat rules | while read line; do iptables $line; done
iptables-save


完成!

#9 楼

这对我有用(在Ubuntu 18.04上):

sudo bash -c "ufw -f reset && iptables -F && iptables -X && ufw allow 22 && ufw -f enable"


它重置(并禁用)ufw,然后重置iptables清除并删除所有链。然后,它再次启用ufw,但不允许端口22进行远程访问之前。要求用户确认的两个命令是“强制的”,确保不需要输入。我能够通过活动的SSH连接运行它。

(源)