Debian'忽略'/etc/network/if-pre-up.d/iptables


12

我希望我的iptables规则在启动时自动加载。根据Debian上的Wiki,这可以通过在/etc/network/if-pre-up.d/中放置一个名为iptables的脚本来完成。

cat /etc/network/if-pre-up.d/iptables 
#!/bin/sh
/sbin/iptables-restore < /etc/firewall/iptables.rules
/sbin/ip6tables-restore < /etc/firewall/ip6tables.rules

该脚本有效:如果我以root用户身份运行,则应用防火墙规则。但是在重新启动时,没有防火墙规则。我究竟做错了什么?

根据要求:/ etc / network / interfaces(我没有触摸此文件)

user@DebianVPS:~$ cat /etc/network/interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

您如何配置接口?您可以添加/ etc / network / interfaces文件吗?
巴林迪尔

请注意,/etc/network/if-pre-up.d/它在Ubuntu 18.04中不再起作用,请参阅serverfault.com/questions/914493/…–
BurninLeo

Answers:


6

使用该iptables-persistent程序包执行此任务。

定义你的规则/etc/iptables/rules.4/etc/iptables/rules.6不要忘记激活服务(使用update-rc.dchkconfig或者你最喜欢的工具。


在安装软件包时,debconf会询问您是否要保存当前规则。因此,如果您已经定义了规则,则只需安装该软件包。如果您以后想要更改它们,只需dpkg-reconfigure iptables-persistent
Braiam '16

10

此问题可能与脚本的权限位有关。该命令的输出是什么?它包括您的文件吗?

run-parts --test /etc/network/if-pre-up.d

运行部件--test /etc/network/if-pre-up.d给出了/etc/network/if-pre-up.d/iptables,这对我来说似乎是正确的输出?
Cheiron

1
好的,因此,您可能应该检查脚本何时运行。添加这样的第一行(date; set; echo) >> /tmp/iptables-cmd.log,以便在调用时看到。我也总是打印环境,以检查在那里传递的任何参数。您可能决定仅在最后一个eth *接口启动后才运行iptables,而不是在每次添加接口时都运行它。
eppesuig

3
现在您已经发布了您的文章,interfaces我看到您不是在使用ifupdown,而是在使用网络管理器。这就是为什么不调用您的脚本的原因。请检查该文档:ubuntuforums.org/showthread.php?t=1084308
eppesuig 2013年

嗯,这解释了很多。我认为现在我只是回答dawud的问题,这似乎无论哪种方式都有效。
Cheiron

3
run-parts对脚本的名称有些挑剔,在我的情况下,文件名中有一个点使脚本在启动时被忽略。
alexm

0

为什么不这样做简单的方法?

1-创建您的iptables规则

2-运行“ sudo apt-get install iptables-persistent”,它将询问您是否要保存规则并在引导后还原它们。

3-你做完了


1
接受的答案的副本
Cheiron
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.