Создание IPSec соединения между Windows 2000, OpenBSD и FreeBSD


Оригинал: ipsec-conn.narod.ru
Автор Озоль Андрей. supervisors @ lenta . ru

Некоторое время назад я заинтересовался установкой защищенного IPSec соединения между компьютерами и сетями , причем на разных платформах . Для начала покопался в поиске и выяснил , что в на русском языке материалов по VPN не так уж мало , но большинство посвящено протоколу PPTP от MS и его UNIX реализациям - PopTop , Vtun и MPD . По IPSec протоколу я нашел только широко распространенный перевод Лапшанского в старой "Софтерре" (5). Предлагаемый материал , надеюсь, сможет восполнить этот пробел и является в некоторой степени "впечатлениями новичка" в мире защищенных соединений .

Первые вопросы .

Как всегда при столкновении с новой темой возникает много вопросов плюс путаница в понятиях , терминах и т.д. Например:
VPN соединение под 2000 - это IPSec ?
И для чего у Микрософта есть отдельный продукт - VPN client ?
IPSec продукты других фирм под Windows - для чего они, и как соотносятся с IPSec от MS ?
Какие IPSec продукты используются в мире UNIX ?
По какому порту и протоколу работает IPSec ?

Первые ответы .

То , что в Win2000 создается в соединениях - это VPN с PPTP протоколом и это не IPSec . IPSec встроен в 2000 как сервис (IPSEC Services в списке ) и настраивается через MMC как "IP Security Policy".
Микрософт выпустил отдельно VPN клиент для Win 98/ NT 4 и опять же это не IPSEC .
Продукты IPSec других фирм под Windows служат аналогичным целям и своими средствами создают защищенное соединение .
В BSD системах для IPSec используют Racoon и ISAKMPD , в Linux -ах - FreeSWAN
IPSec использует при "переговорах" 500 порт UDP , а при обмене данными - специальные IP -пакеты , а не TCP / UDP .

Наиболее интересным было организовать IPSec соединение между Windows 2000 и UNIX платформами . В качестве UNIX платформы была выбрана OpenBSD из след. соображений

1. ISAKMPD является штатным демоном этой слегка тронутой на security системы и его не надо компилировать . (Создал конфигурационный файл и запустил ) .
2. В ядро системы включена поддержка IPSec по умолчанию - опять же ничего генерировать не надо .
3. Мне попалась пара толковых статей на англ. языке , плюc FAQ на openbsd . org . (Замечание - материала там много , так что его понимать для начинающих сложновато).

Конфигурация IPSec OpenBSD

Итак , была скачана OpenBSD 3.2 и установлена на достаточно древний компьютер 200 MMX c 132 Mб памяти и 100Мб сетевой картой. "Я его слепила из того что было" (с) А.Апина
ISAKMPD использует 2 файла конфигурации - isakmpd.conf и isakmpd.policy , лежат они в /etc/isakmpd . Примеры этих файлов с комментариями расположены в /usr/share/ipsec/isakmpd . В основном конфигурационный файл выглядел так :
/etc/isakmpd/isakmpd.conf   
 # ----------------     
 # Defaults section   
[General]     
	Default-phase-1-lifetime= 3600,60:86400   
	Default-phase-2-lifetime= 1200,60:86400    
# -----------      
# Connections      
# -----------      
[Phase 1]      	
	Default=ISAKMP-clients      
[Phase 2]      
	Passive-Connections=IPsec-clients      
# ---------------------      
# Phase 1 peer sections      
# ---------------------      
[ISAKMP-clients]      
    Phase=1      
    Transport=udp      
    Configuration=Open-main-mode      
    Authentication    =секретный пароль здесь      
#В данном примере используется самыйпростой вариант IPSec -разделяемого ключа (preshared keys)      
# ----------------      
# Phase 2 sections      
# ----------------      
[IPsec-clients]      
     Phase=2      
     Configuration=Open-quick-mode      
     Local-ID=my-host      
     Remote-ID=remote-net      
