Розглянемо лише ту частину яка стосується авторизації у LDAP. Отже в конфіг серверу додаємо таке
username-as-common-name
plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
Перший рядок каже, що login такий самий, як у LDAP’і, а другий – підключає відповідний модуль авторизації. А тепер налаштування для модулю авторизації /etc/openvpn/auth/ldap.conf:
<LDAP> URL ldaps://ldap.domain.com BindDN cn=svcuser,ou=services,dc=domain,dc=com Password superpass Timeout 15 TLSEnable no FollowReferrals yes </LDAP> <Authorization> BaseDN "ou=people,dc=domain,dc=com" SearchFilter "(&(uid=%u)(objectclass=inetOrgPerson)(!(sn=BAD_*)))" RequireGroup true <Group> BaseDN "ou=roles,dc=domain,dc=com" SearchFilter "(&(objectclass=organizationalRole)(cn=remote))" MemberAttribute RoleOccupant </Group> </Authorization>
Тепер всі, хто в групі remote мають доступ до VPN. Важливий момент, що тут налаштування саме для випадку RoleOccupant, бо є варіант для memberOf.
На клієнті треба додати такий рядок у конфіг для запиту login/pass:
auth-user-pass
Ось приклади авторизації (неуспішної і успішної):
DAP bind failed: Invalid credentials Incorrect password supplied for LDAP DN "uid=ivanov,ou=people,dc=domain,dc=com". Tue Nov 7 13:52:03 2023 us=229365 44.44.44.44:42299 PLUGIN_CALL: POST /usr/lib/openvpn/openvpn-auth-ldap.so/PLUGIN_AUTH_USER_PASS_VERIFY status=1 Tue Nov 7 13:52:03 2023 us=229416 44.44.44.44:42299 PLUGIN_CALL: plugin function PLUGIN_AUTH_USER_PASS_VERIFY failed with status 1: /usr/lib/openvpn/openvpn-auth-ldap.so Tue Nov 7 13:52:03 2023 us=229491 44.44.44.44:42299 TLS Auth Error: Auth Username/Password verification failed for peer ... Tue Nov 7 14:15:32 2023 us=783997 33.33.33.33:41625 PLUGIN_CALL: POST /usr/lib/openvpn/openvpn-auth-ldap.so/PLUGIN_AUTH_USER_PASS_VERIFY status=0 Tue Nov 7 14:15:32 2023 us=784194 33.33.33.33:41625 TLS: Username/Password authentication succeeded for username 'shevchenko' [CN SET]