<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<article id="standalone">
  <!--$Id$-->

  <articleinfo>
    <title>Одиночный файервол</title>

    <authorgroup>
      <author>
        <firstname>Tom</firstname>

        <surname>Eastep</surname>
      </author>
    </authorgroup>

    <pubdate><?dbtimestamp format="Y/m/d"?></pubdate>

    <copyright>
      <year>2002-2005</year>

      <holder>Thomas M. Eastep</holder>
    </copyright>

    <legalnotice>
      <para>Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License, Version
      1.2 or any later version published by the Free Software Foundation; with
      no Invariant Sections, with no Front-Cover, and with no Back-Cover
      Texts. A copy of the license is included in the section entitled
      <quote><ulink url="GnuCopyright.htm">GNU Free Documentation
      License</ulink></quote>.</para>
    </legalnotice>
  </articleinfo>

  <caution>
    <para><emphasis role="bold">Эта статья применима для Shorewall версии 3.0
    и выше. Если Вы работаете с более ранней версией Shorewall чем Shorewall
    3.0.0, тогда смотрите документацию для этого выпуска.</emphasis></para>
  </caution>

  <warning>
    <para>Пример файлов конфигурации в составе Shorewall 3.0.0 и 3.0.1 был
    некорректен. Первой генерируемой ошибкой была:</para>

    <para><emphasis role="bold">ERROR: No Firewall Zone Defined (ОШИБКА: Не
    определены зоны файервола)</emphasis></para>

    <para>Исправленные файла 'зоны' ('zones') и 'интерфейсы' ('interfaces')
    доступны по адресу: <ulink
    url="http://www.shorewall.net/pub/shorewall/3.0/shorewall-3.0.1/errata/one-interface/">http://www.shorewall.net/pub/shorewall/3.0/shorewall-3.0.1/errata/one-interface/</ulink>.</para>

    <para>Эта проблема исправлена в Shorewall 3.0.2.</para>
  </warning>

  <section>
    <title>Введение</title>

    <para>Установка Shorewall на отдельной Linux системе очень проста, если Вы
    понимаете основы и следуете данной документации.</para>

    <para>Это руководство не пытается ознакомить Вас со всеми особенностями
    Shorewall. Оно больше сфокусировано на том, что требуется для настройки
    Shorewall в наиболее типичных конфигурациях:</para>

    <itemizedlist>
      <listitem>
        <para>Linux система</para>
      </listitem>

      <listitem>
        <para>Один внешний(публичный) <acronym>IP</acronym>-адрес</para>
      </listitem>

      <listitem>
        <para>Интернет-соединение посредством кабельного модема,
        <acronym>DSL</acronym>, <acronym>ISDN</acronym>, Frame Relay,
        коммутирумой линии ... или есть соединение с <acronym>LAN</acronym> и
        Вы просто хотите защитить Вашу Linux систему от других систем в этой
        <acronym>LAN</acronym>.</para>
      </listitem>
    </itemizedlist>

    <section>
      <title>Системные требования</title>

      <para>Shorewall требует, чтобы у Вас был установлен пакет
      <command>iproute</command>/<command>iproute2</command> (на
      <trademark>RedHat</trademark>, этот пакет называется
      <command>iproute</command>). Вы можете определить установлен ли этот
      пакет по наличию программы <command>ip</command> на Вашем файерволе. Как
      root, Вы можете использовать команду <command>which</command> для
      проверки наличия этой программы:</para>

      <programlisting>[root@gateway root]# <command>which ip</command>
