FastFlowIPs

FastFlowIPs

🚨 FastFlowIPs

Come è iniziato tutto

Open-source o non open-source - questo è il dilemma.

L’eterno dilemma tra prendere qualcosa di già pronto e costruire il proprio è diventato ancora più acuto nell’era degli strumenti AI infiniti. Ma dovresti davvero scrivere qualcosa tu stesso? Non c’è una risposta universale. Tuttavia, se butti le tue paure in /dev/null, l’idea non sembra più così pazzesca.

La nostra storia è iniziata con un aggiornamento di VyOS sui router di produzione alla versione 1.5.x (circinus). Dopo questo processo già stressante, abbiamo scoperto che parte delle nostre regole firewall si erano silenziosamente auto-eliminate. E la parte divertente - era la stessa parte specifica su ogni router. Quindi abbiamo aperto a malincuore VyOS Project Updates, dove ci siamo imbattuti in questo: FastNetMon-based service ids ddos-protection is removed from rolling and deprecated in LTS releases (T7241):

For quite a while, we had a CLI for configuring FastNetMon — a DDoS detection daemon. However, that integration was never especially deep, and we do not see a path to significant improvement.
The long-term plan is to move FastNetMon to an addon, once we finalize a mechanism for allowing addons to extend the system CLI. As for built-in components, the approach will be “quality over quantity” — it’s better to have a smaller number of integrations that serve a large number of users and play well together, but to provide an option for everyone to install or develop integrations for their own needs.

Il problema non era estremamente urgente o critico, ma come broker IPv4 e provider di hosting, avevamo bisogno di tale monitoraggio. Pertanto, abbiamo deciso di agire immediatamente.

Dopo aver attraversato il ciclo tipico - negazione, rabbia, contrattazione - abbiamo finalmente accettato la perdita di service ids ddos-protection e tentato di far risorgere FastNetMon Community manualmente. Fu allora che arrivò la depressione. La versione Community si rifiutava di installarsi per motivi che, diciamolo francamente, tutti già sospettavano. E nessuno aveva fretta di comprare la versione commerciale.

Il problema non era catastrofico, ma per noi come broker IPv4 e provider di hosting, tale monitoraggio era essenziale. Quindi la decisione fu chiara: agire immediatamente.

FastNetMon: ti amiamo, ma…

La nostra relazione con FastNetMon è iniziata non molto tempo fa, ma lo strumento ha rapidamente conquistato i nostri cuori e fornito valore reale - anche se divorava costantemente circa il 30% della nostra CPU.

La visibilità del traffico era perfetta, Grafana brillava di metriche, e la vita sembrava semplicemente un po’ più tranquilla. E ora? Ora stiamo fissando dashboard di traffico vuoti e, per qualche motivo, stiamo volontariamente scegliendo la strada “rendi la vita più difficile”. Beh… non volontariamente. Piuttosto a forza. E come sempre, inizi a ricordare tutti i difetti solo quando perdi qualcosa.

FastNetMon generalmente soddisfaceva le nostre aspettative - e le superava persino. Ma nonostante tutti i suoi benefici, raccoglieva una pila massiccia di dati assolutamente inutili, trasformando i dashboard in un carnevale rumoroso di numeri e grafici. E poi c’era quel carico CPU - non catastrofico, ma abbastanza fastidioso. Quindi non abbiamo mai formato un “sì” o “no” fermo. L’anima desiderava semplicità e leggerezza, non un altro abbonamento e ottimizzazioni ogni volta che lo strumento starnutiva.

L’idea di costruire il nostro strumento non è arrivata istantaneamente. La battaglia per FastNetMon continuò - provammo persino a rianimarlo estraendo un vecchio binario da un altro server. Sì, fu un approccio un po’ discutibile, ma funzionò: FastNetMon tornò in vita. Eccetto… non c’era gioia in quello.

Sembrava che avessimo cucito insieme una versione tassidermizzata di un animale domestico morto da tempo: tecnicamente in piedi, vagamente riconoscibile, ma viverci insieme era… inquietante.

Quindi concordammo collettivamente: questo non può continuare. Ed è allora che abbiamo iniziato a costruire il nostro protettore DDoS alimentato dal monitoraggio con blackjack e carico CPU minimo.

E poi le cose sono escalate

