– Jan's Cloud – online Gedankenstütze ;)

21. November 2018

Citrix ADC Classic Policies in Advanced Polcies umwandeln

Filed under: Citrix,Netscaler — Schlagwörter: , , , , , , , , — Jan Mischo @ 12:46

Mit dem Release 13.0 (vermutlich Q2 2019) werden voraussichtlich am Citrix ADC die seit Version 12.0.41.16 bzw. 12.0.56.20 veralteten Classic Policies entfernt und durch Advanced Policies ersetzt.

Getreu dem Motto „Was du heute kannst besorgen, schiebe gleich auf Morgen!„, ach nein, „Wenn nicht jetzt, wann dann?“ geht es heute einmal darum, am eigenen Citrix Application Delivery Controller die deprecated Classic Policies, soweit es geht, durch die Advanced Policies zu ersetzen. Glücklicherweise stellt Citrix dafür das CLI Tool „nspepi“ bereit. Als erstes mal ein kleiner Überblick, was denn alles an Klassik verschwindet (CTX234821):

  • Classic Named (policy) expression
  • Application Firewall Classic policy
  • Compression Classic policy
  • Classic Cache Redirection policy
  • Content Switching Classic policy
  • SSL Classic policy
  • Classic Audit SYSLOG policy
  • Classic Audit NSLOG policy
  • Classic AAA Pre-authentication policy
  • Classic Authorization policy
  • Classic Traffic Management Session policy
  • Classic Tunnel Traffic policy
  • Classic VPN Traffic policy
  • Classic VPN Session policy
  • Trace Classic expression
  • SYS.EVAL_CLASSIC_EXPR Classic function

Eine Möglichkeit wäre jetzt mit „nspepi“ Expression für Expression von Hand umzustellen:

nspepi -e "REQ.HTTP.HEADER Host CONTAINS 'autodiscover.domain.tld'"
> "HTTP.REQ.HEADER(\"Host\").CONTAINS(\"autodiscover.domain.tld\")"
Citrix ADC nspepi Expression

Citrix ADC nspepi Expression

Um nicht alle Expressions von Hand durchgehen zu müssen, lässt sich „nspepi“ zum Glück auch mit einer kompletten ADC Konfiguration „ns.conf“ befüttern:

cp /nsconfig/ns.conf /var/tmp/ns_classic.conf
nspepi -f /var/tmp/ns_classic.conf
> WARNING: Total number of warnings due to bind commands: 9
> WARNING: Line numbers which has bind command issues: 210, 211, 212, 213, 311, 324, 325, 326, 327
> OUTPUT: New configuration file created: new_ns_classic.conf
> OUTPUT: New warning file created: warn_ns_classic.conf
Citrix ADC nspepi ns.conf

Citrix ADC nspepi ns.conf

Derzeit können am Netscaler Gateway / Unified Gateway Advanced Policies nur per nFactor (AAA vServer) und Authentication Profil angebunden werden. Daher habe ich in meinem Fall die „new_ns_classic.conf“ runtergeladen, die vier neuen Policies für meine AAA vServer rausgepickt und im Namen um „_ADV_“ ergänzt. Im nächsten Step wurden dann die an den vServer / global gebundenen Basic Policies entfernt und durch die Advanced Policies ersetzt.

add authentication policy LDAPS_ADV_POL_Exchange -rule "HTTP.REQ.HEADER(\"Host\").CONTAINS(\"outlook.domain.tld\") || HTTP.REQ.HEADER(\"Host\").CONTAINS(\"autodiscover.domain.tld\")" -action LDAPS_SRV_Exchange
add authentication policy LDAPS_ADV_POL_Exchange_UPN -rule "HTTP.REQ.HEADER(\"Host\").CONTAINS(\"outlook.domain.tld\") || HTTP.REQ.HEADER(\"Host\").CONTAINS(\"autodiscover.domain.tld\")" -action LDAPS_SRV_Exchange_UPN
add authentication policy LDAPS_ADV_POL_Exchange_401 -rule TRUE -action LDAPS_SRV_Exchange
add authentication policy LDAPS_ADV_POL_Exchange_UPN_401 -rule TRUE -action LDAPS_SRV_Exchange_UPN

unbind authentication vserver vs_aaa_EXCHANGE_auth_form01 -policy LDAPS_POL_Exchange
unbind authentication vserver vs_aaa_EXCHANGE_auth_form01 -policy LDAPS_POL_Exchange_UPN
unbind authentication vserver vs_aaa_EXCHANGE_auth_basic -policy LDAPS_POL_Exchange_401
unbind authentication vserver vs_aaa_EXCHANGE_auth_basic -policy LDAPS_POL_Exchange_UPN_401

bind authentication vserver vs_aaa_EXCHANGE_auth_form01 -policy LDAPS_ADV_POL_Exchange -priority 100 -gotoPriorityExpression NEXT
bind authentication vserver vs_aaa_EXCHANGE_auth_form01 -policy LDAPS_ADV_POL_Exchange_UPN -priority 110 -gotoPriorityExpression END
bind authentication vserver vs_aaa_EXCHANGE_auth_basic -policy LDAPS_ADV_POL_Exchange_401 -priority 100 -gotoPriorityExpression NEXT
bind authentication vserver vs_aaa_EXCHANGE_auth_basic -policy LDAPS_ADV_POL_Exchange_UPN_401 -priority 110 -gotoPriorityExpression END

Damit das Gateway auch auf die Advanced Policies umgestellt werden kann benötigen wir einen weiteren (nicht adressierbaren) AAA vServer, ein Authentication Profile sowie die passende Advanced Policy. Ebenfalls kan ein Blick in diese beiden Dokumente auch nicht schaden:

add authentication policy LDAPS_ADV_POL_UGW -rule TRUE -action LDAPS_SRV_UGW
add authentication policy LDAPS_ADV_POL_UGW_UPN -rule TRUE -action LDAPS_SRV_UGW_UPN

add authentication vserver vs_aaa_UGW SSL 0.0.0.0 -maxLoginAttempts 5 -failedLoginTimeout 10
set ssl vserver vs_aaa_UGW -sslProfile ns_default_ssl_profile_frontend
bind ssl vserver vs_aaa_UGW -certkeyName Gateway_Cert

add authentication authnProfile aaa_auth_prof_UGW -authnVsName vs_aaa_UGW -AuthenticationHost aaa.domain.tld

bind authentication vserver vs_aaa_UGW -policy LDAPS_ADV_POL_UGW -priority 100 -gotoPriorityExpression NEXT
bind authentication vserver vs_aaa_UGW -policy LDAPS_ADV_POL_UGW_UPN -priority 110 -gotoPriorityExpression END

unbind vpn vserver UG_VPN_GN-Gateway -policy LDAPS_POL_UGW
set vpn vserver UG_VPN_GN-Gateway -authnProfile aaa_auth_prof_UGW

Damit der Content Switch vom Unified Gateway eine Verbindung zum soeben erstellten AAA vServer erlaubt, muss die CSW Policy des UGW noch um „|| HTTP.REQ.URL.CONTAINS(„nf/auth“)“ erweitert werden.

set cs policy UG_CSPOL_Gateway -rule "is_vpn_url || HTTP.REQ.URL.PATH.SET_TEXT_MODE(IGNORECASE).STARTSWITH(\"/Citrix\") || HTTP.REQ.URL.CONTAINS(\"nf/auth\")"

P.S.: Obacht.. Damit die Authentifizierung über UPN am ADC Unified Gateway auch am Storefront funktioniert, muss das „SSO Name Attribute“ auf „samAccountName“ konfiguriert werden. Dann validiert der ADC den UPN, holt sich den samAccountName und meldet „sich“ damit am Storefront an.

set authentication ldapAction LDAPS_SRV_UGW_UPN -ssoNameAttribute samAccountName

17. November 2018

Citrix ADC Management GUI Login Passwort

Filed under: Citrix,Netscaler — Schlagwörter: , , , , , — Jan Mischo @ 10:29

Ein kleiner Bug in der Netscaler Citrix ADC Management GUI Anmeldung bei Passwörtern mit Anführungszeichen

