Iptables guida · 9 min read · Feb 13, 2026
Iptables di base - Debian/RedHat
Riepilogo
Puoi trovare una versione più facile da leggere qui: 5dollarwhitebox.org
Molte persone sono spaventate da IPTables e lo trovano difficile da comprendere. Tuttavia, una volta che ne comprendi le basi, è facile. Questo documento servirà come una guida di base su come utilizzare iptables. Non sono in alcun modo un guru di iptables, ma lo utilizzo in questo modo da un po’ di tempo. Se ho commesso errori, non esitare a contattarmi via email.
Il Sistema
Debian Sarge 3.1 Kernel vanilla 2.6.12.4 da mirrors.kernel.org Utilità di amministrazione iptables versione 1.2.11-10
Preparazione
Questa guida è eseguita su una macchina Debian Sarge 3.1, anche se i comandi e la sintassi dovrebbero funzionare per qualsiasi distribuzione linux. Prima di poter configurare iptables, devi prima assicurarti che sia stato compilato nel kernel e che tu abbia installato le utilità userland appropriate.
Dovresti avere un file di configurazione da quando il kernel è stato compilato. Eseguendo grep per “CONFIG_IP_NF” dovresti ottenere ‘=y’ o ‘=m’ per la maggior parte delle righe/opzioni. Qui puoi vedere che “CONFIG_IP_NF_IPTABLES” è stato compilato come modulo del kernel.
# cat /boot/config-2.4.30 | grep -i “CONFIG_IP_NF”
- CONFIG_IP_NF_CONNTRACK=m
CONFIG_IP_NF_FTP=m
CONFIG_IP_NF_AMANDA=m
CONFIG_IP_NF_TFTP=m
CONFIG_IP_NF_IRC=m
CONFIG_IP_NF_QUEUE=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_LIMIT=m
CONFIG_IP_NF_MATCH_MAC=m
CONFIG_IP_NF_MATCH_PKTTYPE=m
CONFIG_IP_NF_MATCH_MARK=m
CONFIG_IP_NF_MATCH_MULTIPORT=m
CONFIG_IP_NF_MATCH_TOS=m
CONFIG_IP_NF_MATCH_RECENT=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_DSCP=m
CONFIG_IP_NF_MATCH_AH_ESP=m
CONFIG_IP_NF_MATCH_LENGTH=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_MATCH_TCPMSS=m
CONFIG_IP_NF_MATCH_HELPER=m
CONFIG_IP_NF_MATCH_STATE=m
CONFIG_IP_NF_MATCH_CONNTRACK=m
CONFIG_IP_NF_MATCH_UNCLEAN=m
CONFIG_IP_NF_MATCH_OWNER=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_MIRROR=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_NAT_AMANDA=m
CONFIG_IP_NF_NAT_SNMP_BASIC=m
CONFIG_IP_NF_NAT_IRC=m
CONFIG_IP_NF_NAT_FTP=m
CONFIG_IP_NF_NAT_TFTP=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_TOS=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_DSCP=m
CONFIG_IP_NF_TARGET_MARK=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_IP_NF_TARGET_TCPMSS=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m
CONFIG_IP_NF_COMPAT_IPCHAINS=m
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_COMPAT_IPFWADM=m
CONFIG_IP_NF_NAT_NEEDED=y*
Questo non è tutto così necessario, poiché scoprirai molto rapidamente se iptables funziona o meno una volta che proviamo ad aggiungere alcune regole.
Puoi controllare se hai installato l’utilità di amministrazione iptables eseguendo:
# dpkg -l iptables
- iptables 1.2.11-10 Linux kernel 2.4+ amministrazione iptables a*
…o per distribuzioni basate su rpm:
# rpm -qa | grep iptables
iptables-xxxxx
…o puoi semplicemente vedere se il binario è presente!
# which iptables
/sbin/iptables
Se l’utilità è mancante, puoi installarla in questo modo:
APT
# apt-get update && apt-get install iptables
RPM
# rpm -Uvh iptables-xxxx.rpm
Preparazione ################################# [100%]
I File Principali
Debian
/etc/init.d/iptables – Script INIT per avviare|fermare|riavviare il servizio (e salvare i set di regole). Questo file non è più predefinito a partire da Sarge, ma puoi comunque ottenerlo (te lo mostrerò).
/var/lib/iptables – La casa di Debian per i file contatori ‘attivi’ e ‘inattivi’ di iptables-save (cioè i set di regole salvati). Su RedHat troveresti le regole salvate in ‘/etc/sysconfig/iptables’.
/var/lib/iptables/active – Contatori Attivi (ne parleremo più avanti)
/var/lib/iptables/inactive – Contatori Inattivi
/sbin/iptables – L’utilità/binario di amministrazione.
RedHat
/etc/init.d/iptables – Script INIT per avviare|fermare|riavviare il servizio (e salvare i set di regole).
/etc/sysconfig/iptables – Il file di RedHat per i file contatori iptables-save (cioè i set di regole salvati).
/sbin/iptables – L’utilità/binario di amministrazione.
Un Poco Su IPTables
Per vedere quali set di regole abbiamo attualmente in atto, esegui:
# iptables –list
*Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination*
Questo è ciò che vedrai quando non ci sono set di regole in atto. Guardando questo vediamo 3 ‘Chain’.
INPUT - Contiene regole per il traffico diretto a questo server.
FORWARD – Contiene regole per il traffico che verrà inoltrato a un IP dietro questo server (cioè se questa macchina funge da firewall per altri server).
OUTPUT – Contiene regole per il traffico che proviene da questo server verso Internet.
Principalmente ci occuperemo del traffico diretto a questo server e emetteremo regole per la Chain INPUT. Quando il traffico passa attraverso il kernel, determina un “TARGET” in base al fatto che il pacchetto corrisponda o meno a una regola. I target generali sono:
ACCEPT – Il traffico è accettato per la consegna.
REJECT – Il traffico è rifiutato, inviando un pacchetto di ritorno all’host mittente.
DROP - Il traffico viene scartato. Non viene inviato nulla all’host mittente.
Configurazione dei Set di Regole
Quindi, scendiamo nel vivo. È importante notare che l’ordine in cui le regole vengono aggiunte è molto importante. Ad esempio, se la tua prima regola è negare tutto… allora, indipendentemente da ciò che consenti specificamente, verrà negato.
È anche importante notare che nulla di ciò che fai viene salvato su disco fino a quando non esegui ‘iptables-save’ (o usi lo script init per salvare). Tutti i contatori/set di regole sono in memoria. Una volta che il server si riavvia, o esegui ‘iptables –flush’, tutto su cui hai lavorato è andato. Personalmente lavoro con un file di script bash chiamato ‘iptables-rules.sh’, che mi consente di tenere tutto organizzato e commentato. Se commetto un errore, non ho preoccupazioni se voglio semplicemente svuotare tutte le regole, torno direttamente al mio script bash e inizio a modificare di nuovo, lo salvo e eseguo lo script (questo però non verrà eseguito all’avvio… questo sarà trattato nella sezione successiva).
È molto importante che se stai lavorando su questo server da remoto tramite ssh, fai ogni sforzo per non bloccarti fuori. Pertanto, la nostra prima regola sarà garantire che, in ogni caso, io possa ancora accedere a ssh dal mio indirizzo IP.
# iptables -A INPUT -s 192.168.1.10 -d 10.1.15.1 -p tcp –dport 22 -j ACCEPT
Analizziamo questo:
-A => Dice a iptables di ‘aggiungere’ questa regola alla Chain INPUT
-s => Indirizzo di origine. Questa regola si applica solo al traffico proveniente DA questo IP. Sostituisci con l’indirizzo IP da cui ti connetti tramite SSH.
-d => Indirizzo di destinazione. Questa regola si applica solo al traffico che va A questo IP. Sostituisci con l’IP di questo server.
-p => Protocollo. Specifica il traffico che è TCP.
–dport => Porta di destinazione. Specifica il traffico per la porta TCP 22 (SSH)
-j => Jump. Se tutto in questa regola corrisponde, allora ‘salta’ a ACCEPT
Successivamente, vorremo utilizzare alcune regole standard per il traffico di rete generale. Questo va un po’ oltre le cose di base, tuttavia iptables può determinare lo ‘stato’ in cui si trova un pacchetto. Questo ha a che fare con la comunicazione TCP standard. Ad esempio, il handshake a 3 vie tra due host durante la trasmissione dei dati.
NEW => Server1 si connette a Server2 emettendo un pacchetto SYN (Synchronize).
RELATED => Server 2 riceve il pacchetto SYN e poi risponde con un pacchetto SYN-ACK (Synchronize Acknowledgment).
ESTABLISHED => Server 1 riceve il pacchetto SYN-ACK e poi risponde con il pacchetto finale ACK (Acknowledgment).
Dopo che questo handshake a 3 vie è completo, il traffico è ora ESTABLISHED. Per questo tipo di comunicazione TCP, sono necessarie regole simili a queste tre:
# iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
L’ultima regola ovviamente consente a qualsiasi traffico di lasciare il server.
Ora che abbiamo impostato le nostre basi, vediamo cosa elenca iptables per i nostri set di regole:
# iptables –list
*Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp – 192.168.1.10 10.1.15.1 tcp dpt:ssh
ACCEPT all – anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere state NEW,RELATED,ESTABLISHED*
Da qui puoi aggiungere qualsiasi regola tu voglia. Se stai eseguendo un server web di base, probabilmente avrai bisogno di qualcosa di simile a:
RIFIUTI INDIVIDUALI PER PRIMI:
CATTIVI (Blocca l’indirizzo IP di origine):
# iptables -A INPUT -s 172.34.5.8 -j DROP
NESSUN SPAMMER (nota l’uso di FQDN):
# iptables -A INPUT -s mail.spammer.org -d 10.1.15.1 -p tcp –dport 25 -j REJECT
POI APRI: ———————————————————————–
MYSQL (Consenti accesso remoto a un particolare IP):
SSH:
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 22 -j ACCEPT
Sendmail/Postfix:
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 25 -j ACCEPT
FTP: (Nota come puoi specificare un intervallo di porte 20-21)
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 20:21 -j ACCEPT
Porte FTP Passive Forse: (Ancora, specificando le porte da 50000 a 50050 in una regola)
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 50000:50050 -j ACCEPT
HTTP/Apache
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 80 -j ACCEPT
SSL/Apache
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 443 -j ACCEPT
IMAP
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 143 -j ACCEPT
IMAPS
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 993 -j ACCEPT
POP3
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 110 -j ACCEPT
POP3S
# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 995 -j ACCEPT
Qualsiasi traffico da localhost:
# iptables -A INPUT -d 10.1.15.1 -s 127.0.0.1 -j ACCEPT
ICMP/Ping:
# iptables -A INPUT -d 10.1.15.1 -p icmp -j ACCEPT
RIFIUTI GLOBALI ULTIMI:
Rifiuta tutto il resto a quell’IP:
# iptables -A INPUT -d 10.1.15.1 -j REJECT
Oppure, rifiuta tutto il resto che arriva a qualsiasi IP:
# iptables -A INPUT -j REJECT
Nota che facciamo le righe di RIFIUTO globale per ultime! Queste devono essere ultime.
Salvataggio dei Set di Regole
Con gli script init, salvare i set di regole è abbastanza facile. Una volta che sei soddisfatto della tua configurazione, basta fare una delle seguenti:
Il Modo Debian
Lo script init di vecchio stile non è più presente in Sarge per impostazione predefinita, ma è ancora disponibile per uso legacy. Credo che il nuovo modo sia utilizzare ‘/etc/network/if-up.d’ e ‘/etc/network/if-down.d’ per gli script iptables (ma non mi piace).
Puoi ottenere lo script INIT legacy in questo modo:
# gunzip /usr/share/doc/iptables/examples/oldinitdscript.gz -c > /etc/init.d/iptables
Ora che hai lo script in posizione, puoi fare il necessario.
Regole Attive
Le regole attive sono quelle caricate all’avvio di iptables:
# /etc/init.d/iptables save active
Salvataggio del set di regole iptables: salva “attivo” con contatori.
Questo salva le tue regole in /var/lib/iptables/active
Regole Inattive
Puoi anche configurare un secondo set di regole per quando fermi iptables chiamato ‘inattivo’. Iptables non si “ferma” effettivamente, semplicemente svuota i set di regole in atto e poi carica le regole ‘inattive’.
# /etc/init.d/iptables stop
Caricamento del set di regole iptables: carica “inattivo”
Pertanto, puoi impostare le tue regole ‘inattive’ e poi salvarle con:
# /etc/init.d/iptables save inactive
Salvataggio del set di regole iptables: salva “inattivo” con contatori.
Il Modo RedHat
Lo script INIT di RedHat è molto simile. Puoi usarlo per avviare e fermare iptables, così come salvare i set di regole.
Per salvare le tue regole attive esegui quanto segue:
# /etc/init.d/iptables save
Questo salverà le tue regole in ‘/etc/sysconfig/iptables’.
Quando avvii iptables, le regole vengono lette da ‘/etc/sysconfig/iptables’:
# /etc/init.d/iptables start
Avvio di iptables [OK]
E quando fermi iptables, tutte le regole vengono svuotate:
# /etc/init.d/iptables stop
Arresto di iptables [OK]
Salvataggio e Ripristino Manuale
Puoi anche utilizzare manualmente le utilità iptables-save e iptables-restore in questo modo:
Salva le regole in un file
# iptables-save > /root/iptables-save.out
Ripristina le regole
# iptables-restore -c /root/iptables-save.out
Il -c dice a iptables-restore che questo file è stato creato utilizzando iptables-save, che restituisce le regole come “contatori”.
Conclusione
Ecco fatto, iptables nella sua forma più basilare. Gli usi di iptables sono troppo numerosi per iniziare a fare veramente una guida su di essi. Tuttavia, per la sicurezza di base e la comprensione di IPTables, spero che questo possa esserti stato d’aiuto. Se c’è qualcosa che potrei aggiungere, non esitare a contattarmi via email.
—
BJ Dierkes, RHCE4-LPIC1
wdierkes [at] 5dollarwhitebox [dot] org
Texas, USA
Risorse
- Netfilter/Iptables: http://www.netfilter.org/
- Protocollo di Controllo della Trasmissione: http://www.rhyshaden.com/tcp.htm
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.