2 Faktor mit Citrix ADC und Cisco Duo

Veröffentlicht von

Last Updated on 5. Oktober 2022 by Sebastian

Ich hatte neulich ein PoC bei einem größeren Kunden wo wir einen Citrix ADC(HA) in einer DMZ bereitgestellt haben um damit klassisch Remote Worker ohne VPN auf die OnPremise Citrix Virtual Apps & Desktops Umgebung zu verbinden. So eine Bereitstellung in einer DMZ kann trotz intensiver Vorbereitung ganz viele Überraschungen mit sich bringen. In den meisten Fällen weil irgendeine Firewallregel vergessen oder nicht richtig gesetzt wurde. Erstaunter war ich allerdings das eine kurz drauf folgende Absicherung mit Cisco Duo reibungslos und ohne große Probleme von statten ging. Zugegeben ich war in diesem fall nur für den Citrix ADC Part verantwortlich und musste also nur einen Radius Server konfigurieren aber das hat mich natürlich neugierig gemacht und deswegen habe ich das ganze im LAB nachgebaut.

Erfreulicherweise stellt Cisco eine 30 Tage Testversion zur Verfügung sowie eine kostenlose Version(für bis zu 10 Benutzer) die einen eingeschränkten Funktionsumfang hat. Nach der Testversion von Duo in der Vollversion(Beyond) wird euer Account automatisch auf Duo Free(Kostenlos) umgestellt.

Interessant sind die Features die man bereits ab 3$ im Monat bekommen kann durchaus. Darunter auch die Möglichkeit das Token Device ( Smartphone ) auf Compliance zu prüfen. Allerdings reicht Duo Free aus um damit eine 2 Faktor Authentifizierung mit dem Citrix ADC zu realisieren. Da ich diesmal allerdings für den kompletten Stack verantwortlich war blieb es natürlich nicht bei der Konfiguration des ADCs. Neben einem Account bei Cisco Duo wird auch noch eine Windows oder Linux Appliance benötigt mit dem duoauthproxy der meine Anfragen zur Authentifizierung Richtung Cisco Cloud weiterleitet. Ich habe mich in diesem Fall für eine CentOS VM entschieden.

Bereitstellung Cisco Duo Portal

Zuerst musste man sich unter https://signup.duo.com einen Account erstellen. Was relativ schnell möglich ist. Ich habe übrigens das Häkchen bei „Ich bin MSP….“ nicht gesetzt und trotzdem bekam ich eine Email ob ich nicht Partner von Cisco Duo werden möchte? Das ich dadurch sehr gute Kondition bekommen könnte und weitere kostenlose Accounts…. 🙂

Wenn ihr euren Account erstellt habt meldet ihr euch im Admin Panel an. Dort könnt ihr unter Applikation den Citrix Netscaler hinzufügen in dem ihr ihn über den Button „Protect an Application“ sucht.

Achtung es gibt auch noch das Citrix Access Gateway. Ich habe allerdings Citrix Gateway ( Netscaler ) ausgewählt weil es von der Produktbezeichnung her neuer war. Technisch weis ich nicht ob es hier ein Unterschied in der Bereitstellung gibt.

Ihr klickt auf Protect und erhaltet dann in einem neuen Menü folgende wichtige Daten die ihr später für den duoauthproxy benötigt. Notiert euch diese Daten temporär in ein Texteditor eurer Wahl. Wir werden Sie gleich brauchen.

Wenn ihr nun etwas weiter nach unten scrollt könnt ihr der Applikation einen anderen Namen vergeben. Dieser Name wird später bei der Anmeldung angezeigt. Darüber hinaus könnt ihr hier im 30 Tage Testzeitraum auch das SelfService Portal konfigurieren. Das Selfservice Portal ist leider ein Feature das in der freien Version nicht zur Verfügung steht. Wenn ihr also später ein User hinzufügen wollt müsst ihr dies leider manuell durchführen. Zusätzlich lässt sich einstellen ob alle Varianten wie ein Username eingeben wird, gleich behandelt werden sollen. Ich habe dies mal vorerst auf None gelassen und auch keine Probleme damit festgestellt.

Abschliessend scrollen wir nach unten und klicken auf Save.

Wenn ihr jetzt noch im Testzeitraum seid brauchen wir im Admin Panel direkt nichts mehr zu tun. Wir können später den Benutzer voll automatisch „Onboarden“. Sollte der Testzeitraum allerdings abgelaufen sein und ihr euch nun in der kostenlosen Version befinden müsst ihr einen neuen Benutzer manuell anlegen. Unter Users -> And Users befindet sich das passende Menü. Wichtig ist das der Benutzername mit dem primären Authentifizierungsnamen übereinstimmt, damit hier ein Match stattfinden kann. In den meisten Fällen wird das der UPN ( UserPrincipalName ) sein der dann auch der Email Adresse entspricht.

Nun haben wir alle wichtige Schritte im Cisco Duo Portal erledigt und können uns der OnPremise Umgebung widmen.

Bereitstellung CentOS mit Duo Authentication Proxy

Ich habe mich bei der Bereitstellung des Proxies weitestgehend an die Anleitung von Cisco selbst gehalten. Als OS habe ich CentOS gewählt. Als Image habe ich folgende Version verwendet CentOS-7-x86_64-Minimal-2009.iso. Natürlich könnt ihr aber auch ein anderes Linux OS nehmen. Im Support aktuell sind CentOS, Red Hat Enterprise Linux, Ubuntu und Debian. Alternativ tut es natürlich auch ein Windows Server ab 2012. Ich zeige die Installation hier Beispielhaft an Linux.

Da der Cisco Duo Authentication Proxy nur als Source Code vorliegt müsst ihr zunächst passende developer tools runterladen. Unter CentOS habe ich hierzu folgende Befehle ausgeführt.

root@linux# yum install gcc make libffi-devel perl zlib-devel diffutils

Nun könnt ihr mit wget den aktuellen Sourcecode vom Duo Authentication Proxy runterladen. Idealerweise macht ihr das in eurem Home Verzeichnis.

root@linux# wget --content-disposition https://dl.duosecurity.com/duoauthproxy-latest-src.tgz

Ihr entpackt das Tar Archiv und wechselt mit cd in den gerade entpackten Ordner. Mit dem Befehl make wird nun der Quellcode kompiliert.

root@linux# tar xzf duoauthproxy-5.7.3-src.tgz
root@linux# $ cd duoauthproxy-version-src
root@linux# $ make

Nachdem der Quellcode kompiliert wurde, was ein paar Minuten dauern kann, könnt Ihr in den Ordner wechseln der beim kompilieren erstellt wurde und führ das Install Skript aus

root@linux# cd duoauthproxy-build
root@linux# ./install

Zunächst müsst Ihr den Pfad angeben wo der Authentication Proxy installiert werden soll. Ich habe den Standard /opt/duoauthproxy gelassen und somit mit Enter bestätigt.

Der Authentication Proxy erstellt beim installieren einen sep. Dienstbenutzer. Hier könnt Ihr einstellen wie dieser lauten soll.

Als nächstes ist noch der Gruppenname zu wählen. Oder mit Enter den voreingestellten zu bestätigen.

Jetzt kopiert er die Daten in den entsprechenden Ordner, erstellt die Benutzer/Gruppen und möchte von euch Wissen ob in Zukunft der Authentication Proxy immer automatisch starten soll. Dies solltet ihr mit Yes bestätigen.

Solltet ihr SELinux einsetzen müsst ihr hier noch das entsprechende Modul installieren mit Yes.

In meinem Fall war kein SELinux installiert. Nach der Installation sollte der Duo Authentication Proxy gestartet sein.

In meinem Fall musste ich noch die Firewall für den Radius Port öffnen.

 firewall-cmd --zone=public --add-port=1812/udp --permanent

Nun kommen wir zur eigentlichen Konfiguration des Proxies. Hier zu öffnen wir mit dem Editor eurer Wahl die Datei /opt/duoauthproxy/conf/authproxy.cfg. Hier richten wir zunächst den Zugriff auf das Active Directory ein. Hierzu benötigen wir folgende Informationen: Hostname des DCs, Benutzername/Passwort um das LDAP auslesen zu können sowie die Base DN in der sich die Benutzer befinden.

[ad_client]
host=10.66.255.10
service_account_username=srvadc
service_account_password=Password1!
search_dn=OU=Users,OU=Alpha Corp,DC=itnetx,DC=lab

Im zweiten Abschnitt wird die Radius Server Konfiguration vorgenommen. Der Authentication Proxy unterstützt hier verschiedene Modi. In unserem Fall wird ein iFrame auf dem ADC eingeblendet der es uns dann ermöglich via Push den Login auf unserem Smartphone zu bestätigen. Ihr müsst hierzu das Template wissen das Ihr auf dem ADC einsetzt sonst passt das Layout des iFrames nicht. Hier gebt ihr dann auch die Daten ein die ihr beim anlegen der Applikation bekommen habt. Abschliessend tragt ihr noch die IP Adresse des ADCs sowie Passwort und Port ein

[radius_server_iframe]
type=citrix_netscaler_rfwebui
api_host=api-XXXXXXXX.duosecurity.com
ikey=DIIIXXXDDDDDDDXXXXX
skey=b3232132132321321321321321321312
failmode=safe
client=ad_client
radius_ip_1=10.66.255.240
radius_secret_1=Password1!
port=1812

Damit wir auch einen zweiten Faktor auf dem Citrix Receiver oder Workspace App realisieren können brauchen wir einen weiteren Server mit der Radius_Server_Auto Konfiguration. Ansonsten sind die Daten identisch zur Konfiguration oben. Danach speichert ihr Datei ab. Mit systemctl restart duoauthproxy startet ihr den Dienst neu und lädt die Konfiguration.

[radius_server_auto]
ikey=DIIIXXXDDDDDDDXXXXX
skey=b3232132132321321321321321321312
api_host=api-XXXXXXXX.duosecurity.com
radius_ip_1=10.66.255.240
radius_secret_1=Loremipsum1!
failmode=safe
client=ad_client
port=18120

Konfiguration Citrix ADC

Kommen wir zur Konfiguration des ADCs. Ich zeige die Konfiguration an Hand eines ADC Standard mit Advanced Policies da dies seit Release 13.0-67.x für das Citrix Gateway supported wird. Wir loggen uns auf dem Netscaler Management ein

Wir wechseln auf Citrix Gateway -> Virtual Server wählen unseren virtuellen Server aus und klicken auf Edit.

Als nächstes fügen wir den Punkt Authentication Profile hinzu und klicken auf ADD um ein neues Profil zu erstellen.

Nun vergeben wir einen sinnvollen Namen für unser Profil und klicken auf ADD um für unser Profil einen Authentication Virtual Server zu erstellen.

Auch hier vergeben wir einen sinnvollen Namen. Die Einstellung „Non Addressable“ sowie SSL bleibt. Mit OK bestätigen wir die Einstellungen.

In der Übersicht des Virtual Servers erstellen wir nun eine neue Authentication Policy. Hierzu klicken wir auf den Punkt „No Authentication Policy“

Hier klicken wir auf bei Select Policy auf Add um eine neue Policy zu erstellen.

Zunächst erstellen wir eine LDAP Policy in der wir unser LDAP abfragen nach dem entsprechenden Benutzer. Wir vergeben einen sinnvollen Namen, wählen bei Action Type „LDAP“ und klicken bei Action auf Add um einen LDAP Server zu konfigurieren. Als Expression wählen wir true da die LDAP Policy immer greifen soll.

Bei der Anlage des LDAP Servers benötigen wir im ersten Schritt den Servernamen, Port, BaseDN, Administrator Bind DN, Passwort. Die Daten für BaseDN und Admin Bind DN lassen sich aus dem Active Directory auslesen. Als Security Type sollte SSL gewählt werden.

