Як увімкнути двофакторну автентифікацію за допомогою Authenticator Google для файлу .ovpn на основі відкритого доступу до VPVN?


11

У мене налаштування openVPN, де користувачі не мають облікових записів оболонки в VM Debian під управлінням openVPN. Статті, які я знайшов під час Google, мають вказівки щодо налаштування Google Authenticator для класичного користувача * nix (потрібно виконати, наприклад, двійковий код Authenticator в домашньому каталозі користувача).

Чи є документ, який пояснює, як інтегрувати Google Authenticator для серверів openvpn, що підтверджують автентифікацію лише на основі .ovpnфайлів, що використовуються на стороні клієнта?

Я переглянув https://github.com/evgeny-gridasov/openvpn-otp , але він все ще потребує налаштування Google Authenticator.


Чи проблема в реєстрації автентифікатора google або необхідності введення пароля?
cornelinux

Відповіді:


4

Ні, звичайно, ви не можете цього зробити. Це переможе саму мету 2FA. Ваш сервер повинен мати спосіб перевірки облікових даних користувачів, і ця інформація не повинна надсилатися через мережу (тобто ви не можете використовувати лише файл client.ovpn).

Хоча вам не обов’язково створювати користувачів Unix, але ви повинні дозволити своїм користувачам встановлювати їх верифікаційні коди на сервер. Ви можете використовувати sftp з віртуальними користувачами, використовуючи вже виданий сертифікат, https з клієнтською (взаємною) авторизацією, CIFS (samba) або старий добрий ftp з розширенням TLS або будь-яким іншим способом, який дозволяє серверу знати коди підтвердження, створені користувачами . Канал зв'язку повинен бути захищеним (зашифрованим || локальним).

Звичайно, якщо ваші користувачі завантажують власні файли, ви не можете використовувати зведені файлові облікові дані, які використовує openvpn-otp. На щастя, у нас є ще один (і набагато кращий) варіант, використовуючи відмінний модуль захисту пам’яті Linux.

Перш за все, ви повинні зібрати файли користувачів, створені google-автентифікатором, в каталог одним із способів, згаданих вище. У нашому випадку це буде / etc / google-auth.

Ви повинні застосувати єдиний ідентифікатор користувача для всіх файлів тут, оскільки у вас немає реальних користувачів. Нехай це буде openvpn . Дозволи повинні бути 0400 (-r --------). Pam не любить (звичайно), читати дані для світових / групових. Ви можете легко застосувати це за допомогою samba, apache, ftp або в гіршому випадку за допомогою вкладки cron (не рекомендується).

Для тестування просто зробіть це:

mkdir /etc/google-auth
apt-get install libpam-google-authenticator
google-authenticator
# set up as you wish, save image and/or codes
mv ~/.google_authenticator /etc/google-auth/some_username
chown -R openvpn /etc/google-auth

Після цього ви просите openvpn пройти автентифікацію проти libpam, у якого є власний модуль аутентифікації Google. Додайте це до файлу сервера openvpn:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn

Це говорить про те, що ми будемо використовувати метод автентифікації пам із пам’яті pam auth id openvpn .

Тепер створіть налаштування пам’яті для openvpn. Редагувати /etc/pam.d/openvpn:

auth    requisite       /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER}  user=openvpn
account    required     pam_permit.so

Тут ми говоримо, що без успішної аутентифікації google ми не вдається негайно (необхідний), ми використовуємо спеціальний секретний файл замість $ HOME / .google_authenticator за замовчуванням (secret =), і ми отримуємо доступ до файлів як uservvpn, оскільки реального користувача не пов’язано з нашими користувачами. У наступному рядку ми просто кажемо, що ми дозволяємо всім підключитися після успішної аутентифікації. Звичайно, слід застосувати тут власну політику дозволів. Ви можете контролювати дозволених користувачів за файлами, mysql db або ldap за допомогою відповідних модулів пам’яті.

Додайте це до файлу клієнта openvpn

   auth-user-pass
   auth-nocache
   reneg-sec 0

Ми використовуємо auth-user-pass, щоб дозволити клієнту openvpn запитати ім’я користувача та пароль. Нам не подобається кешування ("пароль" змінюється), і періодичне повторне обговорення для нас погано з тієї ж причини.

Після цього ви зможете підключитися без openvpn-otp. Зверніть увагу, що це набагато гнучкіший метод, оскільки при бажанні ви можете реалізувати дуже складні правила у файлах контролю пам’яті. Ви можете вмикати / вимикати користувачів на основі каталогу mysql або ldap, не торкаючись, наприклад, цих сертифікатів.


1

Налаштування: OpenVPN сервер з 2FA (Google Authenticator) на Ubuntu Server 18.04.4 LTS для Raspberry Pi Обладнання: Raspberry Pi 3 Модель B + Rev 1.3

  • Ви повинні увійти з користувачем Linux без активного налаштування входу 2FA (мій випадок someuser)
  • введіть наступні команди
sudo apt install libqrencode3 libpam-google-authenticator
google-authenticator
sudo mv /home/someuser/.google_authenticator /etc/google-auth/someuser
sudo chown -R root /etc/google-auth
  • додайте наступний файл у ваш конфігураційний файл openvpn (у моєму випадку /etc/openvpn/server/server.conf)
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so  openvpn
  • створити файл /etc/pam.d/openvpn і заповнити його наступним вмістом
# Google Authenticator
auth    requisite       /lib/aarch64-linux-gnu/security/pam_google_authenticator.so secret=/etc/google-auth/someuser user=root
account    required     pam_permit.so
  • додайте наступні 3 рядки у файл клієнта openvpn
auth-user-pass
auth-nocache
reneg-sec 0
  • перезапустіть службу openvpn та запустіть тест
systemctl restart openvpn@server
  • при з'єднанні з клієнтом OpenVPN (у Windows 10) ви отримуєте додатковий логін (Користувач: someuser / Пароль: "OTP від ​​Google Authenticator")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.