Двухфакторная аутентификация для OpenVPN
Описание
При подключении к OpenVPN пользователи проходят двухэтапную аутентификацию: вводят логин и пароль (первый фактор) и подтверждают вход вторым фактором.
Для интеграции используется PAM-адаптер Simple2FA, который устанавливается на сервер OpenVPN и взаимодействует с локальным инстансом Simple2FA по HTTPS. Если на сервере уже используется стандартный модуль pam_radius, его можно подключить к встроенному RADIUS-серверу Simple2FA вместо адаптера — см. статью Linux SSH и sudo через pam_radius.
Схема работы:
- Пользователь подключается к OpenVPN и вводит логин и пароль.
- OpenVPN передаёт учётные данные в PAM-адаптер Simple2FA.
- PAM-адаптер отправляет логин и пароль в локальный инстанс Simple2FA по HTTPS.
- Локальный инстанс Simple2FA проверяет первый фактор через Active Directory, LDAP или Keycloak.
- При успешной проверке первого фактора локальный инстанс инициирует проверку второго фактора.
- Пользователь подтверждает вход.
- После успешной проверки второго фактора OpenVPN устанавливает VPN-соединение.
Подготовка в Simple2FA
Войдите в панель администратора локального инстанса, перейдите в раздел «Настройка ресурсов» и создайте новый ресурс:
| Поле | Значение |
|---|---|
| Название | OpenVPN (или любое удобное) |
| Описание | Краткое описание ресурса |
| Проверка первого фактора | Включена |
В панели управления Simple2FA откройте ресурс OpenVPN и скопируйте:
- API key ресурса
- адрес бэкенда локального инстанса (
local-backend), а не панели администратора
Требования
- ОС: Linux на x86_64 или aarch64, glibc 2.28 или новее (Astra Linux 1.7+, Debian 10+, Ubuntu 20.04+, RHEL 8+)
- OpenVPN: версии 2.5 и выше
- Наличие PAM в системе
- Доступ сервера OpenVPN к бэкенду локального инстанса по HTTPS (TCP 443)
- Корректное системное время (NTP) на сервере OpenVPN и на бэкенде локального инстанса
- Права root для установки PAM-адаптера и изменения PAM-конфигурации
Установка PAM-адаптера
1) Установите PAM-адаптер
- Распакуйте архив комплекта поставки на сервере OpenVPN и запустите установщик от root:
sudo ./install.sh. - Установщик определяет архитектуру хоста, копирует модуль в каталог модулей PAM, создаёт
/etc/simple2faи/var/log/simple2faи кладёт шаблон конфигурации. - Если установщик предупреждает о второй копии
simple2fa_pam.soв системе, удалите лишний файл.
2) Установите OpenVPN PAM-plugin
- Установите пакет OpenVPN PAM-plugin и необходимые PAM-библиотеки.
-
Для Debian plugin обычно располагается по пути:
/usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so
3) Создайте конфигурацию Simple2FA
Адаптер настраивается файлом /etc/simple2fa/s2fa_conf.toml — скопируйте шаблон s2fa_conf.toml.example, который положил установщик, и отредактируйте его (иной путь задаётся аргументом conf= в строке PAM). В конфигурации указываются:
ApiKey— ключ ресурса OpenVPN (протокол HTTPS), созданного в панели Simple2FA. Ключ RADIUS-ресурса и ключ организации не подходят.Simple2faUrl— базовый адрес бэкенда локального инстанса (local-backend), без пути API. У бэкенда свой адрес, отдельный от адреса панели администратора: при установке инстанса они задаются какDOMAIN_APIиDOMAIN_ADMIN. Схема должна совпадать с той, по которой бэкенд опубликован.SendPassword— отправлять ли пароль в Simple2FA. Приtrueпервый фактор проверяется Simple2FA по каталогу организации; приfalseпароль проверяется другим PAM-модулем, а Simple2FA выполняет только проверку второго фактора.Method— способ подтверждения:auto,push,telegram,maxилиotp. Для OpenVPN выбирайте способ, не требующий ввода кода: клиент OpenVPN передаёт только логин и пароль, отдельный запрос кода недоступен.Debug— подробное логирование для диагностики. В рабочем режиме отключить.SkipCertValidation— отключение проверки TLS-сертификата локального инстанса. Использовать только на тестовых стендах.
Полный список параметров со значениями по умолчанию — в статье Linux SSH.
Пример файла конфигурации:
ApiKey = "<ключ ресурса>"
Simple2faUrl = "https://<адрес бэкенда локального инстанса>"
SendPassword = true
Method = "push"
Debug = false
SkipCertValidation = false
Файл содержит ключ ресурса
Ограничьте доступ к нему правами root.
4) Настройте PAM для OpenVPN
В файл /etc/pam.d/openvpn добавьте строку PAM-адаптера Simple2FA:
auth requisite simple2fa_pam.so conf=/etc/simple2fa/s2fa_conf.toml
account sufficient pam_permit.so
session sufficient pam_permit.so
5) Настройте OpenVPN
В конфигурации OpenVPN подключается PAM-plugin и включается поддержка deferred PAM authentication.
6) Перезапустите OpenVPN
После применения конфигурации перезапустите сервис OpenVPN.
Проверка работы
- Подключитесь к OpenVPN
- Введите логин и пароль пользователя
- Дождитесь запроса второго фактора
- Подтвердите вход вторым фактором
- После успешной проверки VPN-соединение будет установлено
Результат каждой попытки входа доступен в панели администратора, в разделе «Попытки авторизации».
Альтернатива: подключение через pam_radius
Если на сервере OpenVPN уже используется стандартный модуль pam_radius или установка стороннего ПО запрещена, второй фактор можно подключить без PAM-адаптера — через тот же OpenVPN PAM-plugin к встроенному RADIUS-серверу локального инстанса Simple2FA. В этом случае в Simple2FA создаётся ресурс с протоколом RADIUS, а в конфигурации pam_radius указываются его NAS ID и Shared Secret.
Настройка модуля описана в статье Linux SSH и sudo через pam_radius; строка pam_radius_auth.so добавляется в /etc/pam.d/openvpn.