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 die Einrichtung und grafische Auswertung der NetFlow Protokolle auf Mikrotik Produkten und auch der OPNsense Firewall.
Auch die pfSense Firewall supportet den Export von NetFlow Daten. Das dafür erforderliche softflowd Package muss über die lokale Package Verwaltung der FW nachinstalliert werden.
Diese Beispiele gelten stellvertretend für alle anderen Hersteller mit integriertem NetFlow/IPFIX Support.
Die Visualisierung der IP Flow Daten 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 NetFlow 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 basierten Linux Distribution (Bullseye). (Ubuntu, Raspberry Pi (ab HW 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. Es sind lediglich nur noch die zusätzlichen Plugins zu installieren wie hier beschrieben und das System ist mit allen Settings 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. Dieser Weg bedeutet etwas mehr Aufwand und Customizing aber der 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 User Mode (sudo su) ausführen!)

back-to-topNginx Webserver mit PHP

Die Cacti Basis ist ein laufender Webserver mit PHP. Es ist also erforderlich diesen zuerst zu installieren und auf Funktion zu testen.
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 php8.0-fpm

(Hinweis zu PHP: Generisch installiert Debian PHP7.4 was ab November 22 nicht mehr supportet wird. Es ist daher ratsam gleich auf 8.x zu gehen was aber dediziert angegeben werden muss. Leider ist das 8.0er Package (noch) nicht in der 64Bit Version des Raspberry OS enthalten. Hier installiert man dann 7.4. Sprich das "8.0" in den PHP Paketen ist dann durch "7.4" zu ersetzen!)

back-to-topPHP aktivieren und customizen

Um PHP im Nginx Webserver zu aktivieren, wird mit dem nano Editor die Datei /etc/nginx/sites-available/default editiert und die folgenden Zeilen im Abschnitt server {... entkommentiert ("#" am Zeilenanfang entfernen) bzw. angepasst:
# Add index.php to the list if you are using PHP
index index.html index.htm index.php; 
In der gleichen Datei den Abschnitt der PHP Konfig ebenfalls per nano anpassen und die Kommentarzeichen "#" in den folgenden Zeilen entfernen:
# pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php8.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        } 
(Bei PHP7.4 dann "php7.4-fpm.sock"!)
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/8.0/fpm/ die Datei php.ini und passt die folgenden Parameter an:
(Groß- Klein beachten!)

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/8.0/cli/ (außer memory_limit)

Im Webserver HTML Root Verzeichnis /var/www/html/ (Wechsel dahin mit cd /var/www/html) erzeugt man mit dem nano Editor abschliessend eine Datei phpinfo.php mit folgendem Inhalt:
<?php
phpinfo();
?> 
Sie dient zum Testen von PHP.
Mit systemctl restart php8.0-fpm.service und systemctl restart nginx startet man per Kommandozeile PHP und den Webserver neu, um die geänderten Konfigs einzulesen.
Im Webbrowser öffnet man jetzt diese Testdatei mit Eingabe von http://<ip_adresse>/phpinfo.php im Browserfenster, was dann die folgende PHP Statusseite anzeigen sollte:
phpinfo8
Dies zeigt das der Webserver und PHP als Cacti Fundament sauber laufen!
Tip: 😉
Der Raspberry oder auch jegliche Linux Distribution macht sich, wie auch Windows oder Apple Mac Rechner, automatisch im Netzwerk per mDNS mit dem Servernamen <hostname>.local allen anderen Endgeräten bekannt. Statt der schwer zu merkenden IP Adresse kann man auch immer http://<hostname>.local/phpinfo.php im Browser oder z.B. bei einem Ping usw. eingeben.
Wer also z.B. seinem Rechner den Hostnamen "meinraspi" gegeben hat, erreicht diesen dann immer statt IP auch mit meinraspi.local im lokalen Netzwerk.



back-to-topCacti Komponenten installieren


Die für die Cacti Installation erforderlichen Pakete und die Customizinghinweise sind HIER gelistet.
(Die PHP Version sollte, wie oben in den Anmerkungen zur PHP Version schon empfohlen, auf 8.0 angepasst werden. Da wir den Nginx als Webserver nutzen entfällt die Installation des Apachen2!)
Man installiert jetzt alle weiteren erforderlichen Pakete hinzu:
apt install rrdtool mariadb-server snmp snmpd php8.0-fpm php8.0-mysql php8.0-snmp php8.0-xml php8.0-mbstring php8.0-json php8.0-gd php8.0-gmp php8.0-zip php8.0-ldap php8.0-curl

Im nächsten Schritt kopiert man mit
git clone -b 1.2.x  https://github.com/Cacti/cacti.git
die aktuelle Cacti Version in sein Arbeitsverzeichnes. Das Git Cloning legt automatisch ein Downloadverzeichnis "cacti" an.
Dieses Download Verzeichnis bewegt man anschliessend mit
mv cacti /var/www/html
in das Webserver Root Verzeichnis.
Wer möchte kann es auch gleich direkt in das Webserver Root Verzeichnis mit dem o.a. Kommando klonen und erspart sich damit das mv Kommando.
Abschliessend setzt ein chown -R www-data:www-data /var/www/html/cacti die richtigen User- und Gruppenrechte für das Cacti Verzeichnis.

back-to-topCacti Datenbank erzeugen

Mit mysql -u root -p und Eingabe des Root Passwords wechselt man in die Kommando Oberfläche der SQL Datenbank.
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!)
CREATE DATABASE cacti DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
GRANT ALL PRIVILEGES ON cacti.* TO 'cacti'@'localhost' IDENTIFIED BY 'cacti';
GRANT SELECT ON mysql.time_zone_name TO cacti@localhost;
ALTER DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
FLUSH PRIVILEGES;
Mit dem Kommando quit verlässt man die Kommando Oberfläche der SQL Datenbank wieder.
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: 50-server Datei!)
und ändert bzw. ergänzt die folgenden Parameter im Abschnitt "[mysqld]":
collation-server = utf8mb4_unicode_ci

