Panoramica di iptables

Guida pratica alla gestione del firewall Linux con iptables.

iptables è l'interfaccia a riga di comando standard per gestire il firewall netfilter integrato nel kernel Linux. Tutti i comandi iptables richiedono i privilegi di root.

Ottieni l'accesso root prima di eseguire qualsiasi comando: sudo -i nei sistemi basati su Debian, oppure su negli altri.

Visualizzazione delle regole e dello stato

Mostra tutte le regole con output dettagliato:

iptables -L -n -v

Mostra le regole con i numeri di riga:

iptables -n -L -v --line-numbers

Mostra solo la catena INPUT o OUTPUT:

iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers

Flag:

  • -L — elenca le regole
  • -v — output dettagliato (interfaccia, opzioni, suffissi K/M/G)
  • -n — mostra IP e porte come numeri, senza risoluzione DNS

Avvio e arresto del firewall

Tramite il servizio di sistema:

service ufw stop
service ufw start

Svuota tutte le regole manualmente:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Flag:

  • -F — svuota (elimina) tutte le regole
  • -X — elimina una catena
  • -t — seleziona una tabella (nat, mangle)
  • -P — imposta la policy predefinita

Aggiunta e rimozione di regole

Elimina una regola tramite numero di riga:

iptables -L INPUT -n --line-numbers    # trova il numero di riga
iptables -D INPUT 3                    # elimina la riga 3

Elimina una regola tramite IP sorgente:

iptables -D INPUT -s 202.54.1.1 -j DROP

Inserisci una regola tra la riga 1 e la 2:

iptables -I INPUT 2 -s 202.54.1.2 -j DROP

Salvataggio e ripristino delle regole

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

Policy predefinite

Scarta tutto il traffico (blocca tutto):

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Blocca il traffico in entrata non richiesto, consenti quello in uscita:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

Blocco di IP e reti

Blocca un IP specifico:

iptables -A INPUT -s 1.2.3.4 -j DROP

Scarta i range di rete privati su un'interfaccia pubblica:

iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Range di indirizzi privati:

  • 10.0.0.0/8 (Classe A)
  • 172.16.0.0/12 (Classe B)
  • 192.168.0.0/16 (Classe C)
  • 224.0.0.0/4 (Multicast D)
  • 240.0.0.0/5 (Classe E)
  • 127.0.0.0/8 (Loopback)

Blocco delle porte

Blocca tutte le connessioni in entrata sulla porta 80:

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

Blocca la porta 80 per un IP specifico:

iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP

Apri un intervallo di porte:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

Blocco delle connessioni in uscita per dominio

Cerca l'IP e il CIDR:

host -t a facebook.com
whois 69.171.228.40 | grep CIDR

Blocca il range:

iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

Logging

Registra e scarta un pacchetto:

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Logging con rate limiting (max 7 voci ogni 5 minuti):

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Controlla il log:

tail -f /var/log/messages
grep -i --color 'IP SPOOF' /var/log/messages

Filtraggio per indirizzo MAC

iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

::: front-promo-main-services
:::

# Consenti solo la porta TCP 22 da un MAC specifico
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

Gestione di ICMP (Ping)

Riferimento ai tipi di messaggio ICMP:

Tipo Descrizione
0 Echo reply (risposta al ping)
3 Destination unreachable
4 Source quench
5 Redirect
8 Echo request (ping)
11 Time-to-live exceeded
12 IP header bad

Configurazione consigliata — consenti solo i tipi ICMP sicuri:

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT

Blocca tutte le richieste ping:

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Consenti il ping solo dalla subnet locale:

iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

Porte comuni — apertura e chiusura

Sostituisci ACCEPT con DROP per bloccare una porta:

# SSH (porta 22)
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# HTTP / HTTPS
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# SMTP (porta 25)
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# DNS (porta 53)
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

# POP3 (porta 110)
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

# IMAP (porta 143)
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

# MySQL (porta 3306) — solo rete locale
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

# Samba — solo rete locale
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

# NTP (porta 123)
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

Limiti di connessione

Non più di 3 sessioni SSH per IP:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Limita HTTP a 20 connessioni simultanee per subnet /24:

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

Flag:

  • --connlimit-above N — applica la regola quando il numero di connessioni supera N
  • --connlimit-mask 24 — applica il limite per subnet /24

Range di indirizzi IP

Consenti l'accesso alla porta 80 da un range di IP specifico:

iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

Aiuto

Hai domande o ti serve una mano? Scrivici tramite il sistema di ticket — siamo sempre qui per aiutarti!

Hai bisogno di aiuto?I nostri ingegneri ti aiuteranno gratuitamente con qualsiasi domanda in pochi minutiContattaci