Las reglas de filtro de tráfico se pueden utilizar para bloquear o permitir solicitudes en la capa CDN, lo que puede resultar útil en situaciones como las siguientes:
La mayoría de estas reglas de filtro de tráfico están disponibles para todos los clientes de AEM as a Cloud Service Sites y de Forms. Funcionan principalmente en propiedades de solicitud y encabezados de solicitud, incluidos IP, nombre de host, ruta y agente de usuario.
Una subcategoría de reglas de filtro de tráfico requiere una licencia de seguridad mejorada o una licencia de protección WAF-DDoS y estará disponible a finales de este año. Estas potentes reglas se conocen como reglas de filtro de tráfico WAF (cortafuegos de aplicación web) (o reglas WAF para abreviar) y tienen acceso a Indicadores WAF que se describen más adelante en este artículo.
Las reglas de filtro de tráfico se pueden implementar mediante canalizaciones de configuración de Cloud Manager para los tipos de entorno de desarrollo, fase y producción en programas de producción (que no sean de zonas protegidas). El soporte para RDE vendrá en el futuro.
Seguir un tutorial para generar rápidamente experiencia concreta en esta función.
Este artículo está organizado en las secciones siguientes:
cdn.yaml
. Esto incluye las reglas de filtro de tráfico disponibles para todos los clientes de Sites y Forms, así como la subcategoría de reglas WAF para aquellos que otorgan licencia a esa funcionalidad.Le invitamos a hacernos llegar sus comentarios o preguntas sobre las reglas de filtro de tráfico enviando un correo electrónico a aemcs-waf-adopter@adobe.com.
En el panorama digital actual, el tráfico malicioso es una amenaza constante. Reconocemos la gravedad del riesgo y ofrecemos varios enfoques para proteger las aplicaciones de los clientes y mitigar los ataques cuando se producen.
En la periferia, la CDN administrada por Adobe absorbe los ataques DoS en el nivel de red
(capas 3 y 4), incluidos los ataques de inundación y reflexión/amplificación.
De forma predeterminada, Adobe toma medidas para evitar la degradación del rendimiento debido a ráfagas de tráfico inesperadamente altas que superan un determinado umbral. En caso de que un ataque DoS afecte a la disponibilidad del sitio, los equipos de operaciones de Adobe reciben una alerta y toman medidas para mitigarlo.
Los clientes pueden tomar medidas proactivas para mitigar los ataques de la capa de aplicación (capa 7) configurando reglas en varios niveles del flujo de distribución de contenido.
Por ejemplo, en la capa de Apache, los clientes pueden configurar el módulo de Dispatcher o ModSecurity para limitar el acceso a determinado contenido.
Y, tal como se describe en este artículo, las reglas de filtro de tráfico pueden implementarse en la red de distribución de contenido (CDN) administrada por Adobe mediante la canalización de configuración de Cloud Manager. Además de las reglas de filtro de tráfico basadas en propiedades como la dirección IP, la ruta y los encabezados o las reglas basadas en la configuración de límites de volumen, los clientes también pueden obtener una licencia de una potente subcategoría de reglas de filtro de tráfico denominadas reglas WAF.
A continuación, se presenta un proceso de extremo a extremo recomendado de alto nivel para crear las reglas de filtro de tráfico adecuadas:
cdn.yaml
e implemente la configuración en el entorno de producción en modo de registro.En primer lugar, cree la siguiente carpeta y estructura de archivos en la carpeta de nivel superior del proyecto en Git:
config/
cdn.yaml
cdn.yaml
debe contener metadatos, así como una lista de reglas de filtros de tráfico y reglas WAF.
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
# Block simple path
- name: block-path
when:
allOf:
- reqProperty: tier
matches: "author|publish"
- reqProperty: path
equals: '/block/me'
action: block
El parámetro kind
debe establecerse en CDN
y la versión debe establecerse en la versión de esquema, que actualmente es 1
. Consulte los ejemplos más adelante.
Si las reglas WAF tienen licencia, debe habilitar la función en Cloud Manager, tal como se describe a continuación para los escenarios de programa nuevos y existentes.
Para configurar WAF en un nuevo programa, marque la casilla de verificación Protección WAF-DDOS de la pestaña Seguridad cuando añada un programa de producción.
Para configurar WAF en un programa existente, editando el programa y en la pestaña Seguridad desmarque o marque la opción WAF-DDOS en cualquier momento.
Para tipos de entorno distintos de RDE, cree una canalización de configuración de implementación de destino en Cloud Manager.
Para RDE, se utilizará la línea de comandos, pero RDE no es compatible en este momento.
Notas
yq
para validar localmente el formato YAML del archivo de configuración (por ejemplo, yq cdn.yaml
).Puede configurar traffic filter rules
para que coincida en patrones como direcciones IP, agente de usuario, encabezados de solicitud, nombre de host, ubicación geográfica y url.
Los clientes que otorgan licencia a la oferta de seguridad mejorada o de seguridad de protección WAF-DDoS también pueden configurar una categoría especial de reglas de filtro de tráfico denominada WAF traffic filter rules
(o reglas WAF para abreviar) que hacen referencia a uno o varios Indicadores WAF.
Este es un ejemplo de un conjunto de reglas de filtro de tráfico, que también incluye una regla WAF.
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "path-rule"
when: { reqProperty: path, equals: /block-me }
action:
type: block
- name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
when: { reqProperty: path, like: "*" }
action:
type: block
wafFlags: [ SQLI, XSS]
El formato de las reglas de filtro de tráfico en el archivo cdn.yaml
se describe a continuación. Vea algunos ejemplos más en una sección posterior, así como en una sección independiente sobre Reglas de límite de volumen.
Propiedad | La mayoría de las reglas de filtro de tráfico | Reglas de filtro de tráfico WAF | Tipo | Valor predeterminado | Descripción |
---|---|---|---|---|---|
name | X | X | string |
- | El nombre de la regla (64 caracteres, solo puede contener caracteres alfanuméricos y - ) |
when | X | X | Condition |
- | La estructura básica es:{ <getter>: <value>, <predicate>: <value> } Consulte Sintaxis de estructura de condición a continuación, que describe los captadores, los predicados y cómo combinar varias condiciones. |
acción | X | X | Action |
log | objeto log, allow, block o Action. El valor predeterminado es log |
rateLimit | X | RateLimit |
sin definir | Configuración del límite de volumen. La limitación de volumen está deshabilitada si no se define. Hay una sección independiente más abajo que describe la sintaxis de rateLimit, junto con ejemplos. |
Una condición puede ser una condición simple o un grupo de condiciones.
Condición simple
Una condición simple está compuesta por un captador y un predicado.
{ <getter>: <value>, <predicate>: <value> }
Condiciones de grupo
Un grupo de condiciones está compuesto por varias condiciones simples o de grupo.
<allOf|anyOf>:
- { <getter>: <value>, <predicate>: <value> }
- { <getter>: <value>, <predicate>: <value> }
- <allOf|anyOf>:
- { <getter>: <value>, <predicate>: <value> }
Propiedad | Tipo | Significado |
---|---|---|
allOf | array[Condition] |
Operación and. Es true, si todas las condiciones enumeradas devuelven el valor true |
anyOf | array[Condition] |
Operación or. Es true si alguna de las condiciones enumeradas devuelve el valor true |
Getter
Propiedad | Tipo | Descripción |
---|---|---|
reqProperty | string |
Solicitar propiedad. Uno de:
|
reqHeader | string |
Devuelve el encabezado de la solicitud con el nombre especificado |
queryParam | string |
Devuelve el parámetro de consulta con el nombre especificado |
reqCookie | string |
Devuelve una cookie con el nombre especificado |
postParam | string |
Devuelve un parámetro de publicación con el nombre especificado del cuerpo de la solicitud. Solo funciona cuando el cuerpo es de tipo de contenido application/x-www-form-urlencoded |
Predicado
Propiedad | Tipo | Significado |
---|---|---|
igual a | string |
true si el resultado del captador es igual al valor proporcionado |
doesNotEqual | string |
true si el resultado del captador no es igual al valor proporcionado |
me gusta | string |
true si el resultado del captador coincide con el patrón proporcionado |
notLike | string |
true si el resultado del captador no coincide con el patrón proporcionado |
matches | string |
true si el resultado del captador coincide con la expresión regular proporcionada |
doesNotMatch | string |
true si el resultado del captador no coincide con la expresión regular proporcionada |
en | array[string] |
true si la lista proporcionada contiene un resultado de captador |
notIn | array[string] |
true si la lista proporcionada no contiene el resultado del captador |
existe | boolean |
true cuando se establece en true y la propiedad existe o cuando se establece en false y la propiedad no existe |
Notas
clientIp
solo se puede utilizar con los siguientes predicados: equals
, doesNotEqual
, in
, notIn
. clientIp
también se puede comparar con intervalos de IP cuando se utilizan los predicados in
y notIn
. En el siguiente ejemplo se implementa una condición para evaluar si una IP de cliente está en el rango de IP de 192.168.0.0/24 (o sea, desde 192.168.0.0 hasta 192.168.0.255):when:
reqProperty: clientIp
in: [ "192.168.0.0/24" ]
Un action
puede ser una cadena que especifique la acción (permitir, bloquear o registrar) o un objeto compuesto por el tipo de acción (permitir, bloquear o registrar) y opciones como wafFlags y/o estado.
Tipos de acción
Las acciones se priorizan según sus tipos en la siguiente tabla, que se ordena para reflejar el orden en el que se ejecutan las acciones:
Nombre | Propiedades permitidas | Significado |
---|---|---|
permitir | wafFlags (opcional) |
si wafFlags no está presente, detiene el procesamiento posterior de la regla y procede a proporcionar la respuesta. Si wafFlags está presente, deshabilita las protecciones WAF especificadas y continúa con el procesamiento de la regla. |
block | status, wafFlags (opcional y mutuamente excluyente) |
si wafFlags no está presente, devuelve un error HTTP omitiendo todas las demás propiedades, el código de error se define mediante la propiedad estado o el valor predeterminado es 406. Si wafFlags está presente, permite protecciones WAF especificadas y continúa con el procesamiento de la regla. |
log | wafFlags (opcional) |
registra el hecho de que la regla se activó; de lo contrario, no afecta al procesamiento. wafFlags no tiene ningún efecto |
La propiedad wafFlags
, que se puede utilizar en las reglas de filtro de tráfico WAF con licencia, puede hacer referencia a lo siguiente:
Identificador de marca | Nombre de indicador | Descripción |
---|---|---|
SQLI | Inyección de SQL | La inyección de SQL es el intento de obtener acceso a una aplicación o de obtener información privilegiada ejecutando consultas de base de datos arbitrarias. |
BACKDOOR | Puerta trasera | Una señal de puerta trasera es una solicitud que intenta determinar si hay un archivo de puerta trasera común en el sistema. |
CMDEXE | Ejecución de comandos | La ejecución de comandos es el intento de obtener control o dañar un sistema objetivo a través de comandos arbitrarios del sistema por medio de la entrada del usuario. |
XSS | Scripts en sitios múltiples | La ejecución de scripts en sitios múltiples es el intento de apropiarse de la cuenta de un usuario o de una sesión de exploración web mediante código JavaScript malintencionado. |
TRAVERSAL | Traversal de directorios | Traversal de directorios es el intento de navegar por carpetas privilegiadas a través de un sistema con la esperanza de obtener información confidencial. |
USERAGENT | Herramienta de ataque | La herramienta de ataque es el uso de software automatizado para identificar vulnerabilidades de seguridad o para intentar explotar una vulnerabilidad descubierta. |
LOG4J-JNDI | Log4J JNDI | Los ataques Log4J JNDI intentan explotar la vulnerabilidad de Log4Shell presente en las versiones de Log4J anteriores a la versión 2.16.0 |
BHH | Encabezados de salto incorrecto | Los encabezados de salto incorrecto indican un intento de introducir HTTP a través de un encabezado Transfer-Encoding (TE) o Content-Length (CL) mal formado o un encabezado TE y CL bien formado |
ABNORMALPATH | Ruta anormal | Ruta anormal indica que la ruta original difiere de la ruta normalizada (por ejemplo, /foo/./bar se normaliza a /foo/bar ) |
DOUBLEENCODING | Codificación doble | La codificación doble comprueba la técnica de evasión de los caracteres HTML de doble codificación |
NOTUTF8 | Codificación no válida | La codificación no válida puede hacer que el servidor traduzca caracteres malintencionados de una solicitud a una respuesta, lo que provoca una denegación de servicio o XSS |
JSON-ERROR | Error de codificación de JSON | Un cuerpo de solicitud POST, PUT o PATCH que se especifica que contiene JSON dentro del encabezado de solicitud "Content-Type", pero que contiene errores de análisis de JSON. Esto suele estar relacionado con un error de programación o una solicitud automatizada o maliciosa. |
MALFORMED-DATA | Datos mal formados en el cuerpo de la solicitud | Un cuerpo de solicitud POST, PUT o PATCH con un formato incorrecto según el encabezado de solicitud "Content-Type". Por ejemplo, si se especifica un encabezado de solicitud "Content-Type: application/x-www-form-urlencoded" y contiene un cuerpo POST que es json. Esto suele ser un error de programación, una solicitud automatizada o maliciosa. Requiere agente 3.2 o superior. |
SANS | Tráfico IP malintencionado | SANS Internet Storm Center lista de direcciones IP sobre las que se ha informado que han participado en actividades maliciosas |
NO-CONTENT-TYPE | Falta el encabezado de solicitud "Content-Type" | Una solicitud POST, PUT o PATCH que no tiene un encabezado de solicitud "Content-Type". De forma predeterminada, los servidores de aplicaciones deben suponer "Content-Type: text/plain; charset=us-ascii" en este caso. Es posible que a muchas solicitudes automatizadas y maliciosas les falte "Tipo de contenido". |
NOUA | No hay agente de usuario | Muchas solicitudes automatizadas y maliciosas utilizan agentes de usuario falsos o ausentes para dificultar la identificación del tipo de dispositivo que realiza las solicitudes. |
TORNODE | Tráfico de Tor | Tor es un software que oculta la identidad de un usuario. Un pico en el tráfico de Tor puede indicar que un atacante está tratando de ocultar su ubicación. |
NULLBYTE | Byte nulo | Los bytes nulos no suelen aparecer en una solicitud e indican que la solicitud tiene un formato incorrecto y es potencialmente maliciosa. |
PRIVATEFILE | Archivos privados | Los archivos privados suelen ser de naturaleza confidencial, como un archivo .htaccess Apache o un archivo de configuración que podría filtrar información confidencial |
SCANNER | Escáner | Identifica los servicios y herramientas de digitalización más populares |
RESPONSESPLIT | División de respuesta HTTP | Identifica cuándo se envían los caracteres CRLF como entrada a la aplicación para insertar encabezados en la respuesta HTTP |
XML-ERROR | Error de codificación XML | Un cuerpo de solicitud POST, PUT o PATCH que se especifica que contiene XML dentro del encabezado de solicitud "Content-Type", pero que contiene errores de análisis de XML. Esto suele estar relacionado con un error de programación o una solicitud automatizada o maliciosa. |
Cuando se crean dos reglas en conflicto, las reglas de permiso siempre tienen prioridad sobre las reglas de bloqueo. Por ejemplo, si crea una regla para bloquear una ruta específica y una regla para permitir una dirección IP específica, se permitirán las solicitudes de esa dirección IP en la ruta bloqueada.
Si una regla coincide y está bloqueada, CDN responde con un código de retorno 406
.
Los archivos de configuración no deben contener secretos, ya que cualquier persona que tenga acceso al repositorio de Git podrá leerlos.
Las listas de IP permitidas definidas en Cloud Manager tienen prioridad sobre las reglas de los filtros de tráfico.
Las coincidencias de reglas WAF solo aparecen en los registros de CDN para los fallos y pasadas de CDN, no en las visitas.
A continuación se muestran algunos ejemplos de reglas. Consulte la sección sobre límite de volumen a continuación para ver ejemplos de reglas de límite de volumen.
Ejemplo: 1
Esta regla bloquea las solicitudes procedentes de IP 192.168.1.1:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "block-request-from-ip"
when: { reqProperty: clientIp, equals: "192.168.1.1" }
action:
type: block
Ejemplo: 2
Esta regla bloquea las solicitudes en la ruta /helloworld
al publicar con un agente de usuario que contiene Chrome:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "block-request-from-chrome-on-path-helloworld-for-publish-tier"
when:
allOf:
- { reqProperty: path, equals: /helloworld }
- { reqProperty: tier, equals: publish }
- { reqHeader: user-agent, matches: '.*Chrome.*' }
action:
type: block
Ejemplo: 3
Esta regla bloquea las solicitudes que contienen el parámetro de consulta foo
, pero permite todas las solicitudes procedentes de IP 192.168.1.1:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "block-request-that-contains-query-parameter-foo"
when: { queryParam: url-param, equals: foo }
action:
type: block
- name: "allow-all-requests-from-ip"
when: { reqProperty: clientIp, equals: 192.168.1.1 }
action:
type: allow
Ejemplo: 4
Esta regla bloquea las solicitudes a la ruta /block-me
y bloquea todas las solicitudes que coinciden con un patrón SQLI
o XSS
. Este ejemplo incluye reglas de filtro de tráfico WAF, que hace referencia a los Indicadores WAF SQLI
y XSS
y, por lo tanto, requiere una licencia independiente.
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "path-rule"
when: { reqProperty: path, equals: /block-me }
action:
type: block
- name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
when: { reqProperty: path, like: "*" }
action:
type: block
wafFlags: [ SQLI, XSS]
Ejemplo: 5
Esta regla bloquea el acceso a los países de la OFAC:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: block-ofac-countries
when:
allOf:
- reqProperty: tier
matches: "author|publish"
- reqProperty: clientCountry
in:
- SY
- BY
- MM
- KP
- IQ
- CD
- SD
- IR
- LR
- ZW
- CU
- CI
action: block
A veces es deseable bloquear el tráfico si supera un cierto volumen de solicitudes entrantes, tal vez en función de una condición específica. Configurar un valor para la propiedad rateLimit
limita el volumen de las solicitudes que coinciden con la condición de la regla.
Las reglas de límite de volumen no pueden hacer referencia a indicadores WAF. Están disponibles para todos los clientes de Sites y Forms.
Los límites de volumen se calculan por CDN POP. Por ejemplo, supongamos que los POP de Montreal, Miami y Dublín tienen volúmenes de tráfico de 80, 90 y 120 solicitudes por segundo respectivamente, y que la regla de límite de volumen está establecida en un límite de 100. En ese caso, solo el tráfico a Dublín tendría limitación de volumen.
Propiedad | Tipo | Predeterminado | SIGNIFICADO |
---|---|---|---|
limit | entero de 10 a 10000 | required | Volumen de solicitud (por CDN POP) en solicitudes por segundo para las que se activa la regla. |
ventana | integer enum: 1, 10 o 60 | 10 | Ventana de muestreo en segundos para la que se calcula el volumen de solicitud. La precisión de los contadores dependerá del tamaño de la ventana (ventana más grande, mayor precisión). Por ejemplo, se puede esperar una precisión del 50 % para la ventana de 1 segundo y del 90 % para la de 60 segundos. |
penalty | entero de 60 a 3600 | 300 (5 minutos) | Período en segundos durante el cual se bloquean las solicitudes de coincidencia (redondeado al minuto más próximo). |
groupBy | array[Getter] | ninguno | El contador de limitador de volumen se añadirá mediante un conjunto de propiedades de solicitud (por ejemplo, clientIp). |
Ejemplo 1
Esta regla bloquea un cliente durante 5 m cuando supera los 100 req/seg (por CDN POP) en los últimos 60 segundos:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: limit-requests-client-ip
when:
reqProperty: tier
matches: "author|publish"
rateLimit:
limit: 60
window: 10
penalty: 300
groupBy:
- reqProperty: clientIp
action: block
Ejemplo: 2
Bloquear solicitudes de 60 segundos en la ruta /crítico/recurso cuando supere los 100 req/s (por CDN POP) en los últimos 60 segundos:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: rate-limit-example
when: { reqProperty: path, equals: /critical/resource }
action:
type: block
rateLimit: { limit: 100, window: 60, penalty: 60 }
AEM as a Cloud Service proporciona acceso a los registros de CDN, que son útiles para casos de uso, incluida la optimización de la proporción de visitas de caché y la configuración de reglas de filtro de tráfico. Los registros de CDN aparecen en el cuadro diálogo de Cloud Manager Descargar registros, al seleccionar el servicio de creación o publicación.
Tenga en cuenta que los registros de CDN pueden retrasarse hasta 5 minutos.
La propiedad rules
describe qué reglas de filtro de tráfico coinciden y tiene el siguiente patrón:
"rules": "match=<matching-customer-named-rules-that-are-matched>,waf=<matching-WAF-rules>,action=<action_type>"
Por ejemplo:
"rules": "match=Block-Traffic-under-private-folder,Enable-SQL-injection-everywhere,waf="SQLI,SANS",action=block"
Las reglas se comportan de la siguiente manera:
match
.action
determina si las reglas tuvieron el efecto de bloquear, permitir o registrar.waf
El atributo indicará cualquier indicador WAF que se haya detectado (por ejemplo, SQLI), independientemente de si los indicadores WAF estaban incluidos en alguna regla. Esto sirve para conocer las posibles nuevas reglas que se pueden declarar.rules
estará en blanco.Como se ha indicado anteriormente, las coincidencias de reglas WAF solo aparecen en los registros de CDN para errores y pasadas de CDN, no para visitas.
En el ejemplo siguiente se muestra un cdn.yaml
de ejemplo y dos entradas de registro de CDN:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
trafficFilters:
rules:
- name: "path-rule"
when: { reqProperty: path, equals: /block-me }
action: block
- name: "Enable-SQL-Injection-and-XSS-waf-rules-globally"
when: { reqProperty: path, like: "*" }
action:
type: block
wafFlags: [ SQLI, XSS ]
{
"timestamp": "2023-05-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"rid": "974e67f6",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"host": "example.com",
"url": "/block-me",
"method": "GET",
"res_ctype": "",
"cache": "PASS",
"status": 406,
"res_age": 0,
"pop": "PAR",
"rules": "match=path-rule,action=blocked"
}
{
"timestamp": "2023-05-26T09:20:01+0000",
"ttfb": 19,
"cli_ip": "147.160.230.112",
"cli_country": "CH",
"req_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"rid": "974e67f6",
"host": "example.com",
"url": "/?sqli=%27%29%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20fAPK",
"method": "GET",
"res_ctype": "image/png",
"cache": "PASS",
"status": 406,
"res_age": 0,
"pop": "PAR",
"rules": "match=Enable-SQL-Injection-and-XSS-waf-rules-globally,waf=SQLI,action=blocked"
}
A continuación se muestra una lista de los nombres de campo utilizados en los registros de CDN, junto con una breve descripción.
Nombre del campo | Descripción |
---|---|
timestamp | Hora a la que se inició la solicitud, después de la finalización de TLS. |
ttfb | Abreviatura de Time To First Byte. Intervalo de tiempo entre el inicio de la solicitud hasta el punto en el que el cuerpo de la respuesta comenzó a transmitirse. |
cli_ip | La dirección IP del cliente. |
cli_country | Código de país ISO 3166-1 alpha-2 de dos letras correspondiente al país del cliente. |
rid | El valor del encabezado de la solicitud que se utiliza para identificar la solicitud de forma exclusiva. |
req_ua | El agente de usuario responsable de realizar una petición HTTP determinada. |
host | La autoridad a la que está destinada la solicitud. |
URL | La ruta completa, incluidos los parámetros de consulta. |
method | Método HTTP enviado por el cliente, como "GET" o "POST". |
res_ctype | Tipo de contenido que se utiliza para indicar el tipo de medio original del recurso. |
cache | Estado de la caché. Los valores posibles son HIT, MISS o PASS |
status | El código de estado HTTP como un valor entero. |
res_age | Cantidad de tiempo (en segundos) que una respuesta se ha almacenado en la caché (en todos los nodos). |
pop | Centro de datos del servidor de caché de CDN. |
reglas | El nombre de cualquier regla coincidente. También indica si la coincidencia resultó en un bloqueo. Por ejemplo, " match=Enable-SQL-Injection-and-XSS-waf-rules-globally,waf=SQLI,action=blocked "Vacío si no hay reglas que coincidan. |
Adobe proporciona un mecanismo para descargar las herramientas del tablero en el equipo para introducir registros de CDN descargados mediante Cloud Manager. Con esta herramienta, puede analizar el tráfico para determinar las reglas de filtro de tráfico apropiadas que se deben declarar, incluidas las reglas WAF.
Las herramientas de tablero se pueden clonar directamente desde el repositorio de Github AEMCS-CDN-Log-Analysis-ELK-Tool.
Consulte el tutorial para obtener instrucciones concretas sobre cómo utilizar las herramientas de tablero.
Puede copiar las reglas recomendadas a continuación en su cdn.yaml
para empezar. Inicie en el modo de registro, analice el tráfico y, cuando esté satisfecho, cambie al modo de bloqueo. Es posible que desee modificar las reglas en función de las características únicas del tráfico en directo del sitio web.
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev", "stage", "prod"]
data:
trafficFilters:
rules:
# Block client for 5m when it exceeds 100 req/sec on a time window of 1sec
- name: limit-requests-client-ip
when:
reqProperty: path
like: '*'
rateLimit:
limit: 100
window: 1
penalty: 300
groupBy:
- reqProperty: clientIp
action: log
# Block requests coming from OFAC countries
- name: block-ofac-countries
when:
allOf:
- { reqProperty: tier, equals: publish }
- reqProperty: clientCountry
in:
- SY
- BY
- MM
- KP
- IQ
- CD
- SD
- IR
- LR
- ZW
- CU
- CI
action: log
# Enable recommended WAF protections (only works if WAF is licensed enabled for your environment)
- name: block-waf-flags-globally
when:
reqProperty: tier
matches: "author|publish"
action:
type: log
wafFlags:
- SANS
- TORNODE
- NOUA
- SCANNER
- USERAGENT
- PRIVATEFILE
- ABNORMALPATH
- TRAVERSAL
- NULLBYTE
- BACKDOOR
- LOG4J-JNDI
- SQLI
- XSS
- CODEINJECTION
- CMDEXE
- NO-CONTENT-TYPE
- UTF8
# Disable protection against CMDEXE on /bin (only works if WAF is licensed enabled for your environment)
- name: allow-cdmexe-on-root-bin
when:
allOf:
- reqProperty: tier
matches: "author|publish"
- reqProperty: path
matches: "^/bin/.*"
action:
type: log
wafFlags:
- CMDEXE
Trabaje con un tutorial para obtener conocimientos prácticos y experiencia en torno a las reglas de filtro de tráfico.
El tutorial le guiará por los siguientes temas: