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

[su_note note_color=“#c1c1b6″]

apt-get install openvpn-auth-ldap

[/su_note]

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

[su_note note_color=“#c1c1b6″]

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

[/su_note]

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

[su_note note_color=“#c1c1b6″]

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

[/su_note]

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

[su_note note_color="#c1c1b6"] 
<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>
 [/su_note]

Mehr angaben sind eigentlich nicht notwendig.

In der Zeile

[su_note note_color=“#c1c1b6″]

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

[/su_note]

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

[su_note note_color=“#c1c1b6″]

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

[/su_note]

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

[su_box title=“Wichtig!“ style=“glass“ box_color=“#e15908″]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.[/su_box]

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:

[su_note note_color=“#c1c1b6″]

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

[/su_note]

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

[su_note note_color=“#c1c1b6″]

/etc/init.d/openvpn restart

[/su_note]

 

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

[su_note note_color=“#c1c1b6″]

auth-user-pass pass.txt

[/su_note]

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

[su_note note_color=“#c1c1b6″]

username 
secretpassword

[/su_note]

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!

Kommentar verfassen

Nach oben scrollen