Сохранение правил iptables в Debian

Рассказ про то, как правильно сохранять и загружать правила 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 .

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *