Возникла вот намедни задача обеспечить более-менее безопасное подключение удалённого узла под Windows к корпоративной сети. На ум пришло несколько вариантов:
- Поднять SSH-туннель до шлюза, в нём уже пропускать трафик. Это я уже прошёл. Захотелось чего-то новенького.
- Использовать VPN технологии. Этот вариант показался наиболее привлекательным, поскольку я пока ещё не налаживал полноценного взрослого VPN. Об этом и будет статья.
Так, с методом разобрались. Теперь определяемся с протоколом. Выбирал я из нескольких вариантов. Главное требование было – OpenSource или что-то доступное. Клиент желательно встроенный в Windows или несложный в установке. Ну и уровень безопасности тоже нужен на высоте, что-то современное, криптостойкое.
- PPTP – первый кандидат. Простой в настройке. Можно аутентифицироваться на RADIUS. Клиент встроен в Windows, бери да настраивай! Но вот безопасность оставляет желать лучшего. Беглый просмотр веба дал понять, что его взломали давно и даже MS от него уже отказались. Вычёркиваем.
- L2TP – второй кандидат. Вообще без шифрования, нужно прикручивать насадку. Например IPSec. Такая связка мне показалась не очень, поэтому я её тоже отмёл.
- ViPNet – коммерческий и достаточно дорогой. Вычёркиваем.
- OpenVPN – опенсорс, использует современные алгоритмы, работает по принципу PKI, что мне не слишком нравилось. Но разобраться в теме хотелось, поэтому я выбрал его!
Итак, исходные данные: сервером будет выступать не особо мощная виртуалка, на базе CentOS 6.11. Количество клиентов будет порядка 8-15. Посмотрим, как попрёт.
Установка и настройка сервера
# yum update -y && yum install epel-release -y && yum install -y nano tcpdump wget openvpn easy-rsa
Обновляем установленные пакеты, ставим EPEL-репозиторий и устанавливаем всё необходимое.# chkconfig openvpn on
Помещаем сервис в автозагрузку# cp /usr/share/doc/openvp-2.4.7/sample/sample-config-files/server.conf /etc/openvpn
Копируем заготовку конфига в каталог сервиса# nano /etc/openvpn/server.conf
Приводим содержимое файла в соответствие с нашими требованиями:# IP-адрес, который слушает сервис, порт и протокол local 192.168.1.XXX port 1194 proto udp #Тип создаваемого устройства. Используем L3 - tun. Можно было сделать L2, это будет tap... dev tun # ключи и сертификаты ca "/etc/openvpn/easy-rsa/pki/ca.crt" cert "/etc/openvpn/easy-rsa/pki/issued/vpn-server.crt" key "/etc/openvpn/easy-rsa/pki/private/vpn-server.key" dh "/etc/openvpn/easy-rsa/keys/dh.pem" tls-auth "/etc/openvpn/easy-rsa/keys/ta.key 0 askpass "/etc/openvpn/passw" # Диапазон выделяемых адресов server 10.10.10.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 #Алгоритм шифрования cipher AES-256-CBC user nobody group nobody persist-key persist-tun status /var/log/openvpn-status.log log /var/log/openvpn.log verb 4 explicit-exit-notify 1
- Создаём каталог для ключей:
# mkdir -p /etc/openvpn/easy-rsa/keys
- Копируем заготовки для ключей в рабочий каталог:
# cp -r /usr/share/easy-rsa/3.0.6/* /etc/openvpn/easy-rsa/
- Создаём файл-шаблон с информацией для генерации сертификатов:
# nano /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="RU" export KEY_PROVINCE="XX" export KEY_CITY="Gorod" export KEY_ORG="MyORG" export KEY_EMAIL="admin@MyORG.ru" export KEY_OU="VPN" export KEY_NAME="EasyRSA"
- Перечитываем файл-шаблон для инициализации констант и переходим в каталог для удобства:
# source /etc/openvpn/easy-rsa/vars
# cd /etc/openvpn/easy-rsa
- Инициализируем систему PKI:
# ./easyrsa init-pki
- Создаём корневой сертификат:
# ./easyrsa build-ca
На этом этапе потребуется ввести пароль для защиты ключа. - Создаём сертификат для сервера:
# ./easyrsa build-server-full vpn-server
где vpn-server – Cannonical Name. Кстати, при генерации всех остальных сертификатов будет выдаваться запрос на ввод пароля, заданного на шаге 10. Ну и для защиты каждого из сертификатов нужен будет пароль. Пароль от сервера можем записать в файл /etc/openvpn/passw. - Генерируем ключи Диффи-Хелмана (DH), процесс занимает минуты две:
# ./easyrsa gen-dh
- Создаём ключи для каждого клиента:
# ./easyrsa build-client-full client1
где client1 – Cannonacal Name.Также потребуется ввести и задать пароль защиты. - Создаём ключи TLS-TA:
# openvpn --genkey --secret keys/ta.key
- Разрешаем маршрутизацию трафика между интерфейсами:
# nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
- Разрешаем трафик на Netfilter:
iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT iptables -I OUTPUT 1 -p udp --sport 1194 -j ACCEPT iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
- Качаем клиента с оф.сайта.
- Каждому клиенту поставляем комплект: установщик, ca.crt, client1.crt, client1.key, ta.key и файл конфигурации (я именую все файлы по CA клиента) client1.ovpn следующего содержания:
remote <внешний IP сервера> 1194 proto udp resolv-retry infinite cipher AES-256-CBC persist-key persist-tun client dev tun key client1.key cert client1.crt ca ca.crt tls-auth ta.key 1
- После установки клиента, пользователь копирует папку с конфигурацией в каталог %userprofile%\openvpn\config и запускает приложение. Должно подхватиться автоматически.
- Осталось настроить маршрутизацию и всё, доступ в корпоративную сеть готов!
- P.S. Если адресация перед NAT удалённого хоста совпадает с адресацией корпоративной сети, то придётся помучиться. Мне здорово помогла статейка https://habr.com/ru/post/117320/
Comments: