Wednesday, October 18th, 2017

OpenBSD: IPSec с нуля за 4 минуты

Published on Апрель 7, 2009 by   ·   Комментариев нет

В этой короткой статье показано, как за 4 минуты поднять полнофункциональный IPSec VPN между двумя машинами со свежеустановленной ОС OpenBSD.

До недавнего времени установка решений IPSec с открытым исходным кодом была до горечи сложным и запутанным процессом. Много людей разочаровались в IPSec после того, как впервые посмотрели на ужасную и сложную документацию, решив вместо этого установить какой-либо коммерческий SSL VPN, кажущийся намного более простым. Те, кто боролся с хаосом SA, ESP, AH, SPI, CA, сертификатов, FIFO, IKE и жаргоном описания политик в RFC заработали немало головных болей. Однако, недавно появился свет в конце тоннеля — настройка IPSec под OpenBSD.

В этой короткой статье показано, как за 4 минуты поднять полнофункциональный IPSec VPN между двумя машинами со свежеустановленной ОС OpenBSD. Целью этой статьи, конечно же, заключается не в том, чтобы дать исчерпывающий обзор всех опций, доступных в IPSec или OpenBSD, а в том, чтобы показать, как быстро и легко мы можем осуществить то, что у других занимает недели и месяцы.
Введение в ipsecctl OpenBSD
Вы, возможно, не обратили внимание на то, что в OpenBSD 3.8 появилась новая команда: ipsecctl. И это действительно замечательно. Эта команда обеспечивает так необходимый уровень абстракции ко всему очень гибкому, но ужасно запутанному механизму IPSec. В реальной жизни, большинство людей не нуждается и в половине конфигурации и опций протокола, обеспечиваемых IPSec, таким образом, необходимость этого уровня абстракции черезвычайно велика.

Если ваша цель состоит в том, чтобы просто организовать Virtual Private Network (VPN) между между двумя сайтами (сетями, офисами и т.д), то конфигурирование, которое необходимо было сделать, было просто ужасным и бутылка пива была необходимой утилитой. Теперь этих мучений больше нет! Теперь, с помощью ipsecctl, VPN может быть установлен просто редактируя один файл конфигурации OpenBSD: /etc/ipsec.conf.

В качестве тестa, мой коллега Шон Комео и я взяли два, только-только установленных брандмауэра на базе OpenBSD в конфигурации по умолчанию и редактировали три файла. Мы изменили в общей сложности семь строк конфигурации на каждой системе, после чего получили IPSec VPN между нашими двумя сайтами в течение четырех минут после первой начальной загрузки.

Те, кто ранее не сталкивался с процессом установки OpenBSD, найдут его удивительно простым. Два самых популярных способа — установка в CD-ROM и FTP. В этой статье мы предположим, что у вас есть две готовые к запуску машины с OpenBSD. Учтите, что если вы обновили систему через CVS до OpenBSD 3.8-stable или OpenBSD 3.8-current, обе машины в вашем VPN должны быть одинаковых версий.
Пример IPSec
Обозначим цели, которые мы хотим достигнуть: мы хотим объединить две удаленные сети через Виртуальную Частную Сеть IPSec (VPN). Обе сети используют OpenBSD Network Address Translation (NAT).
Сеть А
Внешний IP адрес: 1.2.3.4, диапазон внутренних адресов: 10.1.1.0/24
Сеть В
Внешний IP адрес: 5.6.7.8, диапазон внутренних адресов: 10.2.2.0/24

Файл конфигурации PF, предоставляющего службы брандмауэра и NAT, называется /etc/pf.conf. На обеих системах в этом примере, pf.conf должен выглядеть следующим образом:

      ext_if="fxp0"
      int_if="fxp1"
      set skip on { lo $int_if }
      nat on $ext_if ftom !($ext_if) -> ($ext_if:0)
      block in
      pass out keep state

В этой короткой статье показано, как за 4 минуты поднять полнофункциональный IPSec VPN между двумя машинами со свежеустановленной ОС OpenBSD.

До недавнего времени установка решений IPSec с открытым исходным кодом была до горечи сложным и запутанным процессом. Много людей разочаровались в IPSec после того, как впервые посмотрели на ужасную и сложную документацию, решив вместо этого установить какой-либо коммерческий SSL VPN, кажущийся намного более простым. Те, кто боролся с хаосом SA, ESP, AH, SPI, CA, сертификатов, FIFO, IKE и жаргоном описания политик в RFC заработали немало головных болей. Однако, недавно появился свет в конце тоннеля — настройка IPSec под OpenBSD.

