У меня есть настройка openVPN, где пользователи делают не иметь учетные записи оболочки на виртуальной машине Debian под управлением openVPN. В статьях, которые я нашел во время поиска в Google, есть инструкции по настройке Google Authenticator для классического пользователя * nix (например, для выполнения двоичного файла Authenticator в домашнем каталоге пользователя).
Есть ли документ, объясняющий, как интегрировать Google Authenticator для серверов openvpn, которые аутентифицируются исключительно на основе .ovpn
файлы, используемые на стороне клиента?
я смотрел на https://github.com/evgeny-gridasov/openvpn-otp , но по-прежнему требует настройки Google Authenticator.
Нет. Конечно, ты не можешь этого сделать. Это нарушит саму цель 2FA. Ваш сервер должен есть способ проверить учетные данные пользователя, и эта информация не должна отправляться по сети (т. е. вы не можете использовать только файл client.ovpn).
Хотя вам не обязательно создавать пользователей unix, вы должны позволить своим пользователям устанавливать свои коды подтверждения на сервер. Вы можете использовать sftp с виртуальными пользователями, используя их уже выданный сертификат, https с клиентской (взаимной) авторизацией, CIFS (самба) или старый добрый 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. Добавьте это в свой файл сервера 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, например, не касаясь этих сертификатов.
Настройка: OpenVPN Server с 2FA (Google Authenticator) на Ubuntu Server 18.04.4 LTS для Raspberry Pi Оборудование: Raspberry Pi 3 Model B + Rev 1.3
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
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so 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
auth-user-pass auth-nocache reneg-sec 0
systemctl restart openvpn@server