ADC

Konfigurieren und Verwenden von Variablen

Sie müssen zuerst eine Variable erstellen und dann einen Wert zuweisen oder die Operation angeben, die für die Variable ausgeführt werden muss. Nachdem Sie diese Vorgänge ausgeführt haben, können Sie die Zuweisung als Richtlinienaktion verwenden.

Hinweis: Nach der Konfiguration können die Einstellungen einer Variablen nicht geändert oder zurückgesetzt werden. Wenn die Variable geändert werden muss, müssen die Variable und alle Verweise auf die Variable (Ausdrücke und Zuweisungen) gelöscht werden. Die Variable kann dann mit neuen Einstellungen erneut hinzugefügt werden, und die Verweise (Ausdrücke und Zuweisungen) können erneut hinzugefügt werden.

So konfigurieren Sie Variablen mithilfe der Befehlszeilenschnittstelle

  1. Erstellen Sie eine Variable.
add ns variable <name> -type <string> [-scope global] [-ifFull ( undef | lru )] [-ifValueTooBig ( undef | truncate )] [-ifNoValue ( undef | init )] [-init <string>] [-expires <positive_integer>] [-comment <string>]
<!--NeedCopy-->

Hinweis: Eine Beschreibung der Befehlsparameter finden Sie auf der Manpage „man add ns variable“.

Beispiel 1: Erstellen Sie eine Ulang-Variable mit dem Namen „my_counter“ und initialisieren Sie sie auf 1.

add ns variable my_counter –type ulong -init 1
<!--NeedCopy-->

Beispiel 2: Erstellen Sie eine Map mit dem Namen „user_privilege_map“. Die Map wird Schlüssel mit einer maximalen Länge von 15 Zeichen und Textwerte mit einer maximalen Länge von 10 Zeichen mit einem Maximum von 10000 Einträgen enthalten.

add ns variable user_privilege_map -type map(text(15),text(10),10000)
<!--NeedCopy-->

Hinweis: Wenn die Map 10000 nicht abgelaufene Einträge enthält, wird bei Zuweisungen für neue Schlüssel einer der am wenigsten verwendeten Einträge wiederverwendet. Standardmäßig initialisiert ein Ausdruck, der versucht, einen Wert für einen nicht existierenden Schlüssel abzurufen, einen leeren Textwert.

Weisen Sie der Variablen den Wert zu, oder geben Sie die Operation an, die für die Variable ausgeführt werden soll. Dies geschieht, indem eine Aufgabe erstellt wird.

add ns assignment <name> -variable <expression> [-set <expression> | -add <expression> | -sub <expression> | -append <expression> | -clear] [-comment <string>]
<!--NeedCopy-->

Hinweis: Eine Variable wird mithilfe des Variablenselektors ($) referenziert. Daher wird $variable1 verwendet, um auf Text- oder Ulang-Variablen zu verweisen. In ähnlicher Weise wird $variable2 [key-expression] verwendet, um auf Map-Variablen zu verweisen.

Beispiel 1: Definieren Sie eine Zuweisung mit dem Namen „inc_my_counter“, die automatisch 1 zur Variablen „my_counter“ hinzufügt.

add ns assignment inc_my_counter -variable $my_counter -add 1
<!--NeedCopy-->

Beispiel 2: Definieren Sie eine Zuweisung mit dem Namen „set_user_privilege“, die der Variablen „user_privilege_map“ einen Eintrag für die IP-Adresse des Clients mit dem vom HTTP-Callout „get_user_privilege“ zurückgegebenen Wert hinzufügt.

add ns assignment set_user_privilege -variable $user_privilege_map[client.ip.src.typecast_text_t] -set sys.http.callout(get_user_privilege)
<!--NeedCopy-->

Hinweis: Wenn für diesen Schlüssel bereits ein Eintrag vorhanden ist, wird der Wert ersetzt. Andernfalls wird ein neuer Eintrag für den Schlüssel und den Wert hinzugefügt. Basierend auf der vorherigen Deklaration für user_privilege_map wird, falls die Map bereits 10000 Einträge enthält, einer der zuletzt verwendeten Einträge für den neuen Schlüssel und Wert wiederverwendet.

  1. Rufen Sie die Variablenzuweisung in einer Richtlinie auf.

    Es gibt zwei Funktionen, die mit Kartenvariablen arbeiten können.

    • $name.valueExists (Schlüsselausdruck). Gibt „True“ zurück, wenn die Map, die durch den Schlüsselausdruck ausgewählt wurde, einen Wert enthält. Andernfalls wird false zurückgegeben. Diese Funktion aktualisiert die Ablaufzeit- und LRU-Informationen, wenn der Karteneintrag existiert, erstellt jedoch keinen neuen Karteneintrag, wenn der Wert nicht existiert.

    • $name.valueCount. Gibt die Anzahl der Werte zurück, die die Variable derzeit enthält. Dies ist die Anzahl der Einträge in einer Map. Für eine Singleton-Variable ist dies 0, wenn die Variable nicht initialisiert ist, oder andernfalls 1.

    Beispiel: Rufen Sie die Zuweisung mit dem Namen „set_user_privilege“ mit einer Komprimierungsrichtlinie auf.