В этой короткой статье показано, как за 4 минуты поднять полнофункциональный IPSec VPN между двумя машинами со свежеустановленной ОС OpenBSD. Целью этой статьи, конечно же, заключается не в том, чтобы дать исчерпывающий обзор всех опций, доступных в IPSec или OpenBSD, а в том, чтобы показать, как быстро и легко мы можем осуществить то, что у других занимает недели и месяцы.
Введение в ipsecctl OpenBSD
Вы, возможно, не обратили внимание на то, что в OpenBSD 3.8 появилась новая команда: ipsecctl. И это действительно замечательно. Эта команда обеспечивает так необходимый уровень абстракции ко всему очень гибкому, но ужасно запутанному механизму IPSec. В реальной жизни, большинство людей не нуждается и в половине конфигурации и опций протокола, обеспечиваемых IPSec, таким образом, необходимость этого уровня абстракции черезвычайно велика.

Если ваша цель состоит в том, чтобы просто организовать Virtual Private Network (VPN) между между двумя сайтами (сетями, офисами и т.д), то конфигурирование, которое необходимо было сделать, было просто ужасным и бутылка пива была необходимой утилитой. Теперь этих мучений больше нет! Теперь, с помощью ipsecctl, VPN может быть установлен просто редактируя один файл конфигурации OpenBSD: /etc/ipsec.conf.

В качестве тестa, мой коллега Шон Комео и я взяли два, только-только установленных брандмауэра на базе OpenBSD в конфигурации по умолчанию и редактировали три файла. Мы изменили в общей сложности семь строк конфигурации на каждой системе, после чего получили IPSec VPN между нашими двумя сайтами в течение четырех минут после первой начальной загрузки.

Те, кто ранее не сталкивался с процессом установки OpenBSD, найдут его удивительно простым. Два самых популярных способа — установка в CD-ROM и FTP. В этой статье мы предположим, что у вас есть две готовые к запуску машины с OpenBSD. Учтите, что если вы обновили систему через CVS до OpenBSD 3.8-stable или OpenBSD 3.8-current, обе машины в вашем VPN должны быть одинаковых версий.
Пример IPSec
Обозначим цели, которые мы хотим достигнуть: мы хотим объединить две удаленные сети через Виртуальную Частную Сеть IPSec (VPN). Обе сети используют OpenBSD Network Address Translation (NAT).
Сеть А
Внешний IP адрес: 1.2.3.4, диапазон внутренних адресов: 10.1.1.0/24
Сеть В
Внешний IP адрес: 5.6.7.8, диапазон внутренних адресов: 10.2.2.0/24

Файл конфигурации PF, предоставляющего службы брандмауэра и NAT, называется /etc/pf.conf. На обеих системах в этом примере, pf.conf должен выглядеть следующим образом:

      ext_if="fxp0"
      int_if="fxp1"
      set skip on { lo $int_if }
      nat on $ext_if ftom !($ext_if) -> ($ext_if:0)
      block in
      pass out keep state

На обоих системах включен форвардинг пакетов, расскоментировав опцию «net.ip.forwarding=1» в /etc/sysctl.conf, так как он необходим для функционирования службы NAT. Теперь, когда у нас есть две должным образом настроенные системы, приступим к настройке VPN.
Шаг 1. конфигурируем IPSec
Добавим следущие строки к файлу /etc/ipsec.conf на маршрутизаторе А:

      ike esp from 10.1.1.0/24 to 10.2.2.0/24 peer 5.6.7.8
      ike esp from 1.2.3.4 to 10.2.2.0/24 peer 5.6.7.8
      ike esp from 1.2.3.4 to 5.6.7.8

В том же файле на маршрутизаторе В:

      ike passive esp from 10.2.2.0/24 to 10.1.1.0/24 peer 1.2.3.4
      ike passive esp from 5.6.7.8 to 10.1.1.0/24 peer 1.2.3.4
      ike passive esp from 5.6.7.8 to 1.2.3.4

Ключ passive указывает на то, что маршрутизатор А инициирует соединение, а маршрутизатор В готовится принять вызов.
Шаг 2. Пропускаем IPSec через брандмауэр
На маршрутизаторе А добавляем следущее в /etc/pf.conf:

      pass quick on $ext_if from 5.6.7.8

