NetworkManager启动脚本

/etc/NetworkManager/dispatcher.d/01ifupdown某处:

 case "$2" in up) export MODE="start" export PHASE="up" if [ -d /var/run/network/ ] ; then tmpfile=`mktemp -t` if [ -e /var/run/network/ifstate ] ; then cat /var/run/network/ifstate | grep -v ^$IFACE= > $tmpfile || true fi echo $IFACE=$IFACE >> $tmpfile mv $tmpfile /var/run/network/ifstate fi exec run-parts /etc/network/if-up.d exec /etc/iptables.rules ;; 

我运行iptables.rules脚本,它是包含如下所示的shell脚本:

 #!/bin/sh ... echo "restoring iptables..." /sbin/iptables-restore -v <<-EOF; *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i $EXTIF -p ICMP -s $UNIVERSE -d $EXTIP -j ACCEPT COMMIT EOF 

如果我从shell运行这个脚本,那么我可以看到添加的规则。 但是,启动后,规则不存在。 / var / log / messages不显示任何东西,我甚至不确定脚本的回显是否应该在那里或其他地方可见。

基本上有两种方法可以用这样的脚本来configuration防火墙。

其中之一是复制/etc/init.d中的骨架脚本,并将其修改为您的需要,然后创build必要的链接(使用update-rc.d)。 这将创build一个“服务”,在运行级别更改时启动和停止,具体取决于您的设置。

这对你的机器有多好,这是另外一个问题。 NetworkManager仅在用户login时启动接口,而运行级脚本在启动时执行。 由于您的networking接口没有IP地址,直到NetworkManagerconfiguration它们,IP地址连接到本地接口的任何iptables规则可能会失败。

另一个选项是从/ etc / network / interfaces文件中启动防火墙脚本。 在那个文件中有一些节告诉操作系统如何configuration接口。 应由NetworkManagerconfiguration的每个接口都以“allow-hotplug”开头。 通常这些节只有这一行,因为一切通常都是由DHCP来处理的。 HOwever,你可以添加格式的行

 带参数的脚本 

要么

 下来脚本与参数 

当这个特定的接口boost或降低时(这实际上如果有人拉networking电缆也会发生这种情况)会执行。 这应该为你做的伎俩。 阅读接口的手册页( man interfaces )。

exec使得控制权被传递给它的参数,这样在exec run-parts /etc/network/if-up.d不会运行之后,它不会返回任何东西。

你将不得不找别的地方来运行你的iptables.rules脚本