我想使用 添加一条规则iptables
,但前提是该规则尚不存在。
有一个选项-C
允许我们检查规则规范是否已存在。该选项的描述见此问答也一样。
从那次问答开始,这个具体的答案说明了如何使用-D
(delete) 选项,如果存在则删除规则,如果不存在则退出并返回代码 1。(-C
如果规则不存在则执行此操作,因此不会出现问题)。
对我来说,这样做更方便
ip6tables -D OUTPUT -p icmpv6 --icmpv6-type destination-unreachable -j DROP
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type destination-unreachable -j DROP
而不是检查是否存在,如果存在则删除它,然后才添加新规则。
然而,评论中有人提到它会在防火墙上打开一个漏洞,但我不知道是怎么回事。
底线:为什么我不应该盲目地删除和附加规则,而不是在删除和添加之前进行检查?
答案1
好吧,这种方法(删除,然后添加)的问题在于这两个操作不会同时发生,它们之间需要一些时间,在此期间,您的系统会暴露于您的 DROP 规则所阻止的不需要的流量。对于您的 ipv6 不可达情况,这似乎无害,但请考虑您受到的流量冲击会导致某些应用程序或设备无响应 - 从我的经验来看,有时甚至一瞬间丢弃阻止它的防火墙规则也可能会造成一些长期后果。
答案2
事实上,删除阻止规则并为不必要的流量打开某些通道可能比删除实际上允许您进入的规则问题要小。在这种情况下,您可能没有机会恢复它。