aqui
Goto Top

Netzwerkverkehr mit NetFlow bzw. IPFIX visualisieren

article-picture

back-to-topFlow Protokolle


IP Flow Protokolle wie IPFIX, NetFlow und sFlow sind heutzutage in vielen Netzwerk Komponenten wie Router, Switches und Firewalls integriert. Mit ihnen ist es möglich, auf diesen Komponenten aktive IP Flows im Netzwerk darzustellen. (Wer, wie, wieviel und mit wem kommuniziert)
Externe Probes (Sniffing Hardware) oder andere zusätzlich teure Hardware sind damit obsolet. Auf diese Weise erlangt man eine detaillierte Übersicht über die im Netzwerk bestehende Kommunikation, verwendete Quell- und Ziel IP Adressen, Protokolle, QoS uvm. Werden diese Daten in einer Datenbank gespeichert sind sie mit entsprechender History Funktion abrufbar.

Dieses Tutorial ist primär auf die praktische Umsetzung fokussiert und beschreibt als Beispiel stellvertretend für andere Hersteller mit NetFlow Support die Einrichtung und grafische Auswertung der NetFlow Protokolle auf Cisco und Mikrotik Produkten. Dies geschieht in Verbindung mit Cacti, einem Open Source SNMP Management Tool als Kollektorsoftware.
Cacti ist flexibel über Plugins erweiterbar und bietet die Option eines FlowView Plugins um die Netflow bzw. IPFIX Daten auszuwerten.
Es gibt neben weiteren Open Source Lösungen auch Software von anderen kommerziellen Anbietern:

  • PRTG
  • Solarwinds NetFlow Analyzer
  • Plixer Scrutinizer
  • ManageEngine NetFlow Analyzer
  • Inmon

Open Source, Shareware


Cacti kann auf Windows und Linux installiert werden. Für eine Windows Neuinstallation sollte man der Einfachheit halber den "All in One Installer" verwenden der im Cacti Forum zum Download bereitsteht und alles automatisiert installiert.

Das folgende Tutorial erklärt die Cacti Installation und seiner Plugins am Beispiel einer Debian Distribution. (Ubuntu, Raspberry Pi (ab Ver.3), etc.)
Sie funktionieren analog auch auf jeder anderen Distribution und Hardware bzw. VMs.
Der Cacti Management Server arbeitet mit einem WebGUI, kann somit von jedem Endgerät mit einem einfachen Webbrowser bedient werden.
Ein klein wenig Grundwissen zu Linux und Netzwerk Protokollen sollte vorhanden sein. Los gehts...!


back-to-topTeil 1: Cacti Grundinstallation


Für Linux Anfänger ist der einfachste Weg das fertige, PHP basierte Cacti Package über die jeweilige Distribution zu installieren (apt install cacti).
Die Paket Installation lädt alle erforderlichen Komponenten wie den Apache2 Webserver mit PHP, MariaDB Datenbank, RRD Tools usw. und customized die Anwendung betriebsfertig.
Eigentlich der ideale und schnelle Weg für die grundlegende Cacti Installation und es sind lediglich noch die zusätzlichen Plugins zu installieren wie hier beschrieben und das System ist online. Dieser Installationsweg ist also generell nicht falsch und und wer Zeit hat kann dies durchaus versuchen.
Leider birgt dieser Weg aber, in Verbindung mit Cacti Plugins, manchmal die Gefahr der Inkompatibilität, weil jede Distribution ggf. andere Cacti Versionen in ihren fertigen Packages verwendet je nachdem wie eben diese gepflegt werden. (Aktuell mit Erstellung des Tutorial ist derzeit Cacti Ver. 1.2.x)

Um Inkompatibilität und ggf. Frust zu vermeiden, beschreibt das folgende Tutorial deshalb eine komplett manuelle Installation vom Cacti Basissystem. Sie bedeutet etwas mehr Aufwand und Customizing aber dieser Nachteil wird mit Funktionsssicherheit belohnt.
Verwendet wird der performante Nginx Webserver der auf Einplatinenrechner wie Raspberrys usw. eine bessere (Performance) Figur macht. Installationen immer im root Mode (sudo su).

