LINUX.ORG.RU
ФорумAdmin

Динамические правила iptables по поднятию интерфейсов

 ,


0

1

Есть шлюз на дебиане. две сетевые - одна в локалку, вторая на провайдера + на ней подымается ррр интерфейс для доступа в интернет. Скрипт с правилами для iptables запускается из rc.local.

Бывают случаи когда ррр интерфейс не подымается вообще или тормозит (например: авария на линии и т.п.),тогда скрипт становится с ошибками,т.к. в нем есть правила с несуществующим (на момент запуска) интерфейсом ррр. Соответственно есть проблемы с правилами фаервола.

Если поднятие тормозится,то прежде чем применить правила фаерволла делаю паузу и жду пока не подымется интерфейс(ну как бы типа ничего,подождем чуток),но если он не подымается вообще? Сервак висит и ждет. Поэтому решил сделать,чтобы каждый набор правил применялся при поднятии соответствующего интерфейса в /etc/network/if-up.d

if [ "$IFACE" = eth0 ]; then
        blah-blah-blah
fi
Но что делать,если интерфейс упал и снова поднялся, правила будут применены еще раз? Поэтому их сначала нужно удалить,но как удалить именно те правила которые относятся к конкретному интерфейсу? Думаю надо использовать пользовательские цепочки, тогда их можно будет целиком очищать, добавлять, но не понимаю как их правильно создавать и перенаправлять в них пакеты из стандартных.

Нужно, например, для ррр сделать две-три цепочки типа ppp_input, ppp_output, ppp_forward? А как в них перенаправлять пакеты?

Может я чешу левое ухо правой рукой,но пока ничего другого не придумал. Может кто подскажет?

Дай ссылку на гайд, по которому ты делал.

gasinvein ★★★ ()

...тогда скрипт становится с ошибками,т.к. в нем есть правила с несуществующим (на момент запуска) интерфейсом ррр.

Что-то не договариваете. iptables глубоко фиолетово наличие интерфейса.

Думаю надо использовать пользовательские цепочки, тогда их можно будет целиком очищать, добавлять, но не понимаю как их правильно создавать и перенаправлять в них пакеты из стандартных.

Вообще все описано в iptables tutorial. Например:

iptables -N my_input_chain
iptables -A INPUT -i ppp0 -j my_input_chain
iptables -A my_input_chain ....

anc ★★★★★ ()

Думаю надо использовать пользовательские цепочки,

Это все равно не помогло бы, т.к. цепочка не удалится, пока правила в ней не удалишь. А так выше уже написали, что iptables пофиг на наличие интерфейса.

ving2 ()
Ответ на: комментарий от anc

Что-то не договариваете. iptables глубоко фиолетово наличие интерфейса.

Получается что да:)

проблема не в интерфейсе, а получение IP и последующее его использование в правиле, а раз не поднялся интерфейс, соответственно нет IP и соответственно переменная пустая и в итоге имеем неверно сформированное правило.

В принципе если переписать правила чтобы в них не фигурировали адреса, а были интерфейсы, то все должно быть ОК? Ведь безразлично что будет интерфейс или адрес? Когда это может иметь значение?

Если на момент выполнения скрипта интерфейса нет, то когда он поднимется правило будет работать?

Если так то необходимость в динамических извращениях отпадает.

И еще вопросик, если у меня по умолчанию правила DROP, то по идее все правила которые тоже DROP, не имеют смысла и их можно убрать из скрипта?

LamerLinux ()
Ответ на: комментарий от LamerLinux

проблема не в интерфейсе, а получение IP и последующее его использование в правиле

Тогда для pppd самое простое это использовать up/down скрипты. По умолчанию скорее всего /etc/ppp/ip-up /etc/ppp/ip-down, но может и нет, где-то слышал что в некоторых дистрах оно не так. Передаваемые параметры описаны в мане (interface-name, tty-device, speed, local-IP-address, remote-IP-address, ipparam ).

В принципе если переписать правила чтобы в них не фигурировали адреса, а были интерфейсы, то все должно быть ОК? Ведь безразлично что будет интерфейс или адрес?

Нет, не безразлично. Но может быть, что в частном случае результат выполнения правила будет одинаков.
Попробую включить телепатию и предположить что в вашем случае речь идет про вариант простого fw а-ля «что бы к нам никто не лазил». Тогда скорее всего вам достаточно интерфейсов.

Если на момент выполнения скрипта интерфейса нет, то когда он поднимется правило будет работать?

Да. По простому, интерфейс это не более чем одно из условий, соответственно если пакет прилетел/улетает не с интерфейса указанного в условии то и правило не будет выполнено.

И еще вопросик, если у меня по умолчанию правила DROP,

надеюсь вы про полиси.

то по идее все правила которые тоже DROP, не имеют смысла и их можно убрать из скрипта?

Если рассматривать сферически, то скорее не имеют смысла только последние в цепочках без условий с -j DROP. А вообще я не настолько телепат (тонко намекаю что ваших правил мы не знаем).

PS Писать правила fw не зная что реально они делают, не самая лучшая затея. Выше я вас уже отправлял к iptables tutorial.

anc ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.