У статті описується налаштування сервера OpenVPN для включення двофакторної аутентифікації з Telegram ботом, який надсилатиме запит з підтвердженням при підключенні.
OpenVPN — широко відомий, безкоштовний VPN сервер з відкритим вихідним кодом, який використовується для організації захищеного доступу співробітників до внутрішніх ресурсів організації.
Як автентифікацію для підключення до VPN серверу, як правило використовується комбінація з ключа і логіна/пароля користувача. При цьому, збережений на клієнті пароль перетворює весь набір на єдиний фактор, що не забезпечує належний рівень безпеки. Зловмисник, отримавши доступ до клієнтського комп'ютера, отримує доступ і до сервера VPN у тому числі. Особливо це стосується підключення машин під керуванням Windows.
Використання другого фактора на 99% скорочує ризик неправомірного доступу і не ускладнює процес підключення для користувачів.
Відразу зазначу, для реалізації буде потрібно підключення стороннього сервера аутентифікації multifactor.ru, в якому для своїх потреб можна використовувати безкоштовний тариф.
Принцип роботи
- OpenVPN використовує плагін openvpn-plugin-auth-pam для автентифікації
- Плагін перевіряє пароль користувача на сервері та запитує другий фактор через RADIUS протокол у сервісі Мультифактора
- Мультифактор надсилає через Telegram робота повідомлення користувачу з підтвердженням доступу
- Користувач підтверджує в Telegram чаті запит доступу та підключається до VPN
Встановлення сервера OpenVPN
В інтернеті безліч статей, що описують процес встановлення та налаштування OpenVPN, тому ми не будемо їх дублювати. Якщо вам потрібна допомога, наприкінці статті є кілька посилань на навчальні матеріали.
Налаштування мультифактора
Зайдіть в , зайдіть у розділ "Ресурси" та створіть новий VPN.
Після створення вам будуть доступні два параметри: NAS-IDentifier и Спільна таємниця, вони будуть потрібні для подальшої настройки.

У розділі "Групи", зайдіть у параметри групи "All users" і приберіть прапорець "Всі ресурси", щоб тільки користувачі певної групи могли підключатися до VPN серверу.
Створіть нову групу "VPN users", відключіть усі способи автентифікації окрім Telegram та вкажіть, що користувачі мають доступ до створеного ресурсу VPN.

У розділі "Користувачі" створіть користувачів, які матимуть доступ до VPN, додайте до групи "VPN users" і надішліть їм посилання на налаштування другого фактора автентифікації. Логін користувача повинен збігатися з логіном на сервері VPN.

Налаштування сервера OpenVPN
Відкрийте файл /etc/openvpn/server.conf та додайте плагін для аутентифікації за допомогою PAM модуля
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpnПлагін може перебувати в директорії /usr/lib/openvpn/plugins/ або /usr/lib64/openvpn/plugins/ Залежно від вашої системи.
Далі необхідно встановити модуль pam_radius_auth
$ sudo yum install pam_radiusВідкрийте для редагування файл /etc/pam_radius.conf та вкажіть адресу RADIUS сервера Мультифактора
radius.multifactor.ru shared_secret 40де:
- radius.multifactor.ru - адреса сервера
- shared_secret — скопіюйте з відповідного параметра параметрів VPN
- 40 секунд - тайм очікування запиту з великим запасом
Інші сервери необхідно видалити або закоментувати (поставити на початку крапку з комою)
Далі створіть файл для service-type openvpn
$ sudo vi /etc/pam.d/openvpnі впишіть до нього
auth required pam_radius_auth.so skip_passwd client_id=[NAS-IDentifier]
auth substack password-auth
account substack password-authперший рядок підключає PAM модуль pam_radius_auth з параметрами:
- skip_passwd - відключає передачу в RADIUS сервер мультифактора пароль користувача (не треба йому знати).
- client_id — замість [NAS-Identifier] вставте відповідний параметр з параметрів VPN ресурсу.
Всі можливі параметри описані в .
Другий і третій рядки включають системну перевірку логіна, пароля та прав користувача на вашому сервері разом з другим фактором автентифікації.
Перезапустіть OpenVPN
$ sudo systemctl restart openvpn@serverНалаштування клієнта
Увімкніть у конфігураційний файл клієнта запит логіна та пароля користувача
auth-user-passПеревірка
Запустіть клієнта для OpenVPN, підключіться до сервера, вкажіть логін та пароль. Від Telegram бота прийде запит доступу із двома кнопками

Одна кнопка дозволяє доступ, друга блокує.
Тепер сміливо можна зберігати пароль на клієнті, другий фактор надійно захистить ваш сервер OpenVPN від несанкціонованого доступу.
Якщо щось не працює
Послідовно перевірте, що ви нічого не пропустили:
- На сервері з OpenVPN є користувач із встановленим паролем
- З сервера відкрито доступ по UDP порту 1812 на адресу radius.multifactor.ru
- Параметри NAS-Identifier та Shared Secret вказані коректно
- У системі Мультифактор заведено користувач з таким самим логіном і йому надано доступ до групи користувачів VPN
- Користувач налаштував спосіб автентифікації через Telegram
Якщо ви раніше не настроювали OpenVPN, почитайте .
Інструкція зроблена з прикладами CentOS 7.
Джерело: habr.com
