Skip to main content
  1. Comandi/

iptables - Linux Packet Filtering

Alessio Barnini
Author
Alessio Barnini
Table of Contents

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 Translation
  • mangle — modifica header pacchetti

Lettura delle regole
#

ComandoCosa fa
sudo iptables -L -v -nLista tutte le chain con contatori, IP numerici
sudo iptables -L -v -n --line-numbersCome sopra, con numero di riga
sudo iptables -L INPUT -v -n --line-numbersSolo chain INPUT
sudo iptables -t nat -L -v -nChain della tabella NAT
sudo iptables -SLista regole in formato comandi (riproducibile)

Flag:

  • -Llist — lista le regole
  • -vverbose — mostra interfaccia e contatori pacchetti/byte
  • -nnumeric — IP e porte come numeri, senza risoluzione DNS
  • --line-numbers — aggiunge numero di riga per cancellazione mirata

Aggiungere regole
#

ComandoCosa fa
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPTPermetti SSH in entrata
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTPermetti HTTP in entrata
sudo iptables -A OUTPUT -p tcp --dport 4444 -j DROPBlocca traffico uscente porta 4444
sudo iptables -A INPUT -s 192.168.64.1 -j ACCEPTPermetti tutto da quell'IP
sudo iptables -A INPUT -s 192.168.64.0/24 -j ACCEPTPermetti da intera subnet
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPTInserisci in posizione 1 (prima di tutto)

Flag:

  • -Aappend — aggiunge in fondo alla chain
  • -Iinsert — inserisce in posizione specificata
  • -pprotocol — tcp / udp / icmp
  • --dportdestination port
  • --sportsource port
  • -ssource — IP o subnet sorgente
  • -ddestination — IP o subnet destinazione
  • -jjump — azione: ACCEPT / DROP / REJECT / LOG

Cancellare regole
#

ComandoCosa fa
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPTCancella per contenuto esatto
sudo iptables -D INPUT 3Cancella riga 3 (usa --line-numbers prima)
sudo iptables -F INPUTSvuota (flush) tutta la chain INPUT
sudo iptables -FSvuota tutte le chain della tabella filter
sudo iptables -t nat -FSvuota tutte le chain NAT

Chain personalizzate
#

ComandoCosa fa
sudo iptables -N MYCHAINCrea nuova chain chiamata MYCHAIN
sudo iptables -A INPUT -j MYCHAINManda il traffico INPUT nella chain custom
sudo iptables -X MYCHAINCancella chain (deve essere vuota e non referenziata)
sudo iptables -E MYCHAIN NEWNAMERinomina chain

Policy di default
#

La policy si applica se nessuna regola matcha.

ComandoCosa fa
sudo iptables -P INPUT DROPBlocca tutto il traffico in entrata non esplicitamente permesso
sudo iptables -P INPUT ACCEPTPermetti tutto in entrata (default)
sudo iptables -P OUTPUT ACCEPTPermetti tutto in uscita (default)
sudo iptables -P FORWARD DROPBlocca 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
#

ComandoCosa fa
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEMasquerading — IP sorgente diventa quello dell'interfaccia eth0
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080Redirige la porta 80 verso 8080
sudo iptables -t nat -L -v -nLista 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 salvate

Oppure manualmente:

sudo iptables-save > /etc/iptables/rules.v4    # salva
sudo iptables-restore < /etc/iptables/rules.v4  # ripristina

Scenario 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 -n

Collegato a
#

  • ufw — frontend semplificato per iptables su Ubuntu
  • network — categoria

Related