Um die Anmeldung an einer Applikation mit einem zweiten Faktor abzusichern gibt es verschiedene Ansätze, die wir mit privacyIDEA bisher auch verfolgt haben.
Zwei-Faktor-Authentifizierung mittels Standard-Protokolle und Plugins
Wenn die zu schützende Applikation Standard-Protokolle wie bspw. RADIUS oder SAML unterstützt, dann kann die Überprüfung des zweiten Faktors im RADIUS Server oder im SAML Identity Provider vorgenommen werden. An der Applikation sind somit keine Änderungen vorzunehmen. Mit privacyIDEA konnte dies bisher mit dem privacyIDEA FreeRADIUS Modul oder mit dem privacyIDEA SimpleSAMLphp Plugin gelöst werden.
Andere Applikationen bieten ein flexibles Authentifizierungs-Framework, so dass die Anmeldung an einer solchen Applikation durch die Entwicklung eines kleinen Plugins um einen zweiten Faktor erweitert werden kann. Hierzu gibt es eine breite Auswahl an Plugins für verbreitete Applikationen wie TYPO3, ownCloud, Nextcloud, WordPress, dokuwiki, django, OTRS, Apache, NGINX, PAM/OpenVPN oder die Anmeldung am Windows Desktop.
Doch manche Applikationen bieten keine RADIUS-Schnittstelle und auch kein einfaches Authentifizierungs-Framework. Manchmal ist auch einfach die Zeit zu knapp oder die Programmiersprache der Applikation zu unangenehm.
privacyIDEA LDAP-Proxy
Um in solchen Fällen ebenfalls auch diesen Applikationen die Sicherheit einer starken Authentifizierung gegen privacyIDEA zu ermöglichen, entwickeln wir den privacyIDEA LDAP-Proxy.
Der privacyIDEA LDAP-Proxy kommt dann zum Einsatz, wenn eine Applikation die Benutzer gegen einen LDAP-Server wie OpenLDAP oder Microsoft Active Directory authentifiziert. Der privacyIDEA LDAP-Proxy wird dabei zwischen die Applikation und den LDAP-Server gesetzt. Die Applikation wird derart umkonfiguriert, dass sie nicht mehr den originalen LDAP-Server sondern den LDAP-Proxy kontaktiert. der privacyIDEA LDAP-Proxy entscheidet dann, wie die Benutzer mit zwei Faktoren zu authentifizieren sind und welche Anfragen an den originalen LDAP-Server weitergeleitet werden.
Die Authentifizierung erfolgt für den Benutzer also völlig Transparent.
Der Vorteil für die IT-Abteilung liegt auf der Hand: Der originale LDAP-Server wird nicht angetastet und die Applikation erfährt lediglich eine Konfigurationsänderung im Rahmen der vorgesehen und vom Hersteller unter Support stehenden Rahmenbedingungen.
Gegenüber Zwei-Faktor-Lösungen, die rein auf OpenLDAP basieren, hat die Variante des LDAP-Proxies zusätzlich zur Unveränderbarkeit des originalen LDAP-Servers weiterhin den Vorteil, dass sie eben nicht nur mit OpenLDAP sondern auch mit jedem anderem LDAP-Dienst wie dem weit verbreiteten Microsoft Active Directory oder Samba4 funktioniert.
Das Beispiel-Szenario
In diesem beispielhaften Szenario betrachten wir die Anmeldung an SuiteCRM. SuiteCRM ist eine Open Source Customer Relation Managemet Lösung, für die es kein Zwei-Faktor-Plugin gibt. Allerdings kann SuiteCRM die Benutzer gegen LDAP authentifizieren. Daher soll in diesem Fall der privacyIDEA LDAP-Proxy zum Einsatz kommen.
Wir könnten genauso jede beliebige andere Applikation betrachten, die Benutzer aus einem LDAP-Verzeichnis verwendet. Wir installieren SuiteCRM auf einem Univention Corporate Server, da die Installation und Konfiguration sich hier als extrem einfach erweist. Nach der Installation ist SuiteCRM sofort so konfiguriert, dass Benutzer, die im Univention Corporate Server Domain Controller angelegt sind, sich an SuiteCRM mit ihrem LDAP-Passwort anmelden können. Statt eines UCS Domain Controllers hätten wir genauso eine native OpenLDAP-Instanz oder ein Microsoft Active Directory verwenden könnten.
Auch der privacyIDEA Authentication Server kann wahlweise auf einer beliebigen Linux-Distribution oder auf einem Univention Corporate Server installiert werden. privacyIDEA ist ebenfalls im Univention App Center enthalten, so dass auch privacyIDEA automatich gegen den LDAP-Server konfiguriert wird und lediglich den Benutzern die zweiten Faktoren in Form von Yubikeys, OTP-Token oder Smartphone-Apps zugewiesen werden müssen.
SuiteCRM wird schließlich derart umkonfiguriert, dass nicht mehr der UCS LDAP-Server sondern der LDAP-Proxy gefragt wird.
Bei Bedarf können mehrere der beteiligten Komponenten auf einem System installiert werden.
Integration
LDAP-Proxy installieren und konfigurieren
Der LDAP-Proxy ist in einer Beta-Version zur Zeit über Github erhältlich. Durch die Implementierung auf Basis von Python und Twisted ergibt sich eine Vielzahl von Möglichkeiten für das Deployment. Die nötigen Einstellungen werden in einer zentralen Konfigurationsdatei vorgenommen. Unter anderem muss dem LDAP-Proxy hier mitgeteilt werden, wo der UCS LDAP-Server und die privacyIDEA-Instanz zu finden sind. Außerdem wird ein Service Account auf dem UCS LDAP-Server benötigt, dessen Zugangsdaten in der Konfigurationsdatei hinterlegt werden.
Für genauere Informationen konsultieren Sie die Datei README.md.
Der LDAP-Proxy wird wie folgt gestartet
twistd -n ldap-proxy -c config.ini
Im produktiven Betrieb würden Sie den LDAP-Proxy später automatisch als Service über systemd starten. Die Konfigurationsdatei config.ini kann entsprechend an beliebiger Stelle liegen. Die Datei example-proxy.ini enthält entsprechende ausführliche Kommentare, so dass schnell ersichtlich sein sollte, welche Konfigurationen vorzunehmen sind.
Die Konfigurationsdatei
Entscheidend sind die folgenden Konfigurationen:
In der Sektion privacyidea geben Sie mit dem Parameter instance an, wo der LDAP-Proxy den privacyIDEA Server erreicht.
In der Sektion ldap-backend geben Sie an, wo der originale LDAP-Server steht und ob die Verbindung über LDAP oder LDAPS oder LDAP+STARTTLS durchgeführt wird.
Auf welchem Port der LDAP-Proxy selber lauscht können Sie in der Sektion ldap-proxy mit dem Parameter endpoint angeben.
Schließlich müssen Sie noch definieren, welches LDAP-Attribut als Loginname verwendet wird. Dies geschieht im Parameter attribute in der Sektion user-mapping.
Der Service-Account ermöglicht allgemeines Suchen
Für einfache Applikationen, die lediglich den Benutzer mittels eines Binds überprüfen, reicht dies bereits aus. SuiteCRM nutzt allerdings für allgemeine Suchanfragen zusätzlich einen Service-Account. Dieser muss in der Sektion ldap-proxy bei passthrough-binds und in der Sektion service-account eingetragen werden.
SuiteCRM konfigurieren
In SuiteCRM muss der Administrator lediglich den zu kontaktierenden LDAP-Server ändern. Dazu geht er ins Administrations-Menü, das man oben rechts erreicht.
Dort wählt er den Punkt „Passwordmanagement“.
Dort erreicht man schließlich die Konfigurationsmöglichkeiten für den LDAP-Server. Der dort eingetragene LDAP-Server muss nun auf den FQDN bzw. IP des LDAP-Proxies abgeändert werden.
Fazit
Der Benutzer im SuiteCRM wird nun über den LDAP-Proxy in Zukunft gegen privacyIDEA authentifiziert. Das komplette Passwort-Feld bei der Anmeldung an SuiteCRM wird an privacyIDEA gesendet. Wie ansonsten auch muss der Benutzer also sein statisches Passwort und einen OTP-Wert eingeben.
Die konkrete Art des verwendeten zweiten Faktors kann über privacyIDEA individuell für jeden Benutzer geregelt werden. Denkbar sind wie bereits erwähnt Yubikey, OTP-Token und OTP-Karten, Smartphone-Apps wie Google Authenticator aber auch der Versand eines Einmalpasswortes per SMS oder Email.
Der LDAP-Proxy wird weiter ausgebaut und wir freuen uns über jegliches Feedback. Wollen Sie auf dem laufenden bleiben, so beobachten Sie das Github Repository oder abonnieren Sie unseren Newsletter.