back-to-topNginx Webserver mit PHP

Die Cacti Basis ist ein laufender Webserver mit PHP. Es ist also zielführend diesen zuerst aufzusetzen.
Nachdem das System mit apt upgrade und apt full-upgrade auf den aktuellen Stand gebracht wurde, wird nur der Webserver mit PHP installiert und auf Funktion geprüft. Das geschieht mit apt install nginx php-fpm

back-to-topPHP aktivieren und customizen

Um PHP im Nginx Webserver zu aktivieren, wird die Datei /etc/nginx/sites-available/default mit dem nano Editor editiert und die folgenden Zeilen entkommentiert ("#" am Zeilenanfang entfernen) bzw. angepasst:
Und in der gleichen Datei den Abschnitt der PHP Konfig anpassen:
Alle Änderungen sichert man im nano Editor dann mit der Tastenkombination <ctrl-o> und <ctrl-x>
Im nächsten Schritt editiert man im Verzeichnis /etc/php/7.4/fpm/ die Datei php.ini und passt die folgenden Parameter an:
date.timezone = Europe/Berlin
memory_limit = 400M
max_execution_time = 60

Tip: Mit <CTRL-W> kann man im nano Editor bequem nach diesen Parametern suchen. 😉
Das o.a. Setting wiederholt man mit der php.ini Datei im Verzeichnis /etc/php/7.4/cli/ (außer memory_limit)

Im Webserver HTML Root Verzeichnis /var/www/html/ erzeugt man mit dem nano Editor abschliessend eine Datei phpinfo.php mit folgendem Inhalt:
Sie dient zum Testen von PHP.
Mit systemctl restart php7.4-fpm.service und systemctl restart nginx startet man PHP und den Webserver neu, um die Konfigs einzulesen.
Im Webbrowser öffnet man diese Testdatei mit http://<ip_adresse>/phpinfo.php was dann die folgende PHP Statusseite anzeigen sollte:
phpinfo
Dies zeigt das der Webserver und PHP als Cacti Fundament sauber laufen!


back-to-topCacti Komponenten installieren


Die für die Cacti Installation erforderlichen Pakete und die Customizinghinweise sind HIER gelistet.
Man installiert jetzt alle weiteren erforderlichen Pakete dazu:
apt install rrdtool mariadb-server snmp snmpd php-fpm php-mysql php-snmp php-xml php-mbstring php-json php-gd php-gmp php-zip php-ldap php-curl
Dann kopiert man mit
die aktuelle Cacti Version in sein Arbeitsverzeichnes und bewegt es anschliessend mit
mv cacti /var/www/html
In das Webserver Root Verzeichnis. Abschliessend setzt chown -R www-data:www-data /var/www/html/cacti die richtigen User- und Gruppenrechte.

back-to-topCacti Datenbank erzeugen

Die MariaDB bzw. MYSQL Datenbank erzeugt man indem die folgenden Zeilen gemäß o.a. Anleitung zeilenweise per Cut and Paste eingegeben werden.
(Groß- Kleinschrift unbedingt beachten!)
Ein mysql -u root cacti < /var/www/html/cacti/cacti.sql schliesst das Setup der SQL Datenbank ab.

back-to-topMariaDB Datenbank customizen

Für den Betrieb mit Cacti sind einige Performance Parameter der SQL Datenbank anzupassen. Cacti prüft bei der Erstinstallation diese Parameter und weist bei Bedarf automatisch auf das richtige Setup hin. Um das gleich korrekt vorab zu erledigen editiert man die Datei
/etc/mysql/mariadb.conf.d/50-server.cnf
(ACHTUNG: " ;-server" Datei!)
und ändert bzw. ergänzt die folgenden Parameter im Abschnitt "[mysqld]":
Ist das alles erledigt wird die Datenbank mit systemctl restart mariadb.service neu gestartet um die Änderungen zu aktivieren.

