Cosa fa#
Filtra e manipola pacchetti di rete a livello kernel tramite il framework Netfilter. Ogni pacchetto attraversa una serie di chain (catene di regole) in base alla direzione del traffico. La prima regola che matcha viene applicata.
TL;DR#
pacchetto in entrata → chain INPUT → processo locale
pacchetto in uscita → chain OUTPUT → rete
pacchetto in transito → chain FORWARD → (router/bridge)Tre tabelle principali:
filter— filtraggio standard (default)nat— Network Address Translationmangle— modifica header pacchetti
Lettura delle regole#
| Comando | Cosa fa |
|---|---|
sudo iptables -L -v -n | Lista tutte le chain con contatori, IP numerici |
sudo iptables -L -v -n --line-numbers | Come sopra, con numero di riga |
sudo iptables -L INPUT -v -n --line-numbers | Solo chain INPUT |
sudo iptables -t nat -L -v -n | Chain della tabella NAT |
sudo iptables -S | Lista regole in formato comandi (riproducibile) |
Flag:
-L— list — lista le regole-v— verbose — mostra interfaccia e contatori pacchetti/byte-n— numeric — IP e porte come numeri, senza risoluzione DNS--line-numbers— aggiunge numero di riga per cancellazione mirata
Aggiungere regole#
| Comando | Cosa fa |
|---|---|
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT | Permetti SSH in entrata |
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT | Permetti HTTP in entrata |
sudo iptables -A OUTPUT -p tcp --dport 4444 -j DROP | Blocca traffico uscente porta 4444 |
sudo iptables -A INPUT -s 192.168.64.1 -j ACCEPT | Permetti tutto da quell'IP |
sudo iptables -A INPUT -s 192.168.64.0/24 -j ACCEPT | Permetti da intera subnet |
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT | Inserisci in posizione 1 (prima di tutto) |
Flag:
-A— append — aggiunge in fondo alla chain-I— insert — inserisce in posizione specificata-p— protocol — tcp / udp / icmp--dport— destination port--sport— source port-s— source — IP o subnet sorgente-d— destination — IP o subnet destinazione-j— jump — azione: ACCEPT / DROP / REJECT / LOG
Cancellare regole#
| Comando | Cosa fa |
|---|---|
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT | Cancella per contenuto esatto |
sudo iptables -D INPUT 3 | Cancella riga 3 (usa --line-numbers prima) |
sudo iptables -F INPUT | Svuota (flush) tutta la chain INPUT |
sudo iptables -F | Svuota tutte le chain della tabella filter |
sudo iptables -t nat -F | Svuota tutte le chain NAT |
Chain personalizzate#
| Comando | Cosa fa |
|---|---|
sudo iptables -N MYCHAIN | Crea nuova chain chiamata MYCHAIN |
sudo iptables -A INPUT -j MYCHAIN | Manda il traffico INPUT nella chain custom |
sudo iptables -X MYCHAIN | Cancella chain (deve essere vuota e non referenziata) |
sudo iptables -E MYCHAIN NEWNAME | Rinomina chain |
Policy di default#
La policy si applica se nessuna regola matcha.
| Comando | Cosa fa |
|---|---|
sudo iptables -P INPUT DROP | Blocca tutto il traffico in entrata non esplicitamente permesso |
sudo iptables -P INPUT ACCEPT | Permetti tutto in entrata (default) |
sudo iptables -P OUTPUT ACCEPT | Permetti tutto in uscita (default) |
sudo iptables -P FORWARD DROP | Blocca forwarding (se non e' un router) |
Cambia la policy INPUT a DROP solo dopo aver aggiunto le regole ACCEPT per SSH — altrimenti perdi l'accesso al server.
NAT#
| Comando | Cosa fa |
|---|---|
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | Masquerading — IP sorgente diventa quello dell'interfaccia eth0 |
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 | Redirige la porta 80 verso 8080 |
sudo iptables -t nat -L -v -n | Lista regole NAT |
Persistenza#
Le regole iptables non sopravvivono al riavvio. Per salvarle:
sudo apt install iptables-persistent
sudo netfilter-persistent save # salva le regole correnti
sudo netfilter-persistent reload # ricarica le regole salvateOppure manualmente:
sudo iptables-save > /etc/iptables/rules.v4 # salva
sudo iptables-restore < /etc/iptables/rules.v4 # ripristinaScenario reale#
iptables e' la base su cui lavorano UFW, Docker e WireGuard. Quando avvii un container Docker, lui aggiunge automaticamente regole iptables nella tabella nat per il port forwarding. Quando abiliti UFW, traduce i tuoi comandi ufw allow in regole iptables nella chain ufw-user-input.
Per vedere cosa ha aggiunto Docker:
sudo iptables -t nat -L -v -nCollegato a#
- ufw — frontend semplificato per iptables su Ubuntu
- network — categoria


