Authentification OpenVPN contre un domaine Active Directory
Installation du paquet pour authentification LDAP
sudo apt install openvpn-auth-ldap
Modifications aux fichiers de configuration du serveur
server.conf:
client-cert-not-required
# Auth LDP (Active Directory)
plugin /usr/lib/openvpn/openvpn-auth-ldap.so "/etc/openvpn/auth/auth-AD.conf"
Créer le fichier d’authentification pour qu’OpenVPN puisse aller lire l’annuaire
sudo cp /usr/share/doc/openvpn-auth-ldap/examples/auth-ldap.conf /etc/openvpn/auth/auth-AD.conf
En voici une version minimale :
<LDAP>
# LDAP server URL
URL ldap://10.0.0.10:3268
BindDN "openvpnbinduser@mycompany.com"
Password mysweetsecretpassword123
Timeout 15
TLSEnable no
FollowReferrals yes
</LDAP>
<Authorization>
BaseDN "DC=paris,DC=myCompany,DC=com"
# User Search Filter
SearchFilter "(sAMAccountName=%u)"
# Require Group Membership
RequireGroup true
<Group>
# BaseDN must be the DN of the group containing VPN-allowed users
BaseDN "CN=VPN Users,OU=Groups,OU=IT,DC=paris,DC=myCompany,DC=com"
SearchFilter "(objectClass=group)"
MemberAttribute Member
</Group>
</Authorization>
Il est possible de spécifier la nécessité d’appartenance à un groupe directement dans le champ SearchFilter
, comme ceci :
SearchFilter "(&(sAMAccountName=%u)(memberOf=CN=VPN Users,OU=Groups,OU=IT,DC=paris,DC=myCompany,DC=com))"
RequireGroup false
Modifications au fichier client
Supprimer les lignes fournissant le certificat/clé du client.
Ajouter une ligne contenant auth-user-pass
pour demander les identifiants à la connexion.
Débuggage serveur :
En cas d’erreur lors de la connexion d’un client, on aura le message :
PLUGIN_CALL: plugin function PLUGIN_AUTH_USER_PASS_VERIFY failed with status 1: /usr/lib/openvpn/openvpn-auth-ldap.so
Sun Mar 14 11:54:21 2021 82.64.166.200:1194 TLS Auth Error: Auth Username/Password verification failed for peer
L’erreur peut venir de la connexion du serveur VPN à l’AD (l’identifiant client est donc impossible à vérifier), ou bien d’un identifiant incorrect (le couple user/pass est incorrect, ou bien l’identifiant n’existe pas).
Dans les logs, si on a le message :
LDAP bind failed: Invalid credentials (80090308: LdapErr: DSID-0C090453, comment: AcceptSecurityContext error, data 52e, v3839)
Unable to bind as user@domain.com
C’est que l’identifiant de bind (l’identifiant utilisé par le serveur VPN pour se connecter sur l’AD) est incorrect.
Si on a :
LDAP user "myuser" was not found.
c’est que l’identifiant client est invalide
Si on a :
LDAP bind failed: Invalid credentials
Incorrect password supplied for LDAP DN "CN=myUser,CN=Users,DC=paris,DC=mycompany,DC=com"
c’est que l’identifiant est OK, mais le mot de passe invalide