Cosa fa#
Trasforma Suricata da sensore passivo (vede il traffico, non lo blocca) a IPS inline (intercetta il traffico prima che arrivi al sistema). L'ingrediente chiave è iptables NFQUEUE: il kernel manda ogni pacchetto a Suricata, che decide accept o drop prima che il kernel lo consegni.
TL;DR#
Kali (192.168.64.200) → attaccante: hping3 flood, nmap aggressivo
Ubuntu (192.168.64.3) → defender: Suricata in nfqueue, iptables NFQUEUE
Mac (192.168.64.1) → osservatore: curl durante il flood per verificare il bloccoDifferenza chiave:
- IDS (af-packet): Suricata copia del traffico, logga, non può bloccare nulla
- IPS (nfqueue): Suricata intercetta ogni pacchetto, decide, poi il kernel agisce
Obiettivo finale#
Come sai che hai finito tutto:
hping3 -S --flood 192.168.64.3da Kali →curl http://192.168.64.3dal Mac → timeout durante il floodnmap --min-rate 1000 -p 1-1000 192.168.64.3→/var/log/suricata/fast.logmostra[Drop]con la regola custom- Dopo aver fermato il flood →
curldal Mac funziona di nuovo
Fase 0 — Installazione Suricata#
- Task 0 — Installa Suricata su Ubuntu
sudo apt update sudo apt install suricata -y suricata --version- Come sai che hai finito:
suricata --versionmostra la versione;/etc/suricata/suricata.yamlesiste
Fase 1 — Suricata IDS passivo (baseline)#
Task 1 — Verifica che Suricata giri in af-packet (IDS)
systemctl status suricata— deve essere attivogrep "af-packet" /etc/suricata/suricata.yaml— deve trovare la sezione abilitata- Come sai che hai finito: Suricata gira,
nmap -sS 192.168.64.3da Kali genera alert infast.logma il traffico non viene bloccato
Task 2 — Verifica che in modalità IDS il traffico NON venga bloccato
- Da Kali:
sudo hping3 -S --flood 192.168.64.3per 5 secondi - Dal Mac:
curl http://192.168.64.3durante il flood - Come sai che hai finito: curl risponde normalmente anche durante il flood — Suricata vede ma non agisce
- Da Kali:
Fase 2 — Switch a IPS inline (nfqueue)#
Task 3 — Modifica suricata.yaml: disabilita af-packet, abilita nfq
- Commenta la sezione
af-packetin/etc/suricata/suricata.yaml - Aggiungi/abilita la sezione
nfq:nfq: mode: accept repeat-mark: 1 repeat-mask: 1 batchcount: 20 fail-open: no - Come sai che hai finito:
suricata -T -c /etc/suricata/suricata.yaml -vnon dà errori
- Commenta la sezione
Task 4 — Modifica il servizio systemd per usare
-q 0systemctl edit suricata— aggiungi:[Service] ExecStart= ExecStart=/usr/bin/suricata -c /etc/suricata/suricata.yaml -q 0 --pidfile /run/suricata.pid- Come sai che hai finito:
systemctl daemon-reload && systemctl restart suricataparte senza errori
Task 5 — Regola iptables: traffico in ingresso → NFQUEUE
sudo iptables -I INPUT -j NFQUEUE --queue-num 0- Come sai che hai finito:
iptables -L INPUT -nmostra la regola NFQUEUE in prima posizione
Fase 3 — Regole custom con action drop#
Task 6 — Crea file regole custom
- Crea
/etc/suricata/rules/local.rulescon:drop tcp any any -> $HOME_NET any (msg:"IPS SYN Flood Drop"; flags:S; detection_filter:track by_src, count 100, seconds 1; sid:9000001; rev:1;) drop tcp any any -> $HOME_NET any (msg:"IPS Aggressive Port Scan Drop"; flags:S; detection_filter:track by_src, count 20, seconds 1; sid:9000002; rev:1; classtype:network-scan;) - Aggiungi
- local.rulesinrule-files:dentrosuricata.yaml - Come sai che hai finito:
suricata -T -c /etc/suricata/suricata.yaml→ "Configuration provided was successfully loaded"
- Crea
Task 7 — Riavvia Suricata e verifica caricamento regole
systemctl restart suricatagrep "loaded" /var/log/suricata/suricata.log | tail -5- Come sai che hai finito: log mostra le regole caricate, inclusa la local.rules
Fase 4 — Test IPS in azione#
Task 8 — SYN flood bloccato
- Da Kali (terminal 1):
sudo hping3 -S --flood 192.168.64.3 - Dal Mac (terminal 2):
curl --max-time 5 http://192.168.64.3 - Come sai che hai finito: curl dà timeout durante il flood; dopo aver fermato hping3, curl funziona di nuovo
- Da Kali (terminal 1):
Task 9 — Port scan aggressivo bloccato
- Da Kali:
sudo nmap --min-rate 1000 -p 1-1000 192.168.64.3 - Su Ubuntu:
tail -f /var/log/suricata/fast.log - Come sai che hai finito: fast.log mostra
[Drop]con il messaggio della regola 9000002; nmap vede molte porte come filtered
- Da Kali:
Task 10 — Confronta fast.log: IDS vs IPS
- In IDS avevi
[**](alert). In IPS hai[Drop](blocco effettivo). - Come sai che hai finito: sai rispondere — "perché in IDS il traffico arrivava comunque e in IPS no?"
- In IDS avevi
Domande di verifica Security+#
- Suricata in af-packet mode copia il traffico da un'interfaccia di rete. In nfqueue mode intercetta ogni pacchetto. Qual è il rischio operativo di nfqueue se Suricata si blocca?
- Un IDS genera un alert quando vede un port scan. Un IPS lo blocca. In quale scenario preferiresti un IDS a un IPS (hint: pensa ai falsi positivi)?
- La regola usa
detection_filter:track by_src, count 20, seconds 1. Perché trackby_srce nonby_dst? fail-open: nosignifica che se Suricata si blocca, il traffico viene droppato (fail closed).fail-open: yeslo lascia passare. Quale è più sicuro? Quale è più disponibile?- iptables NFQUEUE manda il pacchetto a Suricata prima di consegnarlo al kernel. Cosa succede alla latenza della connessione?
Collegato a#
- [[[TODO] lab-opencanary-honeypot|lab-opencanary-honeypot]] — detection complementare: honeypot rileva lateral movement che IPS non vede
- [[[TODO] lab-router-acl-iptables|lab-router-acl-iptables]] — iptables base (prerequisito per NFQUEUE)
- cap-04-securing-your-network — IDS vs IPS, signature-based vs anomaly-based, inline vs passive