/sbin/ip
[root@gateway root]#</programlisting>
    </section>

    <section>
      <title>Перед тем как начать</title>

      <para>Я рекомендую Вам прочитать все руководство для первоначального
      ознакомления, а лишь затем пройти его снова, внося изменения в Вашу
      конфигурацию.</para>

      <caution>
        <para>Если Вы редактируете Ваши файлы конфигурации на
        <trademark>Windows</trademark> системе, Вы должны сохранить их как
        <trademark>Unix</trademark> файлы в том случае, если Ваш редактор
        поддерживает эту возможность, иначе Вы должны пропустить их через
        программу <command>dos2unix</command> перед тем как использовать их.
        Аналогично, если Вы копируете конфигурационный файл с Вашего жесткого
        диска с Windows на дискету, Вы должны воспользоваться
        <command>dos2unix</command> для копии перед ее использованием с
        Shorewall. <itemizedlist>
            <listitem>
              <para><ulink
              url="http://www.simtel.net/pub/pd/51438.html"><trademark>Windows</trademark>
              версия <command>dos2unix</command></ulink></para>
            </listitem>

            <listitem>
              <para><ulink
              url="http://www.megaloman.com/%7Ehany/software/hd2u/">Linux
              версия <command>dos2unix</command></ulink></para>
            </listitem>
          </itemizedlist></para>
      </caution>
    </section>

    <section>
      <title>Соглашения</title>

      <para>Места, в которых рекомендуется вносить изменения, отмечены как
      <inlinegraphic fileref="images/BD21298_.gif" format="GIF" />.</para>
    </section>
  </section>

  <section>
    <title>PPTP/ADSL</title>

    <para><inlinegraphic fileref="images/BD21298_.gif" format="GIF" /></para>

    <para>Если У Вас есть <acronym>ADSL</acronym> модем и Вы используете
    <acronym>PPTP</acronym> для взаимодействия с сервером на этом модеме, Вы
    должны сделать изменения рекоммендуемые <ulink
    url="PPTP.htm#PPTP_ADSL">здесь</ulink> <emphasis role="bold"><emphasis
    role="underline"><emphasis>в дополнение к тем, что описаны в последующих
    шагах</emphasis></emphasis></emphasis>. <acronym>ADSL</acronym> с
    <acronym>PPTP</acronym> наиболее распространен в Европе, особенно в
    Австрии.</para>
  </section>

  <section>
    <title>Концепции Shorewall</title>

    <para>Конфигурационные файлы Shorewall находятся в директории <filename
    class="directory">/etc/shorewall</filename> -- в случае простой установки
    Вам необходимо иметь дело только с немногими из них, как описано в этом
    руководстве.</para>

    <para><warning>
        <para><emphasis role="bold">Замечание для пользователей
        Debian</emphasis></para>

        <para>Если Вы при установке пользовались .deb, Вы обнаружите, что
        директория <filename class="directory">/etc/shorewall</filename>
        пуста. Это сделано специально. Поставляемые шаблоны файлов
        конфигурации Вы найдете на вашей системе в директории <filename
        class="directory">/usr/share/doc/shorewall/default-config</filename>.
        Просто скопируйте нужные Вам файлы из этой директории в <filename
        class="directory">/etc/shorewall</filename> и отредактируйте
        копии.</para>

        <para>Заметьте, что Вы должны скопировать <filename
        class="directory">/usr/share/doc/shorewall/default-config/shorewall.conf</filename>
        и <filename
        class="directory">/usr/share/doc/shorewall/default-config/modules</filename>
        в <filename class="directory">/etc/shorewall</filename> даже если Вы
        не будете изменять эти файлы.</para>
      </warning><inlinegraphic fileref="images/BD21298_.gif"
    format="GIF" /></para>

    <para>После того как Вы <ulink url="Install.htm">установили
    Shorewall</ulink>, Вы можете найти примеры файлов настроек в следующих
    местах:</para>

    <orderedlist>
      <listitem>
        <para>Если Вы при установке использовали <acronym>RPM</acronym>,
        примеры будут находится в поддиректории <filename
        class="directory">Samples/one-interface</filename>/ директории с
        документацией Shorewall. Если Вы не знаете где расположена директория
        с документацией Shorewall, Вы можете найти примеры используя
        команду:</para>

        <programlisting>~# rpm -ql shorewall | fgrep one-interface