max_heap_table_size = 30M
tmp_table_size = 30M
join_buffer_size = 60M

innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_buffer_pool_size = 465M
innodb_doublewrite = OFF
innodb_flush_log_at_timeout = 3
innodb_read_io_threads = 32
innodb_write_io_threads = 16
innodb_io_capacity = 5000
innodb_io_capacity_max = 10000 
Ist das alles erledigt werden diese Änderungen gespeichert (im nano Editor <ctrl-o> und <ctrl-x>) und die Datenbank abschliessend 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 config.php Datei 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!)
$database_type  = 'mysql';
$database_default  = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cacti';
$database_password = 'cacti';
$database_port  = '3306';
$database_retries  = 5;
$database_ssl  = false;
$database_ssl_key  = '';
Auch hier wieder nach der Anpassung die Datei speichern.


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 Default Username ist admin und das Passwort ist ebenfalls admin.
Der Rest ist dann vollständig Menü geführt im Browser GUI.
  • Der Parameter Check von PHP und Datenbank sollte überall einen grünen Daumen bzw. grünen Haken ergeben. Sollten hier Fehlermeldungen auftauchen die oben genannten PHP und MySQL/MariaDB Parameter nochmals überprüfen!
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

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 fehlerfrei läuft:
root@raspi4:/home/user# systemctl status cactid
● cactid.service - Cacti Daemon Main Poller Service
     Loaded: loaded (/etc/systemd/system/cactid.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-09-16 18:06:14 CEST; 49min ago
   Main PID: 2730 (php)
      Tasks: 1 (limit: 1883)
        CPU: 27.363s
     CGroup: /system.slice/cactid.service
             └─2730 php /var/www/html/cacti/cactid.php 
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 Installation des Cacti SNMP Management Servers und seinem WebGUI abgeschlossen. Ein Management aller SNMP fähigen Komponenten ist damit möglich.

Im zweiten Teil folgt nun die Erweiterung der Cacti Installation mit den NetFlow- und Mikrotik Plugins.
Zur ausschliesslichen Auswertung von NetFlow Daten ist das Mikrotik Plugin nicht erforderlich! Es ergänzt lediglich einige produktspezifische SNMP Templates für das 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
wget https://github.com/Cacti/plugin_flowview/archive/refs/tags/v3.3.zip
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 fehlerfrei rennt zeigt wieder ein systemctl status flow-capture
root@raspi4:/home/user# systemctl status flow-capture.service
● flow-capture.service - Flow Capture Service for Cacti
     Loaded: loaded (/lib/systemd/system/flow-capture.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) since Fri 2022-09-16 18:53:50 CEST; 484ms ago
    Process: 4010 ExecStart=/usr/bin/php -q /var/www/html/cacti/plugins/flowview/service/flow-ca>
        CPU: 186ms 

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
wget https://github.com/Cacti/plugin_mikrotik/archive/refs/tags/v2.4.zip
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 Konfigurationen


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 IOS

Cisco hat 2 Optionen zur Netflow Konfiguration. Einmal eine statische Konfig die rein Interface bezogen ist und zum anderen die modernere, modulare "Flexible NetFlow" Konfiguration unter Version 9 und 10 mit mehr Optionen wie Loopback Interface etc.. Das Tutorial beschreibt die moderne, aktuellere Flexible Option.
!
flow record FNF_RECORD
description Erfasste NetFlow Daten
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
collect interface output
collect counter bytes long
collect counter packets long
!
flow exporter FNF_EXPORT
description NetFlow Export Einstellungen
destination <ip_adr_kollektor>
--> Hier die IP Adresse des Kollektors eintragen
(source Loopback0)
--> Optional, wenn Loopback Interface verwendet wird.
transport udp 9996
--> UDP Port des Kollektors.
!
flow monitor FNFv4
description NetFlow Monitor v4
exporter FNF_EXPORT
cache timeout active 60
cache timeout inactive 15
record FNF_RECORD
!
sampler FNF
description NetFlow Sampler
mode random 1 out-of 30
--> Bitte Anmerkungen zur Paket Samplerate beachten!
!
interface Vlan1
--> Anpassen wenn Traffic über andere Interfaces erfasst werden soll
description Local LAN
ip address 192.168.1.1 255.255.255.0
(ipv6 address 2001:DB8:2:ABCD::2/48)
--> Optional, wenn IPv6 aktiv.
ip flow monitor FNFv4 sampler FNF input
--> Erfasst nur input Daten. input output beide Richtungen.
!

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 kosmetischem 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 "FNFv4DATA", 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 auch 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 die kein BGP nutzen nicht unbedingt relevant sind. Deshalb wurde hier im Konfig Beispiel ein etwas "schlankerer", eigener Record verwendet.
  • Die "Exporter" Parameter definieren die IP des Kollektors (Cacti usw.), den UDP Port sowie die Protokoll Version. (Die NetFlow v.9 üblichen Ports sind UDP 2055, 9995 und 9996. UDP 4739 ist der Default Port für IPFIX, NetFlow Ver.10)
  • Die "Monitor" Parameter kombinieren das Record und Exporter Template. Der Monitor Name wird auf dem zu messenden Interface angegeben.
  • Samplerate: Wichtig ist der "Sampler". Würde man keinen Sampler definieren, dann würde NetFlow JEDES Datenpaket 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 30te Paket angegeben.
Dieser Wert MUSS je nach Portlast und Portspeed ggf. höher definiert werden! Eine feste Angabe zu machen ist schwer da Lastdaten immer individuell sind. In klassischen Heimnetzen reicht sicher ein Wert um die 30 plus, minus.
Sampledaten werden prinzipbedingt dann umso genauer, je länger sie erfasst werden.

Ob die Erfassung der Flow Daten klappt kann man auf dem Cisco auch direkt auf dem 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 für IPv6 erweitern

Um die o.a. Konfiguration auf IPv6 Flow Daten zu erweitern fügt man lediglich einen zusätzlichen Record und Monitor für IPv6 hinzu.
!
flow record FNF_RECORDv6
match ipv6 traffic-class
match ipv6 protocol
match ipv6 source address
match ipv6 destination address
match transport source-port
match transport destination-port
collect counter bytes long
collect counter packets long
!
flow monitor FNFv6
description NetFlow Monitor v6
exporter FNF_EXPORT
cache timeout active 60
cache timeout inactive 15
record FNF_RECORDv6
!
interface Vlan1
description Local LAN
ip address 192.168.1.1 255.255.255.0
ipv6 address 2001:DB8:2:ABCD::2/48
ipv6 flow monitor FNFv6 sampler FNF input

ip flow monitor FNFv4 sampler FNF input
!


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
Achtung: Das zu messende Interface ist hier auf das Bridge Interface gesetzt was sich an der MT Default Konfig fürs lokale LAN orientiert das lokale LAN Ports in einer Bridge zusammenfasst. Wer hier eine VLAN Infrastruktur nutzt muss hier natürlich das entsprechende VLAN Interface auswählen oder z.B. sein WAN je nachdem wo Traffic Flows gemessen werden sollen!

back-to-topNetFlow Konfiguration OPNsense / pfSense Firewall

Das gleiche Konfig Bild für das NetFlow Setup sieht man auch wieder bei der OPNsense Firewall.
Die "Listening Interfaces" sind, wie der Name schon selber sagt, die deren IP Flows gemessen werden sollen.
nfopns


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 o. 10) 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 Sortieroptionen 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 genutzten Protokolle im Netzwerk usw. usw.
Mit dem Filter kann man frei bestimmen welche Kombination von Netzwerk Daten man an dem gewählten Monitoring Interface darstellen möchte.