Als Server Logon Name Attribute wählen wir New und geben „userPrincipalName“ ein. Wenn wir eine Einschränkung auf eine spezielle AD Gruppe haben wollen müssen wir den Search Filter anpassen sowie das Group Attribute. Abschließend klicken wir auf OK.

Zurück im Konfigurationsmenü der ersten Authentication Policy sollte jetzt unter Action der LDAP Server den wir gerade erstellt haben ausgewählt sein. Wir klicken abschliessend auf OK.

In der Policy Bindung zurück sollte oben nun unsere eben erstellte LDAP Policy sein. Da wir neben dem ersten Faktor LDAP noch den zweiten Faktor Duo haben müssen wir bei Select Next Factor auf Add klicken um einen weiteren zu erstellen.

Wir erstellen ein Policy Label in dem wir einen sinnvollen Namen vergeben. Die restlichen Einstellungen lassen wir wie vorgegeben und klicken auf Continue.

Hier klicken wir auf Add Binding um ein weiteres Policy Bindung zu erstellen.

Mit einem klick auf Add erstellen wir die Policy

Zunächst vergeben wir wieder einen sinvollen Namen und wählen als Action Type Radius aus. Für die Radius Konfiguration ist die Expression abhängig ob der Aufruf via Web-Browser oder Workspace App getätigt wird. Im ersten Schritt legen wir die Policy für den Browser Zugriff an. Mit folgender Expression:

HTTP.REQ.HEADER("User-Agent").CONTAINS("CitrixReceiver").NOT

Nun klicken wir bei Action auf Add und erstellen den Radius Server.

Hier vergeben wir einen neuen Namen, sowie IP, Port und Secret Key. Wir können direkt die Erreichbarkeit des Radius testen und nach erfolgreichem Test klicken wir auf Create.

In der Übersicht sollte nun bei Action unser eben erstellter Radius Server vorhanden sein. Wir klicken auf OK um die Einstellungen zu bestätigen.

In der Übersicht der Bindings fügen wir nun eine weitere Policy mit Add Binding hinzu da wir ja nun noch eine Bedingung brauchen für den Zugriff via Citrix Workspace. Wir legen die Policy analog zu unser bestehenden an.

Wichtig ist das wir in unserer Duo Konfiguration vorher einen separaten Port definiert haben über den wir den Zugriff via Workspace App regeln. Dazu legen wir mit den Button Add einen sep. Server an. Die Expression ist ähnlich der vorherigen.

HTTP.REQ.HEADER("User-Agent").CONTAINS("CitrixReceiver")

Die Konfiguration ist Identisch zu vorher. Lediglich der Port wurde angepasst.

Nun haben wir 2 Bindungen mit zwei verschiedenen Bedingungen als nächste Faktor angelegt. Die Priorität hat er selbst angepasst. Nun klicken wir auf Done und anschliessend auf Close. In der Übersicht haben wir nun eine Authentication Policy die wir mit Done bestätigen.

Abschliessend wird das Authentication Profile auf dem Virtual Server mit OK bestätigt und ist somit aktiv.

Wenn ihr alles richtig gemacht hab sollte nun nach dem Login mit Benutzernamen und Passwort euch ein Duo Push Dialog begrüßen. Das aussehen ist allerdings davon abhängig ob ihr den Benutzer manuell angelegt habt oder die „SelfEnrollment“ Option noch ausnutzen könnt. Da wie eingehend erwähnt der Account für euch innerhalb des Duo Portals noch angelegt werden muss.

Fazit

Ich hoffe euch hat die Anleitung gefallen und ihr konntet ihr Einigermaßen folgen. Ich freue mich immer über konstruktive Kritik. Für mich war die Umsetzung sehr spannend und ich nutze die Lösung seit ein paar Wochen. Ich muss allerdings sagen das ich die Azure SAML Authentifizierung angenehmer finde da ich dort auf SSO Funktionen zurückgreifen kann die mir so bei Cisco Duo in der freuen Version verwehrt bleiben. Trotzdem ist eine gute Lösung und relativ einfach umzusetzen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.

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