Pull to refresh

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

Reading time5 min
Views80K

Введение


На хабре много статей про настройку 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=tunnel

Файл ipsec.secrets
: RSA /etc/ipsec.d/private/serverkey.pem "password"

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

Настройка IPSEC подключения для Win7 и импорт сертификатов .

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

Заключение


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

Articles