back-to-topNetFlow Auswertungen

Die Auswertung zeigt dann ein Klick auf den Reiter "FlowView" am obigen Rand. Dann wählt man den gewünschten Filter im Pulldown Menü "Filter" und die Zeitspanne.

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

NetFlow best Practise:
https://community.cisco.com/t5/other-network-architecture-subjects/11-ne ...

Cisco NetFlow Configuration Guide:
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/netflow/configuration/ ...

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
https://www.youtube.com/watch?v=TZUW5lqzZDc

sFlow Daten visualisieren mit freien Tools:
https://inmon.com/products/sFlowTrend.php
Netzwerk Management Server mit Raspberry Pi
https://inmon.com/technology/sflowVersion5.php

Netzwerk Management mit Raspberry Pi:
Netzwerk Management Server mit Raspberry Pi

Multicast Datenströme im Netzwerk generieren und testen
Fehlersuche im lokalem Netzwerk (RSTP, MRP, Multicast)

Cisco Setup Tutorial:
Cisco 880, 890 und ISR Router Konfiguration mit xDSL, Kabel oder FTTH Anschluss plus VPN und IP-TV

Mikrotik Setup Tutorial:
Mikrotik VLAN Konfiguration ab RouterOS Version 6.41

FritzBox Daten per Shellscript auslesen:
Powershell: FritzBox über TR-064 im Netzwerk konfigurieren und auslesen

Content-Key: 3915529709

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

Printed on: April 24, 2024 at 15:04 o'clock

Member: staybb
staybb Oct 04, 2022 at 07:15:38 (UTC)
Goto Top
Danke für die Super Anleitung. Ich konnte mit PRTG und einer WatchGuard Firewall den NetFlow Traffic ganz einfach auswerten lassen!