OpenWRT:iptables 规则会自动删除

kai*_*aio 3 linux iptables

在我的 OpenWRT 实例中,我在 Input filter table 中添加了 iptables 规则,但问题是当我打开我的系统时我发现规则被删除了。我该怎么做才能使规则不会自动删除。

小智 7

开放式WRT

有几种方法可以在 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
Run Code Online (Sandbox Code Playgroud)

测试 /etc/firewall.user

编辑/etc/firewall.user文件后,您可能想要测试它。这是因为如果您在启动时执行脚本,您可能会看到任何错误。要测试脚本:

  • 首先,删除受脚本影响的所有规则。Aiptables -F会起作用,但可能会删除您不需要测试的规则。
  • 接下来,运行bash /etc/firewall.user。您想查看脚本中是否有任何错误。如果你收到任何消息,你可能有一个错字。
  • 接下来,运行iptables -L并确保您要添加的规则已正确添加。
  • 最后,重启设备。此时,您应该会像上次一样添加规则。

iptables-saveiptables-restore

OpenWRT(以及其他发行版),有一个iptables-save命令。通过运行iptables-save > myrules,您将拥有一个文件,其中包含恢复 iptables 规则所需的所有内容。

iptables-restore < myrules 将读取 iptables 规则文件并应用它们。

所以你需要创建一个myrules文件,然后iptables-restore < myrules在启动时运行。您可以通过编辑/etc/rc.local文件在启动时执行。

有关详细信息,iptables-saveiptables-restore可以发现在这里

使用 OpenWRTs 防火墙配置语法

/etc/config/firewall文件也可以编辑。防火墙“提供了一个从 iptables 系统中抽象出来的配置接口,以提供适合大多数常规用途的简化配置模型,同时使用户能够在需要时自行提供所需的 iptables 规则。”

更多信息可以在这里找到

其他发行版

Debian 或 Ubuntu

如果你运行的是 Debian 或 Ubuntu,你可以试试这个iptables-persistent包。

sudo apt-get install iptables-persistent
Run Code Online (Sandbox Code Playgroud)

以上将安装服务。然后它将您的规则保存到/etc/iptables/rules.v4/etc/iptables/rules.v6

你可以得到更多信息的Ubuntu 12.04在这里的,Ubuntu 14.04在这里

CentOS

如果您运行的是 CentOS,您可以通过运行以下命令来保存规则:

/sbin/service iptables save 
Run Code Online (Sandbox Code Playgroud)

这会将 iptables 的内容保存到/etc/sysconfig/iptables. 之前的内容/etc/sysconfig/iptables将被保存到/etc/sysconfig/iptables.save.

您可以在此处获取更多信息。