|
В статье рассмотрено создание VPN-подключения на ОС Windows 10, с помощью 2FA аутентификации Windows Password + Indeed Key (Push). Проверка Windows Password будет осуществляться через LDAP без использования сертификатов по порту 389.
Предварительные требования
Со стороны Indeed Cloud:
- Установленный и настроенный LSA для синхронизации пользователей
1. Настройка FRA
1.1 Добавьте клиента в clients.conf указав ip адрес и секрет OpenVPN CE сервера
sudo nano config.ini
client openvpn {
ipaddr = <IP/DNS адрес OpenVPN CE>
secret = <Сложный секрет для Radius>
}

1.2 Внесите настройки в конфигурационный файл config.ini FRA
sudo nano config.ini
В блоке [connection] укажите адрес облака в параметре sas_address_1, включите strip_netbios_prefix и strip_realm_from_upn, чтобы при входе можно было указывать логин в разных форматах (логин пользователя, UPN и Netbios)
 Включите использование блока [preauth] изменив параметр enable и укажите правило для входа по доменному паролю и push-уведомлению в приложении Indeed Key.
rule[] = ;;;p;2
 Включите проверку доменного пароля по LDAP изменив параметр ldap_enable, укажите данные для работы LDAP
ldap_server_1-2 = <DNS/IP домена>
ldap_ssl = no
ldap_port = 389
search_base = <Каталог AD для поиска пользователей>
login = <Сервисная УЗ в формате distinguishedName>
password = <Пароль от сервисной УЗ>

1.3 Запуск контейнера FRA Если контейнер еще не был запущен, то выполните следующие команды:
docker load -i fra-<версия образа>.tar.gz
docker run -d --network host --name fra --restart always \
-e TZ=Europe/Moscow \
-v <путь до контейнера FRA>/fra/config.ini:/etc/fra/config.ini \
-v <путь до контейнера FRA>/fra/clients.conf:/etc/freeradius/3.0/clients.conf \
-v <путь до контейнера FRA>/fra/logs/radius.log:/var/log/freeradius/radius.log \
-t fra:1.13.110725
Если контейнер уже был запущен, то перезапустите его следующей командой для применения обновленной конфигурации:
docker restart fra
Установка и настройка OpenVPN CE (Community Edition)
В рамках данной инструкции, установка и настройка OpenVPN CE была осуществлена на системе Ubuntu 22.04.02-live-server.
!!!Настройка имеет рекомендательный характер. Основополагающей целью является настройка для корректной работы 2fa, но не для полноценной работы OpenVPN CE в продуктовой системе.!!!
Установка OpenVPN CE и первоначальная настройка
- Обновите пакеты системы:
sudo apt update -y
- Установите OpenVPN CE:
sudo apt install -y openvpn
- Скопируйте шаблон конфигурационного файла в директорию “/etc/openvpn”:
sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn
- Измените конфигурационный файл OpenVPN сервера:
sudo nano /etc/openvpn/server.conf В файле:
local 192.168.168.179 port 1194 proto udp dev tun ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh2048.pem server 10.44.44.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 192.168.4.0 255.255.255.0" push "dhcp-option DNS 192.168.4.2" script-security 2 keepalive 10 120 tls-auth "/etc/openvpn/server/ta.key" 0 auth sha512 tls-server tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-128-GCM-SHA256 cipher AES-256-CBC data-ciphers-fallback 'AES-256-CBC' user openvpn group openvpn persist-key persist-tun log /etc/openvpn/openvpn.log verb 6 explicit-exit-notify 1 reneg-sec 0 mode server
Где, 192.168.188.179 - внешний IP-адрес сетевого интерфейса 192.168.4.0 - внутренний адрес сети, куда настраивается доступ 192.168.4.2 - DNS сервер внутренней сети 10.44.44.0 - виртуальная внутренняя сеть, в которой будут выдаваться IP-адреса OpenVPN клиентам
Установка и настройка местного центра сертификации
Для полноценной работы OpenVPN CE сервера понадобятся сертификаты и ключи, которые создаются в центре сертификации. Для примера, настроим локальный openssl CA для их получения.
- Установите easy-rsa для развёртывания CA и выпуска сертификатов:
sudo apt install openvpn easy-rsa -y
- Создайте директорию для ключей:
sudo mkdir -p /etc/openvpn/easy-rsa/keys
- В директорию “/etc/openvpn/easy-rsa/” скопируйте скрипты:
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa
- Перейдите в директорию “/etc/openvpn/easy-rsa/”:
cd /etc/openvpn/easy-rsa/
- Cоздайте скрипт vars:
nano vars (При необходимости измените значения на свои) В файле:
set_var EASYRSA "$PWD" set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Moscow"
set_var EASYRSA_REQ_CITY "Moscow"
set_var EASYRSA_REQ_ORG "MyOrg"
set_var EASYRSA_REQ_EMAIL "openvpn@mydomain.net"
set_var EASYRSA_REQ_OU "CA"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST "sha256"
- Разрешите исполнение файла:
chmod +x vars
- Инициализируйте PKI директорию:
./easyrsa init-pki
- Создайте центр сертификации:
(На этапе "Enter New CA Key Passphrase" задайте пароль) (На этапе ввода CN укажите - “server” или любое необходимое Вам значение)
./easyrsa build-ca
- Создайте запрос сертификата и ключ сервера:
(На этапе ввода CN можно пропустить и нажать “Enter”) (На этапе подтверждения введите “yes”)
./easyrsa gen-req server nopass
- Подпишите сертификат:
./easyrsa sign-req server server
- Проверьте, подписался ли сертификат:
openssl verify -CAfile pki/ca.crt pki/issued/server.crt Вывод при успешной проверке:
pki/issued/server.crt: OK
- Сгенерируйте дополнительный ключ сервера ta.key:
openvpn --genkey secret /etc/openvpn/easy-rsa/keys/ta.key
- Создайте файл Диффи-Хеллмана. Данный файл нужен для обеспечения защиты трафика (трафик, который был записан и сохранен еще до похищения ключей) от расшифровки, если ключи были похищены:
./easyrsa gen-dh
- Выпустите пользовательский клиентский сертификат, по аналогии с сертификатом сервера.
./easyrsa gen-req client01 nopass
./easyrsa sign-req client client01
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
- Перенесите файлы ключей сервера в директорию “/etc/openvpn/server”:
cp pki/ca.crt /etc/openvpn/server
cp pki/issued/server.crt /etc/openvpn/server
cp pki/private/server.key /etc/openvpn/server
cp /etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn/server
- Перенесите файлы ключей клиента в директорию “/etc/openvpn/client”:
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/
- Перенесите файл Диффи-Хеллмана в директорию “/etc/openvpn/“:
cp pki/dh.pem /etc/openvpn/dh2048.pem
Настройка правил обмена пакетов через “firewalld”
- Разрешите форвардинг пакетов между сетевыми интерфейсами:
sudo nano /etc/sysctl.conf: В файле:
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

- Выполните команду по загрузке параметров, которые были указаны в файле выше:
sudo sysctl -p
- Установите firewalld (firewalld-2.0.0-2.el7):
sudo apt install firewalld
- Активируйте сервис “firewalld.service”:
sudo systemctl start firewalld.service
- Убедитесь, что сервис запущен (Вывод:
running):
firewall-cmd --state
- Настройте маршрутизацию:
###Конфигурируем firewall
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=trusted --add-interface=tun0
sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0
sudo firewall-cmd --permanent --add-service openvpn
sudo firewall-cmd --permanent --zone=trusted --add-service openvpn
sudo firewall-cmd --reload
sudo firewall-cmd --list-services --zone=trusted ###Конфигурируем masquerade
sudo firewall-cmd --add-masquerade
sudo firewall-cmd --add-masquerade --permanent
sudo firewall-cmd --query-masquerade
DEVICE=$(ip route | awk '/^default via/ {print $5}')
sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEVICE -j MASQUERADE
sudo firewall-cmd --reload
sudo systemctl edit --full --force openvpn-server@server.service В файле: ###Закомментируйте строку
ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log... ###Добавьте строку:
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server.conf

- Перезагрузите процесс systemd:
sudo systemctl daemon-reload
- Запустите OpenVPN CE сервер и поставьте в автозагрузку
sudo systemctl -f enable openvpn-server@server.service
sudo systemctl start openvpn-server@server.service
Настройка клиента OpenVPN и проверка подключения
В рамках данной инструкции, проверка подключения будет осуществлена на машине с Windows 10.
- Настройте клиентский конфигурационный файл:
nano /etc/openvpn/client/client.ovpn В файле:
client
dev tun
proto udp
remote 192.168.168.179 1194
nobind
resolv-retry infinite
persist-key
persist-tun
auth sha512
auth-nocache
ca ca.crt
cert client01.crt
key client01.key
tls-auth ta.key 1
cipher AES-256-GCM
tls-client
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-128-GCM-SHA256
verb 4
- Скачайте клиент OpenVPN и установите его на машине.
- На клиентскую машину по пути "C:\Program Files\OpenVPN\config" перенесите следующие файлы с сервера OpenVPN CE:
1) "/etc/openvpn/client/client.ovpn" 2) "/etc/openvpn/client/ca.crt" 3) "/etc/openvpn/client/client01.crt" 4) "/etc/openvpn/client/client01.key" 5) "/etc/openvpn/ta.key"
Примечание: все переносимые сертификаты можно также указать в .ovpn файле и использовать для конфигурации клиента только его.
- Запустите установленный клиент OpenVPN.
- Откройте трей Windows, нажмите правой кнопкой мыши по значку OpenVPN, после чего выберите опцию “Подключиться”:

- Проверьте успешность подключения в открывшемся окне:

Настройка аутентификации в OpenVPN CE через Indeed Cloud FRA
Настройка будет осуществляться через плагин. Они будут отсылать радиус запросы на FRA-сервер.
Установка и настройка RADIUS плагинов для OpenVPN CE
Плагин (rakasatria -radiusplugin)
- Установите необходимые компоненты:
apt install golang git freeradius-utils sqlite
- Создайте локальный репозиторий плагина:
git clone https://github.com/rakasatria/ovpn-radius
- Соберите проект:
cd ovpn-radius/src go mod tidy #если необходимо go build
- Создайте директорию для плагина и переместите в неё конфигурационные файлы:
mkdir -p /etc/openvpn/plugin cp config.json /etc/openvpn/plugin cp ovpn-radius /etc/openvpn/plugin chmod 755 /etc/openvpn/plugin/ovpn-radius
- Создайте директорию и файл для базы данных sqlite
mkdir -p /etc/openvpn/plugin/db touch /etc/openvpn/plugin/db/ovpn-radius.db chmod -R 777 /etc/openvpn/plugin/db
- Создайте лог файл:
mkdir /var/log/openvpn touch /var/log/openvpn/radius-plugin.log chown openvpn:openvpn /var/log/openvpn/radius-plugin.log
Где, openvpn:openvpn - сервисный пользователь:группа, указанные в конфигурационном файле OpenVPN сервера “/etc/openvpn/server.conf”
- В конфигурационном файле плагина “/etc/openvpn/plugin/config.json” измените значения параметров "LogFile", “IpAddress”, “Server” и “Secret”:
nano /etc/openvpn/plugin/config.json В файле: "LogFile": "/var/log/openvpn/radius-plugin.log" "IpAddress": "192.168.4.17" "Server": "192.168.7.2:1812" "Secret": "Qwer1234!"

Где, "LogFile": "/var/log/openvpn/radius-plugin.log" - Путь к файлу для записи логов плагина "IpAddress": "192.168.4.3" - IP адрес OpenVPN сервера "Server": "192.168.4.3:1812" - IP адрес NPS сервера "Secret": "Qwer1234!" - Общий секрет с NPS сервером
- Добавьте в конфигурационный файл OpenVPN CE сервера строки, которые необходимы для включения работы плагина в процессе аутентификации:
nano /etc/openvpn/server.conf В файле добавить строки: auth-user-pass-verify "/etc/openvpn/plugin/ovpn-radius auth " via-file script-security 2

- На клиентской машине в файле "C:\Program Files\OpenVPN\config\client.ovpn" добавьте строку
auth-user-pass.

|