RADIUS-Unterstützung für die Rewrite-Funktion
Die NetScaler-Ausdruckssprache umfasst Ausdrücke, mit denen Informationen aus RADIUS-Nachrichten in Anfragen und Antworten extrahiert und bearbeitet werden können. Mit diesen Ausdrücken können Sie die Rewrite-Funktion verwenden, um Teile einer RADIUS-Nachricht zu ändern, bevor sie an ihr Ziel gesendet wird. Ihre Rewrite-Richtlinien und -Aktionen können jeden Ausdruck verwenden, der für eine RADIUS-Nachricht geeignet oder relevant ist. Mit den verfügbaren Ausdrücken können Sie den RADIUS-Nachrichtentyp identifizieren, ein beliebiges Attributwertpaar (AVP) aus der Verbindung extrahieren und RADIUS-AVPs ändern. Sie können auch Richtlinienlabels für RADIUS-Verbindungen erstellen.
Sie können die neuen RADIUS-Ausdrücke in Rewrite-Regeln für eine Reihe von Zwecken verwenden. Sie könnten zum Beispiel:
- Entfernen Sie den Abschnitt Domäne\ des RADIUS-Benutzernamens AVP, um Single Sign-On (SSO) zu vereinfachen.
- Fügen Sie einen anbieterspezifischen AVP ein, z. B. das MSISDN-Feld, das im Betrieb von Telefongesellschaften verwendet wird, um Abonnenteninformationen zu enthalten.
Sie können auch Richtlinienlabels erstellen, um bestimmte Arten von RADIUS-Anfragen anhand einer Reihe von Richtlinien weiterzuleiten, die für diese Anfragen geeignet sind.
Hinweis:
RADIUS for Rewrite weist die folgenden Einschränkungen auf:
- Der NetScaler signiert keine neu geschriebenen RADIUS-Anfragen oder -Antworten erneut. Wenn der RADIUS-Authentifizierungsserver signierte RADIUS-Nachrichten benötigt, schlägt die Authentifizierung fehl.
- Die derzeit verfügbaren RADIUS-Ausdrücke funktionieren nicht mit RADIUS-IPv6-Attributen.
In der NetScaler-Dokumentation für Ausdrücke, die RADIUS unterstützen, wird davon ausgegangen, dass Sie mit der grundlegenden Struktur und dem Zweck der RADIUS-Kommunikation vertraut sind. Wenn Sie weitere Informationen zu RADIUS benötigen, lesen Sie in der RADIUS-Serverdokumentation nach oder suchen Sie online nach einer Einführung in das RADIUS-Protokoll.
Konfiguration von Rewrite-Richtlinien für RADIUS
Das folgende Verfahren verwendet die NetScaler-Befehlszeile, um eine Neuschreibaktion und -richtlinie zu konfigurieren und die Richtlinie an einen für das Umschreiben spezifischen globalen Bindungspunkt zu binden.
Gehen Sie wie folgt vor, um eine Rewrite-Aktion und -Richtlinie zu konfigurieren und die Richtlinie zu binden:
Geben Sie an der Eingabeaufforderung die folgenden Befehle ein:
add rewrite action <actName> <actType>
add rewrite policy <polName> <rule> <actName>
-
bind rewrite policy <polName> <priority> <nextExpr> -type <bindPoint>
wobei<bindPoint>
steht für einen der Rewrite-spezifischen globalen Bindungspunkte.
RADIUS-Ausdrücke für Rewrite
In einer Rewrite-Konfiguration können Sie die folgenden NetScaler-Ausdrücke verwenden, um auf verschiedene Teile einer RADIUS-Anfrage oder -Antwort zu verweisen.
Identifizieren der Art der Verbindung:
-
RADIUS.IS_CLIENT
Gibt TRUE zurück, wenn es sich bei der Verbindung um eine RADIUS-Clientnachricht (Anfrage) handelt.
-
RADIUS.IS_SERVER
Gibt TRUE zurück, wenn es sich bei der Verbindung um eine RADIUS-Servernachricht (Antwort) handelt.
Ausdrücke anfordern:
-
RADIUS.REQ.CODE
Gibt die Zahl zurück, die dem RADIUS-Anforderungstyp entspricht. Eine Ableitung der Klasse num_at. Eine RADIUS-Zugriffsanfrage würde beispielsweise 1 (eins) zurückgeben. Eine RADIUS-Buchhaltungsanfrage würde 4 zurückgeben.
-
RADIUS.REQ.LENGTH
Gibt die Länge der RADIUS-Anfrage einschließlich des Headers zurück. Eine Ableitung der Klasse num_at.
-
RADIUS.REQ.IDENTIFIER
Gibt den RADIUS-Anforderungsbezeichner zurück, eine Nummer, die jeder Anfrage zugewiesen wird und die es ermöglicht, die Anfrage mit der entsprechenden Antwort abzugleichen. Eine Ableitung der Klasse num_at.
-
RADIUS.REQ.AVP(<AVP Code No>).VALUE
Gibt den Wert des ersten Auftretens dieses AVP als Zeichenfolge vom Typ text_t zurück.
-
RADIUS.REQ.AVP(<AVP code no>).INSTANCE(instance number)
Gibt die angegebene Instanz des AVP als Zeichenfolge vom Typ raVP_T zurück. Ein bestimmter RADIUS-AVP kann in einer RADIUS-Nachricht mehrfach vorkommen. INSTANCE (0) gibt die erste Instanz zurück, INSTANCE (1) gibt die zweite Instanz zurück und so weiter, bis zu sechzehn Instanzen.
-
RADIUS.REQ.AVP(<AVP code no>).VALUE(instance number)
Gibt den Wert der angegebenen Instanz des AVP als Zeichenfolge vom Typ text_t zurück.
-
RADIUS.REQ.AVP(<AVP code no>).COUNT
Gibt die Anzahl der Instanzen eines bestimmten AVP in einer RADIUS-Verbindung als Ganzzahl zurück.
-
RADIUS.REQ.AVP(<AVP code no>).EXISTS
Gibt TRUE zurück, wenn der angegebene AVP-Typ in der Nachricht vorhanden ist, oder FALSE, wenn dies nicht der Fall ist.
Antwortausdrücke:
RADIUS-Antwortausdrücke sind identisch mit RADIUS-Anforderungsausdrücken, mit der Ausnahme, dass RES REQ ersetzt.
Typumwandlungen von AVP-Werten:
Der ADC unterstützt Ausdrücke zur Typisierung von RADIUS-AVP-Werten in die Datentypen Text, Integer, unsigned Integer, Long, unsigned Long, IPv4-Adresse, IPv6-Adresse, IPv6-Adresse, IPv6-Präfix und Zeit. Die Syntax ist dieselbe wie bei anderen NetScaler-Typecast-Ausdrücken.
Beispiel:
Der ADC unterstützt Ausdrücke zur Typisierung von RADIUS-AVP-Werten in die Datentypen Text, Integer, unsigned Integer, Long, unsigned Long, IPv4-Adresse, IPv6-Adresse, IPv6-Adresse, IPv6-Präfix und Zeit. Die Syntax ist dieselbe wie bei anderen NetScaler-Typecast-Ausdrücken.
RADIUS.REQ.AVP(8).VALUE(0).typecast_ip_address_at
<!--NeedCopy-->
Ausdrücke vom Typ AVP:
Der NetScaler unterstützt Ausdrücke zum Extrahieren von RADIUS-AVP-Werten mithilfe der in RFC2865 und RFC2866 beschriebenen zugewiesenen Integer-Codes. Sie können auch Text-Aliase verwenden, um dieselbe Aufgabe zu erledigen. Es folgen einige Beispiele.
-
RADIUS.REQ.AVP (1).VALUE or RADIUS.REQ.USERNAME.value
Extrahiert den RADIUS-Benutzernamenwert.
-
RADIUS.REQ.AVP (4). VALUE or RADIUS.REQ. ACCT\_SESSION\_ID.value
Extrahiert die accT-Session-ID AVP (Code 44) aus der Nachricht.
-
RADIUS.REQ.AVP (26). VALUE or RADIUS.REQ.VENDOR\_SPECIFIC.VALUE
Extrahiert den herstellerspezifischen Wert.
Die Werte der am häufigsten verwendeten RADIUS-AVPs können auf dieselbe Weise extrahiert werden.
RADIUS-Bindungspunkte:
Vier globale Bindungspunkte sind für Richtlinien verfügbar, die RADIUS-Ausdrücke enthalten.
-
RADIUS_REQ_OVERRIDE
Warteschlange für Richtlinien zur Priorität/Außerkraftsetzung von Anfragen.
-
RADIUS_REQ_DEFAULT
Standardwarteschlange für Anforderungsrichtlinien.
-
RADIUS_RES_OVERRIDE
Warteschlange für Antwortrichtlinien zur Priorität/Außerkraftsetzung.
-
RADIUS_RES_DEFAULT
Standardwarteschlange für Antwortrichtlinien.
Spezifische RADIUS-Rewrite-Ausdrücke:
-
RADIUS.NEW_AVP
Gibt den angegebenen RADIUS-AVP als Zeichenfolge zurück.
-
RADIUS.NEW_AVP_INTEGER32
Gibt den angegebenen RADIUS-AVP als Ganzzahl zurück.
-
RADIUS.NEW_AVP_UNSIGNED32
Gibt den angegebenen RADIUS-AVP als Ganzzahl ohne Vorzeichen zurück.
-
RADIUS.NEW_VENDOR_SPEC_AVP(<ID>, <definition>)
Fügt der Verbindung die angegebenen erweiterten herstellerspezifischen AVPs hinzu. Ersetzen Sie durch eine lange Zahl.
<ID>
<definition>
Ersetzen Sie den AVP durch eine Zeichenfolge, die die Daten enthält. -
RADIUS.REQ.AVP_START
Gibt die Position zwischen dem Ende des RADIUS-Headers und dem Anfang der AVPs zurück. Wird in Rewrite-Aktionen verwendet.
Beispiel:
add rewrite action insert1 insert_after radius.req.avp_start radius.new_avp(33, "NEW AVP")
<!--NeedCopy-->
-
RADIUS.REQ.AVP_END
Gibt die Position am Ende der Radius-Nachricht (oder mit anderen Worten am Ende aller AVPs) in der Radius-Nachricht zurück. Wird verwendet, wenn Rewrite-Aktionen ausgeführt werden.
Beispiel:
add rewrite action insert2 insert_before radius.req.avp_end "radius.new_avp(33, "NEW AVP")"
<!--NeedCopy-->
-
RADIUS.REQ.AVP_LIST
Gibt die Position am Anfang der AVPs in einer RADIUS-Nachricht und die Länge der RADIUS-Nachricht ohne den Header zurück. Mit anderen Worten, gibt alle AVPs in einer RADIUS-Nachricht zurück. Wird verwendet, um Rewrite-Aktionen auszuführen.
Beispiel:
add rewrite action insert3 insert_before_all radius.req.avp_list "radius.new_avp(33, "NEW AVP")" -search "avp(33)"
<!--NeedCopy-->
Gültige Rewrite-Action-Typenfür RADIUS:
Die Rewrite-Aktionstypen, die mit RADIUS-Ausdrücken verwendet werden können, sind:
- INSERT_AFTER
- INSERT_BEFORE
- INSERT_AFTER_ALL
- INSERT_BEFORE_ALL
- Löschen
- DELETE_ALL
- REPLACE
- REPLACE_ALL
Alle INSERT_ actions
können verwendet werden, um einen RADIUS-AVP in eine RADIUS-Verbindung einzufügen.
Anwendungsfälle
Im Folgenden finden Sie Anwendungsfälle für RADIUS mit Rewrite.
Den Benutzernamen AVP umschreiben
Um die Rewrite-Funktion so zu konfigurieren, dass die Zeichenfolge Domain\ string aus dem RADIUS-Benutzernamen AVP entfernt wird, erstellen Sie zunächst eine REWRITE-REPLACE-Aktion, wie im Beispiel unten gezeigt. Verwenden Sie die Aktion in einer Rewrite-Richtlinie, die alle RADIUS-Anforderungen auswählt. Binden Sie die Richtlinie an einen globalen Bindungspunkt. Wenn Sie dies tun, legen Sie die Priorität auf die entsprechende Stufe fest, damit alle Blockier- oder Ablehnungsrichtlinien zuerst wirksam werden. Stellen Sie jedoch sicher, dass alle Anfragen, die nicht blockiert oder abgelehnt wurden, neu geschrieben werden. Setzen Sie den Goto-Ausdruck (GoToPriorityExpr) auf NEXT, um die Richtlinienauswertung fortzusetzen, und hängen Sie die Richtlinie an die RADIUS_REQ_DEFAULT-Warteschlange an.
Beispiel:
add rewrite action rwActRadiusDomainDel replace radius.req.user_name q/RADIUS.NEW_AVP(1,RADIUS.REQ.USER_NAME.VALUE.AFTER_STR(" "))/
add rewrite policy RadiusRemoveDomainPol true rwActRadiusDomainDel
<!--NeedCopy-->
Hinweis:
Die Rewrite-Richtlinie für RADIUS gilt nicht für einen virtuellen Gateway-Server. Wenn ein virtueller Gateway-Server für den Lastenausgleich verwendet wird, muss RADIUS konfiguriert und die Rewrite-Richtlinie muss an einen virtuellen RADIUS-Lastenausgleichsserver gebunden werden.
Einen herstellerspezifischen AVP einfügen
Um die Rewrite-Aktion so zu konfigurieren, dass ein herstellerspezifisches AVP eingefügt wird, das den Inhalt des MSISDN-Feldes enthält, erstellen Sie zunächst eine INSERT-Aktion zum Umschreiben, die das MSISDN-Feld in die Anfrage einfügt. Verwenden Sie die Aktion in einer Rewrite-Richtlinie, die alle RADIUS-Anforderungen auswählt. Binden Sie die Richtlinie an eine globale Richtlinie, indem Sie die Priorität auf eine entsprechende Ebene und die anderen Parameter festlegen, wie im folgenden Beispiel gezeigt.
Beispiel:
add rewrite action rwActRadiusInsMSISDN insert_after radius.req.avp_start RADIUS.NEW_VENDOR_SPEC_AVP(<VENDOR ID>, "RADIUS.NEW_AVP(<Attribute Code>, <MSISDN>)")
add rewrite policy rwPolRadiusInsMSISDN true rwActRadiusInsMSISDN
bind rewrite global rwPolRadiusInsMSISDN 100 NEXT -type RADIUS_REQ_DEFAULT
<!--NeedCopy-->