# Двухфакторная аутентификация для OpenVPN ## Описание При подключении к OpenVPN пользователи проходят двухэтапную аутентификацию: вводят логин и пароль (первый фактор) и подтверждают вход вторым фактором. Для интеграции используется PAM-адаптер Simple2FA, который устанавливается на сервер OpenVPN и взаимодействует с локальным инстансом Simple2FA по HTTPS. Если на сервере уже используется стандартный модуль pam_radius, его можно подключить к встроенному RADIUS-серверу Simple2FA вместо адаптера — см. статью [Linux SSH и sudo через pam_radius](../linux/pam-radius.md). Схема работы: 1. Пользователь подключается к OpenVPN и вводит логин и пароль. 2. OpenVPN передаёт учётные данные в PAM-адаптер Simple2FA. 3. PAM-адаптер отправляет логин и пароль в локальный инстанс Simple2FA по HTTPS. 4. Локальный инстанс Simple2FA проверяет первый фактор через Active Directory, LDAP или Keycloak. 5. При успешной проверке первого фактора локальный инстанс инициирует проверку второго фактора. 6. Пользователь подтверждает вход. 7. После успешной проверки второго фактора 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. У бэкенда свой адрес, отдельный от адреса панели администратора: при [установке инстанса](../../start/local-instance.md) они задаются как `DOMAIN_API` и `DOMAIN_ADMIN`. Схема должна совпадать с той, по которой бэкенд опубликован. - `SendPassword` — отправлять ли пароль в Simple2FA. При `true` первый фактор проверяется Simple2FA по каталогу организации; при `false` пароль проверяется другим PAM-модулем, а Simple2FA выполняет только проверку второго фактора. - `Method` — способ подтверждения: `auto`, `push`, `telegram`, `max` или `otp`. Для OpenVPN выбирайте способ, не требующий ввода кода: клиент OpenVPN передаёт только логин и пароль, отдельный запрос кода недоступен. - `Debug` — подробное логирование для диагностики. В рабочем режиме отключить. - `SkipCertValidation` — отключение проверки TLS-сертификата локального инстанса. Использовать только на тестовых стендах. Полный список параметров со значениями по умолчанию — в статье [Linux SSH](../linux/ssh.md). Пример файла конфигурации: ```toml ApiKey = "<ключ ресурса>" Simple2faUrl = "https://<адрес бэкенда локального инстанса>" SendPassword = true Method = "push" Debug = false SkipCertValidation = false ``` !!! warning "Файл содержит ключ ресурса" Ограничьте доступ к нему правами root. **4) Настройте PAM для OpenVPN** В файл `/etc/pam.d/openvpn` добавьте строку PAM-адаптера Simple2FA: ```text 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-соединение будет установлено Результат каждой попытки входа доступен в панели администратора, в разделе [«Попытки авторизации»](../../admin/auth-attempts.md). ## Альтернатива: подключение через pam_radius Если на сервере OpenVPN уже используется стандартный модуль pam_radius или установка стороннего ПО запрещена, второй фактор можно подключить без PAM-адаптера — через тот же OpenVPN PAM-plugin к встроенному RADIUS-серверу локального инстанса Simple2FA. В этом случае в Simple2FA создаётся ресурс с протоколом **RADIUS**, а в конфигурации pam_radius указываются его NAS ID и Shared Secret. Настройка модуля описана в статье [Linux SSH и sudo через pam_radius](../linux/pam-radius.md); строка `pam_radius_auth.so` добавляется в `/etc/pam.d/openvpn`. ## Смотрите также - [VPN и сетевое оборудование](index.md) - [Linux SSH и sudo через pam_radius](../linux/pam-radius.md) - [Начало работы](../../start/index.md) - [Сценарии использования](../../start/scenarios.md)