在我的 OpenWRT 实例中,我在输入过滤器表中添加了 iptables 规则,但问题是当我打开系统时,我发现规则已被删除。我该怎么做才能让规则不会自动删除。
答案1
OpenWRT
有几种方法可以在 OpenWRT 中编辑 iptables。
直接使用 iptables
OpenWRT 将在启动时运行 的内容/etc/firewall.user
。这是一个 shell 脚本,因此它看起来像这样:
root@OpenWrt:/etc# cat firewall.user
# This file is interpreted as shell script.
# Put your custom iptables rules here, they will
# be executed with each firewall (re-)start.
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.1.1.1:2222
iptables -A FORWARD -p tcp -d 10.1.1.1 --dport 2222 -j ACCEPT
测试/etc/firewall.user
编辑/etc/firewall.user
文件后,您可能想要测试它。这是因为如果您在启动时执行脚本,您可能会看到任何错误。要测试脚本:
- 首先,删除受脚本影响的所有规则。A
iptables -F
可以工作,但可能会删除您不需要测试的规则。 - 接下来,运行
bash /etc/firewall.user
。您想查看脚本中是否有任何错误。如果您收到任何消息,则可能是输入错误。 - 接下来,运行
iptables -L
并确保您想要添加的规则已正确添加。 - 最后,重启设备。此时,规则应该会像上次一样添加。
iptables-save
和iptables-restore
OpenWRT(以及其他发行版)有一个iptables-save
命令。通过运行iptables-save > myrules
,您将获得一个文件,其中包含恢复 iptables 规则所需的所有内容。
iptables-restore < myrules
将读取 iptables 规则文件并应用它们。
因此,您需要创建一个myrules
文件,然后iptables-restore < myrules
在启动时运行。您可以通过编辑该/etc/rc.local
文件在启动时执行。
更多信息iptables-save
请iptables-restore
查阅这里。
使用 OpenWRTs 防火墙配置语法
该/etc/config/firewall
文件也可以编辑。防火墙“提供了一个从 iptables 系统中抽象出来的配置接口,以提供适合大多数常规用途的简化配置模型,同时允许用户在需要时自行提供所需的 iptables 规则。”
可以找到更多信息这里
其他发行版
Debian 或 Ubuntu
如果您正在运行 Debian 或 Ubuntu,您可以尝试该iptables-persistent
软件包。
sudo apt-get install iptables-persistent
以上操作将安装该服务。然后它会将您的规则保存到/etc/iptables/rules.v4
和/etc/iptables/rules.v6
。
您可以获取有关 Ubuntu 12.04 的更多信息这里,Ubuntu 14.04这里。
CentOS
如果您运行的是 CentOS,则可以通过运行以下命令保存规则:
/sbin/service iptables save
这会将 iptables 的内容保存到/etc/sysconfig/iptables
。 之前的 内容/etc/sysconfig/iptables
将保存到/etc/sysconfig/iptables.save
。
您可以获取更多信息这里。
答案2
您可以编写一个包含所有 iptables 命令的 shell 脚本,然后在 /etc/rc.local 中添加一行,以便在系统启动时自动运行该 shell 脚本。请参阅http://bash.cyberciti.biz/firewall/linux-iptables-firewall-shell-script-for-standalone-server/以获得关于如何执行此操作的良好教程。