<!--
     The FreeBSD Russian Documentation Project

     $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/checkpoint/article.sgml,v 1.4 2004/04/08 06:14:20 den Exp $

     Original revision: 1.18
-->

<!-- Copyright (c) 2001 The FreeBSD Documentation Project

     Redistribution and use in source (SGML DocBook) and 'compiled' forms
     (SGML, HTML, PDF, PostScript, RTF and so forth) with or without
     modification, are permitted provided that the following conditions
     are met:

      1. Redistributions of source code (SGML DocBook) must retain the above
         copyright notice, this list of conditions and the following
         disclaimer as the first lines of this file unmodified.

      2. Redistributions in compiled form (transformed to other DTDs,
         converted to PDF, PostScript, RTF and other formats) must reproduce
         the above copyright notice, this list of conditions and the
         following disclaimer in the documentation and/or other materials
         provided with the distribution.

     THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS
     IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY
     DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
     POSSIBILITY OF SUCH DAMAGE.
-->

<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
<!ENTITY legalnotice SYSTEM "../../share/sgml/legalnotice.sgml">

<!ENTITY % trademarks PUBLIC "-//FreeBSD//ENTITIES DocBook Trademark Entities//EN">
%trademarks;
]>

<article>
  <articleinfo>
    <title>Интеграция FreeBSD IPsec и Check Point <trademark
      class='registered'>VPN-1</trademark>/<trademark
      class='registered'>Firewall-1</trademark></title>

    <authorgroup>
      <author>
	<firstname>Jon</firstname>

	<surname>Orbeton</surname>

	<affiliation>
	  <address><email>jono@securityreports.com</email></address>
	</affiliation>
      </author>

      <author>
	<firstname>Matt</firstname>

	<surname>Hite</surname>

	<affiliation>
	  <address><email>mhite@hotmail.com</email></address>
	</affiliation>
      </author>
    </authorgroup>

    <pubdate>$FreeBSD$</pubdate>

    <copyright>
      <year>2001, 2002, 2003</year>

      <holder role="mailto:jono@securityreports.com">Jon Orbeton</holder>
    </copyright>

    &legalnotice;

    <legalnotice id="trademarks" role="trademarks">
      &tm-attrib.freebsd;
      &tm-attrib.check-point;
      &tm-attrib.general;
    </legalnotice>

    <abstract>
      <para>В этом документе описывается, как настроить
        <acronym>VPN</acronym>-туннелирование между FreeBSD и
	<trademark class='registered'>VPN-1</trademark>/
	<trademark class='registered'>Firewall-1</trademark> компании
        Check Point.  В других имеющихся публикациях даётся такая информация,
        но в ней не содержатся инструкции, специфичные для VPN-1/Firewall-1 и
        его интеграции с FreeBSD.  Они перечислены в завершающей части этой
        работы для дальнейшего изучения.</para>
    </abstract>
  </articleinfo>

  <sect1 id="prerequisites">
    <title>Исходные данные</title>

    <para>Далее показана схема расположения машин и сетей, о которых идёт речь
      в этом документе.</para>

    <mediaobject>
      <imageobject>
        <imagedata fileref="networks">
      </imageobject>

      <textobject>
        <literallayout class="monospaced">         Внешний интерфейс                Внешний интерфейс
           208.229.100.6                    216.218.197.2
                       |                    |
         +--&gt; Firewall-1 &lt;--&gt; Internet &lt;--&gt; FreeBSD GW &lt;--+
         |                                                |
Сети под защитой FW-1                              Внутренние сети
199.208.192.0/24                               192.168.10.0/24</literallayout>
      </textobject>

      <textobject>
        <phrase>Сеть FW-1 и сеть FreeBSD</phrase>
      </textobject>
    </mediaobject>

    <para>Шлюз <acronym>GW</acronym> на основе FreeBSD выступает в качестве
      межсетевого экрана и <acronym>NAT</acronym>-устройства для
      <quote>внутренних сетей.</quote></para>

    <para>Ядро FreeBSD должно быть построено с поддержкой IPsec.  Для включения
      IPsec в вашем ядре используйте следующие параметры ядра:</para>

    <programlisting>options         IPSEC
