2Faktor mit Citrix ADC und Google Authenticator

Veröffentlicht von

Last Updated on 22. Juli 2021 by Sebastian

Dank Corona sind Zugriffe von extern auf Infrastrukturen gefragter denn je. Der klassische VPN Weg wird hier genauso gerne genutzt wie ein Lösung über den Citrix ADC. Der Vorteil der Lösung mit Citrix ADC liegt hier ganz klar auf der Hand .Clientless VPN bzw. Bereitstellung von Desktops via ICA Proxy. Oft werde ich allerdings auch gefragt wie man so eine Lösung neben dem klassischen Benutzernamen/Passwort Konstrukt noch absichern kann. In meinem letzten Beitrag habe ich die Clientzertifikats-Variante vorgestellt. Heute möchte ich euch zeigen wie Ihr eine zwei Faktor Authentifizierung realisieren könnt mit Google Authenticator.

Ich habe diese Anleitung geschrieben weil es zwar sehr viele Dokumentationen gibt zu diesem Thema aber selten in Verbindung mit einem Citrix ADC. Wir setzen in dieser Anleitung auf ein Ubuntu 20.04 LTS mit Freeradius. Zudem ist das Ubuntu in die Windows AD aufgenommen damit wir uns auch lokal mit unseren AD Daten an der Ubuntu Maschine anmelden können. Die Google Authenticator Komponente erzeugt dann einen QR Code den man dann mit der Google Authenticator APP auf dem Handy scannen kann. Anschließend hat man dann alle 30 Sekunden neue Tokens die man für den zweiten Faktor bei der Citrix ADC Anmeldung verwedenn kann. Es gibt zu dieser von mir hier vorgestellten Variante auch noch eine Variante die direkt im Citrix ADC implementiert ist(Native-OTP). Allerdings setzt diese Variante Advanced oder Premium Edition voraus.

Installation Part 1 – Bereitstellung Freeradius etc.

Ich setze eine Standard/Minimale Ubuntu Installation einfach mal als gesetzt und beginne mit der eigentlichen Installation der Pakete. Nach erfolgreicher Installation unseres Ubuntu 20.04 LTS führen wir zur Sicherheit nochmal ein apt update sowie ein apt upgrade aus um evtl. noch etwaige Paketaktualisierungen zu erhalten. Ein OpenSSH Server solltet Ihr im Idealfall auch eingerichtet haben damit lässt es sich im späteren Verlauf noch etwas besser testen. Des weiteren solltet ihr mit Chrony einen NTP Client verwenden damit eure Systemzeit auch mit dem Domain Controller übereinstimmt.

Nun starten wir endlich mit der Installation von Freeradius. Hier führen wir folgen Befehl aus.

root@ux04:~$ apt install freeradius freeradius-utils

Nach der Installation von Freeradius müssen wir einige Konfigurationen anpassen. Beginnen wir mit der radiusd.conf Datei.

root@ux04:~$ nano /etc/freeradius/3.0/radiusd.conf

Hier müssen wir user und group anpassen. Der freerad User hat leider nicht das Recht die Google Authenticator Files in den einzelnen Benutzerverzeichnissen zu lesen.

Also nächstes editieren wir die Datei „default“ in der Sites Konfiguration.

root@ux04:~$ nano /etc/freeradius/3.0/sites-enabled/default

In der Datei müssen wir das pam Modul aktivieren. Hierzu entfernen wir das Kommentarzeichen # .

Nun öffnen wir Datei users

root@ux04:~$ nano /etc/freeradius/3.0/users

Hier müssen wir die DEFAULT Auth-Type auf PAM setzen.

Abschließend legen wir in der clients.conf noch den Netscaler als Authentifizerungsclient an.

root@ux04:~$ nano /etc/freeradius/3.0/clients.conf

Hier muss die NSIP des Netscalers eingetragen werden sowie ein sicheres Password.

Damit ist die Konfiguration von Freeradius abgeschlossen. Als nächstes kümmern wir uns um den Domainjoin von unserer Ubuntumaschine. Hiezu installieren wir SSSD

root@ux04:~$ apt install sssd realmd adcli

Nach der Installation von SSSD könnt ihr auch direkt den Domain Join versuchen.

root@ux04:~$ realm join itnetx.lab

Das ganze ist allerdings bei mir leider mit einer seltsamen Fehlermeldung fehlgeschlagen.

Ich war mir ziemlich sicher das die Pakete installiert sind und habe kurzerhand Google befragt. Es ging wohl leider nicht nur mir so. Der Workaround besteht darin dem Join Befehl noch ein install Flag mitzugeben.

root@ux04:~$ realm join itnetx.lab --install=/

Jetzt muss das Administrator Passwort von der Domäne eingegeben werden. Wenn man alternativ einen anderen Benutzer wählen möchte muss man den den Schalter –user beim Join mitgeben.

Sollte der Join erfolgreich gewesen sein findet ihr jetzt in eurem Active Directory das Computerobjekt.

Zurück auf der Linuxkonsole müssen wir noch eine Anpassung an SSSD vornehmen.

root@ux04:~$ nano /etc/sssd/sssd.conf

Der Punkt access_provider muss auf simple geändert werden.

Als nächstes passen wird die Datei pam.d an.

root@ux04:~$ nano /etc/pam.d/common-session

Hier legen wir fest das beim Login eines AD Users ein Home Laufwerk angelegt wird. Dies benötigen wir da in dem Homelaufwerk entsprechend der Google Authenticator sein Keyfile ablegt.

Auch die Datei radiusd im Verzeichnis pam.d muss angepasst werden.

root@ux04:~$ nano /etc/pamd.d/radiusd

Das Google Authenticator Modul muss hinzugefügt werden damit es als Authentifizerungsquelle in Freeradius verwendet werden kann.