И заменяем строку «set skip» с:

      set skip on { lo $int_if }

на:

      set skip on { lo $int_if enc0 }

Таким образом мы добвим инкапсулированный интерфейс enc0 в список.

Теперь очередь маршрутизатора В. Добавим следущи строки в /etc/pf.conf:

      pass quick on $ext_if  from 1.2.3.4
      set skip on { lo $int_if enc0 }

Поскольку мы подготовили firewall/NAT и IPSec, приступим к копированию ключей.
Шаг 3. Копируем ключи isakmpd на каждую машину
На маршрутизатор A (1.2.3.4) копируем /etc/isakmpd/private/local.pub с маршрутизатора В в /etc/isakmpd/pubkeys/ipv4/5.6.7.8.

Аналогично, на маршрутизатор В (1.2.3.4) копируем /etc/isakmpd/private/local.pub с маршрутизатора А в /etc/isakmpd/pubkeys/ipv4/1.2.3.4.

Обратите внимание, что хотя в данном примере и использованы IP адреса, можно совершенно спокойно использовать имена FQDN. При использовании доменных имен храните ключи в каталоге /etc/isakmpd/pubkeys/fqdn и ключи srcid и dstid в /etc/ipsec.conf.
Шаг 4. Запуск VPN
Для установления VPN соединения выполните следущие команды:

      isakmpd -K
      ipsecctl -f /etc/ipsec.conf

Примите наши поздравления, IPSec VPN должен работать. Вы, наверное будете рады узнать, что ipsecctl самостоятельно сконфигурировало isakmpd и все его ужасные файлы конфигурации, и выбрало хорошие, понятные и безопасные значения по умолчанию.

Опция -K указывает isakmpd не загружать правила конфигурации.

Теперь давайте проверим наш VPN. Вы должны быть в состоянии пинговать узлы из сети 10.2.2.* с узлов сети 10.1.1.* и наоборот. Если связи нет, попробуйте запустить isakmpd с опцией отладки isakmpd-K-d, чтобы получить больше отладочной информации.
Шаг 5. Автоматический запуск после перезагрузки
Запускаемые при старте системы демоны прописываются в файле /etc/rc.conf. Добавьте в него следущие строки:

      isakmpd="-K"
      PF=YES

Также необходимо убедиться в том, что ipsecctl тоже запускается при начальной загрузке. Для этого добавьте следущую строку в /etc/rc.local:

      ipsecctl -f /etc/ipsec.conf

В заключение, можно отредактировать файл /etc/changelist на обоих маршрутизаторах, для того, чтобы убедиться, что ваш новый /etc/ipsec.conf там перечислен. Этот шаг не обязателен, но позволит посылать письма администратору в случае любых изменений в вашей конфигурации IPSec. Для осуществления этой затеи необходимо указать ваш почтовый адрес в /etc/mail/aliases и выполнить команду newaliases. Если Вы знакомы с pf и pfctl, ipsecctl будет очень прост и приятен в управлении, обеспечивая очень подобный интерфейс. Другими словами, вы можете получить состояние потоков ipsec и ca командой:

      ipsecctl -sa

И так далее. Удивительно, но потребовалось больше чем десятилетие, для того, чтобы наконец обеспечить простой и понятный интерфейс конфигурации IPSec. Теперь этот процесс стал достаточно простым, для того, чтобы рекомендовать его новичкам в IPSec.
Заключение
В этой короткой статье мы рассмотрели, насколько просто установить IPSec VPN между двумя маршрутизаторами OpenBSD. Мы начали с двух инсталляций по умолчанию и изменили в общей сложности семь строк в файлах конфигурации. Вместо того, чтобы потратить дни или недели, чтобы IPSec VPN заработал, мы управились приблизительно за четыре минуты.

В качестве своего личного мнения скажу, что я хотел бы видеть, что другие разработчики *BSD портируют этот инструментарий на свои системы. Ipsecctl был разработан Matt Sauve-Frankel, программирование осуществлял Hans-Joerg Hoexer. В настоящее время ipsecctl, кажется, не корректно работает с IPv6, но поддержка этого протокола планируется в ближайшее время. Также отметьте, что могут быть различия, связанные с тем, что ipsecctl отличается в CVS версиях 3.8-current и 3.8-stable. Поэтому рекомендуется чтобы обе системы работали под управлением одинаковой версии OpenBSD.

hives treatment

Покупайте наших слонов!

zp8497586rq





























Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]