2

Я использую mfa для подключения к OpenVPN. Теперь существует требование к клиенту, что они хотят подключиться к OpenVPN с помощью щелчка мышью с помощью файла .bat или .cmd. Я нашел решение для автоматического подключения к OpenVPN с именем пользователя и паролем. Однако для этого мне пришлось отключить mfa в конфигурационном файле pam.

Есть ли способ сохранить оба метода аутентификации? Может ли конкретный пользователь иметь профиль автоматического входа, в то время как другим пользователям все равно нужно будет использовать mfa для входа?

Моя конфигурация ниже:

client
dev tun
proto udp
remote xx.xx.xx.xxx Protocol
nobind
resolv-retry infinite
persist-key
persist-tun
auth-user-pass pass.txt
auth-nocache
ca ca.crt
cert user.crt
key user.key
comp-lzo
verb 4
tls-auth ta.key 1
cipher AES-256-CBC
remote-cert-tls server
keepalive 5 300
reneg-sec 36000

И server.conf:

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/xxxx.crt
cert /etc/openvpn/easy-rsa/2.0/keys/xxxx.crt
key /etc/openvpn/easy-rsa/2.0/keys/xxxx.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/2.0/keys/xxxx.pem
server xx.xx.xx.xx 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.16.5.0 255.255.255.0"
push "route 192.16.6.0 255.255.255.0"
push "route 192.16.7.0 255.255.255.0"
push "route 192.16.8.0 255.255.255.0"
push "dhcp-option DNS 132.196.243.9"
push "dhcp-option DNS 8.8.8.8"
keepalive 5 300
reneg-sec 36000
tls-auth /etc/openvpn/easy-rsa/2.0/keys/xxxx.key 0 # This file is secret
cipher AES-256-CBC   # AES
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn.log
verb 5
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn #  This is my authentication plugin. I want to use another one along with it.

1 ответ1

1

OpenVPN 2.0 и более поздние версии включают функцию, которая позволяет серверу OpenVPN безопасно получать имя пользователя и пароль от подключающегося клиента и использовать эту информацию в качестве основы для аутентификации клиента.

Чтобы использовать этот метод аутентификации, сначала добавьте директиву auth-user-pass в конфигурацию клиента. Он будет предписывать клиенту OpenVPN запрашивать у пользователя имя пользователя / пароль, передавая его на сервер по безопасному каналу TLS.

Затем настройте сервер на использование плагина аутентификации, который может быть скриптом, общим объектом или DLL. Сервер OpenVPN будет вызывать плагин каждый раз, когда VPN-клиент пытается подключиться, передавая ему имя пользователя / пароль, введенные на клиенте. Плагин аутентификации может контролировать, позволяет ли сервер OpenVPN клиенту подключаться, возвращая значение ошибки (1) или успеха (0).

Использование скриптовых плагинов

Подключаемые модули сценариев можно использовать, добавив директиву auth-user-pass-verify в файл конфигурации на стороне сервера. Например:

auth-user-pass-verify auth-pam.pl via-file будет использовать perl-скрипт auth-pam.pl для аутентификации имени пользователя / пароля подключающихся клиентов. См. Описание auth-user-pass-verify на странице руководства для получения дополнительной информации.

Сценарий auth-pam.pl включен в дистрибутив исходного файла OpenVPN в подкаталоге sample-scripts . Он будет аутентифицировать пользователей на сервере Linux, используя модуль аутентификации PAM, который, в свою очередь, может реализовать теневой пароль, RADIUS или аутентификацию LDAP. auth-pam.pl в первую очередь предназначен для демонстрационных целей. Для реальной аутентификации PAM используйте плагин openvpn-auth-pam общего объекта, описанный ниже.

Использование общего объекта или плагинов DLL

Плагины общего объекта или DLL обычно представляют собой скомпилированные модули C, которые загружаются сервером OpenVPN во время выполнения. Например, если вы используете пакет OpenVPN на основе RPM в Linux, плагин openvpn-auth-pam уже должен быть собран. Чтобы использовать его, добавьте это в файл конфигурации на стороне сервера:

plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login Это позволит серверу OpenVPN проверить имя пользователя / пароль, введенные клиентами с помощью модуля PAM для login в систему .

Для реального производственного использования лучше использовать плагин openvpn-auth-pam , потому что он имеет несколько преимуществ перед сценарием auth-pam.pl :

Плагин разделяемого объекта openvpn-auth-pam использует модель выполнения с разделенными привилегиями для повышения безопасности. Это означает, что сервер OpenVPN может работать с ограниченными привилегиями, используя директивы user nobody, group nobody и chroot, и все равно сможет выполнять аутентификацию по файлу теневых паролей, доступному только для root. OpenVPN может передавать имя пользователя / пароль плагину через виртуальную память, а не через файл или среду, что лучше для локальной безопасности на сервере. Скомпилированные C-модули плагина обычно работают быстрее, чем скрипты. Если вам нужна дополнительная информация о разработке собственных плагинов для использования с OpenVPN, см. Файлы README в подкаталоге плагинов исходного дистрибутива OpenVPN.

Чтобы создать плагин openvpn-auth-pam в Linux, перейдите в каталог plugin/auth-pam в дистрибутиве исходного кода OpenVPN и запустите make.

Использование аутентификации по имени пользователя / паролю в качестве единственной формы аутентификации клиента

По умолчанию использование на сервере плагина auth-user-pass-verify или плагина для проверки имени пользователя / пароля включает двойную аутентификацию, требующую успешной аутентификации клиента-сертификата и имени пользователя / пароля для аутентификации клиента.

Хотя это не рекомендуется с точки зрения безопасности, также возможно отключить использование клиентских сертификатов и принудительно устанавливать только аутентификацию по имени пользователя и паролю. На сервере:

client-cert-not-required Такие конфигурации обычно также должны устанавливать:

username-as-common-name который скажет серверу использовать имя пользователя для целей индексации, так как он будет использовать общее имя клиента, который проходил аутентификацию через сертификат клиента.

Обратите внимание, что client-cert-not-required не устранит необходимость в сертификате сервера, поэтому клиент, подключающийся к серверу, который использует client-cert-not-required, может удалить директивы cert и key из файла конфигурации клиента, но не может директива ca, потому что клиенту необходимо проверить сертификат сервера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .