- PVSM.RU - https://www.pvsm.ru -

Обзор IPSEC демона StrongSwan

Введение

На хабре много статей про настройку IPSEC на разных девайсах, но относительно мало про Linux, а StrongSwan представлен поверхностно всего одной статьей ( ).
В своем обзоре я затрону следующие вопросы:

  • Обзор демона StrongSwan;
  • Настройка Remote Access VPN на сертификатах;

Про протокол IPSEC и особенности реализации IKEv2 можно прочитать информацию в интернете, в данной статье они рассмотрены не будут. Всю информацию, которая касается описания демона можно найти на strongswan.org. Я использовал версию StrongSwan 4.6.4, но с точки зрения рассмотренного конфигурирования никаких отличий с более поздними версиями нет, в том числе и с пятой.
В качестве операционной системы для стенда я использовал Debian 6.0 (2.6.32-5-686)

Обзор демона StrongSwan

StrongSwan является демоном IPSEC, который поддерживает IKEv1 и IKEv2. На данный момент это развивающий продукт. Установка StrongSwan может быть выполнена из исходников или репазитория. Установка из исходников описана на сайте StrongSwan.
Установка из репазитория происходит без проблем командой:

apt-get install strongswan

Файлы конфигурирования по умолчанию хранятся в директории /etc/ и имеют следующие названия:

  • ipsec.conf – определяет параметры IPSEC-соединений и параметры подключений в целом;
  • ipsec.secrets – служит для хранения ссылок на сертификаты и ключи аутентификации;
  • strongswan.conf – для подключения криптографических алгоритмов и дополнительных функций.

Помимо этого во время установки программного обеспечения для хранения сертификатов и CRL-файлов используемых демонами pluto и charon создается директория /etc/ipsec.d, в которой находятся следующие каталоги:

  • private – содержит закрытые ключи RSA и ECDSA;
  • certs – содержит сертификаты X.509 и PGP;
  • crls – хранит список отозванных сертиифкатов;
  • cacerts – хранит доверенные сертификаты CA;
  • ocspcerts – содержит подписанные OCSP сертификаты;
  • reqs – содержит запросы на сертификаты в формате PKCS#10.

Файл /etc/ipsec.secrets содержит неограниченное количество следующих типов ключей (паролей):

  • RSA для определения пароля к сертификату открытого ключа;
  • ECDS для определения пароля к сертификату открытого ключа;
  • PSK для определения Pre-shared ключа;
  • EAP для учетных записей EAP;
  • NTLM для учетных записей NTLM;
  • XAUTH для учетных записей XAUTH;
  • PIN для пин-кода смарт-карт.

Соответственно поддерживаются все типы аутентификации.
Основные параметры команды ipsec, которая управляет подключениями StrongSwan:

  • start|restart|stop;
  • ipsec status|statusall — для просмотра состояния IPSEC-соединений;
  • up|down|route|unroute — для управления IPSEC-соединений.

Логи хранятся в /var/log/auth.log и /var/log/daemon.log.

Настройка Remote Access VPN на сертификатах

Генерация сертификатов

Генерация сертификатов является самой ответственной частью и самой трудной, именно от нее будет зависеть работоспособность нашего IPSEC=тунеля.
Сертификаты генерировались с помощью OPENSSL.
Сначала настраиваем OPENSSL:

nano -w /usr/lib/ssl/openssl.cnf
[ CA_default ] 
dir     = /etc/ipsec.d              # Основная директория, в ней будут храниться все сертификаты
certificate = $dir/cacerts/strongswanCert.pem       # Здесь у нас будет лежать CA сертификат
private_key = $dir/private/strongswanKey.pem        # А здесь закрытый ключ CA сертификата

Создаем директорию для новых сертификатов и файл с серийником для OPENSSL

cd /etc/ipsec.d
mkdir newcerts
touch index.txt
echo “00” > serial

Генерируем CA-сертификат:

openssl req -x509 -days 3650 -newkey rsa:2048 -keyout private/strongswanKey.pem -out cacerts/strongswanCert.pem
openssl pkcs12 -export -inkey private/strongswanKey.pem -in certs/strongswanCert.pem -name "host" -certfile cacerts/strongswanCert.pem -caname "strongSwan Root CA" -out CAcert.p12  /* этот сертификат нужно будет импортировать на клиент (например Windows 7)

Генерируем сертификат для сервера:

openssl req -newkey rsa:1024 -keyout private/serverkey.pem -out reqs/serverreq.pem
openssl ca -in reqs/serverreq.pem -days 730 -out certs/servercert.pem -notext

При генерации сертификата обязательно нужно задать для серверного сертификата в openssl.cnf параметр subjectAltName=IP:<external_IP>
Генерируем сертификат для клиента:

openssl req -newkey rsa:1024 -keyout private/hostKey.pem -out reqs/hostReq.pem
openssl ca -in reqs/hostReq.pem -days 730 -out certs/hostCert.pem -notext
openssl pkcs12 -export -inkey private/hostKey.pem -in certs/hostCert.pem -name "host" -certfile cacerts/strongswanCert.pem -caname "strongSwan Root CA" -out host.p12 /* этот сертификат нужно будет разместить на клиенте вместе с CA сертификатом
Настройка StrongSwan

Файл strongswan.conf

charon {
  load = curl test-vectors aes des sha1 sha2 md5 pem pkcs1 gmp random x509 revocation hmac xcbc cmac ctr ccm gcm stroke kernel-netlink socket-default updown eap-identity
}

Основными файлами для настройки являются etc/ipsec.conf и ipsec.secrets.
Начнем с ipsec.conf

config setup  / данная секция определяет базовые параметры
       strictpolicy=no
       charonstart=yes
       plutostart=no    / т.к. нам не нужен IKEv1
       charondebug="ike 2, knl 3, cfg 0"
conn %default  / определяет базовые параметры всех IPSEC-соединений
     ikelifetime=60m
     keylife=20m
     rekeymargin=3m
     keyingtries=1
     dpdaction=restart
     dpdelay=30s
     dpdtimeout=180s
conn rw / название IPSEC-соединения
  left=<external_IP> / адрес внешнего интерфейса
  leftsubnet=<subnet/prefix> / подсеть, к которой мы даем доступ
  leftid=<external_IP>
  leftcert=/etc/ipsec.d/certs/servercert.pem / говорим какой сертификат использовать для установки IKE SA
  leftauth=pubkey / говорим, что мы авторизуемся у клиент с помощью сертификата RSA
  right=%any / к нам можно подключиться с любого IP
  rightauth=pubkey / клиент авторизуется у нас по сертификату RSA
  rightsourceip=<subnet/prefix>  / из этого пула будет выдаваться IP-адрес для клиента
  auto=add / подключение будет инициироваться клиентом
  keyexhcnage=ikev2
  type=transport

Файл ipsec.secrets

: RSA /etc/ipsec.d/private/serverkey.pem "password"

Более подробно ознакомиться с директивами данного файла можно по ссылке [1].

Настройка IPSEC подключения [2] для Win7 и импорт сертификатов [3]описано на сайте strongswan.org:

Дальше можно подключиться клиентом и проверить статус соединения командой ipsec statusall и просмотром логов, ну и в Windows должно быть успешно подключено VPN-соединение и пинги будут бегать.

Заключение

В своей статье я сделал краткий обзор демона StrongSwan и привел пример настройки IPSEC IKEv2 на сертификатах для подключения клиентов (Windows 7). Так же StrongSwan имеет собственный клиент для Android, который так же будет работать с указанными настройками, главное сделать для него сертификат. Как видно из предложенной мной конфигурации она несколько отличает от той, которую предлагает использовать сам strongswan в своих примерах и большое внимание уделено генерации сертификатов.
Помимо этого замечательно работает site-to-site IPSEC и Remote Access с использованием протоколов аутентификации MSCHAPv2-EAP, а так же L2TP over IPSEC (IKEv1), если интересно, то могу рассказать как их настроить.

Автор: msamoylov

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/vpn/32694

Ссылки в тексте:

[1] ссылке: http://wiki.strongswan.org/projects/strongswan/wiki/IpsecConf

[2] подключения: http://wiki.strongswan.org/projects/strongswan/wiki/Win7Config

[3] сертификатов : http://wiki.strongswan.org/projects/strongswan/wiki/Win7Certs

[4] Источник: http://habrahabr.ru/post/177453/