/usr/share/doc/packages/shorewall/Samples/one-interface
/usr/share/doc/packages/shorewall/Samples/one-interface/interfaces
/usr/share/doc/packages/shorewall/Samples/one-interface/policy
/usr/share/doc/packages/shorewall/Samples/one-interface/rules
/usr/share/doc/packages/shorewall/Samples/one-interface/zones
~#</programlisting>
      </listitem>

      <listitem>
        <para>Если Вы установили Shorewall из tarball'а, примеры находятся в
        директории <filename
        class="directory">Samples/one-interface</filename> внутри
        tarball'а.</para>
      </listitem>

      <listitem>
        <para>Если же Вы пользовались пакетом .deb, примеры находятся в
        директории <filename
        class="directory">/usr/share/doc/shorewall/examples/one-interface</filename>.</para>
      </listitem>
    </orderedlist>

    <para>По мере того как мы будем знакомится с каждым файлом, я надеюсь, что
    Вы просмотрите реальный файл на вашей системе -- каждый файл содержит
    детальное описание конфигурационных инструкций и значений по
    умолчанию.</para>

    <para>Shorewall видит сеть, в которой он работает, как состоящую из набора
    <emphasis>зон(zones)</emphasis>. В случае примера конфигурации с одним
    интерфейсом, только две зоны определены:</para>

    <programlisting>#ZONE   TYPE    OPTIONS                 IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4</programlisting>

    <para>Зоны Shorewall описаны в файле <ulink
    url="manpages/shorewall-zones.html"><filename>/etc/shorewall/zones</filename></ulink>.</para>

    <para>Заметьте, что Shorewall рассматривает систему файервола как свою
    собственную зону. При обработке файла
    <filename>/etc/shorewall/zones</filename> имя зоны файервола
    (<quote>fw</quote> в примере выше) храниться в переменной shell
    <firstterm>$FW</firstterm>, которая может использоваться во всей
    конфигурации Shorewall для ссылки на сам файервол.</para>

    <para>Правила о том какой трафик разрешен, а какой запрещен выражаются в
    терминах зон.</para>

    <itemizedlist>
      <listitem>
        <para>Вы отражаете Вашу политику по умолчанию для соединений из одной
        зоны в другую в файле<ulink
        url="manpages/shorewall-policy.html"><filename>/etc/shorewall/policy</filename></ulink>.</para>
      </listitem>

      <listitem>
        <para>Вы определяете исключения из политики по умолчанию в файле
        <ulink
        url="manpages/shorewall-rules.html"><filename>/etc/shorewall/rules</filename></ulink>.</para>
      </listitem>
    </itemizedlist>

    <para>Для каждого запроса на соединение входящего в файервол, запрос
    сначала проверяется на соответствие файлу<filename><filename>
    /etc/shorewall/rules</filename></filename>. Если в этом файле не найдено
    правил соответствующих запросу на соединение, то применяется первая
    политика из файла <filename>/etc/shorewall/policy</filename>, которая
    соответсвует запросу. Если есть <ulink
    url="shorewall_extension_scripts.htm">общее действие (common
    action</ulink>) определенное для политики в файле
    <filename>/etc/shorewall/actions</filename> или
    <filename>/usr/share/shorewall/actions.std</filename>, тогда это действие
    выполняется перед тем как применяется политика.</para>

    <para>Файл <filename>/etc/shorewall/policy,</filename> входящий в пример с
    одним интерфейсом, имеет следующие политики:</para>

    <programlisting>#SOURCE ZONE   DESTINATION ZONE   POLICY   LOG LEVEL   LIMIT:BURST
