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

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.