Настройка IPSec


Как настроить IPSec с фиксированными ключами

В данном примере рассматривается настройка IPSec с фиксированными ключами. Смотрите также вопрос как настроить ISAKMPD (IKE).

Исходные данные: хост A (адрес 192.168.64.1), хост B (адрес 192.168.64.15).

Для настройки IPSec с фиксированными ключами, нам потребуется их сгенерировать. Для этого следует выполнить следующие команды:

# mkdir -m 700 /etc/ipsec

# openssl rand 24 | perl -pe 's/./unpack("H2",$&)/ges'

> /etc/ipsec/esp-enc-key

# openssl rand 20 | perl -pe 's/./unpack("H2",$&)/ges'

> /etc/ipsec/esp-auth-key

# chmod 600 /etc/ipsec/*

В зависимости от выбранного алгоритма шифрования, число байт в первой команде openssl должно быть следующим: DES - 8, 3DES - 24, AES - переменное (рекомендуется 16), BLF - переменное (рекомендуется 20), CAST - переменное, максимум 16 (рекомендуется 16), SKIPJACK - 10. Использовать алгоритмы DES и SKIPJACK не рекомендуется из-за их слабости. Сгенерированные файлы должны быть скопированы на оба хоста.

Далее нам понадобится файл /usr/share/ipsec/rc.vpn, который следует скопировать в /etc и отредактировать следующим образом:

Файл /etc/rc.vpn для хоста A:

# Эта строка должна быть закоментирована. Раскоментировав ее можно посмотреть

# какие команды выдает скрипт без реального их выполнения.

#DEBUG=echo



GW_LOCAL=192.168.64.1

GW_REMOTE=192.168.64.15



# В этих переменных можно перечислить через пробелы сети (в формате CIDR),

# которые находятся за каждой из сторон.

LOCAL_NETWORKS=""

REMOTE_NETWORKS=""



# Здесь можно выбрать алгоритмы шифрования и авторизации.

ENC=3des

AUTH=sha1



SPI_OUT=1000

SPI_IN=1001

KEYFILE=/etc/ipsec/esp-enc-key

AUTHKEYFILE=/etc/ipsec/esp-auth-key

Файл /etc/rc.vpn для хоста B:

# Эта строка должна быть закоментирована. Раскоментировав ее можно посмотреть

# какие команды выдает скрипт без реального их выполнения.

#DEBUG=echo



GW_LOCAL=192.168.64.15

GW_REMOTE=192.168.64.1



# В этих переменных можно перечислить через пробелы сети (в формате CIDR),

# которые находятся за каждой из сторон.

LOCAL_NETWORKS=""

REMOTE_NETWORKS=""



# Здесь можно выбрать алгоритмы шифрования и авторизации.

ENC=3des

AUTH=sha1



SPI_OUT=1001

SPI_IN=1000

KEYFILE=/etc/ipsec/esp-enc-key

AUTHKEYFILE=/etc/ipsec/esp-auth-key

Теперь достаточно запустить данные скрипты на каждом из хостов:

# sh /etc/rc.vpn

Для автоматического запуска добавьте следующую строку в /etc/rc.local:

[ -f /etc/rc.vpn ] && sh /etc/rc.vpn

Смотрите также по данной теме: ipsecadm(8), vpn(8), /usr/share/ipsec/rc.vpn.

Как настроить ISAKMP (IKE)

В данном примере рассматривается настройка IPSec для защиты трафика между двумя хостами с использованием протокола обмена ключами ISAKMP (RFC 2407, RFC 2408, RFC 2409). Здесь рассматривается один вариант настройки ISAKMP для защиты трафика между двумя хостами. Более подробную информацию о других вариантах настройки можно получить по указанным ниже ссылкам. Смотрите также вопрос как настроить IPSec с фиксированными ключами.

Создаем файл /etc/isakmpd/isakmpd.policy на каждом хосте. Этот файл будет одинаковым для хостов A и B:

KeyNote-Version: 2

Authorizer: "POLICY"

Licensees: "passphrase:mekmitasdigoat"

Conditions: app_domain == "IPsec policy" &&

esp_present == "yes" &&

esp_enc_alg == "aes" &&

esp_auth_alg == "hmac-sha" -> "true";

