Введение
На хабре много статей про настройку 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), если интересно, то могу рассказать как их настроить.