# ------------------      
# Client ID sections      
# ------------------      
[my-host]      
     ID-type=IPV4_ADDR_SUBNET      
     Network=0.0.0.0      
     Netmask=0.0.0.0      
# 
 [remote-net]      
     ID-type=IPV4_ADDR      
     Address=0.0.0.0      
 [Open-main-mode]      
     DOI=IPSEC      
     EXCHANGE_TYPE=ID_PROT      
     Transforms=3DES-SHA      
 [Open-quick-mode]      
     DOI=IPSEC      
     EXCHANGE_TYPE=QUICK_MODE      
     Suites=QM-ESP-AES-SHA-PFS-SUITE      
#--------------------------------------------------------------- 
	  
Небольшое замечание . Адреса локальной машины и удаленной сети в приведенном примере заданы 0 - то есть любые . Более корректный пример с указанием локальных/удаленных хостов/сетей будет приведен далее .

Второй файл isakmpd.policy содержит след. строки -
   KeyNote-Version: 2      
     Comment: This policy accepts ESP SAs from a remote that uses the right password 
       
      $OpenBSD: policy,v 1.6 2001/06/20 16:36:19 angelos Exp $      
      $EOM: policy,v 1.6 2000/10/09 22:08:30 angelos Exp $      
    Authorizer: "POLICY"    
    #---------------------------------------------------------------       
Замечание - демон ISAKMPD не очень хорошо разбирает конфигурационные файлы, так что лучше избегать лишних пробелов в конце строк - это приводит к малопонятным ошибкам .
Также надо настроить firewall - пропускать UDP пакеты по 500 порту и esp -пакеты.
Итак - конфигурация готова , запускаем демон примерно так :


На последние сообщения о ошибках внимания можно не обращать
Все , с стороны OpenBSD IPSec соединение готово и ждет подключения клиента .

Конфигурация IPSec Windows 2000.

Для экспериментов с Windows 2000 был использован более передовой компьютер Celeron 1800/256 RAM /100Мб сетевая карта , версия Prof с SP 2 .
Настройка IPSec штатными средствами Win 2000 исчерпывающе описана на сайте самого MS (4) , на русском языке кратко в (5), однако процедура эта многоступенчатая и временами двусмысленная - начинающим легко запутаться . К счастью, в процессе поисков я обнаружил замечательную программу IPSEC . exe (6) от Marcus Müller's .Суть ее в том , что используя программу IPSECPOL . EXE из MS ResKit , она сама производит настройку IPSec Policy на основе входного текстового файла . Формат этого конфигурационного файла аналогичен формату config - a Freeswan из Линукса и весьма несложен . Таким образом настройка IPSec сильно упрощается J .

Итак, необходимо скачать и установить ipsecpol (7) и ipsec (6).
Затем займемся созданием входного файла . На основе примера был создан файл ipsec.conf
  conn Andy     
      left=%any      
      right    =213.27.18.0      
      rightsubnet    =10.0.1.00/255.255.255.0      
      presharedkey    =секретный пароль - такой же как на  OpenBSD             
      network=lan      
      auto=start      
      pfs    =     yes        
Комментарий :
left - это наша локальная машина с Windows 2000 , в данном примере это означает любой адрес .
right - это адрес машины OpenBSD
rightsubnet - это сетка ЗА OpenBSD , к которой будет установлено защищенное соединение .


Таким образом , мы соединяем по IPSec клиента Win 2000 с удаленной сетью , для которой OpenBSD является шлюзом .

Запускаем IPSEC.EXE



И проверяем доступность удаленной сети при помощи Ping



Первые пинги не прошли - это особенность реализации 2000 IPSec .

Со второго раза защищенное соединение установилось , и мы видим удаленную сеть ! Для того , чтобы окончательно развеять сомнения , посмотрим обмен на другой стороне - OpenBSD при помощи tcpdump :



Действительно , налицо все признаки защищенного трафика.

Итак , защищенное IPSec соединение установлено.