Вместо "mekmitasdigoat" следует указать фразу, которая будет использоваться в качестве ключа для установки соединения. Эта фраза должна совпадать для хостов A и B. Далее нам потребуется файлы /etc/isakmpd/isakmpd.conf для каждого из хостов:

[General]

Listen-on= 192.168.64.1

Shared-SADB= Defined



[Phase 1]

192.168.64.15= ISAKMP-peer-B

Default= ISAKMP-peer-B-aggressive



[Phase 2]

Connections= IPsec-A-B



[ISAKMP-peer-B]

Phase= 1

Transport= udp

Local-address= 192.168.64.1

Address= 192.168.64.15

Configuration= Default-main-mode

Authentication= mekmitasdigoat



[ISAKMP-peer-B-aggressive]

Phase= 1

Transport= udp

Local-address= 192.168.64.1

Address= 192.168.64.15

Configuration= Default-aggressive-mode

Authentication= mekmitasdigoat



[IPsec-A-B]

Phase= 2

ISAKMP-peer= ISAKMP-peer-B

Configuration= Default-quick-mode

Local-ID= Net-A

Remote-ID= Net-B



[Net-B]

ID-type= IPV4_ADDR_SUBNET

Network= 192.168.64.15

Netmask= 255.255.255.255



[Net-A]

ID-type= IPV4_ADDR_SUBNET

Network= 192.168.64.1

Netmask= 255.255.255.255



[Default-main-mode]

DOI= IPSEC

EXCHANGE_TYPE= ID_PROT

Transforms= 3DES-SHA



[Default-aggressive-mode]

DOI= IPSEC

EXCHANGE_TYPE= AGGRESSIVE

Transforms= 3DES-SHA-RSA



[Default-quick-mode]

DOI= IPSEC

EXCHANGE_TYPE= QUICK_MODE

Suites= QM-ESP-AES-SHA-PFS-SUITE

Файл /etc/isakmpd/isakmpd.conf для хоста B:

[General]

Listen-on= 192.168.64.15

Shared-SADB= Defined



[Phase 1]

192.168.64.1= ISAKMP-peer-A

Default= ISAKMP-peer-A-aggressive



[Phase 2]

Connections= IPsec-B-A



[ISAKMP-peer-A]

Phase= 1

Transport= udp

Local-address= 192.168.64.15

Address= 192.168.64.1

Configuration= Default-main-mode

Authentication= mekmitasdigoat



[ISAKMP-peer-A-aggressive]

Phase= 1

Transport= udp

Local-address= 192.168.64.15

Address= 192.168.64.1

Configuration= Default-aggressive-mode

Authentication= mekmitasdigoat



[IPsec-B-A]

Phase= 2

ISAKMP-peer= ISAKMP-peer-A

Configuration= Default-quick-mode

Local-ID= Net-B

Remote-ID= Net-A



[Net-B]

ID-type= IPV4_ADDR_SUBNET

Network= 192.168.64.15

Netmask= 255.255.255.255



[Net-A]

ID-type= IPV4_ADDR_SUBNET

Network= 192.168.64.1

Netmask= 255.255.255.255



[Default-main-mode]

DOI= IPSEC

EXCHANGE_TYPE= ID_PROT

Transforms= 3DES-SHA



[Default-aggressive-mode]

DOI= IPSEC

EXCHANGE_TYPE= AGGRESSIVE

Transforms= 3DES-SHA-RSA



[Default-quick-mode]

DOI= IPSEC

EXCHANGE_TYPE= QUICK_MODE

Suites= QM-ESP-AES-SHA-PFS-SUITE

Не забудьте установить права, запрещающие чтение файлов конфигурации isakmpd простыми пользователями:

# chmod 600 /etc/isakmpd/isakmpd.conf /etc/isakmpd/isakmpd.policy

Теперь остается только запустить isakmpd на каждом из хостов:

# isakmpd -4

Для автоматического запуска isakmpd следует отредактировать файл /etc/rc.conf.local:



isakmpd_flags="-4"

Для гарантии защиты трафика следует также добавить правила Packet Filter, разрешающие трафик между данными хостами только по протоколам ESP и UDP (порты источника и приемника 500).

Смотрите также по данной теме: isakmpd.conf(5), isakmpd.policy(5), isakmpd(8), vpn(8), http://www.openbsdsupport.org/vpn-ipsec.html, /usr/share/ipsec/isakmpd.

Как связать OpenBSD и Windows 2000/XP

В данном примере рассказывается как установить защищенное IPSec соединение между OpenBSD и Windows 2000/XP с использованием протокола ISAKMP. Пример описывает соединение с Windows XP, однако тем же способом можно настроить Windows 2000 (возможно с небольшими изменениями).

Исходные данные: хост A (OpenBSD, адрес 192.168.64.1), хост B (Windows XP, адрес 192.168.64.15).

Информацию о настройке OpenBSD хоста A смотрите в описании вопроса как настроить ISAKMPD (IKE). Для настройки Windows XP хоста B выполните следующие действия:

Запустите команду mmc из меню Start / Run панели задач.
Выберите пункт меню File / Add/Remove Snap-in...
Кликните кнопку Add, в открывшемся окне выберите пункт IP Security Policy Management и кликните кнопку Add
Пройдите пошагово открывшийся wizard. При этом следует выбрать следующие настройки:
Select which computer or domain this snap-in will manage - Local computer
Выберите пункт меню Action / Create IP Security Policy...
Пройдите открывшийся wizard. При этом ВЫКЛЮЧИТЕ следующую настройку:
Request for Secure Communication - Activate the default responce rule
При завершении wizardа, включите настройку:
Completing the IP Security wizard - Edit properties
В открывшемся окне кликните кнопку Add
Пройдите открывшийся wizard, установите следующие настройки:
Tunnel Endpoint - This rule does not specify a tunnel
Network Type - Local Area Network (LAN)
Authentication Method - Use this string to protect the key exchange (preshared key) - здесь введите ключевую фразу, которая использовалась при настройке OpenBSD хоста
IP Filter List - кликните кнопку Add
В открывшемся окне кликните кнопку Add
Пройдите wizard, введите следующие настройки:
IP Traffic Source - My IP Address
IP Traffic Destination - A Specific IP Address - 192.168.64.1
IP Protocol Type - Any
Выберите созданное правило и кликните кнопку Next
Filter Action - Require Security - кликните кнопку Edit
Установите следующие настройки:
Negotiate security
Seccion key perfect forward secrecy (PFS)
Перезапустить сервис IPSEC Services
В правом окне приложения mmc выберите созданное правило и кликните кнопку Assign в панели инструментов (поднятый вверх переключатель)
Проверьте результат настройки командой ping (на Windows хосте) - она должна ругнуться несколько раз "Negotiating IP Security", после чего все должно заработать.

Как связать OpenBSD и Cisco PIX

В данном примере рассказывается как установить защищенное IPSec соединение между OpenBSD и Cisco PIX с использованием протокола ISAKMP. Пример описывает соединение с Cisco PIX (Cisco PIX Firewall Version 6.3(4)).

Исходные данные: хост A (OpenBSD, адрес 192.168.64.1), хост B (Cisco PIX, адрес 192.168.64.15).

Информацию о настройке OpenBSD хоста A смотрите в описании вопроса как настроить ISAKMPD (IKE). Для настройки Cisco PIX хоста B выполните следующие команды:

pix(config)# access-list to_hostA permit ip host 192.168.64.15 host 192.168.64.1



pix(config)# sysopt connection permit-ipsec



pix(config)# crypto ipsec transform-set set_hostA esp-aes esp-sha-hmac



pix(config)# crypto map newmap 10 ipsec-isakmp

pix(config)# crypto map newmap 10 match address to_hostA

pix(config)# crypto map newmap 10 set peer 192.168.64.1

pix(config)# crypto map newmap 10 set transform-set set_hostA

pix(config)# crypto map newmap interface outside



pix(config)# isakmp enable outside

pix(config)# isakmp key mekmitasdigoat address 192.168.64.1 netmask 255.255.255.255

pix(config)# isakmp identity address

pix(config)# isakmp policy 10 authentication pre-share

pix(config)# isakmp policy 10 encryption 3des

pix(config)# isakmp policy 10 hash sha

pix(config)# isakmp policy 10 group 2

pix(config)# isakmp policy 10 lifetime 86400



pix(config)# exit

Проверьте результат настройки командой ping (на Cisco PIX) - она должна ругнуться несколько раз "No response received", после чего все должно заработать.

Обновлено: 13.03.2015