Назад | Перейти на главную страницу

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, который представляет собой сценарий оболочки, содержащий что-то вроде этого:

#!/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).