PfSense DPI Dashboard mit Grafana
September 20, 2021In diesem Reddit Post stellt der User Lephisto sein Grafana Dashboard vor, das die Ergebnisse der Deep Packet Inspection visualisiert.
Er hat auch ein Video dazu gemacht:
Wir werden die von der PfSense-Firewall erzeugten Protokolldatensätze auswerten. Unser Graylog-Server läuft bereits, und wir beginnen mit der Vorbereitung des Geländes für die Erfassung dieser Protokolle.
Contents
Indexe
Wir erstellen nun den Pfsense-Index in System / Indizes
Index Shard 4 und Index Replikate 0, die Rotation des Index Zeitindex und die Aufbewahrung kann gelöscht werden, Schließung eines Index nach der maximalen Anzahl von Indizes oder nichts zu tun. In meinem Fall habe ich ihn auf monatliche Rotation eingestellt und die Indizes nach 12 Monaten gelöscht. Kurz gesagt, es gibt viele Möglichkeiten, die Rotation festzulegen. Dieser Index wird sofort erstellt.
und mit Cerebro können wir es überprüfen.
Content Pack
Dieses Inhaltspaket enthält Input rsyslog type, Extraktoren, Lookup-Tabellen, Datenadapter für Lockup-Tabellen und Cache für Lookup-Tabellen. Um diese Dateien herunterzuladen, installieren wir git, um das Repository zu klonen.
#apt-get install git
und dann klonen wir es:
#git clone https://github.com/devopstales/pfsense-graylog
Wir werden die CSV-Daten der Nachschlagetabellen suchen, um später die Anzahl der Ports in Dienstnamen umzuwandeln. Aus dem Git, das Sie gerade geklont haben, haben wir die Datei service-names-port-numbers.csv ausgewählt und nach /etc/graylog/server kopiert.
#cp service-names-port-numbers.csv /etc/graylog/server
Wir importieren nun die Datei aus dem Content-Pack-Ordner und wählen für sie im System / Content Packs die Option Import content packs, um die Datei hochzuladen.
Wie wir sehen, wird sie der Liste hinzugefügt.
Jetzt wählen wir das Pfsense Content Pack aus:
Und wir wenden es an:
Streams
Wir bearbeiten den Stream von pfsense in Streams, um den Index zuzuordnen, den wir ursprünglich erstellt haben. Wir markieren, dass er die Übereinstimmungen für den Standard-Stream “Alle Nachrichten” beseitigt, so dass nur er ihn im Index von pfsense speichert.
Cerebro
Wie bereits erläutert, erzeugt graylog standardmäßig für jeden erstellten Index eine eigene Vorlage und wendet sie bei jeder Indexrotation an. Wenn wir unsere eigenen Vorlagen wollen, müssen wir sie in der gleichen elasticsearch erstellen. Wir fügen das Feld real_timestamp hinzu, das bei der Verwendung von grafana nützlich ist, und wir konvertieren auch die Geo-Typen dest_ip_geolocation und src_ip_geolocation in den Typ geo_point, um in den Weltkarten-Panels verwendet zu werden, da graylog dieses Format nicht verwendet.
Um die personalisierte Vorlage zu importieren, öffnen Sie cerebro und gehen Sie zu more/index template
Wir erstellen eine neue Vorlage
Im Namen tragen wir pfsense-custom ein und öffnen die Git-Datei mit der Vorlage und fügen ihren Inhalt hier ein.
Und dann drücken wir die Schaltfläche Erstellen.
Jetzt stoppen wir den Graylog-Dienst, um den Index durch Cerebro zu eliminieren.
#systemctl stop graylog-server.service
In Cerebro stehen wir oben auf dem Index, klappen die Optionen aus und wählen Index löschen.
Wir starten den Graylog-Dienst erneut und dieser wird den Index mit dieser Vorlage erstellen.
#systemctl start graylog-server.service
Aktivierung des GeoIP-Plugins
In Graylog gehen Sie zu System->Konfigurationen und:
- Ändern Sie die Reihenfolge nach Nachrichtenprozessoren, um die folgende Reihenfolge zu erhalten:
1. AWS Instance Name Lookup
2. Message Filter Chain
3. Pipeline Processor
4. GeoIP Resolver
Aktivieren der Endaktualisierung des Geo-Location-Prozessors.
cd /etc/graylog/server/
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
tar -xzf GeoLite2-City.tar.gz
mv GeoLite2-City_*/GeoLite2-City.mmdb .
Aktualisieren Sie dann die Konfiguration des Geo-Location-Prozessors, um den Geo-Location-Prozessor zu aktivieren.
Pipelines
Die Pfsense-Logs, die bei Graylog ankommen, werden nicht mit Datum und Uhrzeit versehen, sondern speichern im Zeitstempel-Feld die Zeit, zu der sie bei Graylog selbst ankommen, und dieses Datum und die Uhrzeit sind im UTC-Format, so dass wir es ändern müssen, damit es keine Interpretationsprobleme im Grafana-Zeitformat gibt, wenn sie angezeigt werden.
Wir müssen die Pipeline von pfsense dann in System/Pipelines bearbeiten
Quelle der Regel, die die Anpassung des Zeitstempels vornimmt, den wir in grafana verwenden werden:
rule "timestamp_pfsense_for_grafana"
when
has_field("timestamp")
then
// the following date format assumes there's no time zone in the string
let source_timestamp = parse_date(substring(to_string(now("America/Habana")),0,23), "yyyy-MM-dd'T'HH:mm:ss.SSS");
let dest_timestamp = format_date(source_timestamp,"yyyy-MM-dd HH:mm:ss");
set_field("real_timestamp", dest_timestamp);
end
Wir speichern und die Pipeline ist bereit, um später die ersten Protokolle zu empfangen.
Pfsense
Wir werden nun Pfsense so vorbereiten, dass es die Logs an graylog sendet, und dazu werden wir unter Status/System Logs/ Settings die Optionen ändern, die uns dies ermöglichen.
Wir gehen zum Abschnitt Remote Logging Options und geben unter Remote Log Server die IP-Adresse und den Port an, der im Content Pack in der Pfsense-Eingabe von graylog vorangestellt ist, in diesem Fall 5442.
Wir speichern die Konfiguration.
Graylog
Wir gehen nun zu graylog, indem wir den pfsense-Stream auswählen, und wir werden sehen, wie er die Protokollnachrichten analysiert und die Felder erstellt.
Grafana
Graylog-Dashboards bieten mir nicht die Möglichkeiten, die Grafana hat, daher wird unser Dashboard in Grafana erstellt.
Wir erstellen die Datenquelle in grafana, die wir Pfsense-Graylog nennen werden.
Ich teile mit Ihnen ein vorgefertigtes Dashboard auf der offiziellen Grafana-Seite, das importiert werden kann.
Wir wählen Dashboard importieren
Wir laden die heruntergeladene Datei Upload .json file hoch und verknüpfen sie mit der dafür erstellten Datenquelle.
Wir können das Dashboard bereits in Aktion sehen.
Quelle: devopstales / pfsense-graylog