MFen: handbook/firewalls/chapter.sgml 1.70 --> 1.94

This commit is contained in:
Taras Korenko 2010-08-18 16:32:06 +00:00
parent 4fbfd04300
commit b029def3de
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=36264

View file

@ -4,7 +4,7 @@
$FreeBSD$ $FreeBSD$
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/firewalls/chapter.sgml,v 1.16 2006/06/20 18:02:32 marck Exp $ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/firewalls/chapter.sgml,v 1.16 2006/06/20 18:02:32 marck Exp $
Original revision: 1.70 Original revision: 1.94
XXX: contains non-translated sections! XXX XXX: contains non-translated sections! XXX
--> -->
@ -47,7 +47,7 @@
<para>Межсетевые экраны (firewall, брандмауэр) <para>Межсетевые экраны (firewall, брандмауэр)
делают возможной фильтрацию входящего и исходящего делают возможной фильтрацию входящего и исходящего
трафика, идущего через систему. Межсетевой экран использует один трафика, идущего через вашу систему. Межсетевой экран использует один
или более наборов <quote>правил</quote> для проверки сетевых или более наборов <quote>правил</quote> для проверки сетевых
пакетов при их входе или выходе через сетевое соединение, он пакетов при их входе или выходе через сетевое соединение, он
или позволяет прохождение трафика или блокирует его. Правила или позволяет прохождение трафика или блокирует его. Правила
@ -73,9 +73,10 @@
<listitem> <listitem>
<para>Для поддержки преобразования сетевых адресов (network <para>Для поддержки преобразования сетевых адресов (network
address translation, <acronym>NAT</acronym>), что позволяет address translation, <acronym>NAT</acronym>), что дает возможность
использование во внутренней сети приватных задействовать во внутренней сети приватные <acronym>IP</acronym>
<acronym>IP</acronym> адресов (либо через один выделенный адреса и совместно использовать одно подключение к сети Интернет
(либо через один выделенный
<acronym>IP</acronym> адрес, либо через адрес из пула <acronym>IP</acronym> адрес, либо через адрес из пула
автоматически присваиваемых публичных адресов).</para> автоматически присваиваемых публичных адресов).</para>
</listitem> </listitem>
@ -135,10 +136,22 @@
Он пропускает только трафик, соответствующий правилам и Он пропускает только трафик, соответствующий правилам и
блокирует все остальное.</para> блокирует все остальное.</para>
<para>Включающие межсетевые экраны обычно более безопасны, чем <para>Включающий межсетевой экран обеспечивает гораздо большую степень
контроля исходящего трафика. Поэтому включающий межсетевой экран
является лучшим выбором для систем, предоставляющих сервисы в сети
Интернет. Он также контролирует тип трафика, порождаемого вне
и направляющегося в вашу приватную сеть. Трафик, не попавший в правила,
блокируется, а в файл протокола вносятся соответствующие записи.
Включающие межсетевые экраны обычно более безопасны, чем
исключающие, поскольку они существенно уменьшают риск исключающие, поскольку они существенно уменьшают риск
пропуска межсетевым экраном нежелательного трафика.</para> пропуска межсетевым экраном нежелательного трафика.</para>
<note>
<para>Если не указано иначе, то все приведенные в этом разделе примеры
наборов правил и конфигураций относятся к типу включающего межсетевого
экрана.</para>
</note>
<para>Безопасность может быть дополнительно повышена с <para>Безопасность может быть дополнительно повышена с
использованием <quote>межсетевого экрана с сохранением использованием <quote>межсетевого экрана с сохранением
состояния</quote>. Такой межсетевой экран сохраняет информацию состояния</quote>. Такой межсетевой экран сохраняет информацию
@ -149,37 +162,46 @@
(Denial of Service, отказ в обслуживании), если множество (Denial of Service, отказ в обслуживании), если множество
новых соединений открывается очень быстро. Большинство новых соединений открывается очень быстро. Большинство
межсетевых экранов позволяют комбинировать поведение с сохранением межсетевых экранов позволяют комбинировать поведение с сохранением
состояния и без сохранения состояния, что оптимально состояния и без сохранения состояния, что позволяет создавать
для реальных применений.</para> оптимальную конфигурацию для каждой конкретной системы.</para>
</sect1> </sect1>
<sect1 id="firewalls-apps"> <sect1 id="firewalls-apps">
<title>Пакеты межсетевых экранов</title> <title>Пакеты межсетевых экранов</title>
<para>В &os; встроено три программных межсетевых экрана. <para>В базовую систему &os; встроено три программных межсетевых экрана.
Это <emphasis>IPFILTER</emphasis> (известный также как Это <emphasis>IPFILTER</emphasis> (известный также как
<acronym>IPF</acronym>), <emphasis>IPFIREWALL</emphasis> (известный также <acronym>IPF</acronym>), <emphasis>IPFIREWALL</emphasis> (известный также
как <acronym>IPFW</acronym>) и <emphasis>OpenBSD PacketFilter</emphasis> как <acronym>IPFW</acronym>) и <emphasis>OpenBSD PacketFilter</emphasis>
(также известный как<acronym>PF</acronym>). (также известный как <acronym>PF</acronym>).
Помимо этого, &os; содержит два пакета ограничения трафика (шейпера): Помимо этого, &os; содержит два пакета ограничения трафика
&man.altq.4; и &man.dummynet.4;. Dummynet традиционно сильно связан с (по существу, предназначенных для контроля пропускной способности
<acronym>IPFW</acronym>, а <acronym>ALTQ</acronym> с сетевого соединения): &man.altq.4; и &man.dummynet.4;. Dummynet
<acronym>IPF</acronym> и <acronym>PF</acronym>. традиционно сильно связан с <acronym>IPFW</acronym>, а
IPF, IPFW и PF для контроля исходящих и входящих пакетов <acronym>ALTQ</acronym> с <acronym>PF</acronym>.
В настоящее время IPFILTER не поддерживает ограничение пропускной
способности сетевого соединения. Для реализации этой функции
предлагается использовать IPFILTER совместно с одним из двух существующих
пакетов ограничения трафика. Конфигурация следующая: IPFILTER
задействуется для фильтрации и трансляции трафика, а
<acronym>IPFW</acronym> с &man.dummynet.4; <emphasis>или</emphasis>
<acronym>PF</acronym> с <acronym>ALTQ</acronym>
&mdash; для контроля пропускной способности сетевого соединения.
IPFW и PF для контроля исходящих и входящих пакетов
используют наборы правил, хотя и разными способами с разным используют наборы правил, хотя и разными способами с разным
синтаксисом правил.</para> синтаксисом правил.</para>
<para>Причина, по которой в &os; включено более одного пакета <para>Причина, по которой в &os; включено более одного пакета
межсетевых экранов, заключается в том, что разные сети выдвигают межсетевых экранов, заключается в том, что разные пользователи выдвигают
к ним различные требования и используют разные предпочтения. к ним различные требования и используют разные предпочтения.
Нет одного пакета, который был бы очевидно лучше других.</para> Нет одного пакета, который был бы очевидно лучше других.</para>
<para>Автор предпочитает IPFILTER, поскольку его <para>Автор предпочитает IPFILTER, поскольку его
правила с сохранением состояния гораздо проще использовать правила с сохранением состояния гораздо проще использовать
совместно с <acronym>NAT</acronym>; кроме того, в него встроен совместно с <acronym>NAT</acronym>; кроме того, в него встроен
ftp прокси, упрощающий настройку безопасного внешнего использования ftp прокси, что упрощает правила для фильтрации исходящих FTP
FTP.</para> соединений.</para>
<para>Поскольку все межсетевые экраны основаны на анализе значений выбранных <para>Поскольку все межсетевые экраны основаны на анализе значений выбранных
полей заголовка пакета, для создания правил межсетевого экрана необходимо полей заголовка пакета, для создания правил межсетевого экрана необходимо
@ -190,7 +212,19 @@
</sect1> </sect1>
<sect1 id="firewalls-pf"> <sect1 id="firewalls-pf">
<title>Packet Filter Firewall (PF, межсетевой экран OpenBSD)</title> <sect1info>
<authorgroup>
<author>
<firstname>John</firstname>
<surname>Ferrell</surname>
<contrib>Пересмотрел и обновил </contrib>
<!-- 24 March 2008 -->
</author>
</authorgroup>
</sect1info>
<title>Packet Filter (PF, межсетевой экран OpenBSD) и
<acronym>ALTQ</acronym></title>
<indexterm> <indexterm>
<primary>межсетевой экран</primary> <primary>межсетевой экран</primary>
@ -206,44 +240,65 @@
возможностей, в котором есть опциональная поддержка возможностей, в котором есть опциональная поддержка
<acronym>ALTQ</acronym> (Alternate Queuing). <acronym>ALTQ</acronym> (Alternate Queuing).
<acronym>ALTQ</acronym> предоставляет управление пропускной способностью <acronym>ALTQ</acronym> предоставляет управление пропускной способностью
Quality of Service (<acronym>QoS</acronym>), позволяющее гарантировать Quality of Service (<acronym>QoS</acronym>).</para>
пропускную способность для различных сервисов на основе фильтрующих
правил. Проект OpenBSD поддерживает Руководство
Пользователя PF, которое не было внесено в этот раздел руководства
во избежание дублирования работы.</para>
<para>Дополнительную информацию можно получить с веб сайта PF для &os;: <para>Проект OpenBSD осуществляет замечательную работу по поддержке
<ulink url="http://www.openbsd.org/faq/pf/">PF FAQ</ulink>. Этот раздел
руководства фокусируется на взаимосвязи <acronym>PF</acronym> и
&os;, предоставляя лишь общую информацию по его использованию.
За более подробной информацией по использованию <acronym>PF</acronym>
обратитесь к <ulink
url="http://www.openbsd.org/faq/pf/">PF FAQ</ulink>.</para>
<para>Дополнительные сведения о PF для &os; можно получить с веб сайта:
<ulink url="http://pf4freebsd.love2party.net/"></ulink>.</para> <ulink url="http://pf4freebsd.love2party.net/"></ulink>.</para>
<sect2> <sect2>
<title>Включение PF</title> <title>Использование модуля ядра PF</title>
<para>PF включен в базовую поставку &os; версии 5.3 и выше в качестве <para>Чтобы загрузить PF как модуль ядра, добавьте следующую строку
отдельного загружаемого модуля. PF динамически подгружает модуль ядра в <filename>/etc/rc.conf</filename>:</para>
если включена переменная rc.conf <literal>pf_enable="YES"</literal>.
Загружаемый модуль создан с включенным &man.pflog.4;.</para> <programlisting>pf_enable="YES"</programlisting>
<para>Далее, выполните стартовый скрипт:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/pf start</userinput></screen>
<para>Учтите, модуль PF не загрузится, если он не сможет найти
конфигурационный файл с набором правил. По умолчанию размещение
файла с правилами следующее: <filename>/etc/pf.conf</filename>.
Если путь к файлу отличается от вышеприведённого, то внесите в
<filename>/etc/rc.conf</filename> строку вида:</para>
<programlisting>pf_rules="<replaceable>/path/to/pf.conf</replaceable>"</programlisting>
<note> <note>
<para>Модуль предполагает, что файл конфигурации вашего ядра содержит <para>Начиная с версии &os;&nbsp;7.0 файл с примерами конфигураций
строки <literal>options INET</literal> и (<filename>pf.conf</filename>) был перемещен из каталога
<literal>device bpf</literal>. Если не определен параметр <filename class="directory">/etc/</filename> в каталог
<literal>NOINET6</literal> для &os; версий до 6.0-RELEASE и <filename class="directory">/usr/share/examples/pf/</filename>.
<literal>NO_INET6</literal> для более поздних версий (например, Для версий &os;, предшествующих 7.0, размещение по умолчанию
в файле &man.make.conf.5;), требуется также параметр &mdash; <filename class="directory">/etc/pf.conf</filename></para>
<literal>options INET6</literal>.</para>
</note> </note>
<para>После загрузки модуля или пересборки ядра с поддержкой PF, <para>Модуль <acronym>PF</acronym> можно также загрузить вручную:</para>
функциональность <application>pf</application> может управляться
при помощи команды <command>pfctl</command>.</para>
<para><application>pf</application> включается при помощи команды</para> <screen>&prompt.root; <userinput>kldload pf.ko</userinput></screen>
<screen>&prompt.root; <userinput>pfctl -e</userinput></screen> <para>Поддержка ведения логов для <acronym>PF</acronym> обеспечивается
модулем <literal>pflog.ko</literal>, для загрузки которого добавьте
следующую строку в <filename>/etc/rc.conf</filename>:</para>
<para>Команда <command>pfctl</command> позволяет управлять правилами <programlisting>pflog_enable="YES"</programlisting>
<application>pf</application>. Дополнительную информацию следует
черпать из страницы справочника &man.pfctl.8;.</para> <para>и запустите на выполнение скрипт:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/pflog start</userinput></screen>
<para>Если вам необходимы другие функциональные возможности
<acronym>PF</acronym>, то придется добавить поддержку
<acronym>PF</acronym> в ядро.</para>
</sect2> </sect2>
<sect2> <sect2>
@ -264,9 +319,18 @@
<secondary>device pfsync</secondary> <secondary>device pfsync</secondary>
</indexterm> </indexterm>
<para>Включение PF путем компиляции с ядром &os; не является обязательным <para>Включение <acronym>PF</acronym> путем компиляции с ядром &os; не является обязательным
требованием, и описано здесь в качестве дополнительной информации. требованием,
При компиляции PF с ядром загружаемый модуль не используется.</para> однако вам может понадобиться
одна из функциональных возможностей, которая не включена в загружаемый
модуль. Например, &man.pfsync.4; являет собой псевдоустройство,
которое вносит определенные изменения в таблицу состояний, используемую
<acronym>PF</acronym>. В дальнейшем, это псевдоустройство может быть
скомпоновано с &man.carp.4; чтобы создать отказоустойчивую систему
межсетевых экранов на основе <acronym>PF</acronym>.
<!-- XXX: "carp" chapter translation is missing (it breaks the build) XXX
Дополнительная информация о протоколе <acronym>CARP</acronym>
находится в <xref linkend="carp"> руководства. --></para>
<para>Пример параметров конфигурации ядра для включения PF находится в <para>Пример параметров конфигурации ядра для включения PF находится в
<filename>/usr/src/sys/conf/NOTES</filename> и показан здесь:</para> <filename>/usr/src/sys/conf/NOTES</filename> и показан здесь:</para>
@ -276,7 +340,7 @@ device pflog
device pfsync</programlisting> device pfsync</programlisting>
<para><literal>device pf</literal> включает поддержку межсетевого экрана <para><literal>device pf</literal> включает поддержку межсетевого экрана
<quote>Packet Filter</quote>.</para> <quote>Packet Filter</quote> (&man.pf.4;).</para>
<para><literal>device pflog</literal> включает необязательное сетевое <para><literal>device pflog</literal> включает необязательное сетевое
псевдоустройство &man.pflog.4;, которое может использоваться для псевдоустройство &man.pflog.4;, которое может использоваться для
@ -286,19 +350,14 @@ device pfsync</programlisting>
<para><literal>device pfsync</literal> включает необязательное <para><literal>device pfsync</literal> включает необязательное
сетевое псевдоустройство &man.pfsync.4;, используемое для сетевое псевдоустройство &man.pfsync.4;, используемое для
отслеживания <quote>изменений состояния</quote>. Поскольку оно отслеживания <quote>изменений состояния</quote>.</para>
не входит в загружаемый модуль, для его использования необходимо
собрать собственное ядро.</para>
<para>Эти настройки будут действовать только после сборки и установки
нового ядра.</para>
</sect2> </sect2>
<sect2> <sect2>
<title>Доступные параметры rc.conf</title> <title>Доступные параметры rc.conf</title>
<para>Для активации PF во время загрузки в <para>Для активации <acronym>PF</acronym> и &man.pflog.4; во время
<filename>/etc/rc.conf</filename> должны быть включены следующие загрузки в &man.rc.conf.5; должны быть включены следующие
переменные:</para> переменные:</para>
<programlisting>pf_enable="YES" # Включить PF (загрузить модуль если необходимо) <programlisting>pf_enable="YES" # Включить PF (загрузить модуль если необходимо)
@ -316,6 +375,91 @@ pflog_flags="" #
</sect2> </sect2>
<sect2>
<title>Создание правил фильтрации</title>
<para>Пакет <acronym>PF</acronym> читает конфигурацию из файла
&man.pf.conf.5; (полный путь: <filename>/etc/pf.conf</filename>);
пакеты отвергаются, пропускаются или модифицируются в соответствии с
правилами и определениями из этого файла. В стандартную поставку
&os; входят несколько файлов с примерами конфигураций, которые
находятся в каталоге <filename
class="directory">/usr/share/examples/pf/</filename>.
За исчерпывающим описанием правил <acronym>PF</acronym> обратитесь
к <ulink url="http://www.openbsd.org/faq/pf/">PF FAQ</ulink>.</para>
<warning>
<para>Изучая <ulink url="http://www.openbsd.org/faq/pf/">PF
FAQ</ulink>, имейте в виду, что различные версии &os; могут
содержать разные версии pf. В настоящий момент
&os;&nbsp;7.<replaceable>X</replaceable> и более поздние
используют ту же версию <acronym>PF</acronym>, которая включена
в OpenBSD&nbsp;4.1.</para>
</warning>
<para>&a.pf; является хорошим местом, чтобы задавать вопросы по
конфигурации и использованию пакета <acronym>PF</acronym>.
Не забудьте проверить архивы списка рассылки перед тем, как
задавать вопрос.</para>
</sect2>
<sect2>
<title>Работа с PF</title>
<para>Для управления <acronym>PF</acronym> используйте утилиту
&man.pfctl.8;. Ниже приведено несколько полезных команд (все
возможные команды и опции приведены на странице справочника
&man.pfctl.8;):</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>Команда</entry>
<entry>Действие</entry>
</row>
</thead>
<tbody>
<row>
<entry><command>pfctl <option>-e</option></command></entry>
<entry>Включить PF</entry>
</row>
<row>
<entry><command>pfctl <option>-d</option></command></entry>
<entry>Выключить PF</entry>
</row>
<row>
<entry><command>pfctl <option>-F</option> all <option>-f</option> /etc/pf.conf</command></entry>
<entry>Сбросить все правила (NAT, правила фильтрации, состояния
соединений, таблицы и т.д.) и загрузить новые с файла
<filename>/etc/pf.conf</filename></entry>
</row>
<row>
<entry><command>pfctl <option>-s</option> [ rules | nat | state ]</command></entry>
<entry>Отобразить правила фильтрации, правила NAT или
таблицу состояний соединений</entry>
</row>
<row>
<entry><command>pfctl <option>-vnf</option> /etc/pf.conf</command></entry>
<entry>Проверить <filename>/etc/pf.conf</filename> на наличие
ошибок, но сами наборы правил не загружать</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2> <sect2>
<title>Включение <acronym>ALTQ</acronym></title> <title>Включение <acronym>ALTQ</acronym></title>
@ -324,7 +468,9 @@ pflog_flags="" #
<acronym>ALTQ</acronym> поддерживается не всеми существующими <acronym>ALTQ</acronym> поддерживается не всеми существующими
драйверами сетевых карт. Для просмотра списка поддерживаемых драйверами сетевых карт. Для просмотра списка поддерживаемых
устройств в вашем релизе &os; обратитесь к странице справочника устройств в вашем релизе &os; обратитесь к странице справочника
&man.altq.4;. Следующие параметры включат <acronym>ALTQ</acronym> &man.altq.4;.</para>
<para>Следующие параметры включат <acronym>ALTQ</acronym>
и добавят дополнительную функциональность.</para> и добавят дополнительную функциональность.</para>
<programlisting>options ALTQ <programlisting>options ALTQ
@ -338,70 +484,42 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
<para><literal>options ALTQ</literal> включает подсистему <para><literal>options ALTQ</literal> включает подсистему
<acronym>ALTQ</acronym>.</para> <acronym>ALTQ</acronym>.</para>
<para><literal>options ALTQ_CBQ</literal> включает Class Based <para><literal>options ALTQ_CBQ</literal> включает <emphasis>Class Based
Queuing (<acronym>CBQ</acronym>). <acronym>CBQ</acronym> Queuing</emphasis> (<acronym>CBQ</acronym>). <acronym>CBQ</acronym>
позволяет распределять пропускную способность соединений позволяет распределять пропускную способность соединений
по классам или очередям для выставления приоритетов трафика по классам или очередям для выставления приоритетов трафика
на основе правил фильтрации.</para> на основе правил фильтрации.</para>
<para><literal>options ALTQ_RED</literal> включает Random Early <para><literal>options ALTQ_RED</literal> включает <emphasis>Random Early
Detection (<acronym>RED</acronym>). <acronym>RED</acronym> Detection</emphasis> (<acronym>RED</acronym>). <acronym>RED</acronym>
используется для предотвращения перегрузки сети. используется для предотвращения перегрузки сети.
<acronym>RED</acronym> вычисляет длину очереди и сравнивает ее <acronym>RED</acronym> вычисляет длину очереди и сравнивает ее
с минимальной и максимальной границей очереди. Если с минимальным и максимальным значением длины очереди. Если
очередь превышает максимум, все новые пакеты отбрасываются. очередь превышает максимум, все новые пакеты будут отброшены.
В соответствии со своим названием, <acronym>RED</acronym> В соответствии со своим названием, <acronym>RED</acronym>
отбрасывает пакеты из различные соединений в произвольном отбрасывает пакеты из различные соединений в произвольном
порядке.</para> порядке.</para>
<para><literal>options ALTQ_RIO</literal> включает Random Early <para><literal>options ALTQ_RIO</literal> включает <emphasis>Random Early
Detection In and Out.</para> Detection In and Out</emphasis>.</para>
<para><literal>options ALTQ_HFSC</literal> включает <para><literal>options ALTQ_HFSC</literal> включает
Hierarchical Fair Service Curve Packet Scheduler. Дополнительная <emphasis>Hierarchical Fair Service Curve Packet Scheduler</emphasis>.
Дополнительная
информация о <acronym>HFSC</acronym> находится по адресу: <ulink информация о <acronym>HFSC</acronym> находится по адресу: <ulink
url="http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html"></ulink>. url="http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html"></ulink>.
</para> </para>
<para><literal>options ALTQ_PRIQ</literal> включает Priority <para><literal>options ALTQ_PRIQ</literal> включает <emphasis>Priority
Queuing (<acronym>PRIQ</acronym>). <acronym>PRIQ</acronym> Queuing</emphasis> (<acronym>PRIQ</acronym>). <acronym>PRIQ</acronym>
всегда пропускает трафик из более высокой очереди всегда первым пропускает трафик из очереди c более высоким
первым.</para> приоритетом.</para>
<para><literal>options ALTQ_NOPCC</literal> включает <para><literal>options ALTQ_NOPCC</literal> включает
поддержку <acronym>SMP</acronym> для <acronym>ALTQ</acronym>. поддержку <acronym>SMP</acronym> для <acronym>ALTQ</acronym>.
Эта опция необходима для <acronym>SMP</acronym> Эта опция необходима для <acronym>SMP</acronym>
систем.</para> систем.</para>
</sect2> </sect2>
<sect2>
<title>Создание правил фильтрации</title>
<para>Пакет PF читает конфигурацию из файла &man.pf.conf.5;; пакеты
отвергаются, пропускаются или модифицируются в соответствии с
правилами и определениями из этого файла. В стандартную поставку
&os; входит файл <filename>/etc/pf.conf</filename>, содержащий
полезные примеры с комментариями.</para>
<para>Несмотря на наличие собственного для &os; файла
<filename>/etc/pf.conf</filename>, синтаксис его совпадает с
OpenBSD. Отличное руководство по конфигурации
<application>pf</application>, написанное группой разработки OpenBSD,
расположено по адресу
<ulink url="http://www.openbsd.org/faq/pf/"></ulink>.</para>
<warning>
<para>Изучая Руководство PF, имейте в виду, что различные версии
&os; содержат разные версии pf. <application>pf</application>
в &os;&nbsp;5.X соответствует OpenBSD версии 3.5, в &os;&nbsp;6.X
pf соответствует OpenBSD версии 3.7.</para>
</warning>
<para>&a.pf; является хорошим местом, чтобы задавать вопросы по
конфигурации и использованию пакета <application>pf</application>.
Не забудьте проверить архивы списка рассылки перед тем, как
задавать вопрос.</para>
</sect2>
</sect1> </sect1>
<sect1 id="firewalls-ipf"> <sect1 id="firewalls-ipf">
@ -421,18 +539,18 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
<para>Автором IPFILTER является Darren Reed. IPFILTER не <para>Автором IPFILTER является Darren Reed. IPFILTER не
зависит от операционной системы: это приложение с открытыми зависит от операционной системы: это приложение с открытыми
исходными текстами, которое было портировано на операционные исходными текстами, которое было портировано на операционные
системы &os;, NetBSD, OpenBSD, SunOS, HP/UX, и Solaris. системы &os;, NetBSD, OpenBSD, &sunos;, HP/UX, и &solaris;.
IPFILTER активно разрабатывается и поддерживается, регулярно IPFILTER активно разрабатывается и поддерживается, регулярно
выпускаются обновленные версии.</para> выпускаются обновленные версии.</para>
<para>IPFILTER основан на межсетевом экране уровня ядра, механизм <para>IPFILTER основан на межсетевом экране и механизме
<acronym>NAT</acronym> может управляться и контролироваться <acronym>NAT</acronym> уровня ядра, которые управляются и контролируются
через пользовательский интерфейс. Правила межсетевого экрана утилитами уровня пользовательских процессов. Правила межсетевого экрана
могут устанавливаться или удаляться утилитой &man.ipf.8;. могут устанавливаться или удаляться утилитой &man.ipf.8;.
Правила <acronym>NAT</acronym> могут устанавливаться или Правила <acronym>NAT</acronym> могут устанавливаться или
удаляться утилитой &man.ipnat.1;. Утилита &man.ipfstat.8; удаляться утилитой &man.ipnat.1;. Утилита &man.ipfstat.8;
выводит статистику IPFILTER для ядра. Программа выводит статистику IPFILTER для ядра. Программа
&man.ipmon.8; заносит действия IPFILTER в файлы системных &man.ipmon.8; может заносить действия IPFILTER в файлы системных
протоколов.</para> протоколов.</para>
<para>IPF был первоначально написан с использованием правила <para>IPF был первоначально написан с использованием правила
@ -440,7 +558,7 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
с правилами без сохранения состояния. Со временем IPF с правилами без сохранения состояния. Со временем IPF
был расширен и включает параметры <quote>quick</quote> и был расширен и включает параметры <quote>quick</quote> и
<quote>keep state</quote> (сохранение состояния), которые <quote>keep state</quote> (сохранение состояния), которые
кардинальным образом изменяют обработку пакетов. кардинальным образом изменяют логику обработки пакетов.
Официальная документация IPF включает традиционные параметры Официальная документация IPF включает традиционные параметры
правил с традиционной последовательностью обработки пакетов. правил с традиционной последовательностью обработки пакетов.
Измененные функции включены в виде дополнительных параметров, Измененные функции включены в виде дополнительных параметров,
@ -451,23 +569,12 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
состояния <quote>keep state</quote>. Это основа для создания состояния <quote>keep state</quote>. Это основа для создания
включающего межсетевого экрана.</para> включающего межсетевого экрана.</para>
<!-- практически полное дублирование вышеизложенного <para>Детальное описание традиционных методов обработки правил:
<para>An inclusive firewall only allows packets matching the
rules to pass through. This way you can control what services
can originate behind the firewall destined for the public
Internet and also control the services which can originate from
the public Internet accessing your private network. Everything
else is blocked and logged by default design. Inclusive
firewalls are much, much more secure than exclusive firewall
rule sets and is the only rule set type covered herein.</para>
-->
<para>Детальное описание методов обработки правил:
<ulink url="http://www.obfuscation.org/ipf/ipf-howto.html#TOC_1"></ulink> <ulink url="http://www.obfuscation.org/ipf/ipf-howto.html#TOC_1"></ulink>
и и
<ulink url="http://coombs.anu.edu.au/~avalon/ip-filter.html"></ulink>.</para> <ulink url="http://coombs.anu.edu.au/~avalon/ip-filter.html"></ulink>.</para>
<para>IPF FAQ <para>IPF FAQ находится по адресу
<ulink url="http://www.phildev.net/ipf/index.html"></ulink>.</para> <ulink url="http://www.phildev.net/ipf/index.html"></ulink>.</para>
<para>Архив списка рассылки по IPFilter с возможностью поиска доступен <para>Архив списка рассылки по IPFilter с возможностью поиска доступен
@ -484,10 +591,10 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
<para>IPF включен в базовую систему &os; в качестве отдельного <para>IPF включен в базовую систему &os; в качестве отдельного
загружаемого модуля. Система динамически загрузит модуль IPF, загружаемого модуля. Система динамически загрузит модуль IPF,
если в rc.conf указана переменная если в <filename>rc.conf</filename> указана переменная
<literal>ipfilter_enable="YES"</literal>. Модуль создается <literal>ipfilter_enable="YES"</literal>. Модуль создается
с включенным протоколированием и правилом по умолчанию с включенным протоколированием и правилом по умолчанию
<literal>block all</literal> (пропускать все). Для изменения <literal>pass all</literal> (пропускать все). Для изменения
правила по умолчанию не обязательно собирать ядро с новыми правила по умолчанию не обязательно собирать ядро с новыми
параметрами. Просто добавьте в конец набора правило, параметрами. Просто добавьте в конец набора правило,
блокирующее все пакеты.</para> блокирующее все пакеты.</para>
@ -516,7 +623,7 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
<secondary>параметры ядра</secondary> <secondary>параметры ядра</secondary>
</indexterm> </indexterm>
<para>Сборка ядра с &os; включением IPF не обязательна. <para>Включение IPF в ядро &os; не является обязательным требованием.
Эта процедура представлена здесь в качестве дополнительной Эта процедура представлена здесь в качестве дополнительной
информации. При включении IPF в ядро загружаемый модуль информации. При включении IPF в ядро загружаемый модуль
не используется.</para> не используется.</para>
@ -580,7 +687,7 @@ ipnat_rules="/etc/ipnat.rules" #
<primary><command>ipf</command></primary> <primary><command>ipf</command></primary>
</indexterm> </indexterm>
<para>Команда ipf используется для загрузки файла с правилами. <para>Команда &man.ipf.8; используется для загрузки файла с правилами.
Обычно создается файл, содержащий подготовленный набор Обычно создается файл, содержащий подготовленный набор
правил, который полностью замещает набор, используемый правил, который полностью замещает набор, используемый
на данный момент:</para> на данный момент:</para>
@ -591,14 +698,15 @@ ipnat_rules="/etc/ipnat.rules" #
<para><option>-f</option> указывает файл с правилами, который необходимо загрузить.</para> <para><option>-f</option> указывает файл с правилами, который необходимо загрузить.</para>
<para>Таким образом, после внесения изменений в файл правил и <para>Это дает вам возможность отредактировать файл с правилами,
запуска вышеприведенной команды IPF, набор правил межсетевого экрана запустить вышеприведенную команду IPF, тем самым обновить набор правил
обновляется без перезагрузки системы. Для обновления правил работающего межсетевого экрана без перезагрузки системы. Для
обновления правил
такой подход очень удобен, поскольку команду можно выполнять такой подход очень удобен, поскольку команду можно выполнять
столько раз, сколько нужно.</para> столько раз, сколько нужно.</para>
<para>На странице справочной системы &man.ipf.8; находится <para>На странице справочной системы &man.ipf.8; находится
подробная информация по флагам этой команды.</para> подробная информация по всем флагам этой команды.</para>
<para>Набор правил для команды &man.ipf.8; должен быть в виде <para>Набор правил для команды &man.ipf.8; должен быть в виде
стандартного текстового файла. Правила, написанные в виде стандартного текстового файла. Правила, написанные в виде
@ -654,7 +762,8 @@ ipnat_rules="/etc/ipnat.rules" #
<para>При задании флага <option>-i</option> или <option>-o</option> <para>При задании флага <option>-i</option> или <option>-o</option>
соответственно для входящих или соответственно для входящих или
или исходящих пакетов, будет получен и отображен список правил, исходящих пакетов, команда извлечет и отобразит соответствующий
список правил, установленных и
используемых на данный момент.</para> используемых на данный момент.</para>
<para><command>ipfstat -in</command> отображает правила, применяемые <para><command>ipfstat -in</command> отображает правила, применяемые
@ -708,16 +817,16 @@ ipnat_rules="/etc/ipnat.rules" #
<para>Для того, чтобы стало возможно использование команды <para>Для того, чтобы стало возможно использование команды
<command>ipmon</command>, необходимо включить параметр ядра <command>ipmon</command>, необходимо включить параметр ядра
IPFILTER_LOG. Эта команда может использоваться в двух различных <literal>IPFILTER_LOG</literal>. Эта команда может использоваться в двух различных
режимах. В основном режиме, который используется по умолчанию, режимах. В основном режиме, который используется по умолчанию,
она используется без флага <option>-D</option>.</para> она используется без флага <option>-D</option>.</para>
<para>В режиме даемона создается непрерывный протокол, и возможен <para>В режиме даемона создается непрерывный протокол, и возможен
просмотр предыдущих событий. В этом режиме IPFILTER работает просмотр предыдущих событий. В этом режиме IPFILTER работает
в &os;. Поскольку в &os; встроена функция ротации файлов в &os;. Поскольку в &os; встроена функция ротации файлов
протокола, лучше использовать syslogd, чем используемый по протокола, лучше использовать &man.syslogd.8;, чем используемый по
умолчанию вывод в обычный файл. В <filename>rc.conf</filename> умолчанию вывод в обычный файл. В <filename>rc.conf</filename>
по умолчанию ipmon_flags имеет значение <option>-Ds</option>:</para> по умолчанию <literal>ipmon_flags</literal> имеет значение <option>-Ds</option>:</para>
<programlisting>ipmon_flags="-Ds" # D = start as daemon <programlisting>ipmon_flags="-Ds" # D = start as daemon
# s = log to syslog # s = log to syslog
@ -725,9 +834,9 @@ ipnat_rules="/etc/ipnat.rules" #
# n = map IP &amp; port to names</programlisting> # n = map IP &amp; port to names</programlisting>
<para>Описывать преимущества протоколирования излишне. Например, <para>Описывать преимущества протоколирования излишне. Например,
оно дает возможность просмотра информации о отброшенных оно дает возможность отложенного просмотра информации об отброшенных
пакетах, откуда они пришли и куда направлялись. Это дает пакетах, откуда они пришли и куда направлялись.
определенные возможности отслеживания атак.</para> Эта информация существенно помогает при отслеживании атак.</para>
<para>Даже с включенным протоколированием, IPF не ведет протокол <para>Даже с включенным протоколированием, IPF не ведет протокол
для каждого правила. Администратор межсетевого экран должен решить, для каждого правила. Администратор межсетевого экран должен решить,
@ -735,26 +844,25 @@ ipnat_rules="/etc/ipnat.rules" #
слово log к этим правилам. Обычно протоколируются только правила, слово log к этим правилам. Обычно протоколируются только правила,
отбрасывающие пакеты.</para> отбрасывающие пакеты.</para>
<para>Довольно часто правило по умолчанию, запрещающее прохождение <para>Включение в набор последнего правила, запрещающего прохождение
пакетов, включается в набор последним, и для него применяется пакетов, в сочетании с ключевым словом <literal>log</literal> является
ключевое слово log. Так вы можете увидеть все пакеты, не довольно распространённой практикой. Так вы можете увидеть все пакеты,
не
попадающие ни под одно правило набора.</para> попадающие ни под одно правило набора.</para>
</sect2> </sect2>
<sect2> <sect2>
<title>Протоколирование IPMON</title> <title>Протоколирование IPMON</title>
<para>Для сбора данных <application>Syslogd</application> <para>Для разделения собираемых данных
использует свой собственный <application>syslogd</application> использует свой собственный
специальный метод. Он использует группировку по категории специальный метод. Он использует группировку по категории
(<quote>facility</quote>) и уровню (<quote>level</quote>). (<quote>facility</quote>) и уровню (<quote>level</quote>).
IPMON в режиме <option>-Ds</option> использует IPMON в режиме <option>-Ds</option> использует
<literal>security</literal> <literal>local0</literal>
в качестве имени <quote>категории</quote>. в качестве имени <quote>категории</quote>.
Все протоколируемые IPMON данные также Для дальнейшего разделения
отправляются на <literal>security</literal>. протоколируемых данных, если такое необходимо, могут быть использованы следующие
Для сбора
протоколируемых данных могут быть использованы следующие
уровни:</para> уровни:</para>
<screen>LOG_INFO - packets logged using the "log" keyword as the action rather than pass or block. <screen>LOG_INFO - packets logged using the "log" keyword as the action rather than pass or block.
@ -765,29 +873,29 @@ LOG_ERR - packets which have been logged and which can be considered short</scre
<para>Для указания IPFILTER протоколировать все данные в <para>Для указания IPFILTER протоколировать все данные в
<filename>/var/log/ipfilter.log</filename>, создайте этот <filename>/var/log/ipfilter.log</filename>, создайте этот
файл следующей командой:</para> файл заранее, выполнив следующую команду:</para>
<screen>&prompt.root; <userinput>touch /var/log/ipfilter.log</userinput></screen> <screen>&prompt.root; <userinput>touch /var/log/ipfilter.log</userinput></screen>
<para>Функционирование syslog управляется настройками в файле <para>Функционирование &man.syslogd.8; управляется настройками в файле
<filename>/etc/syslog.conf</filename>. Файл <filename>/etc/syslog.conf</filename>. Файл
<filename>syslog.conf</filename> позволяет достаточно гибко <filename>syslog.conf</filename> позволяет достаточно гибко
настроить обработку системных сообщений, выдаваемых программами, настроить обработку системных сообщений, выдаваемых программами,
такими как IPF.</para> такими как IPF.</para>
<para>Добавьте в <filename>/etc/syslog.conf</filename> <para>Добавьте в <filename>/etc/syslog.conf</filename>
следующий оператор:</para> следующую запись:</para>
<programlisting>security.* /var/log/ipfilter.log</programlisting> <programlisting>local0.* /var/log/ipfilter.log</programlisting>
<para><literal>security.*</literal> означает запись всех <para><literal>local0.*</literal> означает запись всех
протоколируемых сообщений в указанный файл.</para> протоколируемых сообщений в указанный файл.</para>
<para>Для применения внесенных в <para>Для применения внесенных в
<filename>/etc/syslog.conf</filename> изменений вы можете <filename>/etc/syslog.conf</filename> изменений вы можете
перезагрузиться или заставить syslog перечитать перезагрузиться или заставить &man.syslogd.8; перечитать
<filename>/etc/syslog.conf</filename>, выполнив команду <filename>/etc/syslog.conf</filename>, выполнив команду
<command>/etc/rc.d/syslogd reload</command></para> <command>/etc/rc.d/syslogd reload</command>.</para>
<para>Не забудьте отредактировать <para>Не забудьте отредактировать
<filename>/etc/newsyslog.conf</filename> для ротации только <filename>/etc/newsyslog.conf</filename> для ротации только
@ -847,23 +955,23 @@ LOG_ERR - packets which have been logged and which can be considered short</scre
<listitem> <listitem>
<para><literal>PR</literal>, с последующим именем или <para><literal>PR</literal>, с последующим именем или
номером протокола, например PR tcp.</para> номером протокола, например <literal>PR tcp</literal>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para><literal>len</literal>, с последующей длиной заголовка <para><literal>len</literal>, с последующей длиной заголовка
и общей длиной пакета, например len 20 40.</para> и общей длиной пакета, например <literal>len 20 40</literal>.</para>
</listitem> </listitem>
</orderedlist> </orderedlist>
<para>Для <acronym>TCP</acronym> пакетов добавляется дополнительное <para>Для <acronym>TCP</acronym> пакетов добавляется дополнительное
поле, начинающееся с дефиса, за которым следуют буквы, поле, начинающееся с дефиса, за которым следуют буквы,
соответствующие установленным флагам. На странице справочника соответствующие установленным флагам. На странице справочника
находится список букв и флагов.</para> &man.ipf.5; находится список букв и флагов.</para>
<para>Для пакетов ICMP, в конце находятся два поля, <para>Для пакетов ICMP, в конце находятся два поля,
одно всегда <quote>ICMP</quote>, а во втором тип одно всегда <quote>ICMP</quote>, а второе содержит тип и подтип
ICMP сообщения (message и sub-message), ICMP сообщения (message и sub-message), разделенные символом косой черты,
например ICMP 3/3 для сообщения <quote>port например ICMP 3/3 для сообщения <quote>port
unreachable</quote>.</para> unreachable</quote>.</para>
</sect2> </sect2>
@ -873,7 +981,7 @@ LOG_ERR - packets which have been logged and which can be considered short</scre
<para>Некоторые опытные пользователи IPF создают файл правил, <para>Некоторые опытные пользователи IPF создают файл правил,
поддерживающий использование символьной подстановки. Основное поддерживающий использование символьной подстановки. Основное
преимущество использования такого скрипта заключается в преимущество использования такого подхода заключается в
возможности изменения значения, присваиваемого символьному возможности изменения значения, присваиваемого символьному
имени, в результате чего во всех правилах, содержащих эту имени, в результате чего во всех правилах, содержащих эту
символьную подстановку, будет использоваться новое значение. символьную подстановку, будет использоваться новое значение.
@ -881,8 +989,8 @@ LOG_ERR - packets which have been logged and which can be considered short</scre
переменные, а затем использовать их сразу в нескольких переменные, а затем использовать их сразу в нескольких
правилах. Ниже дан пример такого использования.</para> правилах. Ниже дан пример такого использования.</para>
<para>Синтаксис скрипта совместим с sh, csh, и <para>Синтаксис скрипта совместим с &man.sh.1;, &man.csh.1;, и
tcsh.</para> &man.tcsh.1;.</para>
<para>Символьная подстановка предваряется знаком доллара: <para>Символьная подстановка предваряется знаком доллара:
<literal>&dollar;</literal>.</para> <literal>&dollar;</literal>.</para>
@ -929,8 +1037,8 @@ EOF
<para>Это все, что требовалось сделать. В данном примере сами <para>Это все, что требовалось сделать. В данном примере сами
правила не важны; важно то, как используется символьная подстановка. правила не важны; важно то, как используется символьная подстановка.
Если вышеприведенный пример помещен в файл Если вышеприведенный пример помещен в файл
<filename>/etc/ipf.rules.script</filename>, вы можете <filename>/etc/ipf.rules.script</filename>, то набор правил можно
перезагрузить набор правил, введя следующую команду:</para> перезагрузить, введя следующую команду:</para>
<screen>&prompt.root; <userinput>sh /etc/ipf.rules.script</userinput></screen> <screen>&prompt.root; <userinput>sh /etc/ipf.rules.script</userinput></screen>
@ -957,8 +1065,8 @@ EOF
строку <literal>ipfilter_enable="NO"</literal> (это значение строку <literal>ipfilter_enable="NO"</literal> (это значение
по умолчанию) в файл <filename>/etc/rc.conf</filename>.</para> по умолчанию) в файл <filename>/etc/rc.conf</filename>.</para>
<para>Поместите скрипт, подобный нижеприведенному в каталог <para>Поместите скрипт, подобный нижеприведенному, в каталог
<filename>/usr/local/etc/rc.d/</filename>. У него должно <filename class="directory">/usr/local/etc/rc.d/</filename>. У него должно
быть однозначно говорящее о его назначении имя, например быть однозначно говорящее о его назначении имя, например
<filename>ipf.loadrules.sh</filename>. Расширение <filename>ipf.loadrules.sh</filename>. Расширение
<filename>.sh</filename> обязательно.</para> <filename>.sh</filename> обязательно.</para>
@ -966,44 +1074,41 @@ EOF
<programlisting>#!/bin/sh <programlisting>#!/bin/sh
sh /etc/ipf.rules.script</programlisting> sh /etc/ipf.rules.script</programlisting>
<para>Права на этот скрипт должны разрешать чтение, запись и <para>Права, установленные на этот файл, должны разрешать чтение, запись и
выполнение владельцу <username>root</username>.</para> выполнение владельцу <username>root</username>.</para>
<screen>&prompt.root; <userinput>chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh</userinput></screen> <screen>&prompt.root; <userinput>chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh</userinput></screen>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<para>Теперь, при загрузке системы, правила IPF будут <para>Теперь, правила IPF будут загружаться при загрузке
загружены.</para> системы.</para>
</sect2> </sect2>
<sect2> <sect2>
<title>IPF Rule Sets</title> <title>Наборы правил IPF</title>
<!-- очередное разжевывание ip basics -->
<para>Набор правил ipf это группа правил, составленных для <para>Набор правил ipf это группа правил, составленных для
пропускания или блокирования пакетов на основе их содержимого. пропускания или блокирования пакетов на основе их содержимого.
Двусторонний обмен пакетами между хостами составляет сессию. Двусторонний обмен пакетами между хостами составляет сессию.
Межсетевой экран обрабатывает пакеты в обеих направлениях, Межсетевой экран обрабатывает как входящие из Интернет пакеты,
<!--некорректно: The firewall rule set processes the так и исходящие пакеты, которые сгенерированы самой системой в ответ
packet two times, once on its arrival from the public Internet на входящий трафик. Для каждой службы <acronym>TCP/IP</acronym>
host and again as it leaves for its return trip back to the (например, telnet, www, mail, и т.п.) назначен протокол и номер
public Internet host. Each TCP/IP service (i.e. telnet, www, привилегированного (прослушиваемого) порта. Пакеты, предназначенные
mail, etc.) is predefined by its protocol, source and для определенного сервиса, порождаются с некоторым исходящим адресом
destination IP address, or the source and destination port и портом из непривилегированного диапазона и направляются
number.--> на определенный адрес и определенный порт назначения. Все
Каждый IP пакет имеет такие характеристики как порт и адрес упомянутые параметры (номера портов и адреса) могут использоваться
источника и назначения. Эти основные характеристики используются как критерии выбора в правилах, пропускающих или блокирующих доступ
для пропускания или блокирования пакетов.</para> к службам <acronym>TCP/IP</acronym>.</para>
<indexterm> <indexterm>
<primary>IPFILTER</primary> <primary>IPFILTER</primary>
<secondary>порядок обработки правил</secondary> <secondary>порядок обработки правил</secondary>
</indexterm> </indexterm>
<!-- XXX: something like this already in
<xref linkend="firewalls-concepts">
AND: the para below is repeated 3 times in this chapter-->
<para>IPF был первоначально написан с использованием логики <para>IPF был первоначально написан с использованием логики
<quote>последнее совпадающее правило побеждает</quote> и <quote>последнее совпадающее правило побеждает</quote> и
только с правилами без сохранения состояния. Со временем только с правилами без сохранения состояния. Со временем
@ -1016,18 +1121,6 @@ sh /etc/ipf.rules.script</programlisting>
Это основа для создания набора правил включающего межсетевого Это основа для создания набора правил включающего межсетевого
экрана.</para> экрана.</para>
<!-- опять network basics, кроме того то же самое повторяется ниже по
тексту практически один в один
<para>An inclusive firewall only allows services matching the
rules through. This way you can control what services can
originate behind the firewall destined for the public Internet
and also control the services which can originate from the
public Internet accessing your private network. Everything
else is blocked and logged by default design. Inclusive
firewalls are much, much securer than exclusive firewall rule
sets and is the only rule set type covered herein.</para>
-->
<warning> <warning>
<para>При работе с правилами межсетевого экрана, будьте <para>При работе с правилами межсетевого экрана, будьте
<emphasis>очень осторожны</emphasis>. Некоторые <emphasis>очень осторожны</emphasis>. Некоторые
@ -1040,9 +1133,7 @@ sh /etc/ipf.rules.script</programlisting>
</warning> </warning>
</sect2> </sect2>
<!-- Перевод остальной части раздела IPF отложен до исправления <!-- Перевод остальной части раздела IPF отложен ... -->
ошибок в следующем sect2 оригинальной версии -->
</sect1> </sect1>
<sect1 id="firewalls-ipfw"> <sect1 id="firewalls-ipfw">