Da setzt man mal schnell einen Netscaler Citrix ADC zum Testen auf, erstellt eine LDAP Policy, damit sich ein Active Directory User anmelden kann und stellt am Ende fest, dass ein Login an der Management GUI nicht möglich ist. Fällt natürlich auch erst recht spät auf, da das meiste per SSH in der CLI eingerichtet wurde. Praktischerweise hatte das generierte Passwort neben dem scheinbar problematischen Anführungszeichen („) auch noch ein Dollarzeichen ($) sowie einen Slash (/). Leider waren die beiden zuletzt genannten Zeichen meine Hauptverdächtigen, sodass ich das Passwort doch glatt dreimal ändern musste. 🙂

Update: Betroffen sind zumindest die Versionen 12.0 und 12.1 (ältere habe ich im Moment nicht im Zugriff). In einem Ticket bei Citrix wurde bestätigt, dass der Support Engineer das Problem nachstellen konnte.

Update 2: Der Bug wurde bestätigt (#0716920) und wird nächstes Jahr mit 13.x gefixt sowie in 12.0 und 12.1 portiert.

Es betrifft hier nicht nur externe Netscaler Citrix ADC Administratoren / Nutzer, die z.B. vom Active Directory kommen, sonder auch lokale Netscaler Citrix ADC Benutzer.

Hier noch das aaad.debug Log bei Anmeldung eines Active Directory Users (ns_adm) mit Anführungszeichen im Passwort:

Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_drv.c[770]: receive_ldap_user_search_event 1-7260: User search succeeded, attempting user authentication(Bind) for <ns_adm>
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/naaad.c[5013]: register_timer 1-7260: setting timer 41823
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_drv.c[1450]: receive_ldap_user_bind_event 1-7260: Got user bind event.
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_common.c[439]: ns_ldap_check_result 1-7260: checking LDAP result. Expecting 97 (LDAP_RES_BIND)
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_common.c[477]: ns_ldap_check_result 1-7260: ldap_result found expected result LDAP_RES_BIND
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_common.c[301]: ns_show_ldap_err_string 1-7260: LDAP error string: <<80090308: LdapErr: DSID-0C090400, comment: AcceptSecurityContext error, data 52e, v1db1>>
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_common.c[487]: ns_ldap_check_result 1-7260: LDAP action failed (error 49): Invalid credentials
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_common.c[489]: ns_ldap_check_result 1-7260: For user ns_adm, LDAP authentication failed (error 49): Invalid credentials
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_drv.c[1483]: receive_ldap_user_bind_event 1-7260: ldap_bind user failed for user ns_adm
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/naaad.c[5090]: unregister_timer 1-7260: releasing timer 41823
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_drv.c[1510]: receive_ldap_user_bind_event 1-7260: Doing ldap authentication for user ns_adm, Other invalid credentials: lctx->lflags = 00000000, lconf->flags = 00000090
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/ldap_drv.c[2443]: check_microsoft_ad_errstr 1-7260: 80090308: LdapErr: DSID-0C090400, comment: AcceptSecurityContext error, data 52e, v1db1
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/naaad.c[4190]: send_reject_with_code 1-7260: Not trying cascade again
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/naaad.c[4192]: send_reject_with_code 1-7260: sending reject to kernel for : ns_adm
Fri Nov 16 13:16:48 2018
/home/build/rs_121_49_14_RTM/usr.src/netscaler/aaad/naaad.c[4209]: send_reject_with_code 1-7260: Rejecting with error code 4007

Leider wird hier nur der LDAP Error Code 49 bzw. „80090308: LdapErr: DSID-0C090400, comment: AcceptSecurityContext error, data 52e, v1db1“ ausgegeben. Diese beiden Codes lassen leider nur auf einen gültigen Benutzer mit ungültigem Passwort schließen. Hier war ich dann verwundert, dass der Login via SSH / Konsole problemlos vonstatten ging.

LdapErr 52e / Active Directory LDAP Error 49:

Invalid credentials: Returned when a valid username is supplied but an invalid password/credential is supplied. If this error is received, it will prevent most other errors from being displayed.

P.S.: Anmeldungen mit einem Benutzer und Anführungeszeichen im Passwort funktionieren tadellos am Unified Gateway oder auch am AAA vServer für z.B. Outlook WebApp (OWA) / Outlook Anywhere (OA) / Microsoft Server ActiveSync (EAS).

25. Oktober 2018

Remotedesktop Blackscreens mit Server 2016

Verschiedene Situationen die mit Terminalservern / VDAs unter Windows Server 2016 zu Blackscreens führen können

In unterschiedlichen Kundenumgebungen mit und ohne Citrix gab es in den letzten Monaten immer wieder Blackscreens bei der Anmeldung von Usern. Bei fast jedem Blackscreen half es nur den entsprechenden Session-Host bzw. die VDA durchzubooten. Hier einmal eine kleine Auflistung, welche Fehler in welchen Konstellationen aufgetreten sind und wie sie sich ggfs. beheben lassen:

  1. Citrix Virtual Apps and Desktops (XenApp / XenDesktop) verursacht in den Versionen 7.15 LTSR bis 7.17 bei Einsatz des User Profile Managers einen schwarzen Bildschirm
  2. Die Abmeldung eines Users mit durchgereichter Smart Card verursacht für sämtliche Neuanmeldungen am betroffenen Host Blackscreens
  3. Mozilla Firefox bringt den Audio-Dienst und AudioDG.exe zum Absturz und Neuanmeldungen landen für längere Zeit (ca. 10 – 20 Minuten) im Blackscreen

zu 1) Hier hilft, im 7.15 LTSR Fall, das Update auf 7.15 LTSR CU2 sowie anschließend die Installation des Hotfixes für den UPM: https://support.citrix.com/article/CTX235399. Sollte man im Blackscreen „gefangen“ sein, dann hilft CTX235100. Für den Fall, dass das Current Release (CR) eingesetzt wird, würde ich auf 7.18 bzw. 7 1808 updaten. So eben (29.10.2018) hat Citrix das CU3 für den Long Term Servie Release 7.15 veröffentlicht und den „Black Screen“ als Fixed Issue angegeben (https://docs.citrix.com/en-us/xenapp-and-xendesktop/7-15-ltsr/whats-new/cumulative-update-3/fixed-issues.html):

  • 7.15 LTSR CU2 sessions might launch as a black screen. The issue occurs with sessions running on XenApp and XenDesktop 7.15 LTSR CU2 and 7.17 VDAs when Profile Management is enabled. For more information and a workaround, see Knowledge Center article CTX235100. [LC9648]