back-to-topCacti Installations Datei für Datenbank anpassen

Dafür wechselt man mit cd /var/www/html/cacti/include in das Include Verzeichnis und kopiert mit
cp config.php.dist config.php
die Cacti Default Installationsdatei in eine Aktuelle.
Diese Datei config.php muss dann mit dem nano Editor noch an den Stellen für den Datenbank User und Passwort angepasst werden, da oben die Datenbank mit dem Usernamen "cacti" und Passwort "cacti" angelegt wurde.
(Hier machen ggf. bessere und sicherere Credentials Sinn!)


back-to-topCacti Installation starten


Sind die o.a. Anpassungen alle gemacht worden kann man nun final die Cacti Installation über den Webbrowser mit http://<ip_adresse>/cacti starten.
Der Rest ist dann vollständig Menü geführt im GUI.
  • Der Parameter Check von PHP und Datenbank sollte überall einen grünen Daumen bzw. grünen Haken ergeben:
cacticheck
(Es kann vorkommen das dort noch eine Fehlermeldung "ERROR: Your MySQL TimeZone database is not populated. Please populate this database before proceeding." auftaucht.
Diese fixt man mit dem Kommando: mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql und lässt die Checkseite mit Klick auf den Kreispfeil rechts oben neu laden)

  • Installationstyp ist ein Primary Server:
servercheck
  • Verzeichnisse sollten alle stimmen:
directorycheck2
  • Und die finale Installation nickt man mit einem Haken ab:
finalcheck
Tip:
Zwischendurch fragt die Installation auch danach welche IP Segmente automatisch nach SNMP Komponenten gescannt werden sollen. Hier kann man diese IP Netze gleich eintragen. (Dies ist für die Installation nicht zwingend und kann später im Setup nachgeholt werden!)
snmp-scan
Ist alles sauber durchgelaufen landet man auf der Cacti Login Seite und loggt sich mit admin/admin dort ein.

Damit ist Cacti dann fertig installiert.
Im Setup Menü unter Configuration kann, wer möchte, weitere individuelle Anpassungen des Cacti GUIs vornehmen.


back-to-topCacti Polling Daemon starten


Cacti ist primär eine SNMP Management Software wie Nagios, Observium, Zabbix u.a. Es fragt im 5 Minutenabstand die konfigurierten Komponenten und holt deren Betriebsdaten per SNMP um sie grafisch anzuzeigen.
Da Debian Distros auf Systemd basieren sollte man diesen Polling Dienst auch als Systemd Dienst installieren ohne Cron. Die Schritte dafür sind schnell erledigt:
  • Zuerst erzeugt man mit touch /etc/default/cactid eine ID Datei.
  • Danach kopiert man die fertige Daemon Datei mit cp -p /var/www/html/cacti/service/cactid.service /etc/systemd/system ins Systemd Systemverzeichnis.
  • Wichtig: Bevor man den Daemon startet, die richtigen Dateipfade in der Datei checken! (less /etc/systemd/system/cactid.service)
[Unit]
Description=Cacti Daemon Main Poller Service
After=network.target

[Service]
Type=forking
User=www-data
Group=www-data
EnvironmentFile=/etc/default/cactid
ExecStart=/var/www/html/cacti/cactid.php
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

  • Danach aktiviert man den Dienst mit systemctl enable cactid das er beim Booten automatisch startet und startet ihn mit systemctl restart cactid
Ein systemctl status cactid zeigt dann ob der Dienst läuft:
Geschafft!!
Nach 10 Minuten sollten unter "Graphs" die ersten Anzeigen für den eigenen Cacti Host auftauchen:
locgraphs
Damit ist der erste Teil mit der vollständigen Lösung zum Management SNMP fähiger Netzwerk Komponenten abgeschlossen.