options         IPSEC_ESP
options         IPSEC_DEBUG</programlisting>

    <para>Для получения информации по построению нестандартного ядра,
      обратитесь к <ulink
      url="http://www.FreeBSD.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig.html">
      Руководству по FreeBSD</ulink>.  Пожалуйста, заметьте, что между хостами
      <trademark class='registered'>Firewall-1</trademark> и
      <acronym>GW</acronym> с FreeBSD должны быть разрешены соединения
      <acronym>IP</acronym> protocol&nbsp;50 (<acronym>ESP</acronym>) и
      <acronym>UDP</acronym> port&nbsp;<literal>500</literal>.</para>

    <para>Кроме того, для поддержки обмена ключами должен быть установлен
      пакет <application>racoon</application>.
      <application>Racoon</application> является частью коллекции портов
      FreeBSD и находится в пакадже <filename
      role="package">security/racoon</filename>.  Файл конфигурации
      <application>racoon</application> будет описан ниже в этом
      документе.</para>
  </sect1>

  <sect1 id="object">
    <title>Настройка сетевых объектов в Firewall-1</title>

    <para>Начните с настройки политики Firewall-1.  Откройте редактор политик
      Policy Editor на сервере управления Firewall-1 и создайте новый сетевой
      объект (Network Object) типа <quote>Workstation</quote>, который будет
      представлять машину <acronym>GW</acronym> с FreeBSD.</para>

   <programlisting>General Tab:
		Set name and IP address

VPN Tab:
		Encryption Schemes Defined:             IKE               ---&gt; Edit

IKE Properties:
		Key Negotiation Encryption Methods:     3DES

Authentication Method:
		Pre-Shared Secret ---&gt; Edit</programlisting>

    <para>Выберите Firewall Object и установите заранее известный пароль.  (Не
      используйте его из нашего примера.)</para>

    <programlisting>Support Aggressive Mode:                 Checked
Supports Subnets:                      Checked</programlisting>

    <para>После установки известного пароля в определении сетевого объекта
      Firewall-1, укажите этот пароль в файле
      <filename>/usr/local/etc/racoon/psk.txt</filename> в системе FreeBSD на
      <acronym>GW</acronym>.  Формат файла <filename>psk.txt</filename>
      таков:</para>

    <programlisting>208.229.100.6          rUac0wtoo?</programlisting>
  </sect1>

  <sect1 id="rulecfg">
    <title>Конфигурация VPN-правила в Firewall-1</title>

    <para>Теперь создайте в Firewall-1 правило, включающее шифрование между
      машиной <acronym>GW</acronym> с FreeBSD и сетью, защищённой Firewall-1.
      В этом правиле должны быть заданы сетевые сервисы, разрешённые к работе
      через <acronym>VPN</acronym>.</para>

    <programlisting>Source            | Destination        | Service      | Action  | Track
------------------------------------------------------------------------
FreeBSD GW        | FW-1 Protected Net | VPN services | Encrypt | Long
FW-1 Protected Net| FreeBSD GW         |              |         |</programlisting>

    <para><quote>VPN-сервисами</quote> являются любые сервисы (то есть
      <command>telnet</command>, <acronym>SSH</acronym>,
      <acronym>NTP</acronym> и так далее), к которым разрешён доступ удалённому
      хосту через <acronym>VPN</acronym>.  Будьте внимательны при включении
      сервисов; хосты, подключаемые через <acronym>VPN</acronym>, продолжают
      представлять потенциальную опасность.  Шифрование трафика между двумя
      сетями даёт слабую защиту, если любой из хостов на обеих сторонах туннеля
      был взломан.</para>

    <para>После настройки правила шифрования данных между машиной
      <acronym>GW</acronym> с FreeBSD и сетью, защищённой Firewall-1,
      просмотрите настройки <quote>Action Encrypt</quote>.</para>

    <programlisting>Encryption Schemes Defined:     IKE ---&gt; Edit
Transform:                      Encryption + Data Integrity (ESP)
Encryption Algorithm:           3DES
Data Integrity:                 MD5
Allowed Peer Gateway:           Any or Firewall Object
Use Perfect Forward Secrecy:    Checked</programlisting>

    <para>Использование технологии Perfect Forward Secrecy
      (<acronym>PFS</acronym>) является необязательным.  Включение
      <acronym>PFS</acronym> добавит ещё один уровень безопасности на уровне
      шифрования данных, однако приведёт к увеличению нагрузки на
      <acronym>CPU</acronym>.  Если <acronym>PFS</acronym> не используется,
      то выключите флаг выше и закомментируйте строчку
      <literal>pfs_group&nbsp;1</literal> в файле
      <filename>racoon.conf</filename> на машине <acronym>GW</acronym> с
      FreeBSD.  Пример файла <filename>racoon.conf</filename> дан в этом
      дальше.</para>
  </sect1>

  <sect1 id="policy">
    <title>Конфигурация политики <acronym>VPN</acronym> во FreeBSD</title>

    <para>На этом этапе должна быть задана политика <acronym>VPN</acronym> на
      машине <acronym>GW</acronym> с FreeBSD.  Эту функцию выполняет утилита
      &man.setkey.8;.</para>

    <para>Ниже даётся пример скрипта командного процессора, который сбрасывает
      &man.setkey.8; и добавляет ваши правила политики
      <acronym>VPN</acronym>.</para>

    <programlisting>#
# /etc/vpn1-ipsec.sh
#
# IP addresses
#
#     External Interface                    External Interface
#       208.229.100.6                       216.218.197.2
#                   |                       |
#        +--&gt; Firewall-1 &lt;--&gt; Internet &lt;--&gt; FreeBSD GW &lt;--+
#        |                                                |
# FW-1 Protected Nets                              Internal Nets
#    199.208.192.0/24                                  192.168.10.0/24
#
# Flush the policy
#
setkey -FP
setkey -F
#
# Configure the Policy
#
setkey -c &lt;&lt; END
spdadd 216.218.197.2/32 199.208.192.0/24 any -P out ipsec
esp/tunnel/216.218.197.2-208.229.100.6/require;
spdadd 199.208.192.0/24 216.218.197.2/32 any -P in ipsec
esp/tunnel/208.229.100.6-216.218.197.2/require;
END
#</programlisting>

    <para>Выполните команды &man.setkey.8;:</para>

    <screen>&prompt.root; <userinput>sh /etc/vpn1-ipsec.sh</userinput></screen>
  </sect1>

  <sect1 id="racoon">
    <title>Конфигурация <application>Racoon</application> во FreeBSD</title>

    <para>Для обеспечения согласования ключей IPsec на машине
      <acronym>GW</acronym> с FreeBSD, необходимо установить и сконфигурировать
      порт <filename role="package">security/racoon</filename>.</para>

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

    <programlisting># racoon.conf for use with Check Point VPN-1/Firewall-1
#
# search this file for pre_shared_key with various ID key.
#
	path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
	log debug;
#
# "padding" defines some parameter of padding.  You should not touch these.
#
	padding
      {
	maximum_length 20;      # maximum padding length.
	randomize off;          # enable randomize length.
	strict_check off;       # enable strict check.
	exclusive_tail off;     # extract last one octet.
      }

	listen
      {
	#isakmp ::1 [7000];
	#isakmp 0.0.0.0 [500];
	#admin [7002];          # administrative port by kmpstat.
	#strict_address;        # required all addresses must be bound.
      }
#
# Specification of default various timers.
#
	timer
      {
#
# These values can be changed per remote node.
#
	counter 5;              # maximum trying count to send.
	interval 20 sec;        # maximum interval to resend.
	persend 1;              # the number of packets per a send.
#
# timer for waiting to complete each phase.
#
	phase1 30 sec;
	phase2 15 sec;
      }

	remote anonymous
      {
	exchange_mode aggressive,main; # For Firewall-1 Aggressive mode

	#my_identifier address;
	#my_identifier user_fqdn "";
	#my_identifier address "";
	#peers_identifier address "";
	#certificate_type x509 "" "";

	nonce_size 16;
	lifetime time 10 min;   # sec,min,hour
	lifetime byte 5 MB;     # B,KB,GB
	initial_contact on;
	support_mip6 on;
	proposal_check obey;    # obey, strict or claim

	proposal {
		encryption_algorithm 3des;
		hash_algorithm md5;
		authentication_method pre_shared_key;
		dh_group 2 ;
        }
      }

	sainfo anonymous
      {
	pfs_group 1;
	lifetime time 10 min;
	lifetime byte 50000 KB;
	encryption_algorithm 3des;
	authentication_algorithm hmac_md5;
	compression_algorithm deflate ;
      }</programlisting>

    <para>Проверьте, что файл
      <filename>/usr/local/etc/racoon/psk.txt</filename> содержит тот же самый
      заранее известный пароль, что настраивался при помощи раздела
      <quote>Настройка сетевых объектов в Firewall-1</quote> этого документа,
      и имеет режим доступа <literal>600</literal>.</para>

    <screen>&prompt.root; <userinput>chmod 600 /usr/local/etc/racoon/psk.txt</userinput></screen>
  </sect1>

  <sect1 id="startingvpn">
    <title>Запуск <acronym>VPN</acronym> в работу</title>

    <para>Теперь вы готовы к запуску <application>racoon</application> и
      тестированию туннеля <acronym>VPN</acronym>.  Для целей отладки откройте
      Log Viewer на Firewall-1 и задайте фильтр протоколирования для выделения
      записей, относящихся к машине <acronym>GW</acronym> с FreeBSD.  Вам может
      также пригодиться просмотр журнала <application>racoon</application> при
      помощи команды &man.tail.1;:</para>

    <screen>&prompt.root; <userinput>tail -f /var/log/racoon.log</userinput></screen>

    <para>Запустите <application>racoon</application> посредством следующей
      команды:</para>

    <screen>&prompt.root; <userinput>/usr/local/sbin/racoon -f /usr/local/etc/racoon/racoon.conf</userinput></screen>

    <para>После запуска <application>racoon</application> выполните подключение
      по &man.telnet.1; к хосту в сети, защищённой Firewall-1.</para>

    <screen>&prompt.root; <userinput>telnet -s 192.168.10.3 199.208.192.66 22</userinput></screen>

    <para>По этой команде выполняется попытка подключения к &man.ssh.1;-порту
      машины <hostid role="ipaddr">199.208.192.66</hostid>, той, что находится
      в сети, защищённой Firewall-1.  Параметр <option>-s</option> задаёт
      используемый интерфейс в исходящем соединении.  Это, в частности, важно
      при использовании на машине <acronym>GW</acronym> с FreeBSD технологий
      <acronym>NAT</acronym> и <acronym>IPFW</acronym>.  Использование
      <literal>-s</literal> и явное задание исходящего адреса не позволит
      <acronym>NAT</acronym> подменять пакеты перед туннелированием.</para>

    <para>При успешном обмене ключами <application>racoon</application> выдаст
      в файл протокола <filename>racoon.log</filename> следующее:</para>

    <programlisting>pfkey UPDATE succeeded: ESP/Tunnel 216.218.197.2->208.229.100.6
pk_recvupdate(): IPSec-SA established: ESP/Tunnel 216.218.197.2->208.229.100.6
get pfkey ADD message IPsec-SA established: ESP/Tunnel 208.229.100.6->216.218.197.2</programlisting>

    <para>После того, как обмен ключами будет завершён (что занимает несколько
      секунд), будет выдана заставка &man.ssh.1;.  Если всё прошло нормально,
      в средстве Log Viewer на Firewall-1 будет зафиксировано два сообщения
      <quote>Key Install</quote>.</para>

    <programlisting>Action      |  Source        |  Dest.             | Info.
Key Install |  216.218.197.2 |  208.229.100.6     | IKE Log: Phase 1 (aggressive) completion.
Key Install |  216.218.197.2 |  208.229.100.6     | scheme: IKE methods</programlisting>

    <para>В информационной колонке подробный протокол будет выглядеть
      так:</para>

    <programlisting>IKE Log: Phase 1 (aggressive) completion. 3DES/MD5/Pre shared secrets Negotiation Id:
scheme: IKE methods: Combined ESP: 3DES + MD5 + PFS (phase 2 completion) for host:</programlisting>
  </sect1>

  <sect1 id="References">
    <title>Ссылки</title>

    <itemizedlist>
      <listitem>
        <para><ulink url="http://www.FreeBSD.org/handbook/ipsec.html">
          Руководство FreeBSD: IPsec</ulink></para>
      </listitem>

      <listitem>
        <para><ulink url="http://www.kame.net">Проект KAME</ulink></para>
      </listitem>

      <listitem>
        <para><ulink url="http://www.x-itec.de/projects/tuts/ipsec-howto.txt">
          Краткий HOWTO по FreeBSD IPsec </ulink></para>
      </listitem>
    </itemizedlist>
  </sect1>
</article>
