воскресенье, 2 июня 2013 г.

Как же подгружать правила iptables через Network Manager?

Network Manager - пожалуй, самая ненавистная всеми вещь, которую я, несмотря на общественное мнение, с удовольствием использую.

Так вот, в ней есть замечательная вещь - в ответ на разные события, связанные с интерфейсами, он способен запускать скрипты, которые лежат в /etc/NetworkManage/dispatcher.d, и это можно использовать, в том числе, для подгрузки правил iptables. Самое главное, чтобы скрипт был 1) обычным файлом; 2) владельцем был root; 3) не был доступен на запись кому-то еще; 4) не был suid; 5) разрешен для исполнения владельцем (короче, права должны быть не более разрешающими, чем 755).
Все подробности о том, как этот скрипт исполняется и какие параметры получит, можно выгрести в man NetworkManager(8). Единственная печаль - он не получает никакого имени профиля настроек для интерфейса, а только его имя.
Но уже имея это, можно сунуть пару простых скриптов для настройки IPv4 или IPv6 фильтров (просто сменив iptables на ip6tables):

1:  if [ -x /usr/bin/logger ]; then  
2:      LOGGER="/usr/bin/logger -s -p daemon.info -t FirewallHandler"  
3:  else  
4:      LOGGER=echo  
5:  fi  
6:  case "$2" in  
7:      up)  
8:          if [ ! -r /etc/iptables.rules ]; then  
9:              ${LOGGER} "No iptables rules exist to restore."  
10:              return  
11:          fi  
12:          if [ ! -x /sbin/iptables-restore ]; then  
13:              ${LOGGER} "No program exists to restore iptables rules."  
14:              return  
15:          fi  
16:          ${LOGGER} "Restoring iptables rules"  
17:          /sbin/iptables-restore -c < /etc/iptables.rules  
18:          ;;  
19:      down)  
20:          if [ ! -x /sbin/iptables-save ]; then  
21:              ${LOGGER} "No program exists to save iptables rules."  
22:              return  
23:          fi  
24:          ${LOGGER} "Saving iptables rules."  
25:          /sbin/iptables-save -c > /etc/iptables.rules  
26:          ;;  
27:      *)  
28:          ;;  
29:  esac  
Скрипт нужно назвать, например, /etc/NetworkManager/dispatcher.d/01firewall и обязательно установить разрешения 0755.

Комментариев нет:

Отправить комментарий