zu 2) Dieser Bug wurde mit dem Kummulativen Update KB4103720 und folgenden behoben. In mehreren Fällen musste neben dem Update die Registry noch angepasst werden. Dazu unter

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais

jeweils den 32-Bit DWORD „ForceWinStationUnregisterCall“ mit dem Wert 1 anlegen sowie die Sessions-Hosts durchbooten.

zu 3) Nach einem kurzen Case bei Microsoft hat sich ergeben, dass hier eine Deinstallation von Firefox auf den RDSHs / VDAs oder ein Deaktivieren des Audio-Dienstes hilft. Im Technet gibt es dazu einen etwas längeren Thread, mit einem kleinen Script, welches bei einem Kunden stündlich läuft und so „Abhilfe“ schafft. Zusätzlich empfiehlt es sich, die Windows Sounds zu deaktivieren. Dadurch kommt es nicht zum zehn- bis zwanzigminütigem Blackscreen-Loop. Deaktivieren lassen sich die Sounds z.B. per Gruppenrichtlinien-Einstellung Registry:

HKCU\AppEvents\Schemes (Default) REG_SZ .None

Quelle für den Registry Key: https://social.technet.microsoft.com/Forums/en-US/4e3ff4ea-ad23-4dda-b1e9-022f8d76c8e6/remote-desktop-rds-2016-gives-back-screen-on-logon-and-prevents-progression-to-desktop-audiodgexe?forum=winserverTS

REM Terminal Server instability seems to be caused by AudioDG.exe hanging and the Windows Audio
REM  service. Restarting these seems to bring it back up. So hopefully, pre-emptively restarting
REM  them at intervals will prevent it.

net stop Audiosrv
taskkill /F /IM AudioDG.exe
net start Audiosrv

Sollten mir noch weitere Blackscreens unter Terminalserver / Remotedesktopserver / XenApp & XenDesktop bzw. virtual Apps and Desktops auf die Füße fallen, so würde ich hier einfach ergänzen. 🙂

Zuletzt bearbeitet am:
  • 29.10.2018: 7.15 LTSR CU3 Informationen ergänzt.

13. September 2018

Citrix ADC Version 12.1 49.23 TLS1.3 support

