ADC

Konfigurieren und Verwenden von Variablen

Sie müssen zuerst eine Variable erstellen und dann einen Wert zuweisen oder den Vorgang angeben, der 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 Referenzen auf die Variable (Ausdrücke und Zuweisungen) gelöscht werden. Die Variable kann dann mit neuen Einstellungen neu hinzugefügt werden und die Referenzen (Ausdrücke und Zuweisungen) können neu hinzugefügt werden.

So konfigurieren Sie Variablen mit 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: Beschreibung der Befehlsparameter finden Sie auf der Manpage man add ns variable.

Beispiel 1: Erstellen Sie eine ulong-Variable namens my_counter und initialisieren Sie sie mit 1.

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

Beispiel 2: Erstellen Sie eine Karte mit dem Namen user_privilege_map. Die Karte enthält Schlüssel mit einer maximalen Länge von 15 Zeichen und Textwerte mit einer maximalen Länge von 10 Zeichen, mit maximal 10000 Einträgen.

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

Hinweis: Wenn die Karte 10000 nicht abgelaufene Einträge enthält, verwenden Zuweisungen für neue Schlüssel einen der zuletzt verwendeten Einträge. Standardmäßig initialisiert ein Ausdruck, der versucht, einen Wert für einen nicht vorhandenen Schlüssel zu erhalten, einen leeren Textwert.

Weisen Sie den Wert zu, oder geben Sie den Vorgang an, der für die Variable ausgeführt werden soll. Dies geschieht durch Erstellen einer Zuweisung.

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

Hinweis: Eine Variable wird mit dem Variablenselektor ($) referenziert. Daher wird $variable1 verwendet, um auf Text- oder ulong-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 Wert hinzufügt, der von dem HTTP-Callout get_user_privilege zurückgegeben wird.

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 bereits ein Eintrag für diesen Schlüssel vorhanden ist, wird der Wert ersetzt. Andernfalls wird ein neuer Eintrag für Schlüssel und Wert hinzugefügt. Basierend auf der vorherigen Deklaration für user_privilege_map, wenn die Karte bereits 10000 Einträge enthält, wird 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 auf Kartenvariablen arbeiten können.

    • $name.valueExists(key-expression). Gibt true zurück, wenn ein Wert in der vom Schlüsselausdruck ausgewählten Karte vorhanden ist. Andernfalls wird false zurückgegeben. Diese Funktion aktualisiert die Ablauf- und LRU-Informationen, wenn der Karteneintrag vorhanden ist, erstellt aber keinen neuen Karteneintrag, wenn der Wert nicht vorhanden ist.

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

    Beispiel: Rufen Sie die Zuweisung 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-->

Verwenden Sie Case, um HTTP-Header in die Antwortseite einzufügen

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 Bytes Daten enthalten.

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

Fügen Sie eine Zuweisungsaktion hinzu, mit der die HTTP-Anforderungsdaten in der Variablen gespeichert werden.

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

Fügen Sie eine Rewrite-Aktion zum Einfügen des HTTP-Headers hinzu, 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 in der Anforderungszeit ausgewertet wird, und ergreifen Sie Zuweisungsaktionen, um Daten zu speichern. Wenn wir diese Richtlinie treffen, ergreifen wir Zuweisungsaktion und speichern die Daten in der ns-Variable (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-Richtlinie hinzu, die in der Antwortzeit ausgewertet wird, und fügen Sie einen HTTP-Header in der Antwort hinzu.

add rewrite policy pol_ins_header true act_ins_header

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

Zuweisungsaktion

In einer Citrix ADC Appliance wird eine an die Richtlinie gebundene Zuweisungsaktion ausgelöst, wenn die Richtlinienregel als true ausgewertet wird. Die Aktion aktualisiert den Wert in der Variablen, der in nachfolgenden Richtlinienregelauswertungen verwendet werden kann. Auf diese Weise kann dieselbe Variable aktualisiert und für nachfolgende Richtlinienauswertungen in derselben Funktion verwendet werden. Zuvor hat die Appliance Zuweisungsaktionen nur ausgeführt, nachdem alle Richtlinien im Feature ausgewertet wurden, wenn die Richtlinien der zugeordneten Zuweisungsaktionen auf true ausgewertet wurden. Daher kann der von der Zuweisungsaktion festgelegte Variablenwert nicht in den nachfolgenden Richtlinienregelauswertungen innerhalb des Features verwendet werden.

Diese Funktionalität kann mit einem Anwendungsfall besser verstanden werden, der die Zugriffsliste für Clients auf einer Citrix ADC Appliance steuert. Die Zugriffsentscheidung wird von einem separaten Webdienst bereitgestellt, mit der Anfrage GET /client-access?<client-IP-address>, die eine Antwort mit BLOCK oder ALLOW im Körper zurückgibt. Das HTTP-Callout ist so konfiguriert, dass sie die IP-Adresse des Clients enthält, der einer eingehenden Anforderung zugeordnet ist. Wenn die Citrix ADC Appliance eine Anforderung von einem Client empfängt, generiert die Appliance die Callout-Anforderung und sendet sie an den Callout-Server, der eine Datenbank mit IP-Adressen in der Sperrliste hostet, und einen HTTP-Callout-Agent, der prü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 aufgelistet ist, und sendet eine Antwort. Die Antwort ist ein Statuscode, 200, 302 zusammen mit BLOCK oder ALLOW im Körper. Basierend auf dem Statuscode führt die Appliance die Richtlinienbewertung durch. Wenn die Richtlinienbewertung wahr ist, wird die Zuweisungsaktion sofort ausgelöst, und die Aktion setzt den Wert auf die Variable. Die Appliance verwendet diesen Variablenwert für die nachfolgende Richtlinienbewertung im selben Modul und legt ihn fest.

Anwendungsfall zum Konfigurieren der Zuweisungsaktion

Führen Sie die folgenden Schritte aus, um die Zuweisungsaktion zu konfigurieren und die Variable für nachfolgende Richtlinien zu verwenden:

  1. Die Zugriffsentscheidung wird von einem separaten Webdienst bereitgestellt, mit der Anforderung, die eine Antwort mit BLOCK oder ALLOW im Körper zurückgibt.

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

  2. Richten Sie eine Zuordnungsvariable 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 Zugriffsanforderung an den Webdienst 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 sie dem Zuordnungseintrag 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-Anforderung blockiert ist.

    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 Zuordnungseintrag für die URL festzulegen, wenn dieser nicht bereits festgelegt ist. Mit der sofortigen Aktionsverbesserung wird der Karteneintragswert festgelegt, wenn diese Richtlinie ausgewertet wird. Vor der Erweiterung wurde die Zuweisung erst durchgeführt, wenn alle Responder-Richtlinien ausgewertet wurden, wird die Entscheidung durch einen separaten Webdienst 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 der Karteneintragswert BLOCK ist. Mit der sofortigen Aktionsverbesserung ist der von der vorherigen Richtlinie festgelegte Karteneintrag für die Verwendung in dieser Richtlinie verfügbar. Vor der Erweiterung wäre der Karteneintrag an diesem Punkt noch aufgehoben.

    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 das 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 mit dem Konfigurationsdienstprogramm

  1. Navigieren Sie zu AppExpert > NS-Variablen, um eine Variable zu erstellen.
  2. Navigieren Sie zu AppExpert > NS-Zuweisungen, 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