Condiciones de coincidencia flexible del filtro de firewall
Las condiciones de coincidencia de filtros de firewall estándar varían según la familia de protocolos del tráfico que coincide. Por ejemplo, los términos disponibles para el tráfico de protocolo de puente son diferentes de los disponibles para las familias de protocolos inet o inet6. Sin embargo, los campos disponibles para coincidir dentro de cada familia de protocolos son fijos o predefinidos. Esto significa que los filtros solo pueden coincidir en patrones dentro de esos campos predefinidos.
Mediante el uso de condiciones de coincidencia flexibles, se pueden construir filtros de firewall que inician la coincidencia en ubicaciones de capa 2, capa 3, capa 4 o de carga. A partir de ahí, se pueden especificar criterios de desplazamiento adicionales, lo que permite coincidencias de patrones en ubicaciones personalizadas y definidas por el usuario dentro de un paquete.
Los términos de filtro de coincidencia flexible se aplican a las interfaces MPC o MIC como filtros de entrada o salida, al igual que cualquier otro término de filtro de firewall. También se pueden crear términos de filtro de coincidencia flexible como plantillas en el [edit firewall] nivel jerárquico. A continuación, se puede hacer referencia a estas plantillas dentro de un término de coincidencia flexible.
Para los enrutadores de la serie MX, las condiciones de coincidencia flexibles solo se admiten con MPC o MIC. En el caso de entornos en los que se instalan FPC, PIC o DPC junto con MPC o MIC, asegúrese de aplicar solo los criterios de filtro de firewall de coincidencia flexible a las interfaces de MPC o MIC.
Para los enrutadores serie MX con MPC, debe inicializar el contador de filtros para filtros de coincidencia de solo Trio en la MIB caminando la MIB SNMP correspondiente. Por ejemplo, para cualquier filtro que esté configurado o cambiado con respecto a sus filtros de solo Trio, debe ejecutar un comando como el siguiente: show snmp mib walk (ascii | decimal) object-id. Esto obliga a Junos a aprender los contadores de filtros y asegurarse de que se muestran las estadísticas del filtro (esto se debe a que es posible que la primera encuesta para filtrar estadísticas no muestre todos los contadores). Los filtros de coincidencia de solo Trio son aquellos que incluyen al menos una condición o acción de coincidencia que solo es compatible con el chipset de Trio.
Esta guía se aplica a todos los enhanced-mode filtros de firewall. También se aplica a Condiciones de coincidencia de filtro de firewall para tráfico IPv4 los términos de filtro de coincidencia flexible para el rango de desplazamiento o la máscara de desplazamiento, gre-keyy a las condiciones de coincidencia de filtro de firewall para el tráfico IPv6 con cualquiera de las siguientes condiciones de coincidencia: payload-protocol, extension headers, is_fragment. También se aplica a filtros con cualquiera de los siguientes Acciones de terminación del filtro de firewallelementos: encapsulate o decapsulate, o cualquiera de los siguientes Acciones nominativas de filtro de firewall: policy-mapy clear-policy-map.
Jerarquía de la instrucción
Los términos de filtro de coincidencia flexible están disponibles en tres variaciones, como se muestra en Tabla 1. La flexible-match variación se configura en el [edit firewall] nivel de jerarquía. Se utiliza para definir plantillas de coincidencia flexibles. Los flexible-filter-match-mask y flexible-match-range se configuran en la [edit firewall family [inet|inet6|bridge|ethernet-switching|ccc|vpls] filter <filter-name> term <term-name> from] jerarquía. Utilice el family ethernet-switching filtro para conmutadores EX9200.
Tipos de coincidencia de filtro flexible
Tipo de coincidencia de filtro flexible |
Atributos disponibles |
Descripción |
|---|---|---|
|
|
Cree una plantilla de coincidencia flexible denominada como atributo <name> . |
|
Longitud de los datos que se coincidirán en bits, no necesaria para la entrada de cadena (0..32) Para los conmutadores QFX5120 y EX4650, 16 y 32 son las únicas longitudes de bits válidas. |
|
|
Desplazamiento de bits después del desplazamiento (match-start + byte) (0..7) |
|
|
Desplazamiento de byte después del punto de inicio del partido |
|
|
Punto de inicio para coincidir en el paquete |
|
|
|
Longitud de los datos que se coincidirán en bits, no necesaria para la entrada de cadena (0..128) |
|
Desplazamiento de bits después del desplazamiento (match-start + byte) (0..7) |
|
|
Desplazamiento de byte después del punto de inicio del partido |
|
|
Seleccione una coincidencia flexible del campo de plantilla predefinido. Obligatorio a menos que |
|
|
Enmascarar bits en los datos del paquete que se coincidirán. |
|
|
Punto de inicio para coincidir en el paquete. Obligatorio a menos que |
|
|
Datos de valor/cadena que se coincidirán. |
|
|
|
Longitud de los datos que se coincidirán en bits. (0..32) Obligatorio a menos que |
|
Desplazamiento de bits después del desplazamiento (match-start + byte). (0..7) |
|
|
Desplazamiento de byte después del punto de inicio del partido |
|
|
Seleccione una coincidencia flexible a partir de la plantilla predefinida. |
|
|
Punto de inicio para coincidir en el paquete. Obligatorio a menos que |
|
|
Rango de valores que se coincidirán. |
|
|
Rango de valores que no se coincidirán. |
Ubicaciones de inicio de coincidencia de filtro flexible
Los términos de filtro de coincidencia flexible se construyen dando una ubicación de inicio o un punto de anclaje dentro del paquete. Las ubicaciones de inicio pueden ser cualquiera de las siguientes: capa 2, capa 3, capa 4 o carga, según la familia de protocolos en uso. Tabla 2 muestra las ubicaciones de inicio de coincidencia de filtros flexibles disponibles por familia de protocolos. Estas ubicaciones de inicio disponibles se utilizan como las ubicaciones para los match-start términos del filtro de coincidencia flexible.
Desde estas ubicaciones de inicio, se pueden utilizar desplazamientos de bytes y bits específicos para permitir que el filtro coincida con patrones en ubicaciones muy específicas dentro del paquete.
Familia de protocolos |
Ubicaciones de inicio disponibles |
|---|---|
|
Para los conmutadores QFX5120 y EX4650, se agregó compatibilidad con filtros de coincidencia flexible de capa 2 y capa 3 (solo) en la versión 20.1R1 de Junos. |
|
Para los conmutadores QFX5120 y EX4650, se agregó compatibilidad con filtros de coincidencia flexible de capa 2 y capa 3 (solo) en la versión 20.1R1 de Junos. |
|
|
|
|
|
|
|
|
|
(Conmutadores EX9200) Para los conmutadores QFX5120 y EX4650, se agregó compatibilidad con filtros de coincidencia flexible de capa 2 y capa 3 (solo) en la versión 20.1R1 de Junos. A continuación, se puede encontrar un ejemplo de uso de desplazamiento de paquete de capa 2 y longitud de coincidencia. |
Ejemplos de coincidencia de filtro flexible
En el ejemplo siguiente se ilustra el uso y el contexto de flexible-match-mask.
from {
flexible-match-mask {
flexible-mask-name <mask-name>;
mask-in-hex <mask>;
prefix <pattern>;
}
}Se <mask-name> especifica para flexible-mask-name qué plantilla predefinida se utiliza para la condición de coincidencia flexible. Las plantillas se pueden definir para especificar en qué lugar (posición) del paquete se debe ejecutar la condición de coincidencia flexible.
El <mask> para mask-in-hex está en formato hexadecimal. Por ejemplo, una máscara configurada de 0xf0fc especifica una coincidencia para los cuatro bits de puño en el primer byte (como se hace referencia por <mask-name>), y para los primeros seis bits en el segundo byte. Si el paquete es IPv4 y <mask-name> hace referencia a los dos primeros bytes en el encabezado L3, la búsqueda es para el campo de versión IP y el campo DSCP. Como otro ejemplo, una máscara 0xffc0 configurada especifica una búsqueda para el primer bytes completo y para dos bits del segundo byte. Si se refiere a los <mask-name> dos primeros bytes en el encabezado L3 y el paquete es paquete IPv6, esto especifica el campo de versión IP y DSCP en el campo Clase de tráfico.
El <pattern> para especificado es prefix una cadena ASCII. Si los dos primeros caracteres son 0x, la cadena se procesa como un número hexadecimal que codifica los bits adecuados. Por ejemplo, el prefijo 0x40c0 configurado en combinación con máscara 0xf0fc y <mask-name> haciendo referencia a los dos primeros bytes en el encabezado L3, indica una búsqueda 0100 en los primeros cuatro bits (el campo de versión es igual a 4) y 1100 00 en el campo DSCP de IPv4 (DSCP es igual a cs6). O bien, usando el prefijo 0x6c00 configurado en combinación con máscara 0xffc0 y <mask-name> haciendo referencia a los dos primeros bytes en el encabezado L3, especifica una búsqueda para 0110 en los primeros cuatro bits (el campo de versión es igual a 6) y 1100 00 en el campo DSCP IPv6 (DSCP es igual a cs6).
El primer ejemplo define una plantilla de máscara que selecciona los dos primeros bytes (16 bits) del encabezado L3 para una coincidencia flexible:
firewall {
flexible-match FM-FIRST-TWO-L3-BYTES {
match-start layer-3;
byte-offset 0;
bit-offset 0;
bit-length 16;
}
}En el siguiente ejemplo se define una plantilla de máscara que selecciona del tercero al sexto bytes (32 bits) de la carga del paquete para una coincidencia flexible:
firewall {
flexible-match FM-FOUR-PAYLOAD-BYTES {
match-start payload;
byte-offset 2;
bit-offset 0;
bit-length 32;
}
}En este ejemplo, se muestra una coincidencia de caracteres ASCII para la cadena JNPR (caracteres ASCII: 0x4a, 0x4e, , 0x50) 0x52en el tercer al sexto byte de la carga del paquete. El filtro usa la FM-FOUR-PAYLOAD-BYTES plantilla de máscara definida en el ejemplo anterior.
firewall {
family ccc filter FF-COUNT-JNPR-PACKETS {
term JNPR-STRING {
from {
flexible-match-mask {
mask-in-hex 0xffffffff;
prefix JNPR;
flexible-mask-name FM-FOUR-PAYLOAD-BYTES;
}
}
then {
count CNT-JNPR-YES
accept;
}
}
term DEAFULT {
then {
count CNT-JNPR-NO
accept;
}
}
}
}En este ejemplo, se muestra un filtro ccc de familia que busca DSCP igual a cs6 y DSCP ef, independientemente de si los paquetes encapsulados son IPv4 o IPv6. Usa la FM-FIRST-TWO-L3-BYTES plantilla de máscara definida en el primer ejemplo.
firewall {
family ccc filter FF-DSCP-CLASSIFY {
term ROUTING-IPV4 {
from {
flexible-match-mask {
mask-in-hex 0xf0fc;
prefix 0x40c0; # DSCP=cs6 in IPv4 header
flexible-mask-name FM-FIRST-TWO-L3-BYTES;
}
}
then {
count ROUTING-IPV4;
accept;
}
}
term ROUTING-IPV6 {
from {
flexible-match-mask {
mask-in-hex 0xffc0;
prefix 0x6c00; # DSCP=cs6 in IPv6 header
flexible-mask-name FM-FIRST-TWO-L3-BYTES;
}
}
then {
count ROUTING-IPV6;
accept;
}
}
term VOICE-IPV4 {
from {
flexible-match-mask {
mask-in-hex 0xf0fc;
prefix 0x40b8; # DSCP=ef in IPv4 header
flexible-mask-name FM-FIRST-TWO-L3-BYTES;
}
}
then {
count VOICE-IPV4;
accept;
}
}
term VOICE-IPV6 {
from {
flexible-match-mask {
mask-in-hex 0xffc0;
prefix 0x6b80; # DSCP=ef in IPv6 header
flexible-mask-name FM-FIRST-TWO-L3-BYTES;
}
}
then {
count VOICE-IPV6;
accept;
}
}
term DEFAULT {
then {
accept;
}
}
}
}En este ejemplo, se muestra cómo usar una longitud de coincidencia, a partir de un desplazamiento de paquete de capa 2, en un filtro de firewall para un dispositivo QFX5120-32C, QFX5120-48Y o EX4650 que ejecuta junos versión 20.1R1. Aquí, usamos una longitud de bits de 32 bits y la ethernet-switching familia (inet y inet6 también son compatibles, al igual que con un desplazamiento de capa 3).
user@device# show firewall family ethernet-switching
filter udf_eth {
term t1 {
from {
flexible-match-mask {
match-start layer-2;
byte-offset 8;
bit-length 32;
prefix 168430090;
}
}
then count c1;
}
}