HOWTO – Verwendung von REGEX Suchmustern bei der Suche im Firebox System Manager

Die Suche im Traffic Monitor wird oft als schwach bezeichnet, weil hier keine “wildcards” unterstützt werden.

Diese Aussage ist jedoch schlicht falsch, da der FSM sehr wohl wildcards unterstützt, allerdings nicht die “üblichen Verdächtigen” und zudem erst nach zusätzlicher Aktivierung der Suchmuster (REGEX). Wenn man sich ein wenig eingearbeitet hat, enthält der FSM durch Vewendung der REGEX einen der leistungsfähigsten Suchfilter, die so üblicherweise zur Verfügung gestellt werden. Leider sind REGEX nicht wirklich intuitiv 🙂

Vorbereitungen:

Zunächst schaltet man im Firebox System Manager unter FILE > SETTINGS die Regulären Ausdrücke frei.

 

 

 

 

 

 

Die “Maximum Log Messages” in Tausend Zeilen stehen per Default auf 1 (=1000 Log-Zeilen).

Diese sind für den täglichen Gebrauch meist viel zu niedrig, weil man üblicherweise ein intensives Logging aktiviert hat,  und damit deutlich mehr Logzeilen geschrieben werden. Der FSM holt dann alle 5 Sekunden die oben angegebene Anzahl Log-Zeilen von der Firebox. (1000 Zeilen in 5 Sekunden sind bei größeren Fireboxen einfach zu wenig). Werte zwischen 15 und 25 haben sich als praktikabel erwiesen.

Vorsicht hierbei beim “Remote-Managen” einer Box, die hinter einer sehr langsamen Leitung steht (z.B. ADSL  6000). durch den sehr beschänkten Upload kann man sich hier ggf. selbst ein Bein stellen.

Logzeilen sind i.d.R. zwischen 150 und 600 Characters (z.B. im inneren eines HTTPS-Proxies mit Deep Inspection und langen URLs). Bei 150 Characters und 20.000 Log-Zeilen sind wir hier bereits bei 3 MByte / 5 Sekunden, was dann etwa knapp 5 MBit/s entspricht.

Für o.g. langsame Außenstellen sollte man sich dann doch eher mit weniger Zeilen begnügen, oder die Suche über eine Dimension komplett auslagern.

Weiterhin sollte man den Suchmodus auf Filter Search Results stellen:

 

 

 

REGEX

Nachdem man obigen Einstellungen getätigt hat, kann man in der Suchmaske rechts auch Reguläre Ausdrücke (REGEX) verwenden.

Was sind nun eigentlich REGEX? Reguläre Ausdrücke sind “Beschreibungssprache” für Zeichenketten. (genauere Infos z.b. bei Wikipedia, s.u.).

Man kann in Programmiersprachen ziemlich tief in REGEX eintauchen – ich möchte mich in diesem Tutorial aber auf wenige Fälle spezialisieren, die hier beim FSM besonders hilfreich sind.

JOKER-Zeichen

Natürlich gibt es in Regulären Ausdrücken Joker-Zeichen.

.          => ein beliebiges Zeichen, entspricht "?" in der DOS-Box
*          => der Ausdruck links davon "null oder viele Male"
+          => der Ausdruck links davon "ein oder viele Male"
\          => das nachfolgende Zeichen "literally"
.*         => ein bielibiges Zeichen, null oder viele Male => entspricht "*" in der DOS-Box

Damit würde man ein *.doc also entweder als .*\.doc oder als .+\.doc schreiben. In den meisten Fällen muss der . aber nicht durch \. beschrieben werden, da ein . ja auch einem beliebigen Zeichen entspricht und damit ein .*.doc meistens nahe genug am gesuchten String ist.

Beispiel

Suchstring: 10.10.1.3.*dns.*=”A”

Dabei wurden die Punkte in der IP-Adresse gelassen, dann wurde versucht auf DNS aus dns/udp zu matchen, und auf den type=”A” der Zeile.

Ergebnis:

