Как включить двухфакторную аутентификацию с помощью Google Authenticator для доступа к файлам .ovpn на основе openVPN?

11

У меня есть установка openVPN, где у пользователей нет учетных записей оболочки на виртуальной машине Debian, на которой работает openVPN. Все статьи, которые я нашел во время Googling, содержат инструкции по настройке Google Authenticator для классического пользователя * nix (например, для выполнения двоичного файла Authenticator в домашнем каталоге пользователя).

Есть ли документ, объясняющий, как интегрировать Google Authenticator для серверов openvpn, которые аутентифицируются исключительно на основе .ovpnфайлов, используемых на стороне клиента?

Я посмотрел на https://github.com/evgeny-gridasov/openvpn-otp , но он все еще требует настройки Google Authenticator.

Animesh
источник
Проблема заключается в регистрации аутентификатора Google или необходимости ввода пароля?
Cornelinux,

Ответы:

4

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

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

Естественно, если ваши пользователи загружают свои собственные файлы, вы не можете использовать агрегированные файловые учетные данные, используемые openvpn-otp. К счастью, у нас есть еще один (и гораздо лучший) вариант, использующий отличный модуль безопасности linux pam.

Прежде всего, вы должны собрать пользовательские файлы, созданные google-authenticator, в каталоге одним из способов, упомянутых выше. В нашем случае это будет / etc / google-auth.

Вы должны установить единый идентификатор пользователя для всех файлов здесь, потому что у вас нет реальных пользователей. Пусть это будет openvpn . Разрешения должны быть 0400 (-r --------). Пэм не любит учетные данные, доступные для чтения в мире / группе (конечно). Вы можете легко применить это либо с помощью 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 auth. Добавьте это к вашему файлу сервера openvpn:

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

Это говорит о том, что мы будем использовать метод аутентификации pam с идентификатором аутентификации pam openvpn .

Теперь создайте настройку pam для 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 =) мы используем специальный секретный файл и обращаемся к файлам как пользователь openvpn, поскольку с реальным идентификатором пользователя не связан с нашими пользователями. В следующей строке мы просто говорим, что разрешаем всем подключаться после успешной аутентификации. Конечно, вы должны реализовать свою собственную политику разрешений здесь. Вы можете контролировать разрешенных пользователей по файлу, mysql db или ldap с соответствующими модулями pam.

Добавьте это к вашему клиентскому файлу openvpn

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

Мы используем auth-user-pass, чтобы позволить клиенту openvpn запрашивать имя пользователя и пароль. Нам не нравится кэширование («пароль» меняется), и периодическое возобновление работы плохо для нас по той же причине.

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

goteguru
источник
1

Установка: Сервер OpenVPN с 2FA (Google Authenticator) на сервере Ubuntu 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»)
Вольфганг Рейдлингер
источник