Torna al blog

Configurazione di un firewall Iptables: regole e comandi di base

Configurazione di un firewall Iptables: regole e comandi di base

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 ​iptables dovrà 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:

Iptables Firewall 1

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:

Iptables Firewall 2

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:

  • 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:

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:

Iptables Firewall 3

  • 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:

Established and Related Incoming Connections

  • 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:

Established Outgoing Connections

  • 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:

Internal to External

  • 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:

Dropping Invalid Packets

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.

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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.

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:

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:

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:​

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:

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:

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:

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:

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!

author

Manpreet Singh

Autore · CloudSigma

Preslav Dobrev è un designer creativo presso CloudSigma, con un focus su un'identità aziendale coerente attraverso l'uso di canali di marketing tradizionali e innovativi. È abile nel fondere la visione artistica con il marketing strategico per creare narrazioni di brand di grande impatto.

Commenti

Ancora nessun commento. Scrivi il primo.