Ingress Controller de Citrix ADC

Configurar directivas de firewall de aplicaciones web con el Citrix Ingress Controller

Citrix proporciona una definición de recursos personalizada (CRD) denominada CRD de WAF para Kubernetes. Puede usar la CRD de WAF para configurar las directivas de firewall de aplicaciones web con el Citrix Ingress Controller de Citrix en Citrix ADC VPX, MPX, SDX y CPX. La CRD de WAF permite la comunicación entre el Citrix Ingress Controller de Citrix y Citrix ADC para aplicar las directivas de firewall de aplicaciones web.

En una implementación de Kubernetes, puede aplicar una directiva de firewall de aplicaciones web para proteger el servidor mediante la CRD de WAF. Para obtener más información sobre el firewall de aplicaciones web, consulte Seguridad de aplicaciones web.

Con el CRD de WAF, puede configurar la directiva de seguridad del firewall para aplicar los siguientes tipos de comprobaciones de seguridad para las aplicaciones nativas de Kubernetes.

Protecciones comunes

  • Desbordamiento de
  • Tipo de contenido
  • Permitir URL
  • URL de bloqueo
  • Consistencia de cookies
  • Tarjeta de crédito

Protecciones HTML

  • Etiquetado de formularios CSRF (falsificación de solicitud cruzada)
  • formatos de campo
  • Coherencia de los campos
  • Tipos de carga de archivos
  • Scripts HTML entre sitios
  • Inyección HTML SQL

Protecciones JSON

  • Denegación de servicio JSON
  • Inyección JSON SQL
  • Scripting entre sitios JSON

Protecciones XML

  • Interoperabilidad de servicios web XML
  • Datos adjuntos XML
  • Scripting XML entre sitios
  • Denegación de servicio XML
  • Formato XML
  • Validación de mensajes XML
  • Filtrado de errores XML SOAP
  • Inyección XML SQL

Según el tipo de comprobaciones de seguridad, puede especificar los metadatos y utilizar los atributos de CRD en el archivo.yaml de WAF CRD para definir la directiva de WAF.

Definición de WAF CRD

La CRD de WAF está disponible en el repositorio de GitHub Citrix Ingress Controller en waf-crd.yaml. La CRD de WAF proporciona atributos para las diversas opciones que se requieren para definir las directivas de firewall de aplicaciones web en Citrix ADC.

Atributos de WAF CRD

En la siguiente tabla se enumeran los diversos atributos proporcionados en la CRD de WAF:

Atributo CRD Descripción
commonchecks Especifica una lista de comprobaciones de seguridad comunes, que se aplican independientemente del tipo de contenido.
block_urls Protege las URL.
buffer_overflow Protege el desbordamiento del buffer
content_type Protege el tipo de contenido.
htmlchecks Especifica una lista de comprobaciones de seguridad que se aplicarán a los tipos de contenido HTML.
cross_site_scripting Evita los ataques de scripts entre sitios.
sql_injection Previene los ataques de inyección SQL.
form_field_consistency Evita la manipulación de formularios.
csrf Previene los ataques de falsificación de solicitudes cruzadas (CSRF).
cookie_consistency Evita la manipulación cookie o la toma de control de la sesión.
field_format Valida el envío del formulario.
fileupload_type Impide la carga de archivos maliciosos.
jsonchecks Especifica comprobaciones de seguridad para los tipos de contenido JSON
xmlchecks Especifica comprobaciones de seguridad para los tipos de contenido XML.
wsi Protege la interoperabilidad de los servicios web.
redirect_url Redirige la URL cuando el bloqueo está habilitado en la protección.
servicenames Especifica los servicios a los que se aplican las directivas WAF.
application_type Protege los tipos de aplicaciones.
signatures Especifica la ubicación del archivo de firma externa.
html_error_object Especifica la ubicación de la página de error personalizada para responder cuando se intenten violaciones comunes o de HTML.
xml_error_object Especifica la ubicación de la página de error personalizada para responder cuando se intenten violaciones de XML.
json_error_object Especifica la ubicación de la página de error personalizada para responder cuando se intenten violaciones de JSON.
ip_reputation Activa la función de reputación de IP.
target Determina el tráfico que debe inspeccionar el WAF. Si no especifica el tráfico objetivo, todo el tráfico se inspecciona de forma predeterminada.
paths Especifica la lista de URL HTTP que se inspeccionarán.
method Especifica la lista de métodos HTTP que se inspeccionarán.
header Especifica la lista de encabezados HTTP que se inspeccionarán.

Implementar WAF CRD

Realice los siguientes pasos para implementar la CRD de WAF:

  1. Descargue el CRD (waf-crd.yaml).

  2. Implemente el CRD de WAF con el siguiente comando:

    kubectl create -f waf-crd.yaml  
    

    Por ejemplo:

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

Cómo escribir una configuración WAF

Después de implementar la CRD de WAF proporcionada por Citrix en el clúster de Kubernetes, puede definir la configuración de la directiva de firewall de aplicaciones web en un archivo.yaml. En el archivo.yaml, usa waf en el campo kind. En la sección de especificaciones, agregue los atributos WAF CRD según sus requisitos para la configuración de la directiva.

Después de implementar el archivo.yaml, el Citrix Ingress Controller aplica la configuración WAF en el dispositivo Citrix ADC de entrada.

