Citrix ADC Ingress Controller

Konfigurieren von Firewall-Richtlinien für Webanwendungen mit dem Citrix Ingress Controller

Citrix stellt eine Custom Resource Definition (CRD) bereit, die als WAF-CRD für Kubernetes bezeichnet wird. Sie können die WAF-CRD verwenden, um die Firewall-Richtlinien der Webanwendung mit dem Citrix Ingress Controller auf dem Citrix ADC VPX, MPX, SDX und CPX zu konfigurieren. Die WAF-CRD ermöglicht die Kommunikation zwischen dem Citrix Ingress Controller und Citrix ADC zur Durchsetzung von Firewall-Richtlinien für Webanwendungen.

In einer Kubernetes-Bereitstellung können Sie eine Firewall-Richtlinie für Webanwendungen durchsetzen, um den Server mithilfe der WAF-CRD zu schützen. Weitere Informationen zur Webanwendungsfirewall finden Sie unter Sicherheit von Webanwendungen.

Mit der WAF-CRD können Sie die Firewall-Sicherheitsrichtlinie so konfigurieren, dass die folgenden Arten von Sicherheitsüberprüfungen für native Kubernetes-Anwendungen durchgesetzt werden.

Übliche Schutzmaßnahmen

  • Pufferüberlauf
  • Content-Typ
  • URL zulassen
  • URL blockieren
  • Cookie-Konsistenz
  • Kreditkarte

Schutz vor HTML

  • CSRF-Formularkennzeichnung (Cross Side Request Forgery)
  • Feld-Formate
  • Konsistenz der Formularfelder
  • Arten von Datei-Uploads
  • Cross-Site Scripting HTML
  • HTML SQL injection

JSON-Schutz

  • JSON-Diensteverweigerung
  • JSON-SQL-Einschleusung
  • JSON Cross-Site Scripting

XML-Schutz

  • Interoperabilität von XML-Webdiensten
  • XML-Anlage
  • Cross-Site Scripting XML
  • XML Diensteverweigerung
  • XML-Format
  • Validierung von XML-Nachrichten
  • XML SOAP-Fehlerfilter
  • XML SQL-Einschleusung

Je nach Art der Sicherheitsüberprüfungen können Sie die Metadaten angeben und die CRD-Attribute in der WAF-CRD-Datei .yaml verwenden, um die WAF-Richtlinie zu definieren.

WAF-CRD-Definition

Die WAF-CRD ist im GitHub-Repository des Citrix Ingress Controller unter waf-crd.yamlverfügbar. Die WAF-CRD bietet Attribute für die verschiedenen Optionen, die zum Definieren der Webanwendungs-Firewallrichtlinien auf Citrix ADC erforderlich sind.

WAF-CRD-Attribute

In der folgenden Tabelle sind die verschiedenen Attribute aufgeführt, die in der WAF-CRD bereitgestellt werden:

CRD-Attribut Beschreibung
commonchecks Gibt eine Liste allgemeiner Sicherheitsüberprüfungen an, die unabhängig vom Inhaltstyp angewendet werden.
block_urls Schützt URLs.
buffer_overflow Schützt den Pufferüberlauf.
content_type Schützt den Content-Typ.
htmlchecks Gibt eine Liste von Sicherheitsüberprüfungen an, die für HTML-Inhaltstypen angewendet werden sollen.
cross_site_scripting Verhindert Cross-Site-Scripting-Angriffe.
sql_injection Verhindert SQL-Injection-Angriffe.
form_field_consistency Verhindert Manipulation von Formularen.
csrf Verhindert Cross Side Request Forgery (CSRF) -Angriffe.
cookie_consistency Verhindert Cookie-Manipulation oder Sitzungsübernahme.
field_format Validiert das Absenden des Formulars.
fileupload_type Verhindert das Hochladen schädlicher Dateien.
jsonchecks Gibt Sicherheitsüberprüfungen für JSON-Inhaltstypen an.
xmlchecks Gibt Sicherheitsüberprüfungen für XML-Inhaltstypen an.
wsi Schützt die Interoperabilität von Webdiensten.
redirect_url Leitet die URL um, wenn die Sperrung beim Schutz aktiviert
servicenames Gibt die Dienste an, auf die die WAF-Richtlinien angewendet werden.
application_type Schützt Anwendungstypen.
signatures Gibt den Speicherort der externen Signaturdatei an.
html_error_object Gibt den Speicherort der angepassten Fehlerseite an, auf die reagiert werden soll, wenn HTML oder allgemeine Verstöße versucht werden.
xml_error_object Gibt den Speicherort der angepassten Fehlerseite an, auf die reagiert werden soll, wenn XML-Verletzungen versucht werden.
json_error_object Gibt den Speicherort der angepassten Fehlerseite an, die bei Versuchen mit JSON-Verstößen reagiert werden soll.
ip_reputation Aktiviert die IP-Reputationsfunktion.
target Bestimmt den von der WAF zu prüfenden Datenverkehr. Wenn Sie den Zielverkehr nicht angeben, wird standardmäßig der gesamte Datenverkehr überprüft.
paths Gibt die Liste der zu prüfenden HTTP-URLs an.
method Gibt die Liste der zu prüfenden HTTP-Methoden an.
header Gibt die Liste der zu prüfenden HTTP-Header an.

WAF-CRD bereitstellen

Führen Sie die folgenden Schritte aus, um die WAF-CRD bereitzustellen:

  1. Laden Sie die CRD herunter (waf-crd.yaml).

  2. Stellen Sie die WAF-CRD mit dem folgenden Befehl bereit:

    kubectl create -f waf-crd.yaml  
    

    Zum Beispiel:

    root@master:~# kubectl create -f waf-crd.yaml
    customresourcedefinition.apiextensions.k8s.io/wafpolicies.citrix.com created
    <!--NeedCopy-->
    

Wie schreibe ich eine WAF-Konfiguration

Nachdem Sie die von Citrix bereitgestellte WAF-CRD im Kubernetes-Cluster bereitgestellt haben, können Sie die Richtlinienkonfiguration der Webanwendungsfirewall in einer YAML-Datei definieren. Verwenden Sie in der .yaml-Datei waf im Feld kind. Fügen Sie im Abschnitt “Spezifikation” die WAF-CRD-Attribute basierend auf Ihren Anforderungen für die Richtlinienkonfiguration hinzu.

Nachdem Sie die .yaml-Datei bereitgestellt haben, wendet der Citrix Ingress Controller die WAF-Konfiguration auf dem Ingress Citrix ADC-Gerät an.

Im Folgenden finden Sie einige Beispiele für das Schreiben von Firewall-Richtlinien für Webanwendungen.

Schutz für Cross-Site Scripting und SQL-Injection-Angriffe**

Stellen Sie sich ein Szenario vor, in dem Sie eine Webanwendungs-Firewall-Richtlinie im Citrix ADC definieren und angeben möchten, um den Schutz für Cross-Site Scripting und SQL-Injection-Angriffe zu ermöglichen. Sie können eine .yaml-Datei mit dem Namen erstellen wafhtmlxsssql.yaml und die entsprechenden CRD-Attribute verwenden, um die WAF-Richtlinie wie folgt zu definieren:

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafhtmlxsssql
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_page_url: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        html:
          cross_site_scripting: "on"
          sql_injection: "on"
<!--NeedCopy-->

Regeln anwenden, um nur bekannte Inhaltstypen zuzulassen

Stellen Sie sich ein Szenario vor, in dem Sie eine Webanwendungs-Firewall-Richtlinie definieren möchten, die Regeln angibt, die nur bekannte Inhaltstypen zulassen und unbekannte Inhaltstypen blockieren. Erstellen Sie eine .yaml Datei mit dem Namen waf-contenttype.yaml und verwenden Sie die entsprechenden CRD-Attribute, um die WAF-Richtlinie wie folgt zu definieren:

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafcontenttype
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        common:
          content_type: "on"
    relaxations:
        common:
          content_type:
            types:
                - custom_cnt_type
                - image/crd

