在/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脚本