Im zweiten Teil folgt nun die Erweiterung der Cacti Installation mit den NetFlow- und Mikrotik Plugins.
Das Mikrotik Plugin ist zur Auswertung nur von NetFlow Daten nicht erforderlich! Es ergänzt lediglich einige produktspezifische Templates nur für das SNMP Management von Mikrotik Produkten. Wer nur NetFlow Daten auswerten will kann das Mikrotik Plugin weglassen.


back-to-topTeil 2: NetFlow Plugin installieren


Um das NetFlow Plugin zu installieren wechselt man ins Cacti Plugins Verzeichnis cd /var/www/html/cacti/plugins
Aktuell ist derzeit das Plugin Release 3.3 welches mit
als .zip Datei ins Cacti Plugins Verzeichnis runtergeladen wird.
Anschliessend wird das ZIP Archiv mit unzip v3.3.zip entpackt und mit mv plugin_flowview-3.3 flowview in "flowview" umbenannt.
Das zip Archiv kann man danach mit rm v3.3.zip löschen.

back-to-topNetFlow Capture Dienst starten

Damit Cacti eingehende NetFlow/IPFIX Daten verarbeiten kann, muss ein NetFlow Capture Daemon über Systemd gestartet werden. Das ist, wie oben analog zum cactid Polling Daemon, ebenso schnell erledigt.
Zuerst wechselt man ins /var/www/html/cacti/plugins/flowview/service FlowView Service Verzeichnis und kopiert dort mit cp flow-capture.service /lib/systemd/system den fertigen Systemd Daemon File ins Systemd lib Systemverzeichnis.
Achtung:
Auch hier ist der korrekte Pfad wichtig, den man mit less /lib/systemd/system/flow-capture.service im Eintrag:
ExecStart=/usr/bin/php -q /var/www/html/cacti/plugins/flowview/service/flow-capture --systemd

überprüft!
Mit systemctl enable flow-capture sagt man Systemd wieder das der Dienst beim Booten automatisch gestartet werden soll und startet ihn dann im laufenden Betrieb mit systemctl restart flow-capture. Ob der Dienst dann fehlerfrei rennt zeigt wieder ein systemctl status flow-capture

back-to-topNetFlow Plugin in Cacti aktivieren

Loggt man sich nun erneunt ins Cacti GUI ein, sieht man unter "Configuration - Plugins" automatisch das FlowView Plugin:
flowplug
Hier ist das "Zahnrad" links zum Installieren und darauf dann der rechts daneben auftauchende grüne Haken zu klicken um das Plugin zu aktivieren:
flowplug2


back-to-topMikrotik Plugin installieren


Die Schritte zur Installation des Mikrotik Plugins sind analog zum NetFlow Plugin.
Ins Verzeichnis /var/www/html/cacti/plugins wechseln und mit
das Plugin runterladen. (Aktuell ist die Version 2.4)
Archiv mit unzip v2.4.zip entzippen und mit mv plugin_mikrotik-2.4 mikrotik umbenennen. (v2.4.zip Datei danach mit rm löschen)
Zum Schluss ins Verzeichnis /var/www/html/cacti/cli wechseln und dort mit
php ./import_package.php --filename=/var/www/html/cacti/plugins/mikrotik/templates/MikroTik_Device.xml.gz
Die Mikrotik Template Dateien in Cacti importieren.

Danach, wie oben, in "Configuration - Plugin" zuerst das "Zahnrad" links zum Installieren und dann den rechts daneben auftauchenden grünen Haken klicken um das Plugin zu installieren und aktivieren:
Cacti erkennt dann über das Mikrotik Autodiscovery Protokoll automatisch Mikrotik Geräte im Netzwerk.
camikro
Damit ist dann Cacti mit allen seinen erforderlichen Komponenten erfolgreich installiert.

Der abschliessende 3. Teil beschreibt die NetFlow/IPFIX Konfiguration am Beispiel von Cisco und Mikrotik Netzwerk Komponenten.
Andere NetFlow/IPFIX supportende Geräte können natürlich genauso integriert werden.


