CentOS 6.2 重启后 Iptables 不保留

CentOS 6.2 重启后 Iptables 不保留

我尝试向 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

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

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

答案1

如果重新启动后看不到更改iptables -L,则建议:

  • 规则未保存

    • 您建议它们是,但同时说“完成的时间戳” - 复数。这可能意味着您在同一个文件中拥有多个规则副本,并且只应用了第一组。
      • 将 iptables-save 的输出重定向到上述文件(不要附加):
        iptables-保存 > /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 开启

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

service iptables restart


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

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

答案2

您确定 iptables-save“成功运行”了吗?它所做的只是将当前规则集保存文件输出到文本。您必须将其指向 /etc/sysconfig/iptables 才能使其工作。

iptables-save > /etc/sysconfig/iptables

一般来说,如果您看到 iptables-save 的任何输出,它只会将输出吐到您的显示器上,这对您没有任何好处。

答案3

我认为最好的解决方案是:首先输入以下命令来安装 iptables-services

yum install iptables-services

然后输入以下命令保存 iptable 规则

service iptables save

相关内容