<!--NeedCopy-->

Schutz vor bekannten Angriffen

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zum Anwenden externer Signaturen. Sie können die neuesten WAF-Signaturen von Signature Location auf den lokalen Webserver kopieren und den Speicherort der kopierten Datei als signature_url angeben.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafhtmlsigxsssql
spec:
    servicenames:
        - frontend
    application_type: HTML
    signatures: "http://x.x.x.x/crd/sig.xml"
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        html:
          cross_site_scripting: "on"
          sql_injection: "on"

<!--NeedCopy-->

Schutz vor Header-Puffer-Overflow-Angriffen und Blockierung mehrerer Header

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zum Schutz des Pufferüberlaufs.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafhdrbufferoverflow
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        common:
          buffer_overflow: "on"
          multiple_headers:
            action: ["block", "log"]
    settings:
        common:
          buffer_overflow:
            max_cookie_len: 409
            max_header_len: 4096
            max_url_len: 1024

<!--NeedCopy-->

Verhindern Sie wiederholte Zugriffsversuche auf zufällige URLs auf einer Website

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zum Bereitstellen von URL-Filterregeln. Sie können unter allow_url URLs zum Zulassen hinzufügen und unter block_url**zu verweigernde URLs. Die URL kann auch ein regulärer Ausdruck sein.


apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafurlchecks
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    target:
        path:
            - /
    security_checks:
        common:
          allow_url: "on"
          block_url: "on"
    relaxations:
        common:
          allow_url:
            urls:
                - payment.php
                - cover.php
    enforcements:
        common:
          block_url:
            urls:
                - "^[^?]\*(passwd|passwords?)([.][^/?]\*)?([?].\*)?$"
                - "^[^?]\*(htaccess|access_log)([.][^/?]\*)?([~])?([?].\*)?$"
<!--NeedCopy-->

Verhindern Sie den Verlust sensibler Daten

Datenschutzverletzungen beinhalten den Verlust sensibler Daten wie Kreditkarte und Sozialversicherungsnummer (SSN). Sie können benutzerdefinierte Regexes für die vertraulichen Daten im Abschnitt Sichere Objekte der Durchsetzung hinzufügen.

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration, um den Verlust vertraulicher Daten zu verhindern.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafdataleak
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        common:
          credit_card: "on"
    settings:
        common:
          credit_card:
            card_type: ["visa","amex"]
            max_allowed: 1
            card_xout: "on"
            secure_logging: "on"
    enforcements:
        common:
          safe_object:
            - rule:
                name: aadhar
                expression: "[1-9]{4,4}\s[1-9]{4,4}\s[1-9]{4,4}"
                max_match_len: 19
                action: ["log","block"]
<!--NeedCopy-->

Schützen Sie HTML-Formulare vor CSRF- und Form-Attacken

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zum Schutz von HTML-Formularen vor CSRF- und Formangriffen.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafforms
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_error_object: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        html:
          cross_site_scripting: "on"
          sql_injection: "on"
          form_field_consistency:
            action: ["log","block"]
          csrf: "on"

<!--NeedCopy-->

Schützen Sie Formulare und Kopfzeilen

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zum Schutz von Formularen und Headern.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafhdrforms
spec:
    servicenames:
        - frontend
    application_type: HTML
    html_page_url: "http://x.x.x.x/crd/error_page.html"
    security_checks:
        common:
          buffer_overflow: "on"
          multiple_headers:
            action: ["block", "log"]
        html:
          cross_site_scripting: "on"
          sql_injection: "on"
          form_field_consistency:
            action: ["log","block"]
          csrf: "on"
    settings:
        common:
          buffer_overflow:
            max_cookie_len: 409
            max_header_len: 4096
            max_url_len: 1024
    ip_reputation: on


