Posted in : NetScaler By Simon Gottschlag

4 years ago

Tänkte bara skriva ner några korta steg för hur jag användare Citrix NetScaler för lastdelning (och ersättare för ADFS Proxy / WAP). Nedan är hur jag gjort i tidigare version (innan 11.1) då SNI inte var supporterat.
Konfiguration på NetScaler:

# Skapa ett pattern set för att förenkla förändringar i reglerna längre ner
add policy patset PATSET_HOSTHEADER_ADFS
bind policy patset PATSET_HOSTHEADER_ADFS adfs.domain.com -index 1
# Skapa en regel som kollar i detta exemplet om headern "Host" är adfs.domain.com (enligt ovan pattern set)
add policy expression EXP_ADV_HOSTHEADER_ADFS "HTTP.REQ.HEADER(\"Host\").TO_LOWER.EQUALS_ANY(\"PATSET_HOSTHEADER_ADFS\")"
# Skapa två rewrite actions och policies enligt https://technet.microsoft.com/en-us/library/hh852618(v=ws.10).aspx
add rewrite action RWA-REQ-ADFS_XMSPROXY insert_http_header X-MS-Proxy "\"NETSCALER\""
add rewrite action RWA-REQ-ADFS_PROXYMEX replace HTTP.REQ.URL.PATH_AND_QUERY "\"/adfs/services/trust/proxymex\" + HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).PATH_AND_QUERY.STRIP_START_CHARS(\"/adfs/services/trust/mex\").HTTP_URL_SAFE"
add rewrite policy RWP-REQ-ADFS_XMSPROXY "EXP_ADV_HOSTHEADER_ADFS && HTTP.REQ.URL.TO_LOWER.STARTSWITH(\"/adfs\")" RWA-REQ-ADFS_XMSPROXY
add rewrite policy RWP-REQ-ADFS_PROXYMEX "EXP_ADV_HOSTHEADER_ADFS && HTTP.REQ.URL.TO_LOWER.STARTSWITH(\"/adfs/services/trust/mex\")" RWA-REQ-ADFS_PROXYMEX
# Skapa objekt för ADFS-servrarna
add server ADFS1 10.0.0.100
add server ADFS2 10.0.0.101
# Skapa en monitor som tittar på /adfs/probe på port 80, kräver att det är en senare version av ADFS 3.0 (kom med Windows Update)
add lb monitor MON-ADFS HTTP -httpRequest "HEAD /adfs/probe" -respCode 200 -LRTM ENABLED -secure NO -destPort 80
# Skapa en service group, på samma sätt är X-MS-Forwarded-Client-IP ett krav enligt ovan artikel på TechNet
add serviceGroup SG-ADFS SSL -maxClient 0 -maxReq 0 -usip NO -useproxyport YES -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO -appflowLog DISABLED -CIP ENABLED X-MS-Forwarded-Client-IP
bind serviceGroup SG-ADFS ADFS1 443
bind serviceGroup SG-ADFS ADFS2 443
bind serviceGroup SG-ADFS -monitorName MON-ADFS
# Skapa den interna lastdelaren (hit skall alla interna klienter koppla upp sig)
add lb vserver LB-INT_ADFS SSL 10.0.0.90 443 -persistenceType SOURCEIP -timeout 30 -cltTimeout 180
bind ssl vserver LB-INT_ADFS -certkeyName star.domain.com
# Skapa den externa lastdelaren (ersätter WAP)
add lb vserver LB-EXT_ADFS SSL 20.0.0.90 443 -persistenceType SOURCEIP -timeout 30 -cltTimeout 180
bind ssl vserver LB-EXT_ADFS -certkeyName star.domain.com
bind lb vserver LB-EXT_ADFS -policyName RWP-REQ-ADFS_XMSPROXY -priority 100 -gotoPriorityExpression NEXT -type REQUEST
bind lb vserver LB-EXT_ADFS -policyName RWP-REQ-ADFS_PROXYMEX -priority 110 -gotoPriorityExpression END -type REQUEST

Värt att tänka på kring detta är att klientcertifikat inte kommer fungera ihop med konfigurationen som den ser ut ovan. Min rekommendation om det behövs skulle vara att köra SSL_BRIDGE, men då behövs även WAP för den externa åtkomsten. Jag har inte tittat på att exemeplvis köra certifikatsbaserad autentisering i NetScaler för att sedan köra KCD mot ADFS, vilket kanske skulle fungera.
För att ovan konfiguration skall fungera behöver några saker göras på ADFS-servrarna.
Steg 1: Inaktivera SNI

# Skriv ner cert hash från först kommandot och använd vid det andra
# Körs nedan i powershell brukar det inte fungera, använd CMD
netsh http show sslcert
netsh http add sslcert ipport=0.0.0.0:443 certhash=<certHash> certstorename=MY sslctlstorename=AdfsTrustedDevices appid={5d89a20c-beab-4389-9447-324788eb944a}
netsh http delete sslcert hostnameport=adfs.domain.com:443

Steg 2: Inaktivera Extended Protection Token Check (annars fungerar inte WIA / SSO internt)

Set-ADFSProperties -ExtendedProtectionTokenCheck "None"

 

Tags : ADFS, Citrix, NetScaler

Add comment

Your comment will be revised by the site if needed.