Così iniziò lo sviluppo del nostro strumento. Le menti più brillanti del team più un paio di modelli AI, ovviamente, si unirono alla sessione di brainstorming, ed ecco come nacque FastFlowIPs. FastFlowIPs è uno strumento di monitoraggio di rete ad alte prestazioni basato su eBPF che traccia le statistiche del traffico per IP in tempo reale. È stato progettato per ambienti di produzione con overhead minimo.

L’idea centrale è semplice: cattura il traffico di rete via eBPF, calcola le statistiche per IP (PPS, Mbps), e può automaticamente bloccare indirizzi IP che superano soglie configurabili. Le metriche sono esportate tramite protocollo Graphite e si abbinano perfettamente con le aspettative di Grafana. I dashboard risultanti sono puliti, leggeri e veloci da configurare.

FastFlowIPs funziona con un singolo one-liner dove specifichi -min-ips-pps e -min-flow-pps per esportare solo le metriche più significative, più la rete e l’interfaccia da monitorare. L’unico requisito must-have è impostare esplicitamente -graphite-host e -graphite-port se vuoi spedire metriche.

Inoltre, FastFlowIPs è ottimizzato per reti ad alto carico: 75% meno operazioni mutex, 60% più veloce nella gestione delle stringhe rispetto alle implementazioni tipiche.

Un esempio di configurazione è mostrato di seguito:

# Interface and basics
-interface eth0 # Network interface (default: eth0)
-interval 5s # Collection interval
-show-stats # Display periodic tables
-verbose # Detailed logging

# Network filtering
-networks "192.168.1.0/24" # Monitor specific networks only

# IP banning thresholds
-ban-pps-rx 1000 # Ban if receiving > 1000 PPS
-ban-pps-tx 500 # Ban if sending > 500 PPS
-ban-mbps-rx 100 # Ban if receiving > 100 Mbps
-ban-mbps-tx 50 # Ban if sending > 50 Mbps
-ban-time 5m # How long to ban
-ban-script /path/script.sh # Script to execute on ban/unban

# Graphite export
-graphite-host localhost # Graphite server
-graphite-port 32003 # Graphite port
-min-flow-pps 10 # Only export flows > 10 PPS
-min-ips-pps 5 # Only export IPs > 5 PPS

Non c’era modo di saltare le Modalità di Monitoraggio - ti permettono di sintonizzare questo modesto piccolo strumento al tuo gusto personale:

  • Modalità silenziosa (default): mostra solo eventi di ban e messaggi di avvio. Perfetto per la produzione.
  • Modalità statistiche (-show-stats): stampa tabelle periodiche di traffico, ordinate per volume.
  • Modalità verbose (-verbose): logging dettagliato, incluse statistiche di esportazione Graphite.

E la ciliegina sulla torta - lo script di ban, che blocca spietatamente qualsiasi attività sospetta che superi le soglie definite:

/path/to/script.sh ban 192.168.1.100    # IP exceeded threshold
/path/to/script.sh unban 192.168.1.100 # Ban expired

Un esempio semplice usando iptables:

#!/bin/bash
case $1 in
ban) iptables -I INPUT -s $2 -j DROP ;;
unban) iptables -D INPUT -s $2 -j DROP 2>/dev/null ;;
esac

Ma in ogni caso, puoi sempre adattare lo script e renderlo più o meno aggressivo - qualunque cosa la tua infrastruttura richieda.

E qualche parola su Graphite e metriche. Un dashboard Grafana può essere costruito in pochi minuti usando due tipi principali di metriche:

Metriche di flusso: **network.flows.{SRC_IP}*to*{DST_IP}.{pps,mbps}.{rx,tx}**
Metriche IP: **network.ips.{IP_ADDRESS}.{pps,mbps}.{rx,tx}**

Puoi trovare più dettagli su FastFlowIPs nel repository stesso: https://github.com/denisix/fastflowips e puoi sempre supportare l’autore o contribuire all’evoluzione di questo piccolo ma già potente strumento.

Architettura in 3 paragrafi (senza la sofferenza)

Se descriviamo lo strumento in linguaggio umano, dentro è un piccolo servizio Go ordinato che ascolta pacchetti NetFlow, li analizza in componenti, e costruisce semplici statistiche per IP: pps, mbps, in entrata/in uscita - sostanzialmente, chi sta facendo rumore nella rete e perché. Tutta la matematica è fatta al volo - Go è perfetto per operazioni leggere ma ad alto throughput come questa.

I dati sono aggregati in piccole strutture in memoria, ordinati, e periodicamente inviati verso l’esterno: sia a Graphite/Grafana, o a qualsiasi altro sink che specifichi. Il blocco IP via script esterno è implementato attraverso soglie PPS/Mbps e una chiamata a BanScript - solo nel caso qualcuno decidesse improvvisamente di ospitare un piccolo festival DDoS locale.

La parte migliore: è un singolo binario pulito senza mucchio di dipendenze e senza il solito “inferno dei piccoli business open-source”. Le configurazioni sono passate tramite flag, le statistiche sono raccolte direttamente, la logica è trasparente. Alla fine, abbiamo ottenuto uno strumento leggero e onesto che fa esattamente quello di cui abbiamo bisogno - nessuna magia eccessiva, nessun demone pesante allegato.

Risultati dopo un paio di giorni

Il processo di debugging si è rivelato molto più lungo e complicato dello scrivere lo strumento stesso. Inizialmente, non avevamo nemmeno pianificato di impostare valori di soglia per FastFlowIPs, quindi diverse volte (molte) Grafana ha nervosamente trattenuto il respiro sotto il volume puro di metriche e si è rifiutata di mostrarcele del tutto. La legenda del dashboard conteneva così tanti indirizzi IP che potresti scorrere per ore e probabilmente non raggiungere mai la fine. Avevamo calcolato male - ma dove?

Il debugging continuava a rompere cose, poi stabilizzarle, poi rompere di nuovo il nostro FastFlowIPs esausto, finché iniziò a piangere silenziosamente in scenari di casi limite. C’erano o troppe metriche, o troppo poche, o nessuna affatto. Apparentemente da sovraccarico emotivo. Inoltre, il mistero più grande per noi si rivelarono essere le metriche Flows RX/TX, che si scambiarono leggermente, qualcosa che era magnificamente visibile in tempo reale sui router VyOS. Le menti più brillanti del nostro team lottarono con questo, e alla fine l’obiettivo fu raggiunto: le metriche furono stabilizzate, e Grafana fu curata dalla sua asma.

Oggi, abbiamo metriche ordinate, pulite e informative che mostrano esattamente il traffico di rete di cui abbiamo bisogno:

fastflowips-1

fastflowips-2

fastflowips-3

fastflowips-4

Quando è ora di costruire il tuo mini-FastNetMon

Costruire le tue biciclette è male. Fino al momento in cui semplicemente non puoi andare avanti senza una.

Scrivere il tuo strumento ha assolutamente senso quando le soluzioni esistenti sono troppo pesanti o troppo intelligenti per il tuo compito specifico. Quando non hai bisogno di 100500 funzionalità, integrazioni con una stazione spaziale, e dashboard su 19 monitor - quando hai solo bisogno di numeri, velocemente e senza mal di testa.

Dovresti anche considerare di sviluppare la tua soluzione se la situazione richiede flessibilità: devi aggiungere una metrica al volo, incorporare logica anti-DDoS personalizzata, far funzionare il monitoraggio bene con il tuo hardware bizzarro, o semplicemente aggirare limitazioni che sono state improvvisamente rimosse dal tuo firmware preferito (un caloroso saluto a VyOS 1.5).

In breve, costruire il tuo strumento riguarda controllo, velocità, minimalismo, e non dipendere da componenti che improvvisamente scompaiono dai repository. La cosa principale è ricordare la regola d’oro: se può essere fatto più semplicemente - fallo più semplicemente.

E un’altra regola: se funziona - non toccarlo.

Il gran finale

Alla fine, tutta questa storia non riguarda il traffico, DDoS, o nemmeno FastNetMon. Riguarda il fatto che a volte un team vuole semplicemente uno strumento che funziona, non si rompe dopo un aggiornamento, e non trasforma la tua vita in una replica di Le ali della libertà.

Non abbiamo reinventato la bicicletta - abbiamo costruito il nostro piccolo scooter che si adatta perfettamente alla nostra strada. E non c’è niente di sbagliato in questo. In un mondo dove massivi progetti open-source vivono le loro vite imprevedibili, è bello avere qualcosa di proprio - familiare, stabile, e meravigliosamente noioso.

Quindi se hai mai guardato un altro strumento “perfetto ma un po’ troppo perfetto” e pensato: “onestamente, sarebbe più facile scriverlo io stesso” - potresti essere sulla strada giusta. Fallo solo intelligentemente, con test… e preparati a soffrire un po’.

networking ebpf ddos monitoring grafana graphite