在 CentOS 6.2 上重启后 iptables 不存在

Aar*_*ron 7 linux firewall iptables centos

我已经尝试向我的 iptables 添加一些规则,但它们似乎没有保存。为了保存它们,我尝试运行iptables-saveservice iptables save. 每次我运行这些命令中的任何一个时,它都会说它已成功保存。以下是我试图插入的规则:

iptables -A INPUT -j REJECT -p tcp --destination-port 3306
iptables -A INPUT -j REJECT -p tcp --destination-port 25
Run Code Online (Sandbox Code Playgroud)

这些规则有效并且在我输入它们后将保持原状,但是当我重新启动系统时,它们在运行时从列表中消失iptables -L并且端口再次打开(使用 nmap 检查)。

查看我的 /etc/sysconfig/iptables 文件时,规则就在那里(在底部),所有“完成”的时间戳都来自我保存似乎正确的规则时。此外,在我的 /etc/sysconfig/iptables-config 文件中,所有设置都是默认设置,并且似乎没有改变任何东西,只要从不同的位置加载 iptable 规则或其他东西。

cyb*_*x86 10

如果iptables -L重新启动后更改不可见,则表明:

  • 规则没有被保存

    • 你建议他们是,但同时说“完成的时间戳” - 复数。这可能意味着您在同一个文件中有多个规则副本,并且只应用了第一组规则。
      • 将 iptables-save 的输出重定向到上述文件(不要追加):
        iptables-save > /etc/sysconfig/iptables
      • 或者,只需将现有文件移到别处,然后保存。

  • 规则被保存到错误的文件中

    • 您的配置可能设置为加载与您保存的文件不同的文件 - 确保正在加载的文件与您保存的文件匹配。
      • 该文件通常是 /etc/sysconfig/iptables
      • 如果您查看 /etc/init.d/iptables,您应该找到以下几行,这些行决定了将加载哪个文件:
        IPTABLES=iptables
        IPTABLES_DATA=/etc/sysconfig/$IPTABLES
  • 规则有误

    • 这通常不是问题 - iptables 通常只是忽略错误的规则;并且您不是手工编写它们(您正在保存一个大概可以工作的规则集)。

  • iptables 未在启动时启动

    • chkconfig --list iptables
      检查加载了哪些运行级别 iptables。如果未在正确的运行级别中启用,请添加
      chkconfig --level 2345 iptables on

您应该能够通过重新启动 iptables(而不是重新启动机器)来测试您的设置:

service iptables restart
Run Code Online (Sandbox Code Playgroud)


标准 iptables 免责声明:以防万一出现问题......

  • 备份您现有的规则集:
    cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
  • 设置一个 cron 作业,它会在几分钟后刷新你的 iptables(当然,一旦一切正常,就删除它)。