Raccogliere il traffico di molti router con nprobe ed ntopng
Se si vogliono raccogliere dei Netflow da molti router, ci si può scontrare con alcuni limiti, ad esempio:
- nprobe nella versione PRO, può raccogliere netflow da un massimo di 4 IP
- ntop nella versione Enterprise L può supportare al massimo 32 interfacce
Per aggirare questi limiti, si adottano diverse strategie:
- si utilizzano più interfacce di nprobe su porte diverse che vengono servite da regole iptables in base alll'indirizzo ip sorgente del flusso
- si evita di aggregare il traffico per interfaccia, ma lo si analizza per flow exporter (router) o interfaccia SNMP del router
Configurazione di NTOPNG
Ntopng deve essere configurato con un Collector ZMQ (attenzione alla "c")
vi /etc/ntopng/ntopng.conf.d/ntopng-nprobe.conf
-i tcp://127.0.0.1:5556c -m 10.0.0.0/8,172.16.0.0./12,192.168.0.0./16
Configurazione dei router
Tutti i router devono essere configurati per inviare i netflow alla porta 9995
Tutti i router devono essere configurati come SNMP devices in NTOPNG, ed eventualmente le loro interfacce arricchite tramite lo script apposito.
Configurazione di nprobe multipli
Si crea un file CSV nel formato:
indirizzo_ip_del_router;porta_istanza_nprobe
Esempio
10.11.12.11;10001 10.11.12.12;10001 10.11.12.13;10001 10.11.12.14;10001 10.11.12.15;10002
Avendo cura di assegnare al massimo 4 ip ad una porta nprobe.
Il seguente script si occupa di leggere il file CSV, creare le regole iptables e le configurazioni di nprobe:
vi /etc/nprobe/nprobe_map.sh
#!/bin/bash
# Flushes NAT table
iptables -t nat -F
INPUT=routers.csv
OLD_PORT="0"
OLDIFS=$IFS
IFS=';'
# Test if csv input file is present
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
# Read fileds from CSV
while read IP PORT
do
echo "$IP -> $PORT"
# Creates iptables rules to redirect flows from router ip to the desires nprobe local instance
iptables -t nat -A PREROUTING -p udp -i eno12399 --dport 9995 -s $IP -j DNAT --to-destination 172.30.77.216:$PORT
# Creates nprobe instance config and start it if it does not exist
if [ "$PORT" -ne "$OLD_PORT" ]
then
echo "Create nprobe-${PORT}.conf"
cat > /etc/nprobe/nprobe-${PORT}.conf <<EOFile
--zmq=tcp://127.0.0.1:5556
-T=@NTOPNG@
-i=none
-n=none
--collector-port=${PORT}
--snmp-mappings /etc/nprobe/snmp_mappings.txt
--zmq-probe-mode
EOFile
echo "Enable and restart nprobe-${PORT}"
systemctl daemon-reload
systemctl enable nprobe@${PORT}
systemctl restart nprobe@${PORT}
fi
OLD_PORT=$PORT
done < $INPUT
IFS=$OLDIFS
# Restart also ntopng. Not needed, but ...
echo "Restart ntopng"
systemctl restart ntopng
- Verificare che non ci siano errori in ntopng e nelle singole istanze di nprobe:
journalctl -f -u ntopng
journalctl -f -u nprobe@10001