OpenVPN: LDAP Authentifizierung ohne Active Directory auf einem Debian Server aufsetzen

Wie binde ich in openVPN meine LDAP ohne AD Umgebung ein?

Nachdem irgendwie alles zu diesem Thema im Netz auf eine AD Umgebung aufbaut, habe ich mich heute entschlossen kurz zu zeigen wie man das ganze auch ohne AD umsetzt. Ziel am Ende ist es eine openVPN Umgebung zu haben mit der man sich via LDAP Account einloggen muss.

Ich gehe hier von einem Debian 7.8 System aus auf dem bereits openVPN erfolgreich installiert wurde und der LDAP Server auf dem gleichen Server läuft wie openVPN.

Sollte dies noch nicht der Fall sein, so könnt Ihr diese Anleitung dafür nutzen: Anleitung: openVPN Server auf Debian 7.8 installieren und anschließend mit Android, iOS oder Windows verbinden

Vorbereitungen auf dem openVPN Hostserver:

Zuerst müssen wir auf dem Server wo openVPN installiert ist eine Erweiterung installieren. Diese bewirkt das openVPN überhaupt weiß was LDAP ist.

Dazu einfach folgenden Befehl ausführen

apt-get install openvpn-auth-ldap

Als nächstes erstellen wir einen Ordner im openVPN Verzeichnis und kopieren die Beispielkonfiguration

mkdir /etc/openvpn/auth 
cp /usr/share/doc/openvpn-auth-ldap/examples/auth-ldap.conf /etc/openvpn/auth

Nun müssen wir die Beispielkonfiguration natürlich noch bearbeiten und an unsere Bedürfnisse anpassen.

 nano /etc/openvpn/auth/auth-ldap.conf 

Um nicht alles in einzelnen Schritten machen zu müssen, habe ich die Konfiguration hier gepostet und mittels Kommentaren versehen.

<LDAP> # LDAP server URL URL ldap://ldap1.example.org # Bind DN (If your LDAP server doesn’t support anonymous binds) # BindDN uid=Manager,ou=People,dc=example,dc=com #Die Zeile auskommentieren falls euer Server kein Anonymes Lesen der Daten unterstützt # Bind Password # Password SecretPassword #Zeile auskommentieren und mit dem Passort anreichern # Network timeout (in seconds) Timeout 15 # Enable Start TLS TLSEnable yes # Follow LDAP Referrals (anonymously) FollowReferrals yes #TLS CA Certificate File TLSCACertFile /usr/local/etc/ssl/ca.pem # TLS CA Certificate Directory TLSCACertDir /etc/ssl/certs # Client Certificate and key # If TLS client authentication is required TLSCertFile /usr/local/etc/ssl/client-cert.pem TLSKeyFile /usr/local/etc/ssl/client-key.pem # Cipher Suite # The defaults are usually fine here # TLSCipherSuite ALL:!ADH:@STRENGTH </LDAP> <Authorization> # Base DN BaseDN “ou=People,dc=example,dc=com” #Hier muss eure Base DN rein # User Search Filter SearchFilter “(&(uid=%u)(objectClass=person))” #Hier wird angegeben nach was gesucht werden soll # Require Group Membership RequireGroup false # Add non-group members to a PF table (disabled) #PFTable ips_vpn_users <Group> BaseDN “ou=Groups,dc=example,dc=com” SearchFilter “(|(cn=developers)(cn=artists))” MemberAttribute uniqueMember # Add group members to a PF table (disabled) #PFTable ips_vpn_eng </Group> </Authorization>

Mehr angaben sind eigentlich nicht notwendig.

In der Zeile

SearchFilter "(&(uid=%u)(objectClass=person))" #Hier wird angegeben nach was gesucht werden soll

könnt Ihr das natürlich eurer Umgebung anpassen. Der Inhalt der ersten Klammer sollte dabei immer so sein, die zweite Klammer beinhaltet das Attribut. Ich verwende zum Beispiel in meiner Umgebung die Organization Unit. Diese wird im LDAP mit ou angegeben. Dazu habe ich den Wert vpn_active.

Mein Filter würde also so aussehen

SearchFilter "(&(uid=%u)(ou=vpn_active))"

Nachdem dies nun angepasst ist und Ihr die Zertifikate mit euren eigenen getauscht habt, könnt Ihr den Rest einfach übernehmen.

Wichtig!
Ihr solltet immer eine gesicherte Verbindung zum LDAP Server verwenden. Diese wird mittels ldaps:// eingeleitet und ist im Defaut auf Port 636 erreichbar. Andernfalls werden die Daten unverschlüsselt durchs Netz gejagt. Alternativ kann man einen SSH Tunnel nutzen oder den LDAP an eine VPN Adresse binden. Sollte der Server auf dem gleichen System laufen, reicht es die Verbindung mittels ldap://127.0.0.1:389 aufzubauen.

Das wichtigste wäre also geschafft. Jetzt erfolgt nur noch die openVPN Server Anpassung in deren Konfiguration. Fügt dazu einfach diese zwei Zeilen hinzu:

plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth/auth-ldap.conf login 
client-cert-not-required

Damit sagt Ihr dem Server dass er die Authentifizierung über LDAP vornehmen soll und ein Client Zertifikat nicht mehr notwendig ist. Solltet Ihr die sicherere 2 Wege Authentifizierung damit erreichen wollen, so last die untere Zeile einfach weg. Damit wird erreicht, dass der Client ein Zertifikats-Paar und einen LDAP Account besitzen muss um sich erfolgreich anzumelden.

Anschließend einfach ein

/etc/init.d/openvpn restart

 

Anpassungen an der openVPN Client Konfiguration

Nun müsst Ihr dem Client nur noch sagen, dass er ein Passwort und Usernamen an den openVPN Server übergeben muss.

Dazu in der Client Konfiguration diese Zeile hinzufügen

auth-user-pass pass.txt

und im gleichen Ordner eine Daten Namens pass.txt erstellen und dort die Daten in diesem Format

username 
secretpassword

eintragen.

Man muss damit nicht mehr jedes Mal die Daten eingeben. Würde auf einem Serversystem als Client auch nur sehr schwer gehen so ohne Desktop 🙂 

 

Ich hoffe ich konnte euch ein paar Stunden suche ersparen 🙂 

Share it!Share on FacebookEmail this to someoneShare on Google+Tweet about this on Twitter

Schreibe einen Kommentar