我尝试向 iptables 添加一些规则,但它们似乎没有保存。为了保存它们,我尝试运行iptables-save
和service 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
- 或者,只需将现有文件移动到其他地方,然后保存。
- 将 iptables-save 的输出重定向到上述文件(不要附加):
- 您建议它们是,但同时说“完成的时间戳” - 复数。这可能意味着您在同一个文件中拥有多个规则副本,并且只应用了第一组。
规则正在保存到错误的文件中
- 您的配置可能设置为加载与您要保存的文件不同的文件 - 确保正在加载的文件与您保存的文件匹配。
- 该文件通常是 /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