<!--NeedCopy-->

Grundlegende WAF-Sicherheitsüberprüfungen aktivieren

Die grundlegenden Sicherheitsüberprüfungen sind erforderlich, um jede Anwendung mit minimalen Auswirkungen auf die Leistung zu schützen. Es ist keine Sitzungserfassung erforderlich. Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zur Aktivierung grundlegender WAF-Sicherheitsüberprüfungen.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafbasic
spec:
    servicenames:
        - frontend
    security_checks:
        common:
          allow_url: "on"
          block_url: "on
          buffer_overflow: "on"
          multiple_headers:
            action: ["block", "log"]
        html:
          cross_site_scripting: "on"
          field_format: "on"
          sql_injection: "on"
          fileupload_type: "on"
        json:
          dos: "on"
          sql_injection: "on"
          cross_site_scripting: "on"
        xml:
          dos: "on"
          wsi: "on"
          attachment: "on"
          format: "on"
    relaxations:
        common:
          allow_url:
            urls:
                - "^[^?]+[.](html?|shtml|js|gif|jpg|jpeg|png|swf|pif|pdf|css|csv)$"
                - "^[^?]+[.](cgi|aspx?|jsp|php|pl)([?].*)?$"

<!--NeedCopy-->

Erweiterte WAF-Sicherheitsüberprüfung aktivieren

Erweiterte Sicherheitsprüfungen wie Cookie-Konsistenz, das Schließen von URLs, Feldkonsistenz und CSRF sind ressourcenintensiv (CPU und Speicher), da sie eine WAF-Sitzung erfordern. Wenn beispielsweise ein Formular durch die WAF geschützt ist, werden Formularfeldinformationen in der Antwort im Systemspeicher beibehalten. Wenn der Client das Formular in der nächsten Anforderung absendet, wird es auf Inkonsistenzen geprüft, bevor die Informationen an den Webserver gesendet werden. Dieser Vorgang wird als Sitzungseinteilung bezeichnet. Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zur Aktivierung erweiterter WAF-Sicherheitsüberprüfungen.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafadvanced
spec:
    servicenames:
        - frontend
    security_checks:
        common:
          allow_url: "on"
          block_url: "on"
          buffer_overflow: "on"
          content_type: "on"
          cookie_consistency: "on"
          multiple_headers:
            action: ["log"]
        html:
          cross_site_scripting: "on"
          field_format: "on"
          sql_injection: "on"
          form_field_consistency: "on"
          csrf: "on"
          fileupload_type: "on"
        json:
          dos: "on"
          sql_injection: "on"
          cross_site_scripting: "on"
        xml:
          dos: "on"
          wsi: "on"
          validation: "on"
          attachment: "on"
          format: "on"
    settings:
        common:
          allow_url:
            closure: "on"
<!--NeedCopy-->

IP-Reputation aktivieren

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration, mit der IP-Reputation Anfragen ablehnen können, die von IP-Adressen mit schlechtem Ruf stammen.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafiprep
spec:
    application_type: html
    servicenames:
        - frontend
    ip_reputation: "on"

<!--NeedCopy-->

IP-Reputation ermöglichen, Anfragen einer bestimmten Kategorie abzulehnen

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration, mit der die IP-Reputation Anfragen von bestimmten Bedrohungskategorien ablehnen kann.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafiprepcategory
spec:
    application_type: html
    servicenames:
        - frontend
    ip_reputation:
        action: block
        threat-categories:
            - SPAM_SOURCES
            - WINDOWS_EXPLOITS
            - WEB_ATTACKS
            - BOTNETS
            - SCANNERS
            - DOS
            - REPUTATION
            - PHISHING
            - PROXY
            - NETWORK
            - CLOUD_PROVIDERS
            - MOBILE_THREATS

<!--NeedCopy-->

Schützen Sie JSON-Anwendungen vor Denial-of-Service-Angriffen

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zum Schutz der JSON-Anwendungen vor Denial-of-Service-Angriffen.

