Introduzione
Iptables è un'utilità da riga di comando firewall . Questo significa che si tratta di un software che consente di configurare un firewall sul proprio sistema. In genere è disponibile per impostazione predefinita su Linux . In questa guida, andremo a discutere alcune delle regole e dei comandi comuni associati al firewall iptables. Ogni volta che una connessione tenta di stabilirsi con il sistema, il firewall farà riferimento a queste regole per determinare quale debba essere l'azione successiva.
Comandi Iptables
Questa guida introdurrà alcuni dei comandi iptables più essenziali. Per seguire la guida è necessario avere una comprensione di base di cosa sia iptables e di come funzioni. Ti aiuterà a comprendere meglio le regole che stai implementando con i seguenti comandi. Ricorda che tutti i comandi riportati di seguito possono essere utilizzati singolarmente. D'altra parte, puoi anche combinarli per soddisfare le tue esigenze specifiche.
Cose da tenere a mente
Prima di continuare a leggere, ecco alcune cose da tenere a mente:
- L'ordine delle regole in iptables è importante.
- Per aggiungere una nuova regola alla fine di una catena, il tuo comando
iptablesdovrà utilizzare l'opzione-A. - Se desideri inserire la regola in un'altra posizione, devi utilizzare l'opzione
-I. Questa opzione consente di specificare la posizione esatta della regola. Se si desidera posizionare la regola all'inizio della catena, è sufficiente non fornire il numero della regola. - Per garantire un accesso costante al server, blocca il traffico SSH sulla porta 22 per impostazione predefinita.
- Nel caso in cui non lo facessi e perdessi l'accesso al server, puoi riconnetterti utilizzando la console. Consenti il traffico SSH per modificare le impostazioni del firewall.
- Se desideri verificare il set di regole attualmente in vigore, utilizza i comandi
sudo iptables -S e sudo iptables -L.
Inoltre, abbiamo una guida dettagliata su come elencare ed eliminare le regole del firewall iptables, che ti aiuterà ulteriormente a ottenere il massimo dal tuo firewall iptables.
Ora che abbiamo superato i prerequisiti, scopriamo alcuni dei comandi iptables più comuni:
Come salvare le regole
Inizieremo determinando come salvare le regole. È importante notare che le regole di iptables sono effimere. Ciò significa che andranno perse dopo il riavvio del sistema, a meno che non vengano salvate. Ecco come puoi salvare manualmente le tue nuove regole rispettivamente su server Ubuntu e CentOS:
-
Ubuntu
Il modo più semplice per salvare le nuove regole su un server Ubuntu consiste nell'utilizzare il pacchetto iptables-persistent. Puoi facilmente creare un server Ubuntu seguendo questo tutorial.
Ora, il primo passo per salvare le nuove regole di iptables consiste nell'installare il pacchetto iptables-persistent utilizzando apt-get. Ecco come puoi ottenerlo:
|
1 |
sudo apt-get install iptables-persistent |

Durante il processo di installazione, devi decidere se salvare le regole del firewall attualmente in vigore. Per aggiornare invece le regole e salvare le modifiche, usa questo comando:
|
1 |
sudo netfilter-persistent save |

Il comando precedente funziona in genere per le versioni di Ubuntu successive alla 16.04. Se stai utilizzando una versione precedente, usa invece questo comando:
|
1 |
sudo invoke-rc.d iptables-persistent save |
-
CentOS
Puoi configurare il tuo firewall con iptables su CentOS 6 o versioni precedenti. CentOS 7 utilizza invece FirewallD. Segui questo tutorial per imparare a configurare FirewallD su CentOS 7.
Puoi salvare le tue nuove regole su CentOS utilizzando lo script di inizializzazione iptables . Vedi il seguente comando:
|
1 |
sudo service iptables save |
Questo comando salverà le nuove regole per il firewall iptables. Le regole di iptables attualmente attive si trovano nel file /etc/sysconfig/iptables .
Comandi Iptables utili
Ora passiamo ad alcuni comandi del firewall iptables molto utili che potresti dover utilizzare sul tuo server.
-
Connessioni di loopback
Per prima cosa, esploreremo come consentire le connessioni di loopback. Il sistema utilizza un'interfaccia di loopback per inviare connessioni a se stesso. Ad esempio, immagina di aver eseguito questo comando: ping localhost o ping 127.0.0.1. Il tuo server utilizzerà un'interfaccia di loopback, o una lo, per fare essenzialmente il ping di se stesso. Altre volte, il server potrebbe utilizzarla se il server dell'applicazione è configurato per connettersi all'indirizzo 'localhost'.
Indipendentemente dalla situazione, devi assicurarti che il tuo firewall iptables non blocchi queste connessioni. Pertanto, dovrai consentire le connessioni di loopback per permettere lo svolgimento di queste funzioni.
Ecco i comandi da eseguire per consentire tutto il traffico in entrata sull'interfaccia di loopback:
|
1 2 |
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT |

-
Connessioni in entrata stabilite e correlate
Un altro tipo di connessione che potrebbe essere necessario consentire è la connessione in uscita. Per assicurarti che il tuo server riceva e invii rispettivamente sia il traffico in entrata che quello in uscita, devi consentire le connessioni in entrata stabilite e correlate. Ciò consente al server di inviare traffico di ritorno alle connessioni in uscita. Usa questo comando per consentire le connessioni in entrata stabilite e correlate:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
![]()
-
Connessioni in uscita stabilite
Il server invierà tipicamente risposte alle connessioni in entrata sotto forma di traffico in uscita di connessioni stabilite. Per consentire ciò, usa il seguente comando:
|
1 |
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT |
![]()
-
Da interno a esterno
A volte, potresti persino dover configurare il tuo firewall per consentire l'accesso dall'interno verso l'esterno. Per impostazione predefinita, la tua rete esterna dovrebbe essere eth0 e eth1 dovrebbe essere la tua rete interna. In questo caso, usa questo comando per abilitare l'accesso:
|
1 |
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT |

-
Scarto dei pacchetti non validi
A volte, alcuni pacchetti di traffico di rete verranno etichettati come non validi. La maggior parte delle volte, puoi semplicemente scartare questi pacchetti non validi. Per farlo, usa il seguente comando:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP |
Regole per bloccare gli indirizzi IP
Successivamente, vedremo alcuni comandi che puoi utilizzare per bloccare le connessioni provenienti da determinati indirizzi IP. Per semplificare le cose, utilizzeremo l'indirizzo IP 15.15.15.51 come esempio nei nostri comandi. Puoi sostituire questo valore con il tuo indirizzo IP specifico.
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j DROP |
In -s 15.15.15.51, il -s sta per source (sorgente). Pertanto, il comando specifica l'indirizzo IP sorgente '15.15.15.51'. Allo stesso modo, puoi specificare l'indirizzo IP sorgente in qualsiasi regola del firewall. Questo include la regola di autorizzazione e quella di rifiuto.
Se desideri rifiutare la connessione, utilizzerai REJECT al posto di DROP nel comando in questo modo:
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j REJECT |
Di conseguenza, il tuo server restituirà un errore 'connection refused' (connessione rifiutata) ogni volta che quel particolare indirizzo IP invia una richiesta di connessione.
-
Blocco delle connessioni a un'interfaccia specifica
È possibile bloccare tutte le richieste di connessione provenienti da un particolare indirizzo IP verso una particolare interfaccia di rete. Nel nostro esempio, l'indirizzo IP è 15.15.15.51 e l'interfaccia di rete è eth0. Usa questo comando per bloccare le connessioni:
|
1 |
iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP |
La cosa fantastica è che puoi specificare l'interfaccia di rete in qualsiasi regola. Ciò significa che qualsiasi regola può essere applicata e limitata solo a una rete specifica.
Regole per il servizio: SSH
SSH diventa rilevante se utilizzi un server cloud. In questo caso, devi consentire le connessioni SSH in entrata sulla porta 22. L'abilitazione di queste connessioni ti consente di connetterti e gestire il tuo server. Qui discuteremo una serie di regole comuni relative a SSH.
-
Consentire tutte le connessioni SSH in entrata
I seguenti comandi abilitano tutte le connessioni SSH in entrata:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Nel set precedente, è necessario utilizzare il secondo comando solo se la OUTPUT policy non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni SSH stabilite.
-
Consentire SSH in entrata da una subnet
Il comando precedente consente tutte le connessioni in entrata. È possibile utilizzare i seguenti comandi per consentire solo le connessioni in entrata da un indirizzo IP o da una subnet specifici. Supponiamo di voler consentire solo le connessioni in entrata dalla 15.15.15.0/24 subnet:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Come prima, è necessario utilizzare il secondo comando solo se la OUTPUT policy non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni SSH stabilite.
-
Consentire SSH in uscita
Utilizzare questi comandi se la policy OUTPUT del firewall non è impostata su ACCEPT e si desidera abilitare le connessioni SSH. Questo consentirà al server di avviare connessioni SSH verso altri server:
|
1 2 |
sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Per utilizzare ulteriormente SSH sui server cloud, consultare i nostri tutorial su come utilizzare SSH per connettersi a un server remoto in Ubuntu e come configurare il server Linux per utilizzare l'autenticazione basata su chiavi SSH.
-
Consentire Rsync in entrata da una subnet
Rsync è una funzionalità che consente di trasferire file da un sistema all'altro. Funziona sulla porta 873. Quindi, se si desidera consentire connessioni Rsync in entrata sulla porta 873 da un indirizzo IP o da una subnet specifici, utilizzare i seguenti comandi:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Come si può notare, abbiamo specificato l'indirizzo IP di origine insieme alla porta di destinazione. Si utilizzerà il secondo comando solo se la policy OUTPUT del firewall non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni Rsync stabilite. Inoltre, è possibile consultare il nostro tutorial su come utilizzare Rsync per sincronizzare le directory locali e remote su un VPS.
Regole per il servizio: Web Server
Le connessioni HTTP vengono solitamente ricevute sulla porta 80. Allo stesso modo, HTTPS arriva solitamente sulla porta 443. I server web come Apache e Nginx rimangono in ascolto su queste porte per intercettare le richieste di connessione. A volte, le impostazioni predefinite possono far sì che il server rifiuti o scarti queste richieste in entrata. Ecco perché sarà necessario impostare nuove regole per consentire il traffico.
-
Consentire tutte le connessioni HTTP in entrata
È possibile consentire tutte le connessioni HTTP in entrata sulla porta 80 con questi comandi:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Si utilizzerà il secondo comando solo se la policy OUTPUT del firewall non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni HTTP stabilite.
-
Consentire tutte le connessioni HTTPS in entrata
Usa questi comandi per consentire tutte le richieste di connessione HTTPS in entrata sulla porta 443:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Userai il secondo comando solo se la policy del firewall iptables OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni HTTP stabilite.
-
Consentire tutte le connessioni in entrata da HTTP e HTTPS
Puoi usare il modulo multiport se desideri consentire il traffico sia dalle porte HTTP che HTTPS. Usa questi comandi in tal caso:
|
1 2 |
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Userai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni HTTP e HTTPS stabilite.
Regole per il servizio: MySQL
A volte un client potrebbe utilizzare un server remoto per accedere al tuo MySQL database server. In tal caso, devi consentire manualmente il traffico in entrata dalla porta pertinente. MySQL è in ascolto per richieste di connessione dalla porta 3306.
-
Consentire connessioni MySQL in entrata da una subnet
Dovrai specificare l'origine se desideri consentire connessioni MySQL da una subnet specifica. Nel nostro esempio, consentiremo il traffico in entrata dalla 15.15.15.0/24 subnet utilizzando questi comandi:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Userai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni MySQL stabilite.
-
Abilitare le connessioni MySQL a un'interfaccia
Se desideri anche specificare quale interfaccia di rete deve ricevere le connessioni MySQL, puoi utilizzare questi comandi:
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
In questo caso, stiamo consentendo le connessioni a un'interfaccia di rete privata chiamata eth1.
Userai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni MySQL stabilite.
Puoi seguire il nostro tutorial per una facile configurazione di MySQL sul tuo server.
Regole per il servizio: PostgreSQL
Il tuo client potrebbe utilizzare un server remoto per accedere al tuo PostgreSQL database server. In tal caso, devi consentire queste connessioni in entrata. Queste connessioni passeranno attraverso la porta 5432.
-
Consentire connessioni PostgreSQL in entrata da una subnet
Puoi utilizzare i seguenti comandi per consentire connessioni PostgreSQL in entrata da una subnet o indirizzo IP specifico. Come puoi vedere, abbiamo specificato l'origine che è la 15.15.15.0/24 subnet.
|
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Userai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni PostgreSQL stabilite.
-
Abilitazione delle connessioni PostgreSQL a un'interfaccia specifica
Se desideri consentire le connessioni PostgreSQL solo a una particolare interfaccia di rete, usa questi comandi:
|
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
In questo caso, stiamo consentendo le connessioni a un'interfaccia di rete privata chiamata eth1. Utilizzerai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni PostgreSQL stabilite.
Segui questo tutorial per installare PostgreSQL sul tuo server Ubuntu.
Regole per il servizio: Mail
Potrebbe essere necessario configurare il firewall anche in base al server di posta in uso. Ad esempio, Sendmail e Postfix possono ricevere connessioni su diverse porte. Dipende dal protocollo utilizzato per la consegna della posta. Per bloccare e consentire determinate connessioni di posta, è necessario sapere quale protocollo si sta utilizzando.
-
Consentire connessioni SMTP in entrata
Le connessioni SMTP arrivano in genere sulla porta 25. Sebbene SMTP utilizzi comunemente anche la porta 587 per la posta in uscita. Per consentire al server di rispondere a queste connessioni, usa i seguenti comandi:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Utilizzerai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni SMTP stabilite.
-
Consentire tutte le connessioni IMAP in entrata
Per consentire al tuo server di rispondere a tutte le connessioni IMAP in entrata sulla porta 143, digita ed esegui semplicemente questo:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Utilizzerai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni IMAP stabilite.
-
Consentire tutte le connessioni IMAPS in entrata
Usa questi comandi per consentire al tuo server di rispondere alle connessioni IMAPS sulla porta 993:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Utilizzerai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni IMAPS stabilite.
-
Consentire tutte le connessioni POP3 in entrata
Queste connessioni arriveranno sulla porta 993. Se desideri che il tuo server risponda alle richieste di connessione IMAPS, usa i seguenti comandi:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Utilizzerai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni POP3 stabilite.
-
Consentire tutte le connessioni POP3S in entrata
Usa questi comandi per consentire al tuo server di stabilire connessioni con le richieste POP3S in arrivo sulla porta 995:
|
1 2 |
sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Userai il secondo comando solo se la policy del firewall OUTPUT non è impostata su ACCEPT. Consente il traffico in uscita delle connessioni POP3S stabilite.
-
Come bloccare la posta SMTP in uscita
Invece di consentire le connessioni in entrata e abilitare la risposta del server, potresti voler bloccare del tutto la posta in uscita. Puoi bloccare tutta la posta SMTP in uscita sulla porta 25 usando questo comando:
|
1 |
sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT |
Di conseguenza, tutto il traffico in uscita sulla porta 25 verrà rifiutato dal firewall iptables. Puoi utilizzare la stessa struttura di comando se desideri rifiutare qualsiasi altro servizio. Tutto ciò che devi fare è sostituire la porta 25 con il relativo numero di porta.
Conclusione
Questa guida copre i comandi essenziali del firewall iptables. Ti fornisce gli strumenti essenziali di cui hai bisogno per configurare efficacemente il tuo firewall iptables. Tieni presente che non esiste una soluzione unica per tutti. Questi comandi sono estremamente flessibili. Ciò significa che puoi usarli nel modo che meglio si adatta a te e alle tue esigenze.
Buon computing!

Commenti
Ancora nessun commento. Scrivi il primo.