Эта страница была перенесена на
altlinux.org. Текст на freesource.info заморожен.
Настройка сетевого экрана в /etc/net
Начиная с версии 0.7.9 etcnet содержит поддержку управления сетевым экраном (firewall). В данный момент поддерживается iptables и ebtables. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем.
Системные таблицы и возможные системные цепочки в них
Таблица | Цепочки |
filter | INPUT FORWARD OUTPUT |
nat | PREROUTING OUTPUT POSTROUTING |
mangle | PREROUTING INPUT FORWARD OUTPUT POSTROUTING |
raw | PREROUTING OUTPUT |
(
(диаграмма красивая, но неправильная: куда делся nat output ? ;)
Используемые файлы и каталоги
/etc/net/ifaces/default/fw/options — файл с настройками сетевого экрана по-умолчанию:
- FW_TYPE — типа сетевого экрана. Здесь можно указать только iptables, другие типы пока не поддерживаются
- IPTABLES_HUMAN_SYNTAX — включает или отключает использование поддержки «читабельного» синтаксиса правил для iptables (см. ниже). Значение: yes или no
- IPTABLES_SYSTEM_CHAINS — список системных цепочек в таблицах. Все цепочки, не указанные здесь, будут автоматически создаваться и удаляться. Значение: названия цепочек (все названия чувствительны к регистру!), разделенные пробелом
- IPTABLES_INPUT_POLICY — действие по-умолчанию для пакетов, попадающих в системную цепочку INPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN
- IPTABLES_FORWARD_POLICY — действие по-умолчанию для пакетов, попадающих в системную цепочку FORWARD таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN
- IPTABLES_OUTPUT_POLICY — действие по-умолчанию для пакетов, попадающих в системную цепочку OUTPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN
- IPTABLES_RULE_EMBEDDING — способ добавления нового правила в цепочку. Значение: APPEND или INSERT, что означает добавление в конец списка правил или в начало соответственно.
/etc/net/ifaces/default/fw/iptables/filter, /etc/net/ifaces/default/fw/iptables/nat, /etc/net/ifaces/default/fw/iptables/mangle — каталоги, соответствующие таблицам iptables. В каталогах создаются файлы, соответствующие необходимым системным или пользовательским цепочкам, в которых уже и прописываются сами правила iptables.
/etc/net/ifaces/default/fw/iptables/loadorder, /etc/net/ifaces/default/fw/tablename/loadorder — если такой существует и он не пустой, то обработка таблиц и/или цепочек в таблице происходит в том порядке, который указан в файле (по одному значению на строку). Все таблицы и цепочки, которые не указаны, обрабатываться не будут.
/etc/net/ifaces/default/fw/iptables/modules — список модулей ядра, которые необходимо загрузить перед запуском сетевого экрана. При остановке эти модули выгружаются
/etc/net/ifaces/default/fw/iptables/syntax — описание замен при использовании «читабельного» синтаксиса правил iptables
Алгоритм работы сетевого экрана
- При запуске службы network, виртуальный интерфейс default:
- Если опция CONFIG_FW (в файле /etc/net/ifaces/default/options) не установлена в yes, то ничего не делает и происходит выход из процедуры запуска сетевого экрана; иначе переходим к следующему пункту
- Считывается файл настроек /etc/net/ifaces/default/fw/iptables/options
- До настройки любого интерфейса и обработки значений sysctl устанавливаются действия по-умолчанию (policy) для системных цепочек таблицы filter
- Считывается файл со списком модулей ядра /etc/net/ifaces/default/fw/iptables/modules и все указанные там модули (по одному на строку) загружаются; при отсутствии файла никакие модули не загружаются
- Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной IPTABLES_SYSTEM_CHAINS)
- Считывается файл /etc/net/ifaces/default/fw/iptables/loadorder и в указанном в нем порядке происходит обработка таблиц iptables; при отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени
- Считывается файл /etc/net/ifaces/default/fw/iptables/tablename/loadorder в каждой обрабатываемой таблице и происходит обработки и загрузка правил для каждой цепочки в порядке, указанном в файле; при отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени
- Если опция IPTABLES_HUMAN_SYNTAX установлена в yes, то считывается и обрабатывается файл с «синтаксисом» /etc/net/ifaces/default/fw/iptables/syntax
- Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция IPTABLES_HUMAN_SYNTAX, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды iptables, после чего запускается iptables с этими параметрами; иначе правило без обработки передается iptables
- При «поднятии» любого интерфейса, кроме default:
- Выполняются все подпункты пунка 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса
- При «опускании» любого интерфейса, кроме default:
- Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке; все файлы и каталоги ищутся в каталоге текущего интерфейса
- При остановке службы network, виртуальный интерфейс default:
- Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удалются командой iptables -F, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются
- Действия по-умолчанию (policy) для системных цепочек устанавливается в ACCEPT
Примечания
- Правила для iptables можно писать с помощью синтаксиса, подобного синтаксису ipfw и других. Сделано это с помощью простой замены слов на опции iptables. Сами замены описаны в файле /etc/net/ifaces/default/fw/iptables/syntax (там также описано некоторое количество вспомогательных слов, так что правила можно писать практически на литературном английском :). Синтаксис правила можно совмещать (то есть использовать и заданный в etcnet синтаксис и реальные опции команды iptables)
- Во всех правилах нельзя использовать названия цепочки и/или таблицы; они будут добавляться автоматически
- В правилах можно использовать любые переменные окружения, выполнять любые команды shell (они должны быть указаны в одну строку). Переменная $NAME содержит имя текущего интерфейса. Переменные $IPV4ADDRESS и $IPV6ADDRESS содержат массив IPV4/IPV6 адресов текущего интерфейса (это обычные bash arrays, можно обращаться к ним по индексу: ${IPV4ADDRESS[2]} или просто $IPV4ADDRESS для первого значения). Для удобства можно использовать файлы options, в которых прописывать какие-либо переменные, к примеру, адреса gateway, ISP, сетей и т.д.
- Во всех файлах можно использовать комментарии (строка должна начинаться с символа # )
- Вам не нужно копировать все файлы настроек в каталог каждого интерфейса. Сначала будут считаны настройки виртуального интерфейса default, а уже потом у текущего интерфейса, соответственно, можно переопределять какие-то параметры для определенного интерфейса
- Описания всех правил в настройках виртуального интерфейса default достаточно для поднятия простого сетевого экрана. При наличии же большого количества правил и интерфейсов есть смысл разделить логически все правила по каждому интерфейсу (опять же, не будет нагружаться процессор вхолостую, если интерфейс, к которому относится много правил, сейчас не «поднят»)
- В начале каждого правила можно указать, что с этим правилом делать. Может быть одно из трёх значений:
- -A — добавление в конец списка правил (при включеном «читабельном» синтаксисе соответствует команде “append”)
- -I [num] — добавление в начало списка правил; если указан необязательный параметр num, то правило будет вставлено в строку правил с таким номером (будьте внимательны, iptables считает несуществующий номер строки ошибкой и не добавляет правило); (при включеном «читабельном» синтаксисе соответствует команде «insert [num]")
- -D — удаление правила из списка правил (соответственно, при «остановке» интерфейса правило наоборот будет добавлено); (при включеном «читабельном» синтаксисе соответствует команде “delete”)
- Если никакое действие не указано, то правило добавляются в цепочку в соответствии со значением переменной IPTABLES_RULE_EMBEDDING
- Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса перед измененим файлов или
Примеры
/etc/net/ifaces/eth0/fw/options
/etc/net/ifaces/eth0/fw/iptables/filter/INPUT
/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD
/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET
/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING
/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING
Утилиты
- В contrib находятся следующие вспомогательные утилиты:
- Скрипт efw, который предназначен для ручного управления сетевым экраном и умеет следующее:
На текущий момент он умеет частично угадывать интерфейс, таблицу и цепочку (если их не передали в комстроке) и все действия, кроме counters. Так же поддерживается «маска» all для интерфейсов, таблиц и цепочек.
-
Конвертор правил, точнее, дампа iptables-save (альфа! и требует ruby) в соответствующее расположение правил в etcnet
P.S.
Весь этот текст относится к версии etcnet >=0.8.5