back-to-topTeil 3: NetFlow Konfiguration


Die NetFlow Konfiguration besteht aus 2 Schritten. Zum ersten die auf dem Netzwerk Endgerät, die die IP Adresse des Kollektors (Cacti), Port und Version definiert und zum zweiten auf dem Kollektor, der die Daten dieses Gerätes annehmen und darstellen soll.
NetFlow kommt mit mehreren Protokollversionen daher. Das Tutorial beschränkt sich nur auf die aktuellen Versionen 9 und 10 (IPFIX)!

back-to-topNetFlow Konfiguration Cisco

Cisco hat 2 Optionen zur Netflow Konfiguration. Einmal eine statische Konfig die rein Interface bezogen ist und einmal die modernere "Flexible NetFlow" Konfiguration mit mehr Optionen. Das Tutorial beschreibt nur die aktuellere Flexible Option.
!
flow record FNFv4DATA
description NetFlow Data
match ipv4 tos
match ipv4 protocol
match ipv4 source address
match ipv4 destination address
match transport source-port
match transport destination-port
match flow direction
match interface input
collect interface output
collect counter bytes long
collect counter packets long
collect transport tcp flags
collect routing next-hop address ipv4
collect ipv4 source prefix
collect ipv4 destination prefix
collect timestamp sys-uptime first
collect timestamp sys-uptime last
!
flow exporter FNF_EXPORT
description NetFlow Collector
destination 192.168.1.35
(source Loopback1)
transport udp 9996
!
flow monitor FNFv4
description NetFlow Monitor
exporter FNF_EXPORT
cache timeout active 600
record FNFv4DATA
!
sampler FNF
description NetFlow Sampler
mode random 1 out-of 10

!
interface Vlan1
description Local LAN
ip address 192.168.1.1 255.255.255.0
ip flow monitor FNFv4 sampler FNF input
ipv6 address provider-v6-prefix ::1/64
!

Die Flexibilität wird durch die Modularisierung der Konfig erreicht. So ist es möglich auch mehrere Kollektoren auf unterschiedlichen Interfaces zu definieren. Eine deutlicher Vorteil zur statischen Interface Konfig Option.
Die Namen wie hier im Beispiel "FNF.." sind frei nach Geschmack wählbar. (FNF steht hier lediglich für "Flexible NetFlow")
  • Die "Record" Parameter bestimmen welche Flow Daten erfasst und an den Kollektor (Cacti) gesendet werden.
Tip: Die Angabe eines dedizierten Records, wie hier im Beispiel, ist nicht unbedingt erforderlich, da Cisco schon fertige Record Templates im IOS hat. Statt des dedizierten Records wie hier, kann man in der Monitor Definition alternativ einen Default Record wie z.B. netflow ipv4 original-input verwenden. Dieser wertet zusätzlich BGP AS Daten uvam. aus, die für eine klassische Enterprise Konfig aber nicht relevant sind. Deshalb wurde hier im Konfig Beispiel ein etwas "schlankerer", eigener Record verwendet.
  • Die "Exporter" Parameter definieren die IP des Kollektors (Cacti), den UDP Port sowie die Protokoll Version. (Die NetFlow üblichen Ports sind UDP 2055, 9995 und 9996. UDP 4739 ist der Default Port für IPFIX)
  • Die "Monitor" Parameter kombinieren den Record und Exporter und werden auf dem zu messenden Interface angegeben.
  • Wichtig ist der "Sampler". Würde man keinen Sampler definieren, dann würde NetFlow JEDES Paket erfassen. Was auf einem Labor Testsystem noch tolerierbar wäre, kann auf einem intensiv genutzten Router oder Switch je nach Leistung und Portspeed zum Kollaps führen.
