В /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, который представляет собой сценарий оболочки, содержащий что-то вроде этого:
#!/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
Если я запустил этот скрипт из оболочки, я увижу, что правило добавлено. Однако после запуска этого правила нет. / var / log / messages ничего не показывает, я даже не уверен, должно ли быть видно эхо из скрипта там или где-то еще.
exec
вызывает передачу управления этому параметру таким образом, что он не возвращает ничего после exec run-parts /etc/network/if-up.d
запускаться не будет.
Вам нужно будет найти другое место для запуска вашего скрипта iptables.rules из
Есть два основных способа настроить брандмауэр с помощью такого сценария.
Один из них - скопировать скелетный скрипт в /etc/init.d и изменить его в соответствии с вашими потребностями, а затем создать необходимые ссылки (с помощью update-rc.d). Это создает «службу», которая запускается и останавливается при изменении уровней запуска в зависимости от ваших настроек.
Насколько хорошо это будет работать с вашей машиной - другой вопрос. NetworkManager запускает интерфейсы только тогда, когда пользователь входит в систему, тогда как сценарии уровня выполнения выполняются во время загрузки. Поскольку ваши сетевые интерфейсы не имеют IP-адресов, пока NetworkManager не настроит их, любые правила iptables с IP-адресами, подключенными к локальным интерфейсам, вероятно, не будут работать.
Другой вариант - запустить сценарии брандмауэра из файла / etc / network / interfaces. В этом файле есть строфы, которые сообщают ОС, как настраивать интерфейсы. Каждый интерфейс, который должен быть настроен NetworkManager, начинается с «allow-hotplug». Обычно в этих строфах есть только эта строка, так как все остальное обычно обрабатывается DHCP. ОДНАКО вы можете добавлять строки в формате
up script-with-parameters
или
down script-with-parameters
которые выполняются, когда этот конкретный интерфейс поднимается или отключается (что также происходит, если кто-то тянет за сетевой кабель). Это должно помочь вам. Прочтите страницу руководства по интерфейсам (man interfaces
).