2020-12-02 14:25:26 Allow 10.10.1.3 10.10.1.11 dns/udp 50151 53 Trusted Firebox DNS Forwarding 71 128 (Internal Policy) ...
2020-12-02 14:25:43 Allow 10.10.1.36 10.10.1.11 dns/udp 39297 53 Trusted Firebox DNS Forwarding 62 64 (Internal Policy) ...
2020-12-02 14:26:18 Allow 10.10.1.3 10.10.1.11 dns/udp 59785 53 Trusted Firebox DNS Forwarding 66 128 (Internal Policy) ...
2020-12-02 14:26:18 Allow 10.10.1.3 10.10.1.11 dns/udp 53603 53 Trusted Firebox DNS Forwarding 79 128 (Internal Policy) ...
2020-12-02 14:26:39 Allow 10.10.1.3 10.10.1.11 dns/udp 55703 53 Trusted Firebox DNS Forwarding 80 128 (Internal Policy) ...
2020-12-02 14:27:14 Allow 10.10.1.3 10.10.1.11 dns/udp 53617 53 Trusted Firebox DNS Forwarding 73 128 (Internal Policy) ...

(Logzeilen für den Artikel gekürzt)
Wie man sieht, ist der Match auf die IP nicht eindeutig, weil die 10.10.1.3 auch auf die 10.10.1.36 matcht.

Ein entsprechendes Leerzeichen nach der “10.10.1.3 ” im Suchmuster behebt dies.

 

Alternativen, Verkettungen – ODER

mit dem | Zeichen kann man Bedingunen mittels “oder” verknüpfen, und Klammern sind ebenfalls möglich.

Beispiel

Suchstring: (10.10.1.3|10.10.1.5) .* dns/udp “

(Bitte die leerzeichen im Suchjstring beachten. Die Anführungszeichen sind nicht Teil des Suchstrings, sie sollen nur zeigen, dass zu Beginn und Ende des Suchstrings entsprechende Leerzeichen sitzen.

Hier wird also nach den IP-Adressen 10.10.1.3 oder 10.10.1.5 gesucht, und zwar nach dns-Queries via UDP.

Das lässt sich beliebig verketten:

Suchstring: (10.10.1.3|10.10.1.5) .* https/tcp .* (ProxyAllow|ProxyInspect)”

 

NOT – negativer lookahead

Leider ist REGEX relativ schwach in verneinten Matches – also filtern aller Zeilen, die bestimmte Texte enthalten.
Hier kann man den weg über einen sogenannten “negativen look-ahead” gehen. Die Schreibweise hierzu ist: (?!verbotener-text)

Beispiel

Suchstring:  ” 10.10.1.3 .* dns/udp ”
(wieder ohne Anführungszeichen…)

2020-12-02 15:15:55 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:16:03 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:16:11 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:16:19 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:16:28 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:16:36 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:16:44 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:16:44 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="A" question="clients4.google.com" 	Traffic
2020-12-02 15:16:44 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="A" question="oauthaccountmanager.googleapis.com" 	Traffic
2020-12-02 15:16:52 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:17:00 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:17:08 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="AAAA" question="radius.maiers.de" 	Traffic
2020-12-02 15:17:09 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="A" question="rts-euc.freshworksapi.com" 	Traffic
2020-12-02 15:17:09 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="A" question="mtalk.google.com" 	Traffic

(Logzeilen für den Artikel gekürzt)
Ich will nun das Suchergebnis einschränken und Requests nach meinem Radius-Server filtern und nur den Rest zeigen.
Dazu wird der Suchstring von oben um einen negativen lookahead ergänzt. ich suche nach zeilen, die nach “question=” zusätzlich nicht (beliebige zeichen + radius) enthalten.

Suchstring:  ” 10.10.1.3 .* dns/udp.*question=(?!.*radius)”

2020-12-02 15:16:44 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="A" question="clients4.google.com" 	Traffic
2020-12-02 15:16:44 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="A" question="oauthaccountmanager.googleapis.com" 	Traffic
2020-12-02 15:17:09 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="A" question="rts-euc.freshworksapi.com" 	Traffic
2020-12-02 15:17:09 Allow 10.10.1.3 10.10.1.11 dns/udp ... type="A" question="mtalk.google.com" 	Traffic

 

Weiterführende Links:

Leave a Reply

Your email address will not be published. Required fields are marked *