Deshalb muss auf aktiven Produktivsystemen, egal welcher Hersteller, unbedingt ein Sampler definiert werden, der nur jedes x-te Paket mit einer Zufallskomponente auswählt um den Router oder Switch nicht zu überlasten! Als Beispiel ist hier jedes 10te Paket angegeben.
Dieser Wert MUSS je nach Portlast und Portspeed ggf. höher definiert werden! Sampledaten werden prinzipbedingt dann umso genauer, je länger sie erfasst werden.
Ob die Erfassung der Flow Daten klappt kann man auf dem Cisco direkt auch im CLI checken. Das klappt mit dem folgenden Kommando bezogen auf den obigen Monitor Namen:
show flow monitor FNFv4 cache
Bzw. mit einem tabellarischen Output:
show flow monitor FNFv4 cache format table

back-to-topNetFlow Konfiguration Mikrotik

Die Mikrotik Konfiguration ist quasi identisch. Man definiert wieder das zu überwachende Interface, die Kollektor Server IP (Cacti), die Protokollversion und den UDP Port für die NetFlow Daten.
mtflowneu


back-to-topNetFlow Auswertung mit Cacti


Um jetzt die NetFlow Daten anzuzeigen geht man lediglich in den Menüpunkt "FlowView" und definiert dort über den Punkt "Listener" seine NetFlow Devices.
mtlistener
Wichtig ist hier auf die Übereinstimmung von UDP Port und die korrekte IP zu achten. Es ist empfehlenswert netzwerkweit nur einen UDP Port und eine Protokoll Version (Ver. 9) durchgängig für alle Geräte zu wählen um das Management einfach zu halten.
Der Status "Up" oder "Down" zeigt an ob aktiv NetFlow Daten der Geräte am Kollektor eingehen. Sowie ein NetFlow Paket durch die Listener Adresse empfangen wurde wechselt der Status auf "Up".

back-to-topNetFlow Filter anlegen

Zum Anzeigen der NetFlow Daten ist es wegen der Fülle der übermittelten Parameter erforderlich Filter anzulegen die die Anzeige entsprechend customizen.
Die Kombinationen und Sortieroptinen sind vielfältig, je nachdem nach welchen Daten man filtern möchte. Der Übersicht halber zeigt das folgende Beispiel 2 einfache Filter die die Top 20 Flows mit dem meisten Traffic und die Top 20 HTTP Talker anzeigen.
mtfilter
Sortiert man z.B. nur nach den Destination Ports bekommt man eine Übersicht der am meisten genutzen Protokolle im Netzwerk usw. usw.

back-to-topNetFlow Auswertungen

Die Auswertungen zeigt dann ein Klick auf den Reiter "FlowView" am obigen Rand und die Auswahl des gewünschten Filters im Pulldown Menü "Filter".
Beispiel Top 20 IP Flows
cactiflow2.
Beispiel Top 20 HTTP Talker
httptopt2.

back-to-topBeispiele anderer NetFlow Produkte

Als Alternativbeispiel ein Screenshot der NetFlow Anzeige in Paessler PRTG:
prtgnf9
Bzw. Open Source nfdump Tools mit nfSen:
nfsen


back-to-topWeiterführende Links


Grundlagen zu NetFlow:
https://de.wikipedia.org/wiki/Netflow

Installationstips Nginx u. Cacti:
https://computingforgeeks.com/how-to-install-cacti-on-debian-with-nginx/

NetFlow mit Mikrotik:
https://mum.mikrotik.com/presentations/LB19/presentation_6352_1548734037 ...

Cisco NetFlow Setup:
https://www.youtube.com/watch?v=Qd_K95QUfGQ

sFlow Daten visualisieren:
https://inmon.com/products/sFlowTrend.php
https://administrator.de/tutorial/netzwerk-management-server-mit-raspber ...

Netzwerk Management mit Raspberry Pi:
https://administrator.de/tutorial/netzwerk-management-server-mit-raspber ...

Content-Key: 3915529709

Url: https://administrator.de/contentid/3915529709

Ausgedruckt am: 25.09.2022 um 12:09 Uhr