我们已经开始在我们的 RHEL 6.3 系统上遇到 iptables 问题,因为在重新启动后,当服务启动时,规则没有加载。我们得到空规则集:
[msnyder@matt-test ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
尽管我们已经定义了规则并且服务确实在运行,但还是如此。我知道这一点,因为当我运行service iptables start
它时,它会简单地返回到提示符。如果我运行service iptables restart
它实际上会停止然后重新启动服务。而且,当然,如果我运行service iptables stop
它表明 iptables 实际上正在停止。
知道我需要重新启动服务后,我这样做并且规则正确加载。重启后它们根本不会加载。除非它们在重新启动期间以不同方式加载,否则我看不出我们的规则有何错误。如果是,它们甚至不会在服务重启期间加载。
还有其他人遇到过这个吗?
编辑:规则已经保存在 /etc/sysconfig/iptables 中。它们不是从命令行即时添加的,因此service iptables save
没有必要。
我相信您将需要执行“服务 iptables 保存”,如上所述,以便在重新启动后规则到位。但我也会检查以下参数:/etc/sysconfig/iptables-config,以确保它正在保存运行配置,这样您就不会丢失在运行时插入的任何内容。
首先 iptables 应该在启动时启用 chkconfig on 但我想这已经是这种情况,因为你得到一个空表。
启动期间 iptables 未加载的一个原因可能是,您的配置中有使用主机名的规则,如果是这样,请将它们替换为 IP,然后重试。如果您在 iptables 配置中绝对需要主机名,请确保首先从您的主机启用(并提交)DNS 查询,但我不确定这是否适用于任何情况。
我们发现问题不在于 iptables 本身。我们在这些服务器上运行了 TrendMicro 的 Deep Security 代理,它正在破坏 iptables。他们已经承认了这个问题和我们的解决方法,即将 dsagent 和 iptables 启动脚本设置为相同的启动序列号 (S08),而不是让 dsagent 脚本在它默认的 iptables 之后启动。