Как включить двухфакторную аутентификацию с помощью Google Authenticator для доступа к файлам.ovpn на основе openVPN?
У меня есть установка openVPN, где пользователи не имеют учетных записей оболочки на виртуальной машине Debian, на которой работает openVPN. Все статьи, которые я нашел во время Googling, содержат инструкции по настройке Google Authenticator для классического пользователя * nix (например, для выполнения двоичного файла Authenticator в домашнем каталоге пользователя).
Есть ли документ, объясняющий, как интегрировать Google Authenticator для серверов openvpn, аутентификация которых основана исключительно на .ovpn
файлы используются на стороне клиента?
Я посмотрел на https://github.com/evgeny-gridasov/openvpn-otp, но он все еще требует настройки Google Authenticator.
1 ответ
Нет. Конечно, ты не можешь этого сделать. Это победило бы саму цель 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, не касаясь этих сертификатов, например.
Установка: OpenVPN Server с 2FA (Google Authenticator) на Ubuntu Server 18.04.4 LTS для Raspberry Pi Оборудование: Raspberry Pi 3 Model 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 from Google Authenticator')