Etcnet Firewall: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
 
(не показано 40 промежуточных версий 11 участников)
Строка 1: Строка 1:
[[Category:Admin]]
== Настройка сетевого экрана в [[etcnet|/etc/net]] ==
Начиная с версии {{pkg|0.7.9}} {{pkg|etcnet}} содержит поддержку управления сетевым экраном ({{term|firewall}}). В данный момент поддерживается {{prg|iptables}}, {{prg|ip6tables}}, {{prg|ipset}} и {{prg|ebtables}}. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем. 


== Настройка сетевого экрана в [[etcnet|/etc/net]] ==
Типовую конфигурацию этого сетевого экрана можно сделать в [[alterator-net-iptables|Центре управления системой]]
Начиная с версии 0.7.9 etcnet содержит поддержку управления сетевым экраном (firewall). В данный момент поддерживается iptables и ebtables. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем.
 
=== Системные таблицы и допустимые системные цепочки ===


=== Системные таблицы и возможные системные цепочки в них ===
В системных таблицах имеется возможность использовать следующие системные цепочки:
{| border="1"
{| class="standard"
|-
|-
|
!Таблица
Таблица
!Цепочки
|
Цепочки
|-
|-
|
|{{term|filter}}
filter
|{{term|INPUT FORWARD OUTPUT}}
|
INPUT FORWARD OUTPUT
|-
|-
|
|{{term|nat}}
nat
|{{term|PREROUTING OUTPUT POSTROUTING}}
|
PREROUTING OUTPUT POSTROUTING
|-
|-
|
|{{term|mangle}}
mangle
|{{term|PREROUTING INPUT FORWARD OUTPUT POSTROUTING}}
|
PREROUTING INPUT FORWARD OUTPUT POSTROUTING
|-
|-
|
|{{term|raw}}
raw
|{{term|PREROUTING OUTPUT}}
|
PREROUTING OUTPUT
|}
|}


