OpenWRT:iptables规则将自动删除


3

在我的OpenWRT实例中,我在“输入”过滤器表中添加了iptables规则,但是问题是当我打开系统电源时,发现规则已删除。我应该怎么做才能使规则不会自动删除。


1
您正在使用什么发行版?
amccormack

为什么要添加ifconfig输出?这个问题不是必须的。
amccormack

请与系统管理员联系,并请他们帮助您,而不是两次询问相同的问题。如果您不知道谁在修改iptables文件,我们将无法为您提供真正的帮助。您也可以尝试使用Google

@amccormack我将iptables-save和iptables-store软件包添加到openwrt固件中,如何帮助我将规则添加到表中。谢谢

Answers:


6

的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-saveiptables-restore

OpenWRT(以及其他发行版),都有一个iptables-save命令。运行iptables-save > myrules,您将获得一个文件,其中包含恢复iptables规则所需的全部文件。

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

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

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

使用OpenWRT防火墙配置语法

/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

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


感谢@amccormack,但我使用disto是openwrt

谢谢amccormack我确实像您说的那样,但是当我重新启动时,我发现规则已删除。我用eth0.2更改eth0。

你把规则放在那里了吗?我只是在其中放置了一些示例规则以显示它们的去向。我将添加有关测试的注释。
amccormack

@ amccormack我有一个项目,该项目的应用程序是从过滤器Web界面的表中添加规则,因此我创建了一个脚本,可让您在过滤器表中添加规则,如下所示:try:os.system(“ iptables -D INPUT -m mac-source --mac“ + mac +” j DROP“)除外,例如e:print e os.system(” iptables INPUT -m mac-source --mac“ + mac +” j DROP“)我做了不能手动添加规则。

只要您使用os.system,为什么不使用它两次。还运行一个os.system("echo iptables -D INPUT -m mac-source --mac" + mac + "j DROP") >> /etc/firewall.user。另外,请注意使用中公然的命令注入风险,请os.system确保将好字符列入白名单。
amccormack 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.