$FW            net                ACCEPT
net            all                DROP     info
all            all                REJECT   info</programlisting>

    <para>Политики приведенные выше будут:</para>

    <orderedlist>
      <listitem>
        <para>разрешать все запросы на соединение с файервола в
        Internet;</para>
      </listitem>

      <listitem>
        <para>отбрасывать (игнорировать) все запросы на соединение из Internet
        к Вашему файерволу;</para>
      </listitem>

      <listitem>
        <para>отвергать все другие запросы на соединение (Shorewall требует
        наличия такой политики, применимой для всех остальных
        запросов).</para>
      </listitem>
    </orderedlist>

    <para>В данный момент Вы можете отредактировать ваш файл
    <filename>/etc/shorewall/policy</filename> и внести изменения, какие Вы
    считаете необходимыми.</para>
  </section>

  <section>
    <title>Внешний интерфейс</title>

    <para>Файервол имеет один сетевой интерфейс. Если соединение с Internet
    осуществляется при помощи кабельного или <acronym>DSL</acronym>
    <quote>Модема</quote>, <emphasis>Внешним интерфейсом</emphasis> будет
    ethernet-адаптер (например, <filename class="devicefile">eth0</filename>),
    который подсоединен к этому <quote>Модему</quote>, <emphasis
    role="underline">если же</emphasis> Вы соединены посредством протокола
    <emphasis>Point-to-Point Protocol over Ethernet</emphasis>
    (<acronym>PPPoE</acronym>) или <emphasis>Point-to-Point Tunneling
    Protocol</emphasis> (<acronym>PPTP</acronym>), то в этом случае
    <emphasis>Внешним интерфейсом</emphasis> будет <acronym>PPP</acronym>
    интерфейс (например, <filename class="devicefile">ppp0</filename>). Если
    Вы подсоединены через обычный модем, Вашим <emphasis>Внешним
    интерфейсом</emphasis> будет также <filename
    class="devicefile">ppp0</filename>. Если Вы соединяетесь используя
    <acronym>ISDN</acronym>, <emphasis>Внешним интерфейсом</emphasis> будет
    <filename class="devicefile">ippp0</filename>.</para>

    <para><inlinegraphic fileref="images/BD21298_.gif" format="GIF" /></para>

    <para>Пример конфигурации Shorewall для одного интерфейса подразумевает,
    что внешний интерфейс - <filename class="devicefile">eth0</filename>. Если
    Ваша конфигурация отличается, Вам необходимо изменить файл примера
    <filename>/etc/shorewall/interfaces</filename> соответственно. Пока Вы
    здесь, Вы возможно захотите просмотреть список опций, специфичных для
    интерфейса. Вот несколько подсказок:</para>

    <tip>
      <para>Если Ваш внешний интерфейс <filename
      class="devicefile">ppp0</filename> или <filename
      class="devicefile">ippp0</filename>, Вы можете заменить
      <quote>detect</quote>(обнаружить) во втором столбце на
      <quote>-</quote>(знак минус в ковычках).</para>
    </tip>

    <tip>
      <para>Если Ваш внешний интерфейс <filename
      class="devicefile">ppp0</filename> или <filename
      class="devicefile">ippp0</filename> или Вы имеете статический
      <acronym>IP</acronym>-адрес, Вы можете удалить <quote>dhcp</quote> из
      списка опций.</para>
    </tip>
  </section>

  <section>
    <title>IP-адреса</title>

    <para>Перед тем как идти дальше, мы должны сказать несколько слов о
    <emphasis>Internet Protocol</emphasis> (<acronym>IP</acronym>)-адресах.
    Обычно, Ваш Интернет-провайдер<emphasis> (Internet Service
    Provider</emphasis> - <acronym>ISP</acronym>) назначает Вам один
    <acronym>IP</acronym>-адрес. Этот адрес может быть назначен статически,
    при помощи <emphasis>Протокола Динамического Конфигурирования Хостов
    (Dynamic Host Configuration Protocol</emphasis> -
    <acronym>DHCP</acronym>), в процессе установки Вами коммутированного
    соединения (обычный модем), или при установке Вами другого типа
    <acronym>PPP</acronym> (<acronym>PPPoA</acronym>, <acronym>PPPoE</acronym>
    и т.д.) соединения.</para>

    <para><acronym>RFC-1918</acronym> резервирует несколько диапазонов
    <emphasis>Частных (Private)</emphasis> <acronym>IP</acronym>-адресов для
    использования в частных сетях:</para>

    <programlisting>10.0.0.0    - 10.255.255.255
