Flexible Übereinstimmungsbedingungen für Firewall-Filter
Die Übereinstimmungsbedingungen für Standard-Firewallfilter variieren je nach Protokollfamilie des abgeglichenen Datenverkehrs. Beispielsweise unterscheiden sich die für Bridge-Protokolldatenverkehr verfügbaren Begriffe von denen, die für die Protokollfamilien inet oder inet6 verfügbar sind. Die Felder, die für den Abgleich innerhalb der einzelnen Protokollfamilien zur Verfügung stehen, sind jedoch fest oder vordefiniert. Das bedeutet, dass Filter nur nach Mustern innerhalb dieser vordefinierten Felder übereinstimmen können.
Unter Verwendung flexibler Übereinstimmungsbedingungen können Firewall-Filter konstruiert werden, die die Übereinstimmung an Layer-2-, Layer-3-, Layer-4- oder Nutzlastpositionen starten. Von dort aus können zusätzliche Offset-Kriterien festgelegt werden, wodurch Musterübereinstimmungen an benutzerdefinierten Stellen innerhalb eines Pakets ermöglicht werden.
Flexible Anpassungsfilterbegriffe werden auf MPC- oder MIC-Schnittstellen als Eingangs- oder Ausgangsfilter angewendet, genau wie alle anderen Firewall-Filterbegriffe. Flexible Übereinstimmungsfilterbegriffe können auch als Vorlagen auf Hierarchieebene [edit firewall]
erstellt werden. Auf diese Vorlagen kann dann innerhalb eines flexiblen Übereinstimmungsbegriffs verwiesen werden.
Bei Routern der MX-Serie werden flexible Übereinstimmungsbedingungen nur mit MPCs oder MICs unterstützt. In Umgebungen, in denen FPCs, PICs und/oder DPCs zusammen mit MPCs oder MICs installiert sind, sollten Sie die Filterkriterien für die flexible Anpassung der Firewall nur auf die MPC- oder MIC-Schnittstellen anwenden.
Bei Routern der MX-Serie mit MPCs müssen Sie den Filterzähler für Nur-Trio-Übereinstimmungsfilter in der MIB initialisieren, indem Sie die entsprechende SNMP-MIB durchlaufen. Beispielsweise müssen Sie für jeden Filter, der in Bezug auf seine Nur-Trio-Filter konfiguriert oder geändert wird, einen Befehl wie den folgenden ausführen: show snmp mib walk (ascii | decimal) object-id
. Dadurch wird Junos gezwungen, die Filterzähler zu lernen und sicherzustellen, dass die Filterstatistiken angezeigt werden (dies liegt daran, dass bei der ersten Abfrage zum Filtern von Statistiken möglicherweise nicht alle Zähler angezeigt werden). Nur-Trio-Übereinstimmungsfilter sind solche, die mindestens eine Übereinstimmungsbedingung oder -aktion enthalten, die nur vom Trio-Chipsatz unterstützt wird.
Diese Anleitung gilt für alle enhanced-mode
Firewallfilter. Sie gilt auch für Übereinstimmungsbedingungen für Firewall-Filter für IPv4-Datenverkehr flexible Übereinstimmungsfilterbedingungen für offset-range oder offset-mask gre-key
und Firewall-Filter-Übereinstimmungsbedingungen für IPv6-Datenverkehr mit einer der folgenden Übereinstimmungsbedingungen: payload-protocol
, extension headers
, is_fragment
. Dies gilt auch für Filter mit einer der folgenden Aktionen zum Beenden des Firewall-FiltersEigenschaften: encapsulate
oder decapsulate
, oder eine der folgenden Nicht terminierende Aktionen für Firewall-FilterOptionen : policy-map
, und clear-policy-map
.
Anweisungshierarchie
Flexible Übereinstimmungsfilterbegriffe sind in drei Varianten verfügbar, wie in gezeigt. Tabelle 1 Die flexible-match
Variante wird auf Hierarchieebene [edit firewall]
konfiguriert. Es wird verwendet, um flexible Übereinstimmungsvorlagen zu definieren. Die flexible-filter-match-mask
und flexible-match-range
werden in der Hierarchie [edit firewall family [inet|inet6|bridge|ethernet-switching|ccc|vpls] filter <filter-name> term <term-name> from]
konfiguriert. Verwenden Sie den family ethernet-switching
Filter für EX9200-Switches.
Flexible Filter-Übereinstimmungstypen
Flexibler Filter-Übereinstimmungstyp |
Verfügbare Attribute |
Beschreibung |
---|---|---|
|
|
Erstellen Sie eine Vorlage mit flexiblem Abgleich, die <name> als Attribut benannt ist. |
|
Länge der abzugleichenden Daten in Bit, nicht benötigt für String-Eingabe (0..32) Für QFX5120- und EX4650-Switches sind 16 und 32 die einzigen gültigen Bitlängen. |
|
|
Bit-Offset nach dem (Match-Start + Byte) Offset (0..7) |
|
|
Byte-Offset nach dem Startpunkt des Spiels |
|
|
Startpunkt für den Abgleich im Paket |
|
|
|
Länge der abzugleichenden Daten in Bits, nicht benötigt für String-Eingabe (0..128) |
|
Bit-Offset nach dem (Match-Start + Byte) Offset (0..7) |
|
|
Byte-Offset nach dem Startpunkt des Spiels |
|
|
Wählen Sie eine flexible Übereinstimmung aus dem vordefinierten Vorlagenfeld aus. Erforderlich, sofern nicht |
|
|
Maskieren Sie Bits in den Paketdaten, die abgeglichen werden sollen. |
|
|
Startpunkt, der im Paket abgeglichen werden soll. Erforderlich, sofern nicht |
|
|
Wertdaten/Zeichenfolge, die abgeglichen werden sollen. |
|
|
|
Länge der abzugleichenden Daten in Bits. (0..32) Erforderlich, sofern |
|
Bit-Offset nach dem (Match-Start + Byte) Offset. (0..7) |
|
|
Byte-Offset nach dem Startpunkt des Spiels |
|
|
Wählen Sie eine flexible Übereinstimmung aus der vordefinierten Vorlage aus. |
|
|
Startpunkt, der im Paket abgeglichen werden soll. Erforderlich, sofern nicht |
|
|
Bereich der abzugleichenden Werte. |
|
|
Wertebereich, der nicht abgeglichen werden soll. |
flexible-match-range
wird auf EX2300, EX3400, EX4100 und EX4400 nicht unterstützt.
Flexible Startpositionen für Filterübereinstimmungen
Flexible Übereinstimmungsfilterterme werden erstellt, indem eine Startposition oder ein Ankerpunkt innerhalb des Pakets angegeben wird. Die Startorte können eine der folgenden sein: Layer-2, Layer-3, Layer-4 oder Payload, je nach verwendeter Protokollfamilie. Tabelle 2 Zeigt die verfügbaren Startpositionen für flexible Filterübereinstimmungen nach Protokollfamilie an. Sie verwenden diese verfügbaren Startpositionen als match-start
Positionen für die flexiblen Übereinstimmungsfilterbedingungen.
Von diesen Startpositionen aus können bestimmte Byte- und Bit-Offsets verwendet werden, damit der Filter Muster an ganz bestimmten Stellen innerhalb des Pakets abgleichen kann.
Protokoll-Familie |
Verfügbare Startorte |
---|---|
|
Für QFX5120- und EX4650-Switches wurde in Junos Version 20.1R1 Unterstützung für flexible Layer-2- und Layer-3-Filter (nur) hinzugefügt. |
|
Für QFX5120- und EX4650-Switches wurde in Junos Version 20.1R1 Unterstützung für flexible Layer-2- und Layer-3-Filter (nur) hinzugefügt. |
|
|
|
|
|
|
|
|
|
(EX9200-Switches) Für QFX5120- und EX4650-Switches wurde in Junos Version 20.1R1 Unterstützung für flexible Layer-2- und Layer-3-Filter (nur) hinzugefügt. Ein Beispiel für die Verwendung eines Layer-2-Paketoffsets und einer Übereinstimmungslänge finden Sie unten. |
Beispiele für flexible Filteranpassungen
Das folgende Beispiel veranschaulicht die Verwendung und den Kontext von flexible-match-mask
.
from { flexible-match-mask { flexible-mask-name <mask-name>; mask-in-hex <mask>; prefix <pattern>; } }
Die <mask-name> gibt an flexible-mask-name , für welche vordefinierte Vorlage die flexible Übereinstimmungsbedingung verwendet wird. Es können Vorlagen definiert werden, um festzulegen, an welcher Stelle (Position) im Paket die flexible Übereinstimmungsbedingung ausgeführt werden soll.
Das <mask> for mask-in-hex ist im Hexadezimalformat. Beispielsweise gibt eine konfigurierte Maske von 0xf0fc
eine Übereinstimmung für die ersten vier Bits im ersten Byte (wie durch <mask-name>) und für die ersten sechs Bits im zweiten Byte an. Wenn es sich bei dem Paket um ein IPv4-Paket handelt und <mask-name> es sich auf die ersten beiden Bytes im L3-Header bezieht, wird nach den Feldern "IP-Version" und "DSCP" gesucht. Als weiteres Beispiel gibt eine konfigurierte Maske 0xffc0
eine Suche nach dem gesamten ersten Byte und nach zwei Bits aus dem zweiten Byte an. Wenn sich das auf die <mask-name> ersten beiden Bytes im L3-Header bezieht und es sich bei dem Paket um ein IPv6-Paket handelt, werden das Feld "IP-Version" und DSCP im Feld "Datenverkehrsklasse" angegeben.
Das <pattern> angegebene for prefix ist eine ASCII-Zeichenfolge. Wenn die ersten zwei Zeichen sind 0x
, wird die Zeichenfolge als Hexadezimalzahl verarbeitet, die entsprechende Bits codiert. Zum Beispiel zeigt das konfigurierte Präfix 0x40c0
in Kombination mit mask 0xf0fc
und <mask-name> verweisend auf die ersten beiden Bytes im L3-Header eine Suche nach 0100
in den ersten vier Bits (Versionsfeld ist gleich 4) und 1100 00
in IPv4 DSCP-Feld (DSCP ist gleich cs6) an. Oder geben Sie unter Verwendung des konfigurierten Präfixes 0x6c00
in Kombination mit mask 0xffc0
und <mask-name> dem Verweis auf die ersten beiden Bytes im L3-Header eine Suche nach in 0110
den ersten vier Bits (Versionsfeld ist gleich 6) und 1100 00
im IPv6-DSCP-Feld (DSCP ist gleich cs6) an.
Im ersten Beispiel wird eine Maskenvorlage definiert, die die ersten beiden Bytes (16 Bit) aus dem L3-Header für eine flexible Übereinstimmung auswählt:
firewall { flexible-match FM-FIRST-TWO-L3-BYTES { match-start layer-3; byte-offset 0; bit-offset 0; bit-length 16; } }
Im nächsten Beispiel wird eine Maskenvorlage definiert, die das dritte bis sechste Byte (32 Bit) der Paketnutzlast für einen flexiblen Abgleich auswählt:
firewall { flexible-match FM-FOUR-PAYLOAD-BYTES { match-start payload; byte-offset 2; bit-offset 0; bit-length 32; } }
Dieses Beispiel zeigt eine ASCII-Zeichenübereinstimmung für die Zeichenfolge JNPR (ASCII-Zeichen: 0x4a
, 0x4e
, 0x50
, 0x52
) im dritten bis sechsten Byte der Paketnutzlast. Der Filter verwendet die FM-FOUR-PAYLOAD-BYTES
im vorherigen Beispiel definierte Maskenvorlage.
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; } } } }
Dieses Beispiel zeigt einen Familien-ccc-Filter, der nach DSCP gleich und DSCP ef
sucht, unabhängig davoncs6
, ob es sich bei den gekapselten Paketen um IPv4 oder IPv6 handelt. Es verwendet die FM-FIRST-TWO-L3-BYTES
im ersten Beispiel definierte Maskenvorlage.
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; } } } }
In diesem Beispiel wird gezeigt, wie eine Übereinstimmungslänge, beginnend mit einem Layer-2-Paketoffset, in einem Firewallfilter für ein QFX5120-32C-, QFX5120-48Y- oder EX4650-Gerät mit Junos Version 20.1R1 verwendet wird. Hier verwenden wir eine Bitlänge von 32 Bit und die ethernet-switching
Familie (inet
inet6
und werden auch unterstützt, ebenso wie die Verwendung eines Layer-3-Offsets).
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; } }
Tabellarischer Änderungsverlauf
Die Unterstützung der Funktion hängt von der Plattform und der Version ab, die Sie benutzen. Verwenden Sie Feature Explorer, um festzustellen, ob eine Funktion auf Ihrer Plattform unterstützt wird.