Debian феншуй для авто запуска правил iptables и не толькоПодписка на Комментарии к "Debian феншуй для авто запуска правил iptables и не только"

Аватар zenon

Рассказ про то, как правильно сохранять и загружать правила iptables в Debian.
Поместить запуск в rc.local это не самое правильное решение, более правильно - это сохранить правила iptables перед выключением, потом перед поднятием сетевого интерфейса загрузить правила, объясню как это сделать:

Для сохранения правил iptables существует команда:

# iptables-save > /etc/ip_rulles.lst

После этого правила будут сохранены в файле (имя произвольное) /etc/ip_rulles.lst
Для загрузки правил соответственно:
# iptables-restore < /etc/ip_rulles.lst

Тут мы подошли к самому интересному, то бишь феншую _:) - в файле настроек сети /etc/network/interfaces в каждый из интерфейсов можно добавлять секции которые будут выполнятся до поднятия, после поднятия, до отключения и после отключения интерфейса - секции:

pre-up
up
post-up
down
pre-down
post-down

pre-up команда
- запустить команду до поднятия интерфейса. Если команда завершается с ошибкой, тогда ifup не отмечает интерфейс как настроенный, выводит сообщение об ошибке и завершается со статусом 0.

up команда
post-up команда
- запустить команду после поднятия интерфейса. Если команда завершается с ошибкой, тогда ifup не отмечает интерфейс как настроенный (даже если он в действительности настроен), выводит сообщение об ошибке и завершается со статусом 0.

down команда
pre-down команда
- запустить команду перед отключением интерфейса. Если команда завершается с ошибкой, тогда ifdown помечает интерфейс как не настроенный (даже если на самом деле его настройки не были сброшены) и завершается со статусом 0.

post-down команда
- запустить команду после отключения интерфейса. Если команда завершается с ошибкой, ifdown помечает интерфейс как не настроенный и завершается со статусом 0.

В нашем примере сохранение/восстановление правил привяжем к интерфейсу eth0 (хотя можно и к любому другму):

auto eth0
iface eth0 inet static
   address 192.168.1.1
   netmask 255.255.255.0
   pre-up echo "1" > /proc/sys/net/ipv4/ip_forward  # Включаем форвардинг пакетов
   pre-up iptables-restore < /etc/ip_rulles.lst     # Загружаем правила
   post-down iptables-save > /etc/ip_rulles.lst     # Сохраняем правила

Теперь выполним наш скрипт и сохраним правила:

# sh /etc/firewall.sh
# iptables-save > /etc/ip_rulles.lst

Скрипт /etc/firewall.sh - должен содержать загрузку правил iptables, подробней например тут.
Теперь все правила будут выставляться автоматически.
Также если сделать restart (лучше start/stop) сети - правила сохраняться и сразу загрузятся.
Чтобы обновить можно принудительно сделать:
# /etc/init.d/networking stop
# /etc/init.d/networking start

или
# ifdown eth0
# ifup eth0

Но чем хороши эти секции? Тем что на них можно повесить исполнение любого скрипта/команды, например при поднятии ppp0 устанавливать другие маршруты, да вообще все-что угодно...
Примеры:
Запуск сетевого интерфейса eth0 с динамическим IP адресом, при условии, что файл /etc/network/local-network-ok существует. Если такой файл не существует, интерфейс eth0 не поднимется.

auto eth0
   iface eth0 inet dhcp
   pre-up [ -f /etc/network/local-network-ok ]

Настройка DSL-интерфейса dsl-provider, созданного программой pppoeconf.
auto dsl-provider
iface dsl-provider inet ppp
   pre-up /sbin/ifconfig eth0 up
   provider dsl-provider

Примеры можно посмотреть в документации /usr/share/doc/ifupdown/examples/network-interfaces
.

Похожие материалы:
Аватар Andrei

у меня в rc.d нормально исполняются. Вся фишка в том, что в правилах iptables указываю интерфейс как " ! -i (or o) lo ", т. е. любой интерфейс кроме локального. Это помогает мне не извращаться с рассовыванием скрипта в ваши pre-up
up
post-up
down
pre-down
post-down

Добавить комментарий