iptables::способ "загрузки" правил

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

iptables::способ "загрузки" правил

Сообщение Voral »

Дошли руки до настройки iptables. много чего вычитал - много чего пока несовсем осознал. И вот такие вопросы:
Примеры из нета "разделились" на две группы. В одном случае для установки правил при загрузке используется скрипт помещаемый в rcX.d; в другом - прописывание в interfaces post-up pre-up iptables-restore... и pre-down iptables save.

1. Какой вариант лучше: каждый раз скриптом устанавливать/удалять файлы или save/restore и главное почему?
2. Какой вариант лучше: поместить в rcХ.d или в interfaces (и почему)?
3. Можно ли "скомбинировать" иначе - поместить в interfaces:

Код: Выделить всё

post-up my_script_fwall start
pre-down my_script_fwall stop

?
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: iptables::способ "загрузки" правил

Сообщение mandreika »

Я больше доверяю размещению в rcX
Может я ошибаюсь но скрипт в /network/interfaces будет рестартить Iptables при каждом Up/down сетевушки.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: iptables::способ "загрузки" правил

Сообщение Alex2ndr »

Voral писал(а):
24.12.2009 09:05
Дошли руки до настройки iptables. много чего вычитал - много чего пока несовсем осознал. И вот такие вопросы:
Примеры из нета "разделились" на две группы. В одном случае для установки правил при загрузке используется скрипт помещаемый в rcX.d; в другом - прописывание в interfaces post-up pre-up iptables-restore... и pre-down iptables save.

1. Какой вариант лучше: каждый раз скриптом устанавливать/удалять файлы или save/restore и главное почему?
2. Какой вариант лучше: поместить в rcХ.d или в interfaces (и почему)?
3. Можно ли "скомбинировать" иначе - поместить в interfaces:

Код: Выделить всё

post-up my_script_fwall start
pre-down my_script_fwall stop

?

Ну во первых не в rcX а в /etc/init.d/ , а потом командой update-rc.d (прочитать про нее можно в man - хорошо написано и зачетные примеры). Если нужно его отключить (т е чтоб он не стартовал при пуске системы), то можно сделать тупо так - chmod -x /etc/init.d/<имя_скрипта>

1.
а) Если у вас есть уже сделанный набор правил и вы не собираетесь его сильно менять то можно использовать save/restore. Этот способ позволяет управлять iptables в интерактивном режиме - добавил какие-то правила, они при save сохранятся, а при restore восстановятся. К тому же говорят что этот способ быстро выполняется - но я думаю что правил должно быть тысяч 10 чтобы ощутить разницу(я специально не мерил, но визуально разницы нет). Лично я использую save для просмотра сгенерившихся правил.
б) Если вы хотите пользоваться прелестями bash (переменные, циклы и тд) то используйте скрипт. Это позволяет создавать универсальные скрипты для нескольких машин/ситуаций - поменял пременные в заголовке и вперед. Также помогает укоротить записание какой-нибудь рутины(типа надо разрешить доступ по определенным ip - можно положить эти ip в файлик и циклом его перебрать - получиться гораздо лучше, чем перечислить все правила вручную). Лично я всегда использую этот вариант - люблю продвинутые скрипты.
2. Вам уже ответили - если ваши правила меняются (или должны меняться) от включения, выключения интерфейса (например при запуске ppp0 надо организовать какой-то nat для клиентов с той стороны и тд), то помещайте их в interfaces. Иначе только в /etc/init.d/ . Я комбинирую эти способы - все основные правила я помещаю в скрипт в /etc/init.d/, а правила, зависящие от интерфейсов - в interfaces.
3. Можно и так - только при подъеме/опускании интерфейса все правила будут передернуты. В принципе ничего страшного - но как-то кривовато.
Спасибо сказали:
Abigor
Сообщения: 100

Re: iptables::способ "загрузки" правил

Сообщение Abigor »

Тоже озадачился данной проблемой. Нашел данный топик, вроде все стало понятно, но до определенного времени.
Применительно к Debian, сначала читал здесь раздел 5.14.3.3 Configuring firewall rules through ifup. Затем заглянул в man interfaces, там изучил следующее
IFACE OPTIONS
The following "command" options are available for every family and method. Each of these options can be given
multiple times in a single stanza, in which case the commands are executed in the order in which they appear in the
stanza. (You can ensure a command never fails by suffixing "|| true".)

pre-up command
Run command before bringing the interface up. If this command fails then ifup aborts, refraining from
marking the interface as configured, prints an error message, and exits with status 0. This behavior may
change in the future.

up command

post-up command
Run command after bringing the interface up. If this command fails then ifup aborts, refraining from
marking the interface as configured (even though it has really been configured), prints an error message,
and exits with status 0. This behavior may change in the future.

down command

pre-down command
Run command before taking the interface down. If this command fails then ifdown aborts, marks the interface
as deconfigured (even though it has not really been deconfigured), and exits with status 0. This behavior
may change in the future.

post-down command
Run command after taking the interface down. If this command fails then ifdown aborts, marks the interface
as deconfigured, and exits with status 0. This behavior may change in the future.

There exists for each of the above mentioned options a directory /etc/network/if-<option>.d/ the scripts in which
are run (with no arguments) using run-parts(8) after the option itself has been processed.

Вроде бы все предельно ясно. Но смутила последняя фраза. Я ее понял как: для каждой из вышеуказанных опций существует каталог /etc/network/if-<option>.d/ для скриптов, запускаемых (без аргументов) используя run-parts, после чего эти опции будут обработаны (выполнятся).
Что не понятно. Для того, чтобы некий скрипт, в данном случае iptables, выполнялся, скажем перед поднятием интерфеса, мне необходимо:
a. положить этот скрипт в каталог /etc/network/if-pre-up.d;
b. положить этот скрипт в каталог /etc/network/if-pre-up.d и прописать в файле interfaces опцию pre-up $name_script;
c. положить скрипт куда угодно (например в /etc) и прописать его в interfaces pre-up /path-to-file/$name_script.

Сам больше склоняюсь ко второму варианту, но не уверен до конца.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: iptables::способ "загрузки" правил

Сообщение sash-kan »

Abigor
так проверить же элементарно.
создайте скрипт, например, такого содержания:
#!/bin/sh
/bin/date >> /tmp/log

и проверяйте на здоровье, когда именно и при каких условиях он выполняется.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Abigor
Сообщения: 100

Re: iptables::способ "загрузки" правил

Сообщение Abigor »

хм. ну да. в принципе верно. что-то я не подумал об этом ):
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: iptables::способ "загрузки" правил

Сообщение Ленивая Бестолочь »

sash-kan писал(а):
01.06.2011 15:24
#!/bin/sh
/bin/date >> /tmp/log

рекомендую для таких целей юзать утилитку logger.
в общем конечно по сути те же яйца, но как-то правильней кажется.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: iptables::способ "загрузки" правил

Сообщение mandreika »

Последнее время делаю так:
/etc/network/interfaces


auto lo
iface lo inet loopback
up /etc/network/iptables.sh
Спасибо сказали: