Двофакторна аутентифікація в OpenVPN з Telegram ботом

У статті описується налаштування сервера OpenVPN для включення двофакторної аутентифікації з Telegram ботом, який надсилатиме запит з підтвердженням при підключенні.

OpenVPN — широко відомий, безкоштовний VPN сервер з відкритим вихідним кодом, який використовується для організації захищеного доступу співробітників до внутрішніх ресурсів організації.

Як автентифікацію для підключення до VPN серверу, як правило використовується комбінація з ключа і логіна/пароля користувача. При цьому, збережений на клієнті пароль перетворює весь набір на єдиний фактор, що не забезпечує належний рівень безпеки. Зловмисник, отримавши доступ до клієнтського комп'ютера, отримує доступ і до сервера VPN у тому числі. Особливо це стосується підключення машин під керуванням Windows.

Використання другого фактора на 99% скорочує ризик неправомірного доступу і не ускладнює процес підключення для користувачів.

Відразу зазначу, для реалізації буде потрібно підключення стороннього сервера аутентифікації multifactor.ru, в якому для своїх потреб можна використовувати безкоштовний тариф.

Принцип роботи

  1. OpenVPN використовує плагін openvpn-plugin-auth-pam для автентифікації
  2. Плагін перевіряє пароль користувача на сервері та запитує другий фактор через RADIUS протокол у сервісі Мультифактора
  3. Мультифактор надсилає через Telegram робота повідомлення користувачу з підтвердженням доступу
  4. Користувач підтверджує в Telegram чаті запит доступу та підключається до VPN

Встановлення сервера OpenVPN

В інтернеті безліч статей, що описують процес встановлення та налаштування OpenVPN, тому ми не будемо їх дублювати. Якщо вам потрібна допомога, наприкінці статті є кілька посилань на навчальні матеріали.

Налаштування мультифактора

Зайдіть в систему управління Мультифактором, зайдіть у розділ "Ресурси" та створіть новий VPN.
Після створення вам будуть доступні два параметри: NAS-IDentifier и Спільна таємниця, вони будуть потрібні для подальшої настройки.

Двофакторна аутентифікація в OpenVPN з Telegram ботом

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

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

Двофакторна аутентифікація в OpenVPN з Telegram ботом

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

Двофакторна аутентифікація в OpenVPN з Telegram ботом

Налаштування сервера 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 з Telegram ботом

Одна кнопка дозволяє доступ, друга блокує.

Тепер сміливо можна зберігати пароль на клієнті, другий фактор надійно захистить ваш сервер OpenVPN від несанкціонованого доступу.

Якщо щось не працює

Послідовно перевірте, що ви нічого не пропустили:

  • На сервері з OpenVPN є користувач із встановленим паролем
  • З сервера відкрито доступ по UDP порту 1812 на адресу radius.multifactor.ru
  • Параметри NAS-Identifier та Shared Secret вказані коректно
  • У системі Мультифактор заведено користувач з таким самим логіном і йому надано доступ до групи користувачів VPN
  • Користувач налаштував спосіб автентифікації через Telegram

Якщо ви раніше не настроювали OpenVPN, почитайте розгорнуту статтю.

Інструкція зроблена з прикладами CentOS 7.

Джерело: habr.com

Додати коментар або відгук