172.16.0.0  - 172.31.255.255
192.168.0.0 - 192.168.255.255</programlisting>

    <para>На эти адреса иногда ссылаются как на
    <emphasis>немаршрутизируемые</emphasis> потому, что магистральные
    маршрутизаторы Интернет не переправляют пакеты, адреса назначения которых
    зарезервированы <acronym>RFC-1918</acronym>. Хотя в некоторых случаях,
    <acronym>ISP</acronym>, назначающие эти адреса, используют затем
    <emphasis>Преобразование Сетевых Адресов (Network Address Translation -
    </emphasis><acronym>NAT</acronym>) для перезаписи заголовков пакетов при
    перенаправлении в/из Интернет.</para>

    <para><inlinegraphic fileref="images/BD21298_.gif" format="GIF" /></para>

    <para>Перед запуском Shorewall, <emphasis role="bold">Вы должны взглянуть
    на IP-адрес Вашего внешнего интерфейса и, если он принадлежит одному из
    указанных выше диапазонов, Вы должны удалить опцию
    <quote>norfc1918</quote> из записи в
    <filename>/etc/shorewall/interfaces</filename>.</emphasis></para>
  </section>

  <section>
    <title>Разрешение других соединений</title>

    <para>Shorewall включает коллекцию макросов, которые могут быть
    использованы для быстрого разрешения или запрещения служб. Вы можете найти
    список макросов включенный в Вашу версия Shorewall при помощи
    команды:</para>

    <para><command>ls
    <filename>/usr/share/shorewall/macro.*</filename></command></para>

    <para>Если Вы хотите разрешить соединения из Интернет на Ваш файервол и Вы
    нашли соответствующий макрос в
    <filename>/etc/shorewall/macro.*</filename>, то общий формат правила в
    <filename>/etc/shorewall/rules</filename> такой:</para>

    <programlisting>#ACTION         SOURCE    DESTINATION     PROTO       DEST PORT(S)
&lt;<emphasis>macro</emphasis>&gt;/ACCEPT  net       $FW</programlisting>

    <example>
      <title>Вы хотите запустить Web-сервер и IMAP-сервер на Вашем
      файерволе:</title>

      <programlisting>#ACTION     SOURCE    DESTINATION     PROTO       DEST PORT(S)
Web/ACCEPT  net       $FW
IMAP/ACCEPT net       $FW</programlisting>
    </example>

    <para>Вы можете также указать Ваше правило непосредственно, без
    использования предопределенного макроса. Это будет необходимо в случае,
    если нет предопределенного макроса соответствующего Вашим требованиям. В
    этом случае общий формат правила в
    <filename>/etc/shorewall/rules</filename> такой:</para>

    <programlisting>#ACTION   SOURCE    DESTINATION     PROTO       DEST PORT(S)
ACCEPT    net       $FW             <emphasis>&lt;protocol&gt;</emphasis>  <emphasis>&lt;port&gt;</emphasis></programlisting>

    <example>
      <title>Вы хотите запустить Web-сервер и IMAP-сервер на Вашем
      файерволе:</title>

      <para><programlisting>#ACTION   SOURCE    DESTINATION     PROTO       DEST PORT(S)
ACCEPT    net       $FW             tcp          80
ACCEPT    net       $FW             tcp          143</programlisting></para>
    </example>

    <para>Если Вы не знаете какой порт и протокол использует определенное
    приложение, смотрите <ulink url="ports.htm">здесь</ulink>.</para>

    <important>
      <para>Я не рекоммендую разрешать telnet в/из Интернет потому, что он
      использует открытый текст (даже для передачи имени и пароля!). Если Вы
      хотите иметь доступ к командному интерпретатору Вашего файервола из
      Интернет, используйте <acronym>SSH</acronym>:</para>

      <programlisting>#ACTION     SOURCE    DESTINATION     PROTO       DEST PORT(S)
SSH/ACCEPT  net       $FW           </programlisting>
    </important>

    <para><inlinegraphic fileref="images/BD21298_.gif" format="GIF" /></para>

    <para>В этом месте, отредактируйте
    <filename>/etc/shorewall/rules</filename> для добавления необходимых
    соединений.</para>
  </section>

  <section>
    <title>Запуск и останов Вашего файервола</title>

    <para><inlinegraphic fileref="images/BD21298_.gif" format="GIF" /></para>

    <para><ulink url="Install.htm">Процедура установки</ulink> настраивает
    Вашу систему для запуска Shorewall при загрузке системе, но запуск
    остается отключен, так что система не будет пытаться запустить Shorewall
    до полного завершения конфигурирования. Как только Вы полностью завершите
    конфигурирование Вашего файервола, Вы можете включить запуск Shorewall,
    отредактировав файл <filename>/etc/shorewall/shorewall.conf</filename> и
    установив параметр <varname>STARTUP_ENABLED=Yes</varname>.</para>

    <important>
      <para>Пользователи пакета .deb должны отредактировать файл
      <filename>/etc/default/shorewall</filename> и установить параметр
      <varname>STARTUP=1.</varname></para>
    </important>

    <important>
      <para>Вы должны разрешить запуск путем редактирования файла
      <filename>/etc/shorewall/shorewall.conf</filename> и установки параметра
      <varname>STARTUP_ENABLED=Yes.</varname></para>
    </important>

    <para>Файервол запускается при помощи команды <quote><command>shorewall
    start</command></quote> и останавливается при помощи
    <quote><command>shorewall stop</command></quote>. Когда файервол
    остановливается, маршрутизация разрешается на те хосты, которые указаны в
    <filename><ulink
    url="manpages/shorewall-routestopped.html">/etc/shorewall/routestopped</ulink></filename>.
    Запущенный файервол может быть перезапущен при помощи команды
    <quote><command>shorewall restart</command></quote>. Если Вы хотите
    полностью удалить изменения сделанные Shorewall из конфигурации Вашего
    Netfilter, используйте команду <quote><command>shorewall
    clear</command></quote>.</para>

    <warning>
      <para>Если Вы подсоединены к Вашему файерволу из Интернет, не
      используйте команду <quote><command>shorewall stop</command></quote>
      если Вы не добавили запись для <acronym>IP</acronym>-адреса, с которого
      Вы подсоединены, в <ulink
      url="manpages/shorewall-routestopped.html"><filename>/etc/shorewall/routestopped</filename></ulink>.
      Также, я не рекоммендую использовать <quote><command>shorewall
      restart</command></quote>; лучше создать <emphasis><ulink
      url="configuration_file_basics.htm#Configs">альтернативную
      конфигурацию</ulink></emphasis> и протестировать ее при помощи команды
      <ulink
      url="starting_and_stopping_shorewall.htm"><quote><command>shorewall
      try</command></quote></ulink>.</para>
    </warning>
  </section>

  <section>
    <title>Дополнительно рекоммендуемая литература</title>

    <para>Я особо рекоммендую просмотреть Вам <ulink
    url="configuration_file_basics.htm">страницу Общих Особенностей Файлов
    Конфигурации</ulink> -- она содержит полезные советы об особенностях
    Shorewall, делающую администрирование Вашего файервола проще.</para>
  </section>

  <appendix>
    <title>История пересмотров</title>

    <para><revhistory>
        <revision>
          <revnumber>2.0</revnumber>

          <date>2005-09-12</date>

          <authorinitials>TE</authorinitials>

          <revremark>Больше обновлений для 3.0</revremark>
        </revision>

        <revision>
          <revnumber>1.9</revnumber>

          <date>2005-09-02</date>

          <authorinitials>CR</authorinitials>

          <revremark>Обновление для Shorewall 3.0</revremark>
        </revision>

        <revision>
          <revnumber>1.8</revnumber>

          <date>2005-07-12</date>

          <authorinitials>TE</authorinitials>

          <revremark>Исправлена неверная ссылка на rfc1918.</revremark>
        </revision>

        <revision>
          <revnumber>1.7</revnumber>

          <date>2004-02-16</date>

          <authorinitials>TE</authorinitials>

          <revremark>Файл /etc/shorewall/rfc1918 перемещен в
          /usr/share/shorewall.</revremark>
        </revision>

        <revision>
          <revnumber>1.6</revnumber>

          <date>2004-02-05</date>

          <authorinitials>TE</authorinitials>

          <revremark>Обновление для Shorewall 2.0</revremark>
        </revision>

        <revision>
          <revnumber>1.5</revnumber>

          <date>2004-01-05</date>

          <authorinitials>TE</authorinitials>

          <revremark>Стандартные изменения</revremark>
        </revision>

        <revision>
          <revnumber>1.4</revnumber>

          <date>2003-12-30</date>

          <authorinitials>TE</authorinitials>

          <revremark>Добавлен срвет по обновлению
          /etc/shorewall/rfc1918.</revremark>
        </revision>

        <revision>
          <revnumber>1.3</revnumber>

          <date>2003-11-15</date>

          <authorinitials>TE</authorinitials>

          <revremark>Начальное преобразование DocBook</revremark>
        </revision>
      </revhistory></para>
  </appendix>
</article>
