MFen: handbook/firewalls/chapter.sgml 1.70 --> 1.94
This commit is contained in:
parent
4fbfd04300
commit
b029def3de
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=36264
1 changed files with 288 additions and 197 deletions
|
@ -4,7 +4,7 @@
|
|||
$FreeBSD$
|
||||
$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
|
||||
-->
|
||||
|
@ -47,7 +47,7 @@
|
|||
|
||||
<para>Межсетевые экраны (firewall, брандмауэр)
|
||||
делают возможной фильтрацию входящего и исходящего
|
||||
трафика, идущего через систему. Межсетевой экран использует один
|
||||
трафика, идущего через вашу систему. Межсетевой экран использует один
|
||||
или более наборов <quote>правил</quote> для проверки сетевых
|
||||
пакетов при их входе или выходе через сетевое соединение, он
|
||||
или позволяет прохождение трафика или блокирует его. Правила
|
||||
|
@ -73,9 +73,10 @@
|
|||
|
||||
<listitem>
|
||||
<para>Для поддержки преобразования сетевых адресов (network
|
||||
address translation, <acronym>NAT</acronym>), что позволяет
|
||||
использование во внутренней сети приватных
|
||||
<acronym>IP</acronym> адресов (либо через один выделенный
|
||||
address translation, <acronym>NAT</acronym>), что дает возможность
|
||||
задействовать во внутренней сети приватные <acronym>IP</acronym>
|
||||
адреса и совместно использовать одно подключение к сети Интернет
|
||||
(либо через один выделенный
|
||||
<acronym>IP</acronym> адрес, либо через адрес из пула
|
||||
автоматически присваиваемых публичных адресов).</para>
|
||||
</listitem>
|
||||
|
@ -135,10 +136,22 @@
|
|||
Он пропускает только трафик, соответствующий правилам и
|
||||
блокирует все остальное.</para>
|
||||
|
||||
<para>Включающие межсетевые экраны обычно более безопасны, чем
|
||||
<para>Включающий межсетевой экран обеспечивает гораздо большую степень
|
||||
контроля исходящего трафика. Поэтому включающий межсетевой экран
|
||||
является лучшим выбором для систем, предоставляющих сервисы в сети
|
||||
Интернет. Он также контролирует тип трафика, порождаемого вне
|
||||
и направляющегося в вашу приватную сеть. Трафик, не попавший в правила,
|
||||
блокируется, а в файл протокола вносятся соответствующие записи.
|
||||
Включающие межсетевые экраны обычно более безопасны, чем
|
||||
исключающие, поскольку они существенно уменьшают риск
|
||||
пропуска межсетевым экраном нежелательного трафика.</para>
|
||||
|
||||
<note>
|
||||
<para>Если не указано иначе, то все приведенные в этом разделе примеры
|
||||
наборов правил и конфигураций относятся к типу включающего межсетевого
|
||||
экрана.</para>
|
||||
</note>
|
||||
|
||||
<para>Безопасность может быть дополнительно повышена с
|
||||
использованием <quote>межсетевого экрана с сохранением
|
||||
состояния</quote>. Такой межсетевой экран сохраняет информацию
|
||||
|
@ -149,37 +162,46 @@
|
|||
(Denial of Service, отказ в обслуживании), если множество
|
||||
новых соединений открывается очень быстро. Большинство
|
||||
межсетевых экранов позволяют комбинировать поведение с сохранением
|
||||
состояния и без сохранения состояния, что оптимально
|
||||
для реальных применений.</para>
|
||||
состояния и без сохранения состояния, что позволяет создавать
|
||||
оптимальную конфигурацию для каждой конкретной системы.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="firewalls-apps">
|
||||
|
||||
<title>Пакеты межсетевых экранов</title>
|
||||
|
||||
<para>В &os; встроено три программных межсетевых экрана.
|
||||
<para>В базовую систему &os; встроено три программных межсетевых экрана.
|
||||
Это <emphasis>IPFILTER</emphasis> (известный также как
|
||||
<acronym>IPF</acronym>), <emphasis>IPFIREWALL</emphasis> (известный также
|
||||
как <acronym>IPFW</acronym>) и <emphasis>OpenBSD PacketFilter</emphasis>
|
||||
(также известный как<acronym>PF</acronym>).
|
||||
Помимо этого, &os; содержит два пакета ограничения трафика (шейпера):
|
||||
&man.altq.4; и &man.dummynet.4;. Dummynet традиционно сильно связан с
|
||||
<acronym>IPFW</acronym>, а <acronym>ALTQ</acronym> с
|
||||
<acronym>IPF</acronym> и <acronym>PF</acronym>.
|
||||
IPF, IPFW и PF для контроля исходящих и входящих пакетов
|
||||
(также известный как <acronym>PF</acronym>).
|
||||
Помимо этого, &os; содержит два пакета ограничения трафика
|
||||
(по существу, предназначенных для контроля пропускной способности
|
||||
сетевого соединения): &man.altq.4; и &man.dummynet.4;. Dummynet
|
||||
традиционно сильно связан с <acronym>IPFW</acronym>, а
|
||||
<acronym>ALTQ</acronym> с <acronym>PF</acronym>.
|
||||
В настоящее время IPFILTER не поддерживает ограничение пропускной
|
||||
способности сетевого соединения. Для реализации этой функции
|
||||
предлагается использовать IPFILTER совместно с одним из двух существующих
|
||||
пакетов ограничения трафика. Конфигурация следующая: IPFILTER
|
||||
задействуется для фильтрации и трансляции трафика, а
|
||||
<acronym>IPFW</acronym> с &man.dummynet.4; <emphasis>или</emphasis>
|
||||
<acronym>PF</acronym> с <acronym>ALTQ</acronym>
|
||||
— для контроля пропускной способности сетевого соединения.
|
||||
IPFW и PF для контроля исходящих и входящих пакетов
|
||||
используют наборы правил, хотя и разными способами с разным
|
||||
синтаксисом правил.</para>
|
||||
|
||||
<para>Причина, по которой в &os; включено более одного пакета
|
||||
межсетевых экранов, заключается в том, что разные сети выдвигают
|
||||
межсетевых экранов, заключается в том, что разные пользователи выдвигают
|
||||
к ним различные требования и используют разные предпочтения.
|
||||
Нет одного пакета, который был бы очевидно лучше других.</para>
|
||||
|
||||
<para>Автор предпочитает IPFILTER, поскольку его
|
||||
правила с сохранением состояния гораздо проще использовать
|
||||
совместно с <acronym>NAT</acronym>; кроме того, в него встроен
|
||||
ftp прокси, упрощающий настройку безопасного внешнего использования
|
||||
FTP.</para>
|
||||
ftp прокси, что упрощает правила для фильтрации исходящих FTP
|
||||
соединений.</para>
|
||||
|
||||
<para>Поскольку все межсетевые экраны основаны на анализе значений выбранных
|
||||
полей заголовка пакета, для создания правил межсетевого экрана необходимо
|
||||
|
@ -190,7 +212,19 @@
|
|||
</sect1>
|
||||
|
||||
<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>
|
||||
<primary>межсетевой экран</primary>
|
||||
|
@ -206,44 +240,65 @@
|
|||
возможностей, в котором есть опциональная поддержка
|
||||
<acronym>ALTQ</acronym> (Alternate Queuing).
|
||||
<acronym>ALTQ</acronym> предоставляет управление пропускной способностью
|
||||
Quality of Service (<acronym>QoS</acronym>), позволяющее гарантировать
|
||||
пропускную способность для различных сервисов на основе фильтрующих
|
||||
правил. Проект OpenBSD поддерживает Руководство
|
||||
Пользователя PF, которое не было внесено в этот раздел руководства
|
||||
во избежание дублирования работы.</para>
|
||||
Quality of Service (<acronym>QoS</acronym>).</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>
|
||||
|
||||
<sect2>
|
||||
<title>Включение PF</title>
|
||||
<title>Использование модуля ядра PF</title>
|
||||
|
||||
<para>PF включен в базовую поставку &os; версии 5.3 и выше в качестве
|
||||
отдельного загружаемого модуля. PF динамически подгружает модуль ядра
|
||||
если включена переменная rc.conf <literal>pf_enable="YES"</literal>.
|
||||
Загружаемый модуль создан с включенным &man.pflog.4;.</para>
|
||||
<para>Чтобы загрузить PF как модуль ядра, добавьте следующую строку
|
||||
в <filename>/etc/rc.conf</filename>:</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>
|
||||
<para>Модуль предполагает, что файл конфигурации вашего ядра содержит
|
||||
строки <literal>options INET</literal> и
|
||||
<literal>device bpf</literal>. Если не определен параметр
|
||||
<literal>NOINET6</literal> для &os; версий до 6.0-RELEASE и
|
||||
<literal>NO_INET6</literal> для более поздних версий (например,
|
||||
в файле &man.make.conf.5;), требуется также параметр
|
||||
<literal>options INET6</literal>.</para>
|
||||
<para>Начиная с версии &os; 7.0 файл с примерами конфигураций
|
||||
(<filename>pf.conf</filename>) был перемещен из каталога
|
||||
<filename class="directory">/etc/</filename> в каталог
|
||||
<filename class="directory">/usr/share/examples/pf/</filename>.
|
||||
Для версий &os;, предшествующих 7.0, размещение по умолчанию
|
||||
— <filename class="directory">/etc/pf.conf</filename></para>
|
||||
</note>
|
||||
|
||||
<para>После загрузки модуля или пересборки ядра с поддержкой PF,
|
||||
функциональность <application>pf</application> может управляться
|
||||
при помощи команды <command>pfctl</command>.</para>
|
||||
<para>Модуль <acronym>PF</acronym> можно также загрузить вручную:</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> позволяет управлять правилами
|
||||
<application>pf</application>. Дополнительную информацию следует
|
||||
черпать из страницы справочника &man.pfctl.8;.</para>
|
||||
<programlisting>pflog_enable="YES"</programlisting>
|
||||
|
||||
<para>и запустите на выполнение скрипт:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>/etc/rc.d/pflog start</userinput></screen>
|
||||
|
||||
<para>Если вам необходимы другие функциональные возможности
|
||||
<acronym>PF</acronym>, то придется добавить поддержку
|
||||
<acronym>PF</acronym> в ядро.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
|
@ -264,9 +319,18 @@
|
|||
<secondary>device pfsync</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>Включение PF путем компиляции с ядром &os; не является обязательным
|
||||
требованием, и описано здесь в качестве дополнительной информации.
|
||||
При компиляции PF с ядром загружаемый модуль не используется.</para>
|
||||
<para>Включение <acronym>PF</acronym> путем компиляции с ядром &os; не является обязательным
|
||||
требованием,
|
||||
однако вам может понадобиться
|
||||
одна из функциональных возможностей, которая не включена в загружаемый
|
||||
модуль. Например, &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 находится в
|
||||
<filename>/usr/src/sys/conf/NOTES</filename> и показан здесь:</para>
|
||||
|
@ -276,7 +340,7 @@ device pflog
|
|||
device pfsync</programlisting>
|
||||
|
||||
<para><literal>device pf</literal> включает поддержку межсетевого экрана
|
||||
<quote>Packet Filter</quote>.</para>
|
||||
<quote>Packet Filter</quote> (&man.pf.4;).</para>
|
||||
|
||||
<para><literal>device pflog</literal> включает необязательное сетевое
|
||||
псевдоустройство &man.pflog.4;, которое может использоваться для
|
||||
|
@ -286,19 +350,14 @@ device pfsync</programlisting>
|
|||
|
||||
<para><literal>device pfsync</literal> включает необязательное
|
||||
сетевое псевдоустройство &man.pfsync.4;, используемое для
|
||||
отслеживания <quote>изменений состояния</quote>. Поскольку оно
|
||||
не входит в загружаемый модуль, для его использования необходимо
|
||||
собрать собственное ядро.</para>
|
||||
|
||||
<para>Эти настройки будут действовать только после сборки и установки
|
||||
нового ядра.</para>
|
||||
отслеживания <quote>изменений состояния</quote>.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Доступные параметры rc.conf</title>
|
||||
|
||||
<para>Для активации PF во время загрузки в
|
||||
<filename>/etc/rc.conf</filename> должны быть включены следующие
|
||||
<para>Для активации <acronym>PF</acronym> и &man.pflog.4; во время
|
||||
загрузки в &man.rc.conf.5; должны быть включены следующие
|
||||
переменные:</para>
|
||||
|
||||
<programlisting>pf_enable="YES" # Включить PF (загрузить модуль если необходимо)
|
||||
|
@ -316,6 +375,91 @@ pflog_flags="" #
|
|||
|
||||
</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; 7.<replaceable>X</replaceable> и более поздние
|
||||
используют ту же версию <acronym>PF</acronym>, которая включена
|
||||
в OpenBSD 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>
|
||||
<title>Включение <acronym>ALTQ</acronym></title>
|
||||
|
||||
|
@ -324,7 +468,9 @@ pflog_flags="" #
|
|||
<acronym>ALTQ</acronym> поддерживается не всеми существующими
|
||||
драйверами сетевых карт. Для просмотра списка поддерживаемых
|
||||
устройств в вашем релизе &os; обратитесь к странице справочника
|
||||
&man.altq.4;. Следующие параметры включат <acronym>ALTQ</acronym>
|
||||
&man.altq.4;.</para>
|
||||
|
||||
<para>Следующие параметры включат <acronym>ALTQ</acronym>
|
||||
и добавят дополнительную функциональность.</para>
|
||||
|
||||
<programlisting>options ALTQ
|
||||
|
@ -338,70 +484,42 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
|
|||
<para><literal>options ALTQ</literal> включает подсистему
|
||||
<acronym>ALTQ</acronym>.</para>
|
||||
|
||||
<para><literal>options ALTQ_CBQ</literal> включает Class Based
|
||||
Queuing (<acronym>CBQ</acronym>). <acronym>CBQ</acronym>
|
||||
<para><literal>options ALTQ_CBQ</literal> включает <emphasis>Class Based
|
||||
Queuing</emphasis> (<acronym>CBQ</acronym>). <acronym>CBQ</acronym>
|
||||
позволяет распределять пропускную способность соединений
|
||||
по классам или очередям для выставления приоритетов трафика
|
||||
на основе правил фильтрации.</para>
|
||||
|
||||
<para><literal>options ALTQ_RED</literal> включает Random Early
|
||||
Detection (<acronym>RED</acronym>). <acronym>RED</acronym>
|
||||
<para><literal>options ALTQ_RED</literal> включает <emphasis>Random Early
|
||||
Detection</emphasis> (<acronym>RED</acronym>). <acronym>RED</acronym>
|
||||
используется для предотвращения перегрузки сети.
|
||||
<acronym>RED</acronym> вычисляет длину очереди и сравнивает ее
|
||||
с минимальной и максимальной границей очереди. Если
|
||||
очередь превышает максимум, все новые пакеты отбрасываются.
|
||||
с минимальным и максимальным значением длины очереди. Если
|
||||
очередь превышает максимум, все новые пакеты будут отброшены.
|
||||
В соответствии со своим названием, <acronym>RED</acronym>
|
||||
отбрасывает пакеты из различные соединений в произвольном
|
||||
порядке.</para>
|
||||
|
||||
<para><literal>options ALTQ_RIO</literal> включает Random Early
|
||||
Detection In and Out.</para>
|
||||
<para><literal>options ALTQ_RIO</literal> включает <emphasis>Random Early
|
||||
Detection In and Out</emphasis>.</para>
|
||||
|
||||
<para><literal>options ALTQ_HFSC</literal> включает
|
||||
Hierarchical Fair Service Curve Packet Scheduler. Дополнительная
|
||||
<emphasis>Hierarchical Fair Service Curve Packet Scheduler</emphasis>.
|
||||
Дополнительная
|
||||
информация о <acronym>HFSC</acronym> находится по адресу: <ulink
|
||||
url="http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html"></ulink>.
|
||||
</para>
|
||||
|
||||
<para><literal>options ALTQ_PRIQ</literal> включает Priority
|
||||
Queuing (<acronym>PRIQ</acronym>). <acronym>PRIQ</acronym>
|
||||
всегда пропускает трафик из более высокой очереди
|
||||
первым.</para>
|
||||
<para><literal>options ALTQ_PRIQ</literal> включает <emphasis>Priority
|
||||
Queuing</emphasis> (<acronym>PRIQ</acronym>). <acronym>PRIQ</acronym>
|
||||
всегда первым пропускает трафик из очереди c более высоким
|
||||
приоритетом.</para>
|
||||
|
||||
<para><literal>options ALTQ_NOPCC</literal> включает
|
||||
поддержку <acronym>SMP</acronym> для <acronym>ALTQ</acronym>.
|
||||
Эта опция необходима для <acronym>SMP</acronym>
|
||||
систем.</para>
|
||||
</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; 5.X соответствует OpenBSD версии 3.5, в &os; 6.X
|
||||
pf соответствует OpenBSD версии 3.7.</para>
|
||||
</warning>
|
||||
|
||||
<para>&a.pf; является хорошим местом, чтобы задавать вопросы по
|
||||
конфигурации и использованию пакета <application>pf</application>.
|
||||
Не забудьте проверить архивы списка рассылки перед тем, как
|
||||
задавать вопрос.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="firewalls-ipf">
|
||||
|
@ -421,18 +539,18 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
|
|||
<para>Автором IPFILTER является Darren Reed. IPFILTER не
|
||||
зависит от операционной системы: это приложение с открытыми
|
||||
исходными текстами, которое было портировано на операционные
|
||||
системы &os;, NetBSD, OpenBSD, SunOS, HP/UX, и Solaris.
|
||||
системы &os;, NetBSD, OpenBSD, &sunos;, HP/UX, и &solaris;.
|
||||
IPFILTER активно разрабатывается и поддерживается, регулярно
|
||||
выпускаются обновленные версии.</para>
|
||||
|
||||
<para>IPFILTER основан на межсетевом экране уровня ядра, механизм
|
||||
<acronym>NAT</acronym> может управляться и контролироваться
|
||||
через пользовательский интерфейс. Правила межсетевого экрана
|
||||
<para>IPFILTER основан на межсетевом экране и механизме
|
||||
<acronym>NAT</acronym> уровня ядра, которые управляются и контролируются
|
||||
утилитами уровня пользовательских процессов. Правила межсетевого экрана
|
||||
могут устанавливаться или удаляться утилитой &man.ipf.8;.
|
||||
Правила <acronym>NAT</acronym> могут устанавливаться или
|
||||
удаляться утилитой &man.ipnat.1;. Утилита &man.ipfstat.8;
|
||||
выводит статистику IPFILTER для ядра. Программа
|
||||
&man.ipmon.8; заносит действия IPFILTER в файлы системных
|
||||
&man.ipmon.8; может заносить действия IPFILTER в файлы системных
|
||||
протоколов.</para>
|
||||
|
||||
<para>IPF был первоначально написан с использованием правила
|
||||
|
@ -440,7 +558,7 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
|
|||
с правилами без сохранения состояния. Со временем IPF
|
||||
был расширен и включает параметры <quote>quick</quote> и
|
||||
<quote>keep state</quote> (сохранение состояния), которые
|
||||
кардинальным образом изменяют обработку пакетов.
|
||||
кардинальным образом изменяют логику обработки пакетов.
|
||||
Официальная документация IPF включает традиционные параметры
|
||||
правил с традиционной последовательностью обработки пакетов.
|
||||
Измененные функции включены в виде дополнительных параметров,
|
||||
|
@ -451,23 +569,12 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
|
|||
состояния <quote>keep state</quote>. Это основа для создания
|
||||
включающего межсетевого экрана.</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>Детальное описание методов обработки правил:
|
||||
<para>Детальное описание традиционных методов обработки правил:
|
||||
<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>
|
||||
|
||||
<para>IPF FAQ
|
||||
<para>IPF FAQ находится по адресу
|
||||
<ulink url="http://www.phildev.net/ipf/index.html"></ulink>.</para>
|
||||
|
||||
<para>Архив списка рассылки по IPFilter с возможностью поиска доступен
|
||||
|
@ -484,10 +591,10 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
|
|||
|
||||
<para>IPF включен в базовую систему &os; в качестве отдельного
|
||||
загружаемого модуля. Система динамически загрузит модуль IPF,
|
||||
если в rc.conf указана переменная
|
||||
если в <filename>rc.conf</filename> указана переменная
|
||||
<literal>ipfilter_enable="YES"</literal>. Модуль создается
|
||||
с включенным протоколированием и правилом по умолчанию
|
||||
<literal>block all</literal> (пропускать все). Для изменения
|
||||
<literal>pass all</literal> (пропускать все). Для изменения
|
||||
правила по умолчанию не обязательно собирать ядро с новыми
|
||||
параметрами. Просто добавьте в конец набора правило,
|
||||
блокирующее все пакеты.</para>
|
||||
|
@ -516,7 +623,7 @@ options ALTQ_NOPCC # Required for SMP build</programlisting>
|
|||
<secondary>параметры ядра</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>Сборка ядра с &os; включением IPF не обязательна.
|
||||
<para>Включение IPF в ядро &os; не является обязательным требованием.
|
||||
Эта процедура представлена здесь в качестве дополнительной
|
||||
информации. При включении IPF в ядро загружаемый модуль
|
||||
не используется.</para>
|
||||
|
@ -580,7 +687,7 @@ ipnat_rules="/etc/ipnat.rules" #
|
|||
<primary><command>ipf</command></primary>
|
||||
</indexterm>
|
||||
|
||||
<para>Команда ipf используется для загрузки файла с правилами.
|
||||
<para>Команда &man.ipf.8; используется для загрузки файла с правилами.
|
||||
Обычно создается файл, содержащий подготовленный набор
|
||||
правил, который полностью замещает набор, используемый
|
||||
на данный момент:</para>
|
||||
|
@ -591,14 +698,15 @@ ipnat_rules="/etc/ipnat.rules" #
|
|||
|
||||
<para><option>-f</option> указывает файл с правилами, который необходимо загрузить.</para>
|
||||
|
||||
<para>Таким образом, после внесения изменений в файл правил и
|
||||
запуска вышеприведенной команды IPF, набор правил межсетевого экрана
|
||||
обновляется без перезагрузки системы. Для обновления правил
|
||||
<para>Это дает вам возможность отредактировать файл с правилами,
|
||||
запустить вышеприведенную команду IPF, тем самым обновить набор правил
|
||||
работающего межсетевого экрана без перезагрузки системы. Для
|
||||
обновления правил
|
||||
такой подход очень удобен, поскольку команду можно выполнять
|
||||
столько раз, сколько нужно.</para>
|
||||
|
||||
<para>На странице справочной системы &man.ipf.8; находится
|
||||
подробная информация по флагам этой команды.</para>
|
||||
подробная информация по всем флагам этой команды.</para>
|
||||
|
||||
<para>Набор правил для команды &man.ipf.8; должен быть в виде
|
||||
стандартного текстового файла. Правила, написанные в виде
|
||||
|
@ -654,7 +762,8 @@ ipnat_rules="/etc/ipnat.rules" #
|
|||
|
||||
<para>При задании флага <option>-i</option> или <option>-o</option>
|
||||
соответственно для входящих или
|
||||
или исходящих пакетов, будет получен и отображен список правил,
|
||||
исходящих пакетов, команда извлечет и отобразит соответствующий
|
||||
список правил, установленных и
|
||||
используемых на данный момент.</para>
|
||||
|
||||
<para><command>ipfstat -in</command> отображает правила, применяемые
|
||||
|
@ -708,16 +817,16 @@ ipnat_rules="/etc/ipnat.rules" #
|
|||
|
||||
<para>Для того, чтобы стало возможно использование команды
|
||||
<command>ipmon</command>, необходимо включить параметр ядра
|
||||
IPFILTER_LOG. Эта команда может использоваться в двух различных
|
||||
<literal>IPFILTER_LOG</literal>. Эта команда может использоваться в двух различных
|
||||
режимах. В основном режиме, который используется по умолчанию,
|
||||
она используется без флага <option>-D</option>.</para>
|
||||
|
||||
<para>В режиме даемона создается непрерывный протокол, и возможен
|
||||
просмотр предыдущих событий. В этом режиме IPFILTER работает
|
||||
в &os;. Поскольку в &os; встроена функция ротации файлов
|
||||
протокола, лучше использовать syslogd, чем используемый по
|
||||
протокола, лучше использовать &man.syslogd.8;, чем используемый по
|
||||
умолчанию вывод в обычный файл. В <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
|
||||
# s = log to syslog
|
||||
|
@ -725,9 +834,9 @@ ipnat_rules="/etc/ipnat.rules" #
|
|||
# n = map IP & port to names</programlisting>
|
||||
|
||||
<para>Описывать преимущества протоколирования излишне. Например,
|
||||
оно дает возможность просмотра информации о отброшенных
|
||||
пакетах, откуда они пришли и куда направлялись. Это дает
|
||||
определенные возможности отслеживания атак.</para>
|
||||
оно дает возможность отложенного просмотра информации об отброшенных
|
||||
пакетах, откуда они пришли и куда направлялись.
|
||||
Эта информация существенно помогает при отслеживании атак.</para>
|
||||
|
||||
<para>Даже с включенным протоколированием, IPF не ведет протокол
|
||||
для каждого правила. Администратор межсетевого экран должен решить,
|
||||
|
@ -735,26 +844,25 @@ ipnat_rules="/etc/ipnat.rules" #
|
|||
слово log к этим правилам. Обычно протоколируются только правила,
|
||||
отбрасывающие пакеты.</para>
|
||||
|
||||
<para>Довольно часто правило по умолчанию, запрещающее прохождение
|
||||
пакетов, включается в набор последним, и для него применяется
|
||||
ключевое слово log. Так вы можете увидеть все пакеты, не
|
||||
<para>Включение в набор последнего правила, запрещающего прохождение
|
||||
пакетов, в сочетании с ключевым словом <literal>log</literal> является
|
||||
довольно распространённой практикой. Так вы можете увидеть все пакеты,
|
||||
не
|
||||
попадающие ни под одно правило набора.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Протоколирование IPMON</title>
|
||||
|
||||
<para>Для сбора данных <application>Syslogd</application>
|
||||
использует свой собственный
|
||||
<para>Для разделения собираемых данных
|
||||
<application>syslogd</application> использует свой собственный
|
||||
специальный метод. Он использует группировку по категории
|
||||
(<quote>facility</quote>) и уровню (<quote>level</quote>).
|
||||
IPMON в режиме <option>-Ds</option> использует
|
||||
<literal>security</literal>
|
||||
<literal>local0</literal>
|
||||
в качестве имени <quote>категории</quote>.
|
||||
Все протоколируемые IPMON данные также
|
||||
отправляются на <literal>security</literal>.
|
||||
Для сбора
|
||||
протоколируемых данных могут быть использованы следующие
|
||||
Для дальнейшего разделения
|
||||
протоколируемых данных, если такое необходимо, могут быть использованы следующие
|
||||
уровни:</para>
|
||||
|
||||
<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 протоколировать все данные в
|
||||
<filename>/var/log/ipfilter.log</filename>, создайте этот
|
||||
файл следующей командой:</para>
|
||||
файл заранее, выполнив следующую команду:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>touch /var/log/ipfilter.log</userinput></screen>
|
||||
|
||||
<para>Функционирование syslog управляется настройками в файле
|
||||
<para>Функционирование &man.syslogd.8; управляется настройками в файле
|
||||
<filename>/etc/syslog.conf</filename>. Файл
|
||||
<filename>syslog.conf</filename> позволяет достаточно гибко
|
||||
настроить обработку системных сообщений, выдаваемых программами,
|
||||
такими как IPF.</para>
|
||||
|
||||
<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>Для применения внесенных в
|
||||
<filename>/etc/syslog.conf</filename> изменений вы можете
|
||||
перезагрузиться или заставить syslog перечитать
|
||||
перезагрузиться или заставить &man.syslogd.8; перечитать
|
||||
<filename>/etc/syslog.conf</filename>, выполнив команду
|
||||
<command>/etc/rc.d/syslogd reload</command></para>
|
||||
<command>/etc/rc.d/syslogd reload</command>.</para>
|
||||
|
||||
<para>Не забудьте отредактировать
|
||||
<filename>/etc/newsyslog.conf</filename> для ротации только
|
||||
|
@ -847,23 +955,23 @@ LOG_ERR - packets which have been logged and which can be considered short</scre
|
|||
|
||||
<listitem>
|
||||
<para><literal>PR</literal>, с последующим именем или
|
||||
номером протокола, например PR tcp.</para>
|
||||
номером протокола, например <literal>PR tcp</literal>.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>len</literal>, с последующей длиной заголовка
|
||||
и общей длиной пакета, например len 20 40.</para>
|
||||
и общей длиной пакета, например <literal>len 20 40</literal>.</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
|
||||
<para>Для <acronym>TCP</acronym> пакетов добавляется дополнительное
|
||||
поле, начинающееся с дефиса, за которым следуют буквы,
|
||||
соответствующие установленным флагам. На странице справочника
|
||||
находится список букв и флагов.</para>
|
||||
&man.ipf.5; находится список букв и флагов.</para>
|
||||
|
||||
<para>Для пакетов ICMP, в конце находятся два поля,
|
||||
одно всегда <quote>ICMP</quote>, а во втором тип
|
||||
ICMP сообщения (message и sub-message),
|
||||
одно всегда <quote>ICMP</quote>, а второе содержит тип и подтип
|
||||
ICMP сообщения (message и sub-message), разделенные символом косой черты,
|
||||
например ICMP 3/3 для сообщения <quote>port
|
||||
unreachable</quote>.</para>
|
||||
</sect2>
|
||||
|
@ -873,7 +981,7 @@ LOG_ERR - packets which have been logged and which can be considered short</scre
|
|||
|
||||
<para>Некоторые опытные пользователи IPF создают файл правил,
|
||||
поддерживающий использование символьной подстановки. Основное
|
||||
преимущество использования такого скрипта заключается в
|
||||
преимущество использования такого подхода заключается в
|
||||
возможности изменения значения, присваиваемого символьному
|
||||
имени, в результате чего во всех правилах, содержащих эту
|
||||
символьную подстановку, будет использоваться новое значение.
|
||||
|
@ -881,8 +989,8 @@ LOG_ERR - packets which have been logged and which can be considered short</scre
|
|||
переменные, а затем использовать их сразу в нескольких
|
||||
правилах. Ниже дан пример такого использования.</para>
|
||||
|
||||
<para>Синтаксис скрипта совместим с sh, csh, и
|
||||
tcsh.</para>
|
||||
<para>Синтаксис скрипта совместим с &man.sh.1;, &man.csh.1;, и
|
||||
&man.tcsh.1;.</para>
|
||||
|
||||
<para>Символьная подстановка предваряется знаком доллара:
|
||||
<literal>$</literal>.</para>
|
||||
|
@ -929,8 +1037,8 @@ EOF
|
|||
<para>Это все, что требовалось сделать. В данном примере сами
|
||||
правила не важны; важно то, как используется символьная подстановка.
|
||||
Если вышеприведенный пример помещен в файл
|
||||
<filename>/etc/ipf.rules.script</filename>, вы можете
|
||||
перезагрузить набор правил, введя следующую команду:</para>
|
||||
<filename>/etc/ipf.rules.script</filename>, то набор правил можно
|
||||
перезагрузить, введя следующую команду:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>sh /etc/ipf.rules.script</userinput></screen>
|
||||
|
||||
|
@ -957,8 +1065,8 @@ EOF
|
|||
строку <literal>ipfilter_enable="NO"</literal> (это значение
|
||||
по умолчанию) в файл <filename>/etc/rc.conf</filename>.</para>
|
||||
|
||||
<para>Поместите скрипт, подобный нижеприведенному в каталог
|
||||
<filename>/usr/local/etc/rc.d/</filename>. У него должно
|
||||
<para>Поместите скрипт, подобный нижеприведенному, в каталог
|
||||
<filename class="directory">/usr/local/etc/rc.d/</filename>. У него должно
|
||||
быть однозначно говорящее о его назначении имя, например
|
||||
<filename>ipf.loadrules.sh</filename>. Расширение
|
||||
<filename>.sh</filename> обязательно.</para>
|
||||
|
@ -966,44 +1074,41 @@ EOF
|
|||
<programlisting>#!/bin/sh
|
||||
sh /etc/ipf.rules.script</programlisting>
|
||||
|
||||
<para>Права на этот скрипт должны разрешать чтение, запись и
|
||||
<para>Права, установленные на этот файл, должны разрешать чтение, запись и
|
||||
выполнение владельцу <username>root</username>.</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh</userinput></screen>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>Теперь, при загрузке системы, правила IPF будут
|
||||
загружены.</para>
|
||||
<para>Теперь, правила IPF будут загружаться при загрузке
|
||||
системы.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>IPF Rule Sets</title>
|
||||
<title>Наборы правил IPF</title>
|
||||
|
||||
<!-- очередное разжевывание ip basics -->
|
||||
<para>Набор правил ipf это группа правил, составленных для
|
||||
пропускания или блокирования пакетов на основе их содержимого.
|
||||
Двусторонний обмен пакетами между хостами составляет сессию.
|
||||
Межсетевой экран обрабатывает пакеты в обеих направлениях,
|
||||
<!--некорректно: The firewall rule set processes the
|
||||
packet two times, once on its arrival from the public Internet
|
||||
host and again as it leaves for its return trip back to the
|
||||
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>
|
||||
(например, telnet, www, mail, и т.п.) назначен протокол и номер
|
||||
привилегированного (прослушиваемого) порта. Пакеты, предназначенные
|
||||
для определенного сервиса, порождаются с некоторым исходящим адресом
|
||||
и портом из непривилегированного диапазона и направляются
|
||||
на определенный адрес и определенный порт назначения. Все
|
||||
упомянутые параметры (номера портов и адреса) могут использоваться
|
||||
как критерии выбора в правилах, пропускающих или блокирующих доступ
|
||||
к службам <acronym>TCP/IP</acronym>.</para>
|
||||
|
||||
|
||||
<indexterm>
|
||||
<primary>IPFILTER</primary>
|
||||
<secondary>порядок обработки правил</secondary>
|
||||
</indexterm>
|
||||
|
||||
<!-- XXX: something like this already in
|
||||
<xref linkend="firewalls-concepts">
|
||||
AND: the para below is repeated 3 times in this chapter-->
|
||||
<para>IPF был первоначально написан с использованием логики
|
||||
<quote>последнее совпадающее правило побеждает</quote> и
|
||||
только с правилами без сохранения состояния. Со временем
|
||||
|
@ -1016,18 +1121,6 @@ sh /etc/ipf.rules.script</programlisting>
|
|||
Это основа для создания набора правил включающего межсетевого
|
||||
экрана.</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>
|
||||
<para>При работе с правилами межсетевого экрана, будьте
|
||||
<emphasis>очень осторожны</emphasis>. Некоторые
|
||||
|
@ -1040,9 +1133,7 @@ sh /etc/ipf.rules.script</programlisting>
|
|||
</warning>
|
||||
</sect2>
|
||||
|
||||
<!-- Перевод остальной части раздела IPF отложен до исправления
|
||||
ошибок в следующем sect2 оригинальной версии -->
|
||||
|
||||
<!-- Перевод остальной части раздела IPF отложен ... -->
|
||||
</sect1>
|
||||
|
||||
<sect1 id="firewalls-ipfw">
|
||||
|
|
Loading…
Reference in a new issue