使用 iptables-restore 恢复规则忽略错误

使用 iptables-restore 恢复规则忽略错误

我想知道是否可以忽略恢复过程中的错误。

我的规则中有很多行,例如:

-A mychain -s somehost.com -j DROP

我的规则来自动态列表,如果 somehost.com 暂时离线、不可路由或类似的情况,iptables-restore 可能会拒绝恢复规则并抛出如下错误:

iptables-restore v1.6.0: host/network 'somehost.com' not found
Error occurred at line: 342
Try 'iptables-restore -h' or 'iptables-restore --help' for more information.

好吧,我希望如果无法访问主机,iptables则可以忽略该行。somehost.com

可以添加一些标志来完成此操作iptables-restore吗?

答案1

可以在 iptables 规则中使用 DNS 名称,但是这不是最佳实践出于更多原因。主要原因是 iptables 在规则加载期间执行一次解析。将来 DNS 名称可能会更改,而您的主机将不知道。

正如你所知,iptables 只需要DNS 名称解析成功。因此,如果 DNS 名称不存在,规则加载将以错误结束。

您可以创建脚本并检查其中的名称解析:

#!/bin/bash

host_check=$( dig -t A somehost.com +short 2>/dev/null | wc -l )

if (( $host_check > 0 ))
        then sed -i '/.*somehost\.com/s/^#//' file
        else sed -i 's/.*somehost\.com/#&/' file
fi

该脚本检查名称解析。如果名称已解析(输出将是一行或多行),则脚本删除每一行中具有特定 DNS 名称的注释。如果不是 - scipt 将注释添加到包含 DNS 名称的每一行。

file- 这是来自iptables-save > file命令的iptables 脚本

检查之后,您可以使用以下命令加载规则iptables-restore < file


我强烈建议不要使用这种方法。您需要找到一种方法来拒绝 iptables 规则中的 DNS 名称。

相关内容