add cmp policy set_user_privilege_pol -rule $user_privilege_map.valueExists(client.ip.src.typecast_text_t).not -resAction set_user_privilege
<!--NeedCopy-->

Anwendungsfall zum Einfügen eines HTTP-Headers in die Antwortseite

Das folgende Beispiel zeigt ein Beispiel für eine Singleton-Variable.

Fügen Sie eine Singleton-Variable vom Typ Text hinzu. Diese Variable kann maximal 100 Byte Daten enthalten.

add ns variable http_req_data -type text(100) -scope transaction
<!--NeedCopy-->

Fügen Sie eine Zuweisungsaktion hinzu, die verwendet wird, um die HTTP-Anforderungsdaten in der Variablen zu speichern.

add ns assignment set_http_req_data -variable $http_req_data -set http.req.body(100)
<!--NeedCopy-->

Fügen Sie eine Rewrite-Aktion hinzu, um den HTTP-Header einzufügen, dessen Wert aus der Variablen abgerufen wird.

add rewrite action act_ins_header insert_http_header user_name $http_req_data.after_str("user_name").before_str("password")
<!--NeedCopy-->

Fügen Sie eine Rewrite-Richtlinie hinzu, die während der Anfrage ausgewertet wird, und führen Sie Zuweisungsmaßnahmen zum Speichern von Daten durch. Wenn wir diese Richtlinie erreichen, ergreifen wir eine Zuweisungsaktion und speichern die Daten in der Variablen ns (http_req_data)

add rewrite policy pol_set_variable true set_http_req_data

bind rewrite global pol_set_variable 10 -type req_dEFAULT
<!--NeedCopy-->

Fügen Sie eine Rewrite-Policy hinzu, die in der Antwortzeit ausgewertet wird, und fügen Sie der Antwort einen HTTP-Header hinzu.

add rewrite policy pol_ins_header true act_ins_header

bind rewrite global pol_ins_header 10 -type res_dEFAULT
<!--NeedCopy-->

Aktion „Zuweisung“

In einer NetScaler-Appliance wird eine an die Richtlinie gebundene Zuweisungsaktion ausgelöst, wenn die Richtlinienregel als wahr ausgewertet wird. Die Aktion aktualisiert den Wert in der Variablen, der bei nachfolgenden Bewertungen der Policy-Regeln verwendet werden kann. Auf diese Weise kann dieselbe Variable aktualisiert und für nachfolgende politische Bewertungen in derselben Funktion verwendet werden. Bisher führte die Appliance Zuweisungsaktionen erst aus, nachdem alle Richtlinien in der Funktion ausgewertet wurden und die Richtlinien der zugehörigen Zuweisungsaktionen als wahr bewertet wurden. Daher kann der durch die Zuweisungsaktion festgelegte Variablenwert bei den nachfolgenden Bewertungen der Richtlinienregeln innerhalb des Features nicht verwendet werden.

Diese Funktionalität lässt sich anhand eines Anwendungsfalls besser verstehen, der die Zugriffsliste für Clients auf einer NetScaler-Appliance steuert. Die Zugriffsentscheidung wird von einem separaten Webservice bereitgestellt. Die Anfrage GET /client-access?<client-IP-address> gibt eine Antwort mit “BLOCK” oder “ALLOW” im Text zurück. Das HTTP-Callout ist so konfiguriert, dass es die IP-Adresse des Clients enthält, die einer eingehenden Anfrage zugeordnet ist. Wenn die NetScaler-Appliance eine Anfrage von einem Client empfängt, generiert die Appliance die Callout-Anforderung und sendet sie an den Callout-Server, der eine Datenbank mit IP-Adressen auf der schwarzen Liste hostet, und einen HTTP-Callout-Agent, der überprüft, ob die IP-Adresse des Clients in der Datenbank aufgeführt ist. Der HTTP-Callout-Agent empfängt die Callout-Anforderung, überprüft, ob die IP-Adresse des Clients aufgeführt ist, und sendet eine Antwort. Die Antwort ist ein Statuscode 200, 302 zusammen mit „BLOCK“ oder „ALLOW“ im Text. Basierend auf dem Statuscode führt die Appliance die Richtlinienbewertung durch. Wenn die Richtlinienauswertung zutrifft, wird die Zuweisungsaktion sofort ausgelöst und die Aktion setzt den Wert auf die Variable. Die Appliance verwendet diesen Variablenwert und legt ihn für die nachfolgende Richtlinienbewertung im selben Modul fest.

Anwendungsfall für die Konfiguration einer Zuweisungsaktion

Gehen Sie wie folgt vor, um die Zuweisungsaktion zu konfigurieren und Variablen für nachfolgende Richtlinien zu verwenden:

  1. Die Zugriffsentscheidung wird von einem separaten Webservice bereitgestellt, wobei die Anfrage eine Antwort mit BLOCK oder ALLOW im Text zurückgibt.

    GET /url-service>/url-allowed?<URL path>

  2. Richten Sie eine Map-Variable ein, um die Zugriffsentscheidungen für URLs zu speichern.

    add ns variable url_list_map -type 'map(text(1000),text(10),10000)'

  3. Richten Sie ein HTTP-Callout ein, um die Zugriffsanfrage an den Webservice zu senden.

    add policy httpCallout url_list_callout -vserver url_vs -returnType TEXT -urlStemExpr '"/url-allowed?" + HTTP.REQ.URL.PATH' -resultExpr 'HTTP.RES.BODY(10)'

  4. Richten Sie eine Zuweisungsaktion ein, um das Callout aufzurufen, um die Zugriffsentscheidung abzurufen, und weisen Sie es dem Map-Eintrag für die URL zu.

    add ns assignment client_access_assn -variable '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T]' -set SYS.HTTP_CALLOUT(client_access_callout)

  5. Richten Sie eine Responder-Aktion ein, um eine 403-Antwort zu senden, wenn eine URL-Anfrage blockiert wird.

    add responder action url_list_block_act respondwith '"HTTP/1.1 403 Forbidden\\r\\n\\r\\n"'

  6. Richten Sie eine Responder-Richtlinie ein, um den Map-Eintrag für die URL festzulegen, falls dieser noch nicht festgelegt ist. Bei der Erweiterung der Sofortmaßnahme wird der Karteneintragswert bei der Bewertung dieser Richtlinie festgelegt. Vor der Erweiterung wurde die Zuweisung erst durchgeführt, nachdem alle Responder-Richtlinien bewertet wurden. Die Entscheidung wird von einem separaten Webservice bereitgestellt.

    add responder policy url_list_assn_pol '!$url_list_map.VALUEEXISTS(HTTP.REQ.URL.PATH)' url_list_assn

  7. Richten Sie eine Responder-Richtlinie ein, um den Zugriff auf eine URL zu blockieren, wenn ihr Map-Eintragswert BLOCK ist. Mit der Erweiterung der sofortigen Aktion steht der in der vorherigen Richtlinie festgelegte Karteneintrag für die Verwendung in dieser Richtlinie zur Verfügung. Vor der Erweiterung war der Karteneintrag zu diesem Zeitpunkt noch nicht gesetzt.

    add responder policy client_access_block_pol '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T] == "BLOCK"' client_access_block_act

  8. Binden Sie die Responder-Richtlinien an den virtuellen Server. Hinweis: Wir können die Richtlinien nicht global binden, da wir sie nicht für den HTTP-Callout auf einem separaten virtuellen Server ausführen möchten.

    bind lb vserver vs -policyName client_access_assn_pol -priority 10 -gotoPriorityExpression NEXT -type REQUEST bind lb vserver vs -policyName client_access_block_pol -priority 20 -gotoPriorityExpression END -type REQUEST

So konfigurieren Sie Variablen mithilfe des Konfigurationsdienstprogramms

  1. Navigieren Sie zu AppExpert > NS-Variablen, um eine Variable zu erstellen.
  2. Navigieren Sie zu AppExpert > NS Assignments, um der Variablen Werte zuzuweisen.
  3. Navigieren Sie zu dem entsprechenden Feature-Bereich, in dem Sie die Zuweisung als Aktion konfigurieren möchten.
Konfigurieren und Verwenden von Variablen