Filed under: Citrix,Netscaler — Schlagwörter: , , , , , , , , , , — Jan Mischo @ 09:13

Der Citrix Netscaler bzw. der Citrix ADC (Application Delivery Controller), wie er nun heißt, bekommt mit der aktuellen Build 12.1 49.23 TLS1.3 Support.

Nachdem die aktuelle Firmware heruntergeladen und auf die beiden ADCs kopiert wurde, fangen wir, wie üblich, mit dem Update des ersten bzw. des Standby Citrix ADC an. Hier vorab noch der offizielle Citrix KB Artikel zum Update: https://support.citrix.com/article/CTX127455

save config
shell

cd /var/nsinstall/build-12.1-49.23_nc_64/
tar -zxvf build-12.1-49.23_nc_64.tgz
#hier wird entpackt
./installns
#hier wird installiert
Reboot NOW? [Y/N] Y

Nach dem Reboot wieder mit der Secondary Citrix ADC Appliance verbinden und überprüfen, ob es tatsächlich die Secondary Appliance ist. 😉 Sofern dies der Fall ist, wird die HA Synchronisation deaktiviert und ein Failover erzwungen.

show ha node
#hier werden die Nodes und der Status angezeigt
set ha node -hasync disabled
force failover
exit

Jetzt geht es mit dem zweiten Citrix Netscaler weiter, der sich nun im Status der Secondary Appliance befindet. Dort wird der obige Vorgang einfach wiederholt.

save config
shell

cd /var/nsinstall/build-12.1-49.23_nc_64/
tar -zxvf build-12.1-49.23_nc_64.tgz
#hier wird entpackt
./installns
#hier wird installiert
Reboot NOW? [Y/N] Y

Direkt nach dem Reboot erneut mit der jetzigen Secondary Citrix ADC Appliance verbinden und mit

show ha node
#hier werden die Nodes und der Status angezeigt
force failover
exit

den HA Status prüfen sowie zurück schwenken, sodass die (alte) Primary Appliance wieder den Status „primary“ hat. Weiter geht es auf die (alte) Secondary Appliance, um dort den HA Sync wieder zu aktivieren.

set ha node -hasync enabled
exit

Nachdem dann jetzt nach dem Update der langweilige „Business as usual“ Teil hinter uns ist, können wir uns dem spannenden und neuen TLS1.3 widmen – Yay! 🙂 Dazu muss im ersten Step die neue SSL Cipher Group „TLSv1.3“ an einen VServer gebunden werden. In meinem Fall nehme ich dazu einmal unseren Unified Gateway Content Switching VServer sowie einen https CS VServer für unsere Exchange Bereitstellung. Zum Abschluss muss dann in den SSL Parametern natürlich noch TLS1.3 aktiviert werden.

bind ssl vserver <Name des Unified Gateway VServers> -cipherName TLSv1.3
bind ssl vserver <Name des Content Switch VServers> -cipherName TLSv1.3

set ssl vserver <Name des Unified Gateway VServers> -ssl3 DISABLED -tls1 DISABLED -tls13 ENABLED
set ssl vserver <Name des Content Switch VServers> -ssl3 DISABLED -tls1 DISABLED -tls13 ENABLED

Notiz am Rande: Um in den Genuss von TLS1.3 am Client zu kommen wird mindestens Google Chrome in Version 65 oder der Mozilla Firefox 61 benötigt.

Und zu guter Letzt die Frage nach dem Warum bzw. welche Vorteile bringt TLS1.3 jetzt?

  • TLS1.3 ist dank „Zero Round Trip Time“ schneller im Verbindungsaufbau (TLS1.2: 2 Round Trips; TLS1.3: 1 Round Trip)
  • TLS1.3 nutzt per default PFS (Perfect Forward Secrecy)
  • TLS1.3 verzichtet auf veraltete und unsichere Features
    • SHA-1
    • RC4
    • DES
    • 3DES
    • AES-CBC
    • MD5
  • TLS1.3 ist „einfacher“. Dadurch ist es durchaus schwieriger etwas falsch zu konfigurieren. 😉

Jetzt klappts auch wieder mit einem A+ bei SSLLabs.com!

Citrix ADC TLS1.3 A+

Citrix ADC TLS1.3 A+

 

Older Posts »

Powered by WordPress