Abschließend installieren wir nun noch das Google Authenticator Modul für PAM.

root@ux04:~$ apt install libpam-google-authenticator

Nach der Installation des Moduls kann man sich mit einem Domain User einloggen und die Generierung von Tokens starten. Alternativ kann man auch mit su in den User wächseln.

sebastian.busch@itnetx.lab@ux04:~$ google-authenticator

Das Setup ist relativ einfach gehalten. Alle Fragen können mit Ja beantwortet werden. Die Einrichtung auf Seiten Ubuntu ist nun beendet. Jetzt wechseln wir auf den Citrix ADC.

Installation Part 2 – Einrichtung Citrix ADC(Netscaler)

Wir melden uns am Management unseres Citrix ADC an und wechseln in der Navigation auf Citrix Gateway. Klicken dann auf Authentication und dort auf Radius.

Hier können wir neben den Policies auch entsprechende Server anlegen. Was wir nun auch tun.

Wir vergeben einen sinnvollen Namen (evtl. Hostnamen). Dann tragen wir die IP Adresse sowie den Port ein auf dem der Freeradius Dienst lauscht. Abschließend tragen wir das Passwort ein das wir bei der Client Konfiguration zuvor auf Ubuntu Seite eingetragen haben.

Solltet ihr nicht sicher sein ob der Port 1812 (Default ) der richtige ist könnt ihr natürlich auf Ubuntu Seite prüfen ob der Freeradius Dienst überhaupt läuft. Da es ein UDP Protokoll ist benötigen wir hierzu folgenden Kommandzeilenparameter.

root@ux04:~$ netstat -uap

Wenn ihr alle Eingaben vorgenommen habt könnt ihr mit Test Radius Reachability prüfen ob der Radiusdienst antwortet. Bei Erfolgreicher Antwort erhaltet ihr eine grüne Leiste.

Sollten entsprechende Radiusbedingungen nicht bereits existieren, müssen diese nun noch angelegt werden. Wir fragen hier in diese Fall den HTTP Header ab.

Einmal ist die Bedingung erfüllt wenn der User-Agent im Header CitrixReceiver enthält.

In der zweiten Bedingung darf kein CitrixReceiver enthalten sein. Damit sind alle anderen Browser gemeint.

Ich gehe in meinem Beispiel davon aus das Ihr bereits einen LDAP Server zur Authentifizierung am Citrix ADC konfiguriert habt. Ich beziehe mich hier also nur auf die 2 Faktor Authentifizierung. Auch bei der LDAP Konfiguration gibt es entsprechende Policies(Bedingungen) die sich auf den UserAgent beziehen. Diese werden Analog zu den Policies auf Radiusseite angelegt.

Unter Server könnte ihr euren bestehenden LDAP Server bearbeiten. Wichtig ist hier der Punkt „Logon Name Attribute“. Dort müsst ihr New Auswählen und „userPrincipalName“ eingeben.

Jetzt wird es Zeit das wir unsere n Radus Server als zweiten Faktor an unseren Virtual Server binden. Hierzu klicken wir auf Virtual Servers und wählen unser entsprechendes Citrix Gateway aus.

In der Konfiguration des Virtual Servers angelangt müssen wir nun unter Basic Authentication die Konfiguration so anpassen das wir jeweils eine LDAP und eine Radius Konfiguration haben.

Wichtig ist hierbei zu beachten die Reihenfolge. Es ist wichtig welche Policy/Bedingung in welcher Reihenfolgen kommen soll. Warum ist dies so wichtig? Der Citrix Receiver verarbeitet Benutzername, Passwort und Token nicht in der gleichen Reihenfolge wie bei einem Login über die Webseite.

Als erstes legen wir unter Primary die LDAP Policy- > Not Contains Citrix Receiver an.

Im nächste Schritt unter Primary legen wir die Radius Policy an mit -> Contains Citrix Receiver.

So jetzt fügen wir unter Secondary ebenso eine LDAP Policy ein -> Contains Citrix Receiver.

Danach kommt noch die Radius Policy in Secondary -> Not Contains Citrix Receiver.

Jetzt wo wir uns um die Authentifizierung gekümmert haben müssen wir noch die Session Policy/Profile anpassen. Hier Editieren wir die in der die Bedingung auf Contains Citrix Receiver steht.

Den Punkt Credential Index stellen wir um auf Secondary. Anschließend speichern wir die Einstellung durch drücken auf OK. Die Konfiguration ist jetzt abgeschlossen.

Nun sind wir bereit für unseren ersten Login

Sollte alles geklappt haben können wir nun unsere Session starten.

Das war die Anleitung zur Bereitstellung einer Zweifaktor Authentifizierung. Natürlich ist diese Lösung ausbaufähig. Vor allem wäre es schön wenn ein Benutzer dieser Lösung sich nicht auf der Linux Konsole anmelden müsste. Evtl. würde hier ein Webformular die beste Lösung bereitstellen. Für Fragen, Anregungen und Kritik könnt ihr euch gerne bei mir melden.

4 Kommentare

    1. Hallo Wolfgang,

      danke für dein Feedback ich habe den Punkt angepasst. Ich habe die Anleitung selbst erst letztens wieder gebrauch und festgestellt das einige Dinge nicht 100% sind. Ich werden den Beitrag wohl nochmal bearbeiten.

      Grüße
      Sebastian

  1. Hallo Sebastian,
    es scheint so, dass man den OTP Token nur erstellen kann, wenn der User lokal auf dem OTP-Server existiert. Obwohl der Server im AD ist, kann ich hier nicht auf die user, z.B. mit SU zugreifen um für diesen einen Token zu erstellen.
    Eine Idee?

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.