A continuación se muestran algunos ejemplos para escribir directivas de firewall de aplicaciones web.

Habilite la protección para ataques de scripts e inyección SQL en sitios cruzados**

Considere un caso en el que quiere definir y especificar una directiva de firewall de aplicaciones web en Citrix ADC para habilitar la protección para los ataques de scripts entre sitios y de inyección SQL. Puede crear un archivo.yaml llamado wafhtmlxsssql.yaml y usar los atributos CRD apropiados para definir la directiva WAF de la siguiente manera:

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-->

Aplicar reglas para permitir solo tipos de contenido conocidos

Considere un caso en el que quiere definir una directiva de firewall de aplicaciones web que especifique reglas para permitir solo los tipos de contenido conocidos y bloquear los tipos de contenido desconocidos. Cree un archivo .yaml llamado waf-contenttype.yaml y use los atributos CRD apropiados para definir la directiva WAF de la siguiente manera:

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-->

Protéjase contra ataques conocidos

A continuación se muestra un ejemplo de configuración de CRD de WAF para aplicar firmas externas. Puede copiar las firmas WAF más recientes desde Ubicación de firma al servidor web local y proporcionar la ubicación del archivo copiado como signature_url.

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-->

Protéjase de ataques de desbordamiento de búfer de encabezado

A continuación se muestra un ejemplo de configuración de CRD de WAF para proteger el desbordamiento de búfer.

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-->

Evitar intentos repetidos de acceder a URL aleatorias en un sitio web

A continuación se muestra un ejemplo de configuración de CRD de WAF para proporcionar reglas de filtrado de URL. Puede agregar URL para permitir en allow_url y URL para denegar en block_url. La URL también puede ser una expresión regular.


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-->

Evitar la filtración de datos sensibles

Las violaciones de datos implican la filtración de datos confidenciales, como la tarjeta de crédito y el número de seguro social (SSN). Puede agregar expresiones regulares personalizadas para los datos confidenciales en la sección Objetos seguros de cumplimiento.

A continuación se muestra un ejemplo de una configuración de CRD de WAF para evitar la filtración de datos confidenciales.

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-->

Proteja los formularios HTML de los ataques CSRF y de formularios

A continuación se muestra un ejemplo de configuración de CRD de WAF para proteger formularios HTML de CSRF y ataques de formularios.

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-->

Proteger formularios y encabezados

A continuación se muestra un ejemplo de configuración de CRD de WAF para proteger tanto los formularios como los encabezados.

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-->

Habilitar comprobaciones de seguridad WAF básicas

Las comprobaciones de seguridad básicas son necesarias para proteger cualquier aplicación con un efecto mínimo en el rendimiento. No requiere ninguna sesión. A continuación se muestra un ejemplo de una configuración de CRD de WAF para habilitar las comprobaciones de seguridad básicas de WAF.

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-->

Habilitar la comprobación de seguridad WAF avanzada

Las comprobaciones de seguridad avanzadas, como la coherencia de las cookie, permitir el cierre de URL, la coherencia de los campos y el CSRF, consumen muchos recursos (CPU y memoria), ya que requieren la sesión de WAF. Por ejemplo, cuando un formulario está protegido por el WAF, la información del campo del formulario en la respuesta se conserva en la memoria del sistema. Cuando el cliente envía el formulario en la siguiente solicitud, se verifica si hay incoherencias antes de enviar la información al servidor web. Este proceso se conoce como sessionización. A continuación se muestra un ejemplo de configuración de CRD de WAF para habilitar las comprobaciones de seguridad avanzadas de WAF.

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-->

Habilitar reputación IP

A continuación se muestra un ejemplo de configuración de CRD de WAF para permitir que la reputación de IP rechace solicitudes que provienen de direcciones IP con mala reputación.

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

<!--NeedCopy-->

Habilitar la reputación de IP para rechazar solicitudes de una categoría en particular

A continuación se muestra un ejemplo de configuración de CRD de WAF para permitir que la reputación de IP rechace solicitudes de categorías de amenazas particulares.

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-->

Proteja las aplicaciones JSON de los ataques de denegación

A continuación se muestra un ejemplo de configuración de CRD de WAF para proteger las aplicaciones JSON de ataques de denegación de servicio.

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-->

Proteja las API RESTful

A continuación se muestra un ejemplo de una configuración de CRD de WAF para proteger las API RESTful de la inyección de SQL, los scripts entre sitios y los ataques de denegación de servicio. En este caso, la aplicación o servicio back-end se basa exclusivamente en las API RESTful.

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-->

Proteja las aplicaciones XML de ataques de denegación de servicio

A continuación se muestra un ejemplo de configuración de CRD de WAF para proteger las aplicaciones XML de los ataques de denegación de servicio.

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-->

Proteja las aplicaciones XML de ataques de seguridad

En este ejemplo se proporciona una configuración de CRD de WAF para proteger las aplicaciones XML de los siguientes ataques de seguridad:

  • Inyección SQL
  • Scripts entre sitios
  • Validación (esquema o mensaje)
  • Formato
  • Denegación de servicio
  • Interoperabilidad de servicios web (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-->
Configurar directivas de firewall de aplicaciones web con el Citrix Ingress Controller