Autore: Riziero Graziani
Corso: Network and Cloud Infrastructures (NCIs)
Università degli Studi di Napoli Federico II
Docente: Prof. Giorgio Ventre
Questo progetto implementa un sistema di rilevazione e mitigazione degli attacchi DoS (Denial of Service) in un ambiente Software Defined Networking (SDN), utilizzando:
- Mininet come emulatore di rete;
- Ryu controller come piattaforma SDN programmabile;
- Redis come policy store esterno e canale di comunicazione.
L’obiettivo è migliorare le precedenti soluzioni monolitiche e basate su soglie statiche, affrontando in modo modulare e adattivo cinque problemi chiave dei sistemi SDN anti-DoS:
- Over blocking
- Static thresholds
- Controller-centric decisions
- Lack of modular design between detection and mitigation
- Rigid (un)blocking policies
L’architettura è composta da più moduli Ryu indipendenti, che comunicano tramite eventi applicativi (EvDoSAlert) e attraverso Redis:
{ Monitoring → Detection (EWMA, CUSUM, RateLimiter) → Fusion → Enforcement } ↘ { Redis REST API + CLI (policy store esterno) }
Ogni modulo svolge un ruolo distinto:
- Monitoring: misura il traffico host-to-host (byte/s, pkt/s) tramite OpenFlow e lo visualizza con MiniNAM.
- EWMA, CUSUM, RateLimiter: tre rilevatori indipendenti che generano alert con score normalizzato [0,1].
- Fusion: aggrega gli alert (ensemble) con pesi dinamici, applica le regole
DROPflow-level sugli edge switch e gestisce backoff, cooldown e reset. - Redis REST API & CLI: archivio condiviso delle policy (blacklist direzionale
src|dst) e interfaccia di controllo esterna.
- Python ≥ 3.8
- Ryu SDN framework
- Mininet
- Redis Server
- Flask (per il microservizio REST)
- hping3 / iperf3 (per i test di traffico e attacco)
-
Avvio di Redis
redis-server & -
Avvio del servizio REST esterno
python3 blacklist_service.py
-
Avvio del controller Ryu con tutti i moduli
python3 controller/main_controller.py
-
Avvio della topologia Mininet
sudo python3 MiniNAM.py --custom ~/path/to/project/topology_mini_nam.py --topo mytopo --controller remote --mac -
(Opzionale) Redis-cli Tool
export BLACKLIST_API_KEY=changeme python3 blacklist_topo_cli.py --topo topology_mini_nam.py
-
Due medie mobili (veloce e lenta) e confronto statistico tramite Z-score: anomalia se
short_mean > long_mean + ZK * σ_eff. -
Adatta la soglia in base alla variabilità del flusso e include warm-up, grace e deduplica.
-
Accumula scostamenti persistenti dalla baseline EWMA.
-
Soglie dinamiche K/H scalate con
√baselineper evitare falsi allarmi.
-
Modello a token bucket con rate ammesso e burst.
-
Genera alert solo per overage significativi e persistenti.
La FusionApp riceve alert da tutti i detector, calcola uno score aggregato pesato:
agg = 0.3 * EWMA + 0.5 * CUSUM + 0.2 * RateLimiterApplica o rimuove le regole di DROP con hysteresis temporale:
-
Hold-off prima dell’attivazione
-
Durata minima e clear hold-off prima della rimozione
-
Cooldown e backoff progressivo (5–10–20–40–60s)
Le regole sono flow-level ed edge-only, quindi colpiscono solo la sorgente malevola.
-
Ogni regola installata viene salvata come:
blacklist:flow:<SRC>|<DST> -
TTL = durata del blocco; alla scadenza, la regola è rimossa automaticamente.
-
Pub/Sub su
blacklist_updatesper aggiornamenti in tempo reale. -
CLI (
blacklist_topo_cli.py) per gestire manualmente le regole via REST API.
| Limite iniziale | Soluzione adottata |
|---|---|
| Over-blocking | Regole edge-only, flow-level, TTL in Redis |
| Static threshold | Detector adattivi con EWMA/CUSUM dinamici |
| Controller-centric | Policy store esterno con API REST + Redis Pub/Sub |
| Design non modulare | Architettura a eventi Ryu (EvDoSAlert) |
| Policy inflessibile | Hold-off, cooldown e backoff con reset automatico |
├── controller
│ ├── blacklist_service.py
│ ├── cusum_mitigation.py
│ ├── events.py
│ ├── ewma_mitigation.py
│ ├── monitoring.py
│ ├── main_controller.py
│ ├── rl_mitigation.py
│ └── simple_switch_13.py
├── .gitignore
├── blacklist_topo_cli.py
├── topology_mini_nam.py
├── flusso_continuo.cli
├── NCIs_Project_Report.pdf
└── README.md-
Ryu SDN Framework – https://ryu-sdn.org/
-
Mininet Network Emulator – http://mininet.org
-
Redis – https://redis.io