Схема прохождения пакетов
Схема прохождения пакетов
[[Изображение:Iptables3al7.jpg]]
Красивая, но неправильная: куда делся nat output ? ;)
Еще одна схема прохождения пакетов (из Iptables Tutorial http://iptables-tutorial.frozentux.net/iptables-tutorial.html)


[[Изображение:Tables_traverse.jpg]]
[[Изображение:Tables_traverse.jpg]]


=== Используемые файлы и каталоги ===
=== Используемые файлы и каталоги ===
<tt>/etc/net/ifaces/default/fw/options</tt> -- файл с настройками сетевого экрана по-умолчанию:
{{path|/etc/net/ifaces/default/fw/options}} — файл с настройками сетевого экрана по умолчанию:
* FW_TYPE -- типа сетевого экрана. Здесь можно указать только iptables, другие типы пока не поддерживаются
* {{term|FW_TYPE}} — тип сетевого экрана.
* IPTABLES_HUMAN_SYNTAX -- включает или отключает использование поддержки "читабельного" синтаксиса правил для iptables (см. ниже). Значение: yes или no
*: Здесь можно указать только {{term|iptables}}, другие типы пока не поддерживаются. Обратите внимание на этот параметр, т.к. по умолчанию он не указан в файле настроек.
* IPTABLES_SYSTEM_CHAINS -- список системных цепочек в таблицах. Все цепочки, не указанные здесь, будут автоматически создаваться и удаляться. Значение: названия цепочек (все названия чувствительны к регистру!), разделенные пробелом
* {{term|IPTABLES_HUMAN_SYNTAX}} — включает или отключает использование поддержки «читабельного» синтаксиса правил для iptables (см. ниже).
* IPTABLES_INPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку INPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN
*: Значение: {{term|yes}} или {{term|no}}
* IPTABLES_FORWARD_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку FORWARD таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN
* {{term|IPTABLES_SYSTEM_CHAINS}} — список системных цепочек в таблицах. Все цепочки, не указанные здесь, будут автоматически создаваться и удаляться.
* IPTABLES_OUTPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку OUTPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN
*: Значение: названия цепочек (все названия чувствительны к регистру!), разделенные пробелом.
* IPTABLES_RULE_EMBEDDING -- способ добавления нового правила в цепочку. Значение: APPEND или INSERT, что означает добавление в конец списка правил или в начало соответственно.
* {{term|IPTABLES_INPUT_POLICY}} — действие по умолчанию для пакетов, попадающих в системную цепочку INPUT таблицы filter.
 
*: Значение: одно из {{term|ACCEPT}}, {{term|DROP}}, {{term|QUEUE}} или {{term|RETURN}}
<tt>/etc/net/ifaces/default/fw/iptables/filter</tt>, <tt>/etc/net/ifaces/default/fw/iptables/nat</tt>, <tt>/etc/net/ifaces/default/fw/iptables/mangle</tt> -- каталоги, соответствующие таблицам iptables. В каталогах создаются файлы, соответствующие необходимым системным или пользовательским цепочкам, в которых уже и прописываются сами правила iptables.  
* {{term|IPTABLES_FORWARD_POLICY}} — действие по умолчанию для пакетов, попадающих в системную цепочку FORWARD таблицы filter.
*: Значение: одно из {{term|ACCEPT}}, {{term|DROP}}, {{term|QUEUE}} или {{term|RETURN}}
* {{term|IPTABLES_OUTPUT_POLICY}} — действие по умолчанию для пакетов, попадающих в системную цепочку OUTPUT таблицы filter.
*: Значение: одно из {{term|ACCEPT}}, {{term|DROP}}, {{term|QUEUE}} или {{term|RETURN}}
* {{term|IPTABLES_RULE_EMBEDDING}} — способ добавления нового правила в цепочку.
*: Значение: {{term|APPEND}} или {{term|INSERT}}, что означает добавление в конец списка правил или, соответственно, в начало.


<tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt>, <tt>/etc/net/ifaces/default/fw/tablename/loadorder</tt> -- если такой существует и он не пустой, то обработка таблиц и/или цепочек в таблице происходит в том порядке, который указан в файле (по одному значению на строку). Все таблицы и цепочки, которые не указаны, обрабатываться не будут.
{{path|/etc/net/ifaces/default/fw/iptables/filter}}, {{path|/etc/net/ifaces/default/fw/iptables/nat}}, {{path|/etc/net/ifaces/default/fw/iptables/mangle}} — каталоги, соответствующие таблицам iptables. В каталогах создаются файлы, соответствующие необходимым системным или пользовательским цепочкам, в которых уже и прописываются сами правила iptables.
<tt>/etc/net/ifaces/default/fw/iptables/modules</tt> -- список модулей ядра, которые необходимо загрузить перед запуском сетевого экрана. При остановке эти модули выгружаются
<tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> -- описание замен при использовании "читабельного" синтаксиса правил iptables


{{path|/etc/net/ifaces/default/fw/iptables/loadorder}}, {{path|/etc/net/ifaces/default/fw/tablename/loadorder}} — если такой файл существует и не пуст, то обработка таблиц и/или цепочек в таблице происходит в том порядке, который указан в файле (по одному значению на строку). Все таблицы и цепочки, которые не указаны, обрабатываться не будут.
{{path|/etc/net/ifaces/default/fw/iptables/modules}} — список модулей ядра, которые необходимо загрузить перед запуском сетевого экрана. При остановке эти модули выгружаются.
{{path|/etc/net/ifaces/default/fw/iptables/syntax}} — описание замен при использовании «читабельного» синтаксиса правил iptables


=== Алгоритм работы сетевого экрана ===
=== Алгоритм работы сетевого экрана ===
# При запуске службы network, виртуальный интерфейс default:
# При запуске службы {{prg|network}}, виртуальный интерфейс {{term|default}}:
## Если опция CONFIG_FW (в файле <tt>/etc/net/ifaces/default/options</tt>) не установлена в yes, то ничего не делает и происходит выход из процедуры запуска сетевого экрана; иначе переходим к следующему пункту
## Если опция {{term|CONFIG_FW}} (в файле {{path|/etc/net/ifaces/default/options}}) не установлена в {{term|yes}}, то ничего не делает и происходит выход из процедуры запуска сетевого экрана, иначе переходим к следующему пункту.
## Считывается файл настроек <tt>/etc/net/ifaces/default/fw/iptables/options</tt>
## Считывается файл настроек {{path|/etc/net/ifaces/default/fw/iptables/options}}.
## До настройки любого интерфейса и обработки значений sysctl устанавливаются действия по-умолчанию (policy) для системных цепочек таблицы filter
## До настройки любого интерфейса и обработки значений {{term|sysctl}} устанавливаются действия по умолчанию ({{term|policy}}) для системных цепочек таблицы {{term|filter}}.
## Считывается файл со списком модулей ядра <tt>/etc/net/ifaces/default/fw/iptables/modules</tt> и все указанные там модули (по одному на строку) загружаются; при отсутствии файла никакие модули не загружаются
## Считывается файл со списком модулей ядра {{path|/etc/net/ifaces/default/fw/iptables/modules}}, и все указанные в нем модули (по одному на строку) загружаются. При отсутствии файла никакие модули не загружаются.
## Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной IPTABLES_SYSTEM_CHAINS)
## Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной {{term|IPTABLES_SYSTEM_CHAINS}}).
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt> и в указанном в нем порядке происходит обработка таблиц iptables; при отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени
## Считывается файл {{path|/etc/net/ifaces/default/fw/iptables/loadorder}}, и в указанном в нем порядке происходит обработка таблиц {{term|iptables}}. При отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени.
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/tablename/loadorder</tt> в каждой обрабатываемой таблице и происходит обработки и загрузка правил для каждой цепочки в порядке, указанном в файле; при отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени
## Считывается файл {{path|/etc/net/ifaces/default/fw/iptables/tablename/loadorder}} в каждой обрабатываемой таблице, и происходит обработка и загрузка правил для каждой цепочки в порядке, указанном в файле. При отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени.
## Если опция IPTABLES_HUMAN_SYNTAX установлена в yes, то считывается и обрабатывается файл с "синтаксисом" <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt>
## Если опция {{term|IPTABLES_HUMAN_SYNTAX}} установлена в {{term|yes}}, то считывается и обрабатывается файл с «синтаксисом» {{path|/etc/net/ifaces/default/fw/iptables/syntax}}.
## Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция IPTABLES_HUMAN_SYNTAX, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды iptables, после чего запускается iptables с этими параметрами; иначе правило без обработки передается iptables
## Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция {{term|IPTABLES_HUMAN_SYNTAX}}, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды {{prg|iptables}}, после чего запускается {{prg|iptables}} с этими параметрами; иначе правило без обработки передается {{prg|iptables}}.
# При "поднятии" любого интерфейса, кроме default:
# При «поднятии» любого интерфейса, кроме {{term|default}}:
## Выполняются все подпункты пунка 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса
## Выполняются все подпункты пункта 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса.
# При "опускании" любого интерфейса, кроме default:
# При «опускании» любого интерфейса, кроме {{term|default}}:
## Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке; все файлы и каталоги ищутся в каталоге текущего интерфейса
## Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке. Все файлы и каталоги ищутся в каталоге текущего интерфейса.
# При остановке службы network, виртуальный интерфейс default:
# При остановке службы {{prg|network}} виртуальный интерфейс {{term|default}}:
## Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удалются командой iptables -F, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются
## Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удаляются командой {{cmd|iptables -F}}, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются.
## Действия по-умолчанию (policy) для системных цепочек устанавливается в ACCEPT
## Действия по умолчанию ({{term|policy}}) для системных цепочек устанавливается в {{term|ACCEPT}}.
 


=== Примечания ===
=== Примечания ===
* Правила для iptables можно писать с помощью синтаксиса, подобного синтаксису ipfw и других. Сделано это с помощью простой замены слов на опции iptables. Сами замены описаны в файле <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> (там также описано некоторое количество вспомогательных слов, так что правила можно писать практически на литературном английском :). Синтаксис правила можно совмещать (то есть использовать и заданный в etcnet синтаксис и реальные опции команды iptables)
* Правила для {{prg|iptables}} можно писать с помощью синтаксиса, подобного синтаксису {{prg|ipfw}} и других. Сделано это с помощью простой замены слов на опции {{prg|iptables}}. Сами замены описаны в файле {{path|/etc/net/ifaces/default/fw/iptables/syntax}} (там также описано некоторое количество вспомогательных слов, так что правила можно писать практически на английском литературном). Синтаксис правила можно совмещать (то есть использовать и заданный в {{pkg|etcnet}} синтаксис, и реальные опции команды {{prg|iptables}}).
* Во всех правилах ''нельзя'' использовать названия цепочки и/или таблицы; они будут добавляться автоматически
* Во всех правилах ''нельзя'' использовать названия цепочки и/или таблицы. Они будут добавляться автоматически.
* В правилах можно использовать любые переменные окружения, выполнять любые команды shell (они должны быть указаны в одну строку). Переменная $NAME содержит имя текущего интерфейса. Переменные $IPV4ADDRESS и $IPV6ADDRESS содержат массив IPV4/IPV6 адресов текущего интерфейса (это обычные bash arrays, можно обращаться к ним по индексу: ${IPV4ADDRESS[2]} или просто $IPV4ADDRESS для первого значения). Для удобства можно использовать файлы options, в которых прописывать какие-либо переменные, к примеру, адреса gateway, ISP, сетей и т.д.
* В правилах можно использовать любые переменные окружения, выполнять любые команды {{prg|shell}} (они должны быть указаны в одну строку). Переменная {{term|$NAME}} содержит имя текущего интерфейса. Переменные {{term|$IPV4ADDRESS}} и {{term|$IPV6ADDRESS}} содержат массив {{term|IPV4/IPV6}} адресов текущего интерфейса (это обычные bash arrays, можно обращаться к ним по индексу: {{term|${IPV4ADDRESS[2]} }}или просто {{term|$IPV4ADDRESS}} для первого значения). Для удобства можно использовать файлы {{path|options}}, в которых прописывать какие-либо переменные, к примеру, адреса gateway, ISP, сетей и т. д.
* Во всех файлах можно использовать комментарии (строка должна начинаться с символа # )
* Во всех файлах можно использовать комментарии (строка должна начинаться с символа {{term|#}}).
* Вам не нужно копировать все файлы настроек в каталог каждого интерфейса. Сначала будут считаны настройки виртуального интерфейса default, а уже потом у текущего интерфейса, соответственно, можно переопределять какие-то параметры для определенного интерфейса
* Нет необходимости копировать все файлы настроек в каталог каждого интерфейса. Сначала будут считаны настройки виртуального интерфейса {{term|default}}, а уже потом у текущего интерфейса, соответственно, можно переопределять только требуемые для настройки параметры.
* Описания всех правил в настройках виртуального интерфейса default достаточно для поднятия простого сетевого экрана. При наличии же большого количества правил и интерфейсов есть смысл разделить логически все правила по каждому интерфейсу (опять же, не будет нагружаться процессор вхолостую, если интерфейс, к которому относится много правил, сейчас не "поднят")
* Описания всех правил в настройках виртуального интерфейса {{term|default}} достаточно для поднятия простого сетевого экрана. При наличии же большого количества правил и интерфейсов есть смысл разделить логически все правила по каждому интерфейсу (опять же, не будет нагружаться процессор без необходимости, если интерфейс, к которому относится много правил, сейчас не «поднят»).
* В начале каждого правила можно указать, что с этим правилом делать. Может быть одно из трёх значений:
* В начале каждого правила можно указать, что с этим правилом делать. Может быть одно из трёх значений:
** -A -- добавление в конец списка правил (при включеном "читабельном" синтаксисе соответствует команде "append")
** {{term|-A}} — добавление в конец списка правил (при включенном «читабельном» синтаксисе соответствует команде {{term|append}}).
** -I [num] -- добавление в начало списка правил; если указан необязательный параметр num, то правило будет вставлено в строку правил с таким номером (будьте внимательны, iptables считает несуществующий номер строки ошибкой и не добавляет правило); (при включеном "читабельном" синтаксисе соответствует команде "insert [num]")
** {{term|-I [num]}} — добавление в начало списка правил; если указан необязательный параметр {{term|num}}, то правило будет вставлено в строку правил с таким номером (будьте внимательны, {{prg|iptables}} считает несуществующий номер строки ошибкой и не добавляет правило); (при включенном «читабельном» синтаксисе соответствует команде {{term|insert [num]}}).
** -D -- удаление правила из списка правил (соответственно, при "остановке" интерфейса правило наоборот будет добавлено); (при включеном "читабельном" синтаксисе соответствует команде "delete")  
** {{term|-D}} — удаление правила из списка правил (соответственно, при «остановке» интерфейса правило наоборот будет добавлено); (при включенном «читабельном» синтаксисе соответствует команде {{term|delete}}).
* Если никакое действие не указано, то правило добавляются в цепочку в соответствии со значением переменной IPTABLES_RULE_EMBEDDING
* Если никакое действие не указано, то правило добавляются в цепочку в соответствии со значением переменной {{term|IPTABLES_RULE_EMBEDDING}}.
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит все правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов.
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах {{prg|iptables}}, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не для {{term|default}}) перед изменением файлов или после изменения использовать команду {{cmd|efw default restart}} (она полностью удалит все правила, однако, пользовательские цепочки других интерфейсов не будут затронуты, и далее загрузить заново правила для нужного или всех интерфейсов.


=== Примеры ===
=== Примеры ===
<tt>/etc/net/ifaces/eth0/fw/options</tt>
Пример настройки сетевого экрана в <tt>etcnet</tt> (файл — содержание):
 
{{path|/etc/net/ifaces/eth0/fw/options}}
<pre># Our WAN IP address
<pre># Our WAN IP address
WAN_IP=5.6.7.8/24
WAN_IP=5.6.7.8/24
Строка 103: Строка 97:
# Friend net
# Friend net
FRIEND_NET=5.6.7.0/24</pre>
FRIEND_NET=5.6.7.0/24</pre>
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/INPUT</tt>
{{path|/etc/net/ifaces/eth0/fw/iptables/filter/INPUT}}
<pre>accept all from any to $IPV4ADDRESS
<pre>accept all from any to $IPV4ADDRESS
jump-to COUNT-CHAIN if marked as 0x11</pre>
jump-to COUNT-CHAIN if marked as 0x11</pre>
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD</tt>
{{path|/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD}}
<pre>jump-to FRIEND-NET if from $FRIEND-NET
<pre>jump-to FRIEND-NET if from $FRIEND-NET
append drop tcp from net $NET1 to net NET2
append drop tcp from net $NET1 to net NET2
Строка 112: Строка 106:
insert reject udp to $WAN_IP
insert reject udp to $WAN_IP
drop icmp to $(somescript.sh)</pre>
drop icmp to $(somescript.sh)</pre>
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET</tt>
{{path|/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET}}
<pre>policy reject</pre>
<pre>policy reject</pre>
<tt>/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING</tt>
{{path|/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING}}
<pre>insert 15 mark tcp as 0x10 if from-iface $NAME and dport is 22
<pre>insert 15 mark tcp as 0x10 if from-iface $NAME and dport is 22
mark tcp as 0x11 if from net $NET1 and from-iface $NAME</pre>
mark tcp as 0x11 if from net $NET1 and from-iface $NAME</pre>
<tt>/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING</tt>
{{path|/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING}}
<pre>snat-to $WAN_IP if marked as 0x10</pre>
<pre>snat-to $WAN_IP if marked as 0x10</pre>


=== Утилиты ===
=== Утилиты ===
* В contrib находятся следующие вспомогательные утилиты:
* В {{pkg|contrib}} находятся следующие вспомогательные утилиты:
** Скрипт '''efw''', который предназначен для ручного управления сетевым экраном и умеет следующее:
** Скрипт {{prg|efw}}, который предназначен для ручного управления сетевым экраном и "умеет" следующее:
::<pre>Usage: ./efw [iface] [table] [chain] <action> [iptables rule or action options]
<pre>Usage: ./efw [iface] [table] [chain] <action> [iptables rule or action options]


  iface    - 'default' (by default), real interface name or 'all' for all interfaces
  iface    - 'default' (by default), real interface name or 'all' for all interfaces
  table    - 'mangle', 'filter' (by default), 'nat' or 'all' for all tables
  table    - 'mangle', 'filter' (by default), 'nat' or 'all' for all tables
  chain    -  system or user defined chain name (case sensitive!) or 'all' for all chains
  chain    -  system or user defined chain name (case sensitive!) or 'all' for all chains
  action  - 'start','stop','restart','load','unload','reload','flush','show|list','count|counters','rule','new|create','remove|delete','zero','policy','rename'
  action  - 'start','stop','restart','load','unload','reload','flush','show|list','count|counters',
 
            'rule','new|create','remove|delete','zero','policy','rename'
  start    - process all tables and chains for given interface (even when chain or table is defined)
  start    - process all tables and chains for given interface (even when chain or table is defined)
  stop    - process all tables and chains for given interface (even when chain or table is defined)
  stop    - process all tables and chains for given interface (even when chain or table is defined)
Строка 155: Строка 149:
  -x or exact  - expand numbers instead of rounded numbers
  -x or exact  - expand numbers instead of rounded numbers
  --line-numbers or lines - display line number for each rule</pre>
  --line-numbers or lines - display line number for each rule</pre>
::На текущий момент он умеет частично угадывать интерфейс, таблицу и цепочку (если их не передали в комстроке) и все действия, кроме counters. Так же поддерживается "маска" all для интерфейсов, таблиц и цепочек.


=== Примеры команд: ===
:: На данный момент он "умеет" частично "угадывать" интерфейс, таблицу и цепочку (если их не передали в командной строке) и все действия, кроме {{term|counters}}. Так же поддерживается маска {{term|all}} для интерфейсов, таблиц и цепочек.
 
=== Примеры команд ===


* Выгрузить (путем flush) все правила из всех цепочек всех таблиц, удалить цепочки, заданные пользователем, выгрузить все загруженные модули
* Выгрузить (''flush'') все правила из всех цепочек всех таблиц, удалить цепочки, заданные пользователем, выгрузить все загруженные модули:
::::<pre>efw default stop</pre>
*: {{cmd|efw default stop}}
* Выгрузить (путем удаления каждого правила в обратном порядке) все правила из цепочки FORWARD таблицы filter для интерфейса eth0
* Выгрузить (путем удаления каждого правила в обратном порядке) все правила из цепочки {{term|FORWARD}} таблицы {{term|filter}} для интерфейса {{term|eth0}}:
::::<pre>efw eth0 unload</pre>
*: {{cmd|efw eth0 unload}}
* Загрузить все правила для всех цепочек во всех таблицах всех интерфейсов
* Загрузить все правила для всех цепочек во всех таблицах всех интерфейсов:
::::<pre>efw all all all load</pre>
*: {{cmd|efw all all all load}}
* Обработать правило и добавить его во все цепочки таблицы filter
* Обработать правило и добавить его во все цепочки таблицы {{term|filter}}:
::::<pre>efw default filter all rule accept all from any</pre>
*: {{cmd|efw default filter all rule accept all from any}}
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит <u>все</u> правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов. Таким образом, наиболее используемой командой при изменении конфигурации сетевого экрана является:
* Если вы изменяете какое-либо правило в конфигурационных файлах при уже загруженных правилах {{term|iptables}}, то для того, чтобы в памяти не остались старые правила, необходимо:
::::<pre>efw default stop ; efw all start</pre>
** Вариант 1: Выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не {{term|default}}) перед изменением файлов;
** Вариант 2: После изменения использовать команду {{cmd|efw default restart}} (она полностью удалит ''все'' правила, однако, пользовательские цепочки других интерфейсов не будут затронуты), и далее загрузить заново правила для требуемого или всех интерфейсов;
 
Таким образом, наиболее используемой командой при изменении конфигурации сетевого экрана является:
{{cmd|efw default stop ; efw all start}}


=== Прочее ===
=== Прочее ===
[http://fly.osdn.org.ua/~mike/works/misc/iptables2etcnet/ Конвертор правил], точнее, дампа <tt>iptables-save</tt> (альфа! и требует <tt>ruby</tt>) в соответствующее расположение правил в etcnet
[http://ftp.altlinux.org/pub/people/mike/misc/iptables2etcnet/ Конвертор правил], а точнее, дампа {{prg|iptables-save}} (альфа версия и требует пакет? {{pkg|ruby}}) в соответствующее расположение правил в {{pkg|etcnet}}
 


----
----
Данное руководство относится к версии {{pkg|etcnet 0.8.5}} и выше.


Весь этот текст относится к версии etcnet >=0.8.5
{{Category navigation|title=etcnet|category=etcnet}}

Текущая версия от 21:15, 12 января 2023

Настройка сетевого экрана в /etc/net

Начиная с версии 0.7.9 etcnet содержит поддержку управления сетевым экраном (firewall). В данный момент поддерживается iptables, ip6tables, ipset и ebtables. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем.

Типовую конфигурацию этого сетевого экрана можно сделать в Центре управления системой

Системные таблицы и допустимые системные цепочки

В системных таблицах имеется возможность использовать следующие системные цепочки:

Таблица Цепочки
filter INPUT FORWARD OUTPUT
nat PREROUTING OUTPUT POSTROUTING
mangle PREROUTING INPUT FORWARD OUTPUT POSTROUTING
raw PREROUTING OUTPUT

Схема прохождения пакетов

Tables traverse.jpg

Используемые файлы и каталоги

/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

Алгоритм работы сетевого экрана

  1. При запуске службы network, виртуальный интерфейс default:
    1. Если опция CONFIG_FW (в файле /etc/net/ifaces/default/options) не установлена в yes, то ничего не делает и происходит выход из процедуры запуска сетевого экрана, иначе переходим к следующему пункту.
    2. Считывается файл настроек /etc/net/ifaces/default/fw/iptables/options.
    3. До настройки любого интерфейса и обработки значений sysctl устанавливаются действия по умолчанию (policy) для системных цепочек таблицы filter.
    4. Считывается файл со списком модулей ядра /etc/net/ifaces/default/fw/iptables/modules, и все указанные в нем модули (по одному на строку) загружаются. При отсутствии файла никакие модули не загружаются.
    5. Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной IPTABLES_SYSTEM_CHAINS).
    6. Считывается файл /etc/net/ifaces/default/fw/iptables/loadorder, и в указанном в нем порядке происходит обработка таблиц iptables. При отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени.
    7. Считывается файл /etc/net/ifaces/default/fw/iptables/tablename/loadorder в каждой обрабатываемой таблице, и происходит обработка и загрузка правил для каждой цепочки в порядке, указанном в файле. При отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени.
    8. Если опция IPTABLES_HUMAN_SYNTAX установлена в yes, то считывается и обрабатывается файл с «синтаксисом» /etc/net/ifaces/default/fw/iptables/syntax.
    9. Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция IPTABLES_HUMAN_SYNTAX, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды iptables, после чего запускается iptables с этими параметрами; иначе правило без обработки передается iptables.
  2. При «поднятии» любого интерфейса, кроме default:
    1. Выполняются все подпункты пункта 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса.
  3. При «опускании» любого интерфейса, кроме default:
    1. Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке. Все файлы и каталоги ищутся в каталоге текущего интерфейса.
  4. При остановке службы network виртуальный интерфейс default:
    1. Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удаляются командой iptables -F, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются.
    2. Действия по умолчанию (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, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не для default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит все правила, однако, пользовательские цепочки других интерфейсов не будут затронуты, и далее загрузить заново правила для нужного или всех интерфейсов.

Примеры

Пример настройки сетевого экрана в etcnet (файл — содержание):

/etc/net/ifaces/eth0/fw/options

# Our WAN IP address
WAN_IP=5.6.7.8/24
# First net
NET1=1.2.3.0/24
# Second net
NET2=4.3.2.0/24
# Friend net
FRIEND_NET=5.6.7.0/24

/etc/net/ifaces/eth0/fw/iptables/filter/INPUT

accept all from any to $IPV4ADDRESS
jump-to COUNT-CHAIN if marked as 0x11

/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD

jump-to FRIEND-NET if from $FRIEND-NET
append drop tcp from net $NET1 to net NET2
delete drop udp from $NET1 to $NET2
insert reject udp to $WAN_IP
drop icmp to $(somescript.sh)

/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET

policy reject

/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING

insert 15 mark tcp as 0x10 if from-iface $NAME and dport is 22
mark tcp as 0x11 if from net $NET1 and from-iface $NAME

/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING

snat-to $WAN_IP if marked as 0x10

Утилиты

  • В contrib находятся следующие вспомогательные утилиты:
    • Скрипт efw, который предназначен для ручного управления сетевым экраном и "умеет" следующее:
Usage: ./efw [iface] [table] [chain] <action> [iptables rule or action options]

 iface    - 'default' (by default), real interface name or 'all' for all interfaces
 table    - 'mangle', 'filter' (by default), 'nat' or 'all' for all tables
 chain    -  system or user defined chain name (case sensitive!) or 'all' for all chains
 action   - 'start','stop','restart','load','unload','reload','flush','show|list','count|counters',
            'rule','new|create','remove|delete','zero','policy','rename'
 start    - process all tables and chains for given interface (even when chain or table is defined)
 stop     - process all tables and chains for given interface (even when chain or table is defined)
 restart  - equivalent to stop then start
 load     - load rules for given interface, table and chain
 unload   - unload rules for given interface, table and chain
 reload   - equivalent to unload then load
 flush    - flush rules for given interface, table and chain
 show     - list rules for given interface, table and chain
 list     - same as show
 count    - show counters for given table and chains
 counters - same as count
 rule     - parse rule and pass it to iptables
 new      - create new chain
 create   - same as new
 remove   - remove chain
 delete   - same as remove
 zero     - zero packet and byte counters in chain
 policy   - set default policy for chain
 rename   - rename chain

Options for action 'show' or 'list':
 -n or numeric - numeric output for IP addresses, ports and services
 -v or verbose - verbose output of rules
 -x or exact   - expand numbers instead of rounded numbers
 --line-numbers or lines - display line number for each rule
На данный момент он "умеет" частично "угадывать" интерфейс, таблицу и цепочку (если их не передали в командной строке) и все действия, кроме counters. Так же поддерживается маска all для интерфейсов, таблиц и цепочек.

Примеры команд

  • Выгрузить (flush) все правила из всех цепочек всех таблиц, удалить цепочки, заданные пользователем, выгрузить все загруженные модули:
    efw default stop
  • Выгрузить (путем удаления каждого правила в обратном порядке) все правила из цепочки FORWARD таблицы filter для интерфейса eth0:
    efw eth0 unload
  • Загрузить все правила для всех цепочек во всех таблицах всех интерфейсов:
    efw all all all load
  • Обработать правило и добавить его во все цепочки таблицы filter:
    efw default filter all rule accept all from any
  • Если вы изменяете какое-либо правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо:
    • Вариант 1: Выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов;
    • Вариант 2: После изменения использовать команду efw default restart (она полностью удалит все правила, однако, пользовательские цепочки других интерфейсов не будут затронуты), и далее загрузить заново правила для требуемого или всех интерфейсов;

Таким образом, наиболее используемой командой при изменении конфигурации сетевого экрана является:

efw default stop ; efw all start

Прочее

Конвертор правил, а точнее, дампа iptables-save (альфа версия и требует пакет? ruby) в соответствующее расположение правил в etcnet


Данное руководство относится к версии etcnet 0.8.5 и выше.