Cosa fa#
Dimostra con iptables la differenza tra stateless (devi scrivere regole per entrambe le direzioni) e stateful (conntrack gestisce automaticamente il return traffic). Ambiente: Ubuntu + Kali.
Su Ubuntu con UFW attivo, le regole raw iptables -A INPUT vanno in fondo alla chain INPUT ma non vengono mai raggiunte — UFW inserisce le proprie chain (ufw-before-input ecc.) all'inizio. Usa sempre ufw allow su sistemi con UFW. Per testare conntrack puro, disabilita UFW temporaneamente con sudo ufw disable (ricordati di riabilitarlo con sudo ufw enable).
TL;DR#
Stateless = ogni pacchetto giudicato da solo → serve regola per REQUEST + REPLY
Stateful = conntrack traccia la sessione → basta la regola per la REQUEST| Tipo | Layer | Traccia sessioni? | Regole richieste |
|---|---|---|---|
| Stateless | L3/L4 | No | Entrambe le direzioni |
| Stateful | L3/L4 | Sì (conntrack) | Solo direzione iniziale |
Fase 1 — Setup ambiente#
Task 1.1 — Verifica VM attive
ping 192.168.64.3 # Ubuntu dal Mac ping 192.168.64.200 # Kali dal Mac- Come sai che hai finito: entrambe rispondono
Task 1.2 — Flush regole iptables su Ubuntu
sudo iptables -F sudo iptables -L -v --line-numbers- Come sai che hai finito: lista vuota (no rules)
Fase 2 — Stateless: il problema del return traffic#
Con un firewall stateless devi scrivere esplicitamente sia la regola di andata che quella di ritorno.
Task 2.1 — Installa netcat su entrambe le VM
# Ubuntu sudo apt install -y ncat # Kali (già installato di solito) which ncTask 2.2 — Apri listener su Ubuntu porta 9999
# Su Ubuntu — ascolta sulla porta 9999 nc -lvnp 9999Task 2.3 — Aggiungi SOLO la regola di ingresso (stateless)
# Solo INPUT — permette che Kali raggiunga la porta 9999 sudo iptables -A INPUT -p tcp --dport 9999 -j ACCEPT sudo iptables -A INPUT -j DROP # blocca tutto il resto # NON aggiungere regola OUTPUT — simuliamo il problema statelessTask 2.4 — Connettiti da Kali e osserva
# Da Kali nc 192.168.64.3 9999- Cosa succede: la connessione viene stabilita ma i dati di risposta da Ubuntu vengono bloccati da OUTPUT DROP implicito
- Come sai che hai finito: comportamento asimmetrico visibile
Task 2.5 — Aggiungi la regola OUTPUT (fix stateless)
# Aggiunge il return traffic esplicito — fonte porta 9999 verso Kali sudo iptables -A OUTPUT -p tcp --sport 9999 -j ACCEPT- Come sai che hai finito: la connessione funziona in entrambe le direzioni
- Lezione: con stateless devi conoscere e scrivere ENTRAMBE le direzioni
Task 2.6 — Flush per il prossimo test
sudo iptables -F
Fase 3 — Stateful: conntrack gestisce il return#
Con conntrack iptables conosce lo stato della connessione: NEW, ESTABLISHED, RELATED, INVALID.
Task 3.1 — Regola stateful: permetti connessioni stabilite
# Una sola regola: permetti il return traffic delle connessioni già stabilite sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A INPUT -p tcp --dport 9999 -j ACCEPT sudo iptables -A INPUT -j DROP # Nessuna regola OUTPUT necessariaTask 3.2 — Connettiti da Kali
# Da Kali nc 192.168.64.3 9999 # Scrivi qualcosa → Ubuntu risponde- Come sai che hai finito: connessione bidirezionale senza regola OUTPUT esplicita
- Lezione: conntrack riconosce il return come ESTABLISHED e lo lascia passare automaticamente
Task 3.3 — Verifica lo stato conntrack
# Su Ubuntu — vedi le connessioni tracciate sudo conntrack -L- Come sai che hai finito: vedi la connessione con stato ESTABLISHED dalla Kali
Fase 4 — tcpdump: vedi la differenza#
Task 4.1 — Cattura il traffico durante una connessione stateful
# Su Ubuntu — apri tcpdump in un terminale separato sudo tcpdump -i any port 9999 -nn# Da Kali — connettiti e scrivi qualcosa nc 192.168.64.3 9999- Come sai che hai finito: vedi SYN → SYN-ACK → ACK (three-way handshake) + dati in entrambe le direzioni
Task 4.2 — Cleanup
sudo iptables -F sudo iptables -L # lista vuota
Scenario Reale#
Un Blue Team analyst deve configurare il firewall perimetrale per permettere agli utenti interni di navigare in HTTPS. Con un firewall stateless deve scrivere:
- ALLOW outbound TCP → any porta 443
- ALLOW inbound TCP ← any porta 443 (return traffic esplicito)
Con un firewall stateful (NGFW, Fortinet, Palo Alto) basta:
- ALLOW outbound TCP → any porta 443 Il return è gestito automaticamente dalla session table.
Risorse#
man iptables— documentazione completasudo conntrack -L— vedi le sessioni tracciate- Gibson SY0-701 Cap 3 — Firewall Types
Collegato a#
- cap-03-security-architecture — tipi di firewall
- [[[TODO] lab-router-acl-iptables|lab-router-acl-iptables]] — ACL stateless base