metadata:
    name: wafjsondos
spec:
    servicenames:
        - frontend
    application_type: JSON
    json_error_object: "http://x.x.x.x/crd/error_page.json"
    security_checks:
        json:
          dos: "on"
    settings:
        json:
          dos:
            container:
              max_depth: 2
            document:
              max_len: 20000000
            array:
              max_len: 5
            key:
              max_count: 10000
              max_len: 12
            string:
              max_len: 1000000


<!--NeedCopy-->

Schützen Sie RESTful APIs

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zum Schutz von RESTful-APIs vor SQL-Injection, Cross-Site Scripting und Denial-of-Service-Angriffen. Hier basiert die Back-End-Anwendung oder der Dienst ausschließlich auf RESTful-APIs.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafjson
spec:
    servicenames:
        - frontend
    application_type: JSON
    json_error_object: "http://x.x.x.x/crd/error_page.json"
    security_checks:
        json:
          dos: "on"
          sql_injection:
            action: ["block"]
          cross_site_scripting: "on"
    settings:
        json:
          dos:
            container:
              max_depth: 5
            document:
              max_len: 20000000
            array:
              max_len: 10000
            key:
              max_count: 10000
              max_len: 128
            string:
              max_len: 1000000

<!--NeedCopy-->

Schützen Sie XML-Anwendungen vor Denial-of-Service-Angriffen

Im Folgenden finden Sie ein Beispiel für eine WAF-CRD-Konfiguration zum Schutz der XML-Anwendungen vor DoS-Angriffen.

apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafxmldos
spec:
    servicenames:
        - frontend
    application_type: XML
    xml_error_object: "http://x.x.x.x/crd/error_page.xml"
    security_checks:
        xml:
          dos: "on"
    settings:
        xml:
          dos:
            attribute:
                max_attributes: 1024
                max_name_len: 128
                max_value_len: 128
            element:
                max_elements: 1024
                max_children: 128
                max_depth: 128
            file:
                max_size: 2123
                min_size: 9
            entity:
                max_expansions: 512
                max_expansions_depth: 9
            namespace:
                max_namespaces: 16
                max_uri_len: 256
            soaparray:
                max_size: 1111
            cdata:
                max_size: 65

<!--NeedCopy-->

Schützen Sie XML-Anwendungen vor Sicherheitsangriffen

Dieses Beispiel stellt eine WAF-CRD-Konfiguration zum Schutz von XML-Anwendungen vor den folgenden Sicherheitsangriffen bereit:

  • SQL Injection
  • Cross-Site Scripting
  • Validierung (Schema oder Nachricht)
  • Format
  • Diensteverweigerung
  • Webdienst-Interoperabilität (WSI)
apiVersion: citrix.com/v1
kind: waf
metadata:
    name: wafxml
spec:
    servicenames:
        - frontend
    application_type: XML
    xml_error_object: "http://x.x.x.x/crd/error_page.json"
    security_checks:
        xml:
          dos: "on"
          sql_injection: "on"
          cross_site_scripting: "off"
          wsi:
            action: ["block"]
          validation: "on"
          attachment: "on"
          format:
            action: ["block"]
    settings:
        xml:
          dos:
            attribute:
                max_attributes: 1024
                max_name_len: 128
                max_value_len: 128
            element:
                max_elements: 1024
                max_children: 128
                max_depth: 128
            file:
                max_size: 2123
                min_size: 9
            entity:
                max_expansions: 512
                max_expansions_depth: 9
            namespace:
                max_namespaces: 16
                max_uri_len: 256
            soaparray:
                max_size: 1111
            cdata:
                max_size: 65
          wsi:
            checks: ["R1000","R1003"]
          validation:
            soap_envelope: "on"
            validate_response: "on"
          attachment:
            url:
                max_size: 1111
            content_type:
                value: "crd_test"

<!--NeedCopy-->
Konfigurieren von Firewall-Richtlinien für Webanwendungen mit dem Citrix Ingress Controller