Сохранить правила 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 не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2019

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!