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 -inei sistemi basati su Debian, oppuresunegli 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!