OpenVPN fournit un plugin d’authentification PAM. En ajoutant le module LDAP pour PAM, il peut alors interroger la base LDAP où sont stockés les accès de chaque utilisateur se connectant au serveur VPN.

# cd /usr/ports/security/pam_ldap
# make install clean

/usr/local/etc/openvpn/openvpn.conf :

[...]
plugin /usr/local/lib/openvpn-auth-pam.so openvpn

/usr/local/etc/pam.d/openvpn :

account         required        /usr/local/lib/pam_ldap.so config=/usr/local/etc/openvpn/auth/pam_ldap.conf
auth            required        /usr/local/lib/pam_ldap.so config=/usr/local/etc/openvpn/auth/pam_ldap.conf
password        required        /usr/local/lib/pam_ldap.so config=/usr/local/etc/openvpn/auth/pam_ldap.conf
session         required        /usr/local/lib/pam_ldap.so config=/usr/local/etc/openvpn/auth/pam_ldap.conf

/usr/local/etc/openvpn/auth/pam_ldap.conf :

uri ldapi://%2Fvar%2Frun%2Fopenldap%2Fldapi/
binddn cn=proxy,dc=my,dc=domain
bindpw 123456
ldap_version 3
ssl start_tls
tls_cacert /usr/local/etc/openldap/server.crt
tls_checkpeer no
base ou=Users,dc=my,dc=domain
scope one
pam_login_attribute uid

Côté client, il faut ajouter l’option suivante au fichier de configuration :

[...]
auth-user-pass