如何永久保存 iptables 规则?

如何永久保存 iptables 规则?

我想保持一些iptables规则的持久性,所以我只是手动添加规则:

/sbin/iptables -I OUTPUT -p tcp --sport 80 -j QUEUE

我确信该命令有效,因为我可以在执行后看到它iptables -vnL。不幸的是,我发现它在大约一小时后消失而没有重新启动或重新启动,因为我稍后iptables执行后看不到它。iptables -vnL

首先,我确信没有人执行类似这样的命令iptables -F。我还在中找到一个相关行/var/log/message

Dec 18 10:10:50 zt_21_23 kernel: ip_tables: (C) 2000-2006 Netfilter Core Team

经过Google,我发现这完全是内核行为。有人说iptables会重建规则,但是没说触发条件。我查看了iptables配置文件(/etc/sysconfig/iptables-config),也没找到可以iptables重建规则的配置项。

如果我想保持其持久性,我必须使用 crontab 按照设定的时间间隔添加规则。

总结:

  1. 如何阻止 iptables 恢复我添加的规则?
  2. 何时iptables重建其规则,触发条件是什么?
  3. iptables 重建时会重新加载哪些规则以及这些规则保存在哪里?

PS. 修改/etc/sysconfig/iptables,或者使用iptables-saveiptables-restore都可以,但是规则仍然会在一小时左右后消失。

我正在使用 Linux(2.6.18-308.24.1.el5 x86_64)。

答案1

某些东西或某些人正在删除您的规则或重新启动 iptables 服务。内核不会自动执行此操作。要阻止它,您首先需要弄清楚是什么在做这件事。我首先要检查是否有东西正在重新启动 iptables 服务。要弄清楚这一点,请将以下内容添加到 /etc/init.d/iptables:

date >> /tmp/iptables-service.log
ps -f $PPID >> /tmp/iptables-service.log

然后,在您的规则“消失”后检查/tmp/iptables-service.log文件以查看谁/什么运行了 iptables 服务脚本。

如果您没有看到/tmp/iptables-service.log文件,则表示有程序/sbin/iptables直接运行了该命令。要查找正在运行此命令的程序,请将其重命名/sbin/iptables/sbin/iptables.real,然后创建以下脚本并将其另存为/sbin/iptables

#!/bin/bash
date >> /tmp/iptables-cmd.log
ps -f $PPID >> /tmp/iptables-cmd.log
/sbin/iptables $*

不要忘记将脚本设置为可执行文件:chmod a+x /sbin/iptables。另请注意,您的实际 iptables 命令可能实际上类似于,/sbin/iptables-multi-1.4.7具体取决于您的alternatives配置方式。

然后像以前一样,查看/tmp/iptables-cmd.log文件以查看谁/什么正在运行该命令。一旦您知道原因,您就应该能够阻止它。

相关内容