Essenziali di Iptables: Regole e Comandi Comuni del Firewall

Introduzione

Iptables è un firewall software per le distribuzioni Linux. Questa guida in stile “foglio di trucchi” fornisce un riferimento rapido ai comandi iptables che creeranno regole del firewall utili in scenari comuni e quotidiani. Ciò include esempi di iptables che permettono e bloccano vari servizi per porta, interfaccia di rete e indirizzo IP di origine.

Come Usare Questa Guida

  • La maggior parte delle regole descritte qui assumono che il tuo iptables sia impostato per DROP il traffico in ingresso, tramite la politica di input predefinita, e che desideri permettere selettivamente il traffico in ingresso
  • Utilizza le sezioni successive che sono applicabili a ciò che stai cercando di ottenere. La maggior parte delle sezioni non dipende da altre, quindi puoi utilizzare gli esempi di seguito in modo indipendente
  • Utilizza il menu dei contenuti sulla destra di questa pagina (con larghezze di pagina ampie) o la funzione di ricerca del tuo browser per individuare le sezioni di cui hai bisogno
  • Copia e incolla gli esempi di comando dati, sostituendo i valori evidenziati con i tuoi

Tieni presente che l’ordine delle tue regole conta. Tutti questi comandi iptables utilizzano l’opzione -A per aggiungere la nuova regola alla fine di una catena. Se desideri inserirla altrove nella catena, puoi utilizzare l’opzione -I che ti consente di specificare la posizione della nuova regola (o inserirla all’inizio della catena senza specificare un numero di regola).

Nota: Quando si lavora con i firewall, fare attenzione a non bloccare l’accesso al proprio server bloccando il traffico SSH (porta 22, per impostazione predefinita). Se si perde l’accesso a causa delle impostazioni del firewall, potrebbe essere necessario connettersi ad esso tramite una console basata sul web per ripristinare l’accesso. Se si sta utilizzando DigitalOcean, è possibile leggere la documentazione del nostro prodotto Recovery Console per ulteriori informazioni. Una volta connessi tramite la console, è possibile modificare le regole del firewall per consentire l’accesso SSH (o consentire tutto il traffico). Se le regole del firewall salvate consentono l’accesso SSH, un altro metodo è riavviare il server.

Ricorda che puoi controllare il set di regole iptables attuale con sudo iptables -S e sudo iptables -L.

Diamo un’occhiata ai comandi iptables!

Salvataggio delle regole

Le regole iptables sono effimere, il che significa che devono essere salvate manualmente affinché persistano dopo un riavvio.

Su Ubuntu, un modo per salvare le regole iptables è utilizzare il pacchetto iptables-persistent. Installalo con apt in questo modo:

  1. sudo apt install iptables-persistent

Durante l’installazione, ti verrà chiesto se desideri salvare le regole del firewall correnti.

Se aggiorni le regole del firewall e vuoi salvare le modifiche, esegui questo comando:

  1. sudo netfilter-persistent save

Altre distribuzioni Linux possono avere modi alternativi per rendere permanenti le modifiche alle iptables. Si prega di fare riferimento alla documentazione pertinente per ulteriori informazioni.

Elenco ed Eliminazione delle Regole

Se desideri imparare come elencare ed eliminare le regole iptables, consulta questo tutorial: Come Elencare ed Eliminare le Regole del Firewall Iptables.

Regole Generalmente Utili

Questa sezione include una varietà di comandi iptables che creeranno regole generalmente utili su gran parte dei server.

Consentire Connessioni Loopback

L’interfaccia loopback, anche nota come lo, è ciò che un computer utilizza per instradare le connessioni di rete verso se stesso. Ad esempio, se esegui ping localhost o ping 127.0.0.1, il tuo server effettuerà un ping verso se stesso utilizzando il loopback. L’interfaccia loopback è anche utilizzata se configuri il tuo server di applicazioni per connettersi a un server di database con un indirizzo localhost. Pertanto, vorrai essere sicuro che il tuo firewall permetta queste connessioni.

Per accettare tutto il traffico sulla tua interfaccia loopback, esegui questi comandi:

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A OUTPUT -o lo -j ACCEPT

Poiché il traffico di rete generalmente deve essere bidirezionale – in ingresso e in uscita – per funzionare correttamente, è tipico creare una regola del firewall che consenta il traffico in ingresso stabilito e correlato, in modo che il server consenta il ritorno del traffico per le connessioni in uscita avviate dal server stesso. Questo comando lo consentirà:

  1. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Consentire Connessioni in Uscita Stabilite

Potresti voler consentire il traffico in uscita di tutte le connessioni stabilite, che sono tipicamente la risposta a connessioni in ingresso legittime. Questo comando lo permetterà:

  1. sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Consentire alla Rete Interna di accedere all’Esterno

Supponendo che eth0 sia la tua rete esterna e eth1 sia la tua rete interna, ciò consentirà alla tua rete interna di accedere all’esterno:

  1. sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Eliminazione dei Pacchetti Non Validi

Alcuni pacchetti di traffico di rete vengono contrassegnati come non validi. A volte può essere utile registrare questo tipo di pacchetto ma spesso è bene eliminarli. Fai ciò con questo comando:

  1. sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Blocco di un Indirizzo IP

Per bloccare le connessioni di rete che provengono da un indirizzo IP specifico, ad esempio 203.0.113.51, esegui questo comando:

  1. sudo iptables -A INPUT -s 203.0.113.51 -j DROP

In questo esempio, -s 203.0.113.51 specifica un indirizzo IP di origine “203.0.113.51”. L’indirizzo IP di origine può essere specificato in qualsiasi regola del firewall, inclusa una regola di consentire.

Se si desidera rifiutare la connessione invece, che risponderà alla richiesta di connessione con un errore “connessione rifiutata”, sostituire “DROP” con “REJECT” così:

  1. sudo iptables -A INPUT -s 203.0.113.51 -j REJECT

Blocco delle Connessioni a un’Interfaccia di Rete

Per bloccare le connessioni da un indirizzo IP specifico, ad es. 203.0.113.51, a una specifica interfaccia di rete, ad es. eth0, utilizzare questo comando:

  1. iptables -A INPUT -i eth0 -s 203.0.113.51 -j DROP

Questo è lo stesso del precedente esempio, con l’aggiunta di -i eth0. L’interfaccia di rete può essere specificata in qualsiasi regola del firewall ed è un ottimo modo per limitare la regola a una particolare rete.

Servizio: SSH

Se si sta utilizzando un server senza una console locale, probabilmente si vorranno consentire le connessioni SSH in ingresso (porta 22) in modo da poter connettersi e gestire il proprio server. Questa sezione illustra come configurare il proprio firewall con varie regole relative a SSH.

Consentire Tutte le Connessioni SSH in Entrata

Per consentire tutte le connessioni SSH in entrata esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni SSH stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire Connessioni SSH in Entrata da Indirizzo IP o Sottorete Specifica

Per consentire connessioni SSH in entrata da un indirizzo IP o una sottorete specifica, specifica la sorgente. Ad esempio, se vuoi consentire l’intera sottorete 203.0.113.0/24, esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni SSH stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire Connessioni SSH in Uscita

Se la politica OUTPUT del tuo firewall non è impostata su ACCETTA, e desideri consentire connessioni SSH in uscita, cioè il tuo server che avvia una connessione SSH verso un altro server, puoi eseguire questi comandi:

  1. sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Consentire l’arrivo di Rsync da un Indirizzo IP o Sottorete Specifici

Rsync, che opera sulla porta 873, può essere utilizzato per trasferire file da un computer a un altro.

Per consentire connessioni rsync in arrivo da un indirizzo IP o una sottorete specifici, specifica l’indirizzo IP di origine e la porta di destinazione. Ad esempio, se desideri consentire all’intera sottorete 203.0.113.0/24 di eseguire il rsync verso il tuo server, esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni rsync stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCETTA.

Servizio: Server Web

I server web, come Apache e Nginx, di solito ascoltano le richieste sulla porta 80 e 443 per le connessioni HTTP e HTTPS, rispettivamente. Se la tua politica predefinita per il traffico in entrata è impostata su drop o deny, vorrai creare regole che consentano al tuo server di rispondere a tali richieste.

Consentire Tutte le Connessioni HTTP in Entrata

Per consentire tutte le connessioni HTTP in entrata (porta 80) eseguire questi comandi:

  1. sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni HTTP stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire Tutte le Connessioni HTTPS in Entrata

Per consentire tutte le connessioni HTTPS in entrata (porta 443) eseguire questi comandi:

  1. sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni HTTP stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire Tutte le Connessioni HTTP e HTTPS in Entrata

Se si desidera consentire sia il traffico HTTP che HTTPS, è possibile utilizzare il modulo multiport per creare una regola che consenta entrambe le porte. Per consentire tutte le connessioni HTTP e HTTPS in entrata (porta 443) eseguire questi comandi:

  1. sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che permette il traffico in uscita delle connessioni HTTP e HTTPS stabilite, è necessario solo se la politica di OUTPUT non è impostata su ACCEPT.

Servizio: MySQL

MySQL ascolta le connessioni dei client sulla porta 3306. Se il tuo server di database MySQL viene utilizzato da un client su un server remoto, è necessario permettere quel traffico.

Consentire MySQL da un Indirizzo IP o Sottorete Specifica

Per consentire connessioni MySQL in ingresso da un indirizzo IP o sottorete specifica, specificare la sorgente. Ad esempio, se desideri consentire l’intera sottorete 203.0.113.0/24, esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che permette il traffico in uscita delle connessioni MySQL stabilite, è necessario solo se la politica di OUTPUT non è impostata su ACCEPT.

Consentire MySQL a una Interfaccia di Rete Specifica

Per consentire connessioni MySQL a una specifica interfaccia di rete, ad esempio se si dispone di un’interfaccia di rete privata eth1, utilizzare questi comandi:

  1. sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni MySQL stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Servizio: PostgreSQL

PostgreSQL ascolta le connessioni dei client sulla porta 5432. Se il server di database PostgreSQL viene utilizzato da un client su un server remoto, è necessario assicurarsi di consentire quel traffico.

PostgreSQL da Indirizzo IP Specifico o Sottorete

Per consentire connessioni PostgreSQL in ingresso da un indirizzo IP specifico o da una sottorete, specificare la sorgente. Ad esempio, se si desidera consentire l’intera sottorete 203.0.113.0/24, eseguire questi comandi:

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni PostgreSQL stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire a PostgreSQL su una specifica interfaccia di rete

Per consentire le connessioni PostgreSQL a una specifica interfaccia di rete, ad esempio se si dispone di un’interfaccia di rete privata eth1, utilizzare questi comandi:

  1. sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni PostgreSQL stabilite, è necessario solo se la politica di OUTPUT non è impostata su ACCEPT.

Servizio: Posta

I server di posta, come Sendmail e Postfix, ascoltano su una varietà di porte a seconda dei protocolli utilizzati per la consegna della posta. Se si sta eseguendo un server di posta, determinare quali protocolli si stanno utilizzando e consentire i tipi appropriati di traffico. Mostreremo anche come creare una regola per bloccare la posta SMTP in uscita.

Blocco della posta SMTP in uscita

Se il server non dovrebbe inviare posta in uscita, potrebbe essere opportuno bloccare quel tipo di traffico. Per bloccare la posta SMTP in uscita, che utilizza la porta 25, eseguire questo comando:

  1. sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

Questo configura iptables per rifiutare tutto il traffico in uscita sulla porta 25. Se è necessario rifiutare un servizio diverso in base al suo numero di porta, invece della porta 25, sostituire quel numero di porta con il codice 25 sopra.

Consentire tutto il traffico SMTP in ingresso

Per consentire al tuo server di rispondere alle connessioni SMTP sulla porta 25, esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni SMTP stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire tutto il traffico IMAP in ingresso

Per consentire al tuo server di rispondere alle connessioni IMAP, porta 143, esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni IMAP stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire tutto il traffico IMAPS in ingresso

Per consentire al tuo server di rispondere alle connessioni IMAPS, porta 993, esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni IMAPS stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire Tutte le Connessioni in Entrata POP3

Per consentire al tuo server di rispondere alle connessioni POP3, porta 110, esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni POP3 stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Consentire Tutte le Connessioni in Entrata POP3S

Per consentire al tuo server di rispondere alle connessioni POP3S, porta 995, esegui questi comandi:

  1. sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Il secondo comando, che consente il traffico in uscita delle connessioni POP3S stabilite, è necessario solo se la politica OUTPUT non è impostata su ACCEPT.

Conclusione

Questo dovrebbe coprire molti dei comandi comunemente utilizzati durante la configurazione di un firewall iptables. Naturalmente, iptables è uno strumento molto flessibile, quindi sentiti libero di combinare i comandi con diverse opzioni per soddisfare le tue esigenze specifiche se non sono trattate qui.

Se stai cercando aiuto per determinare come dovrebbe essere configurato il tuo firewall, dai un’occhiata a questo tutorial: Come Scegliere una Politica di Firewall Efficace per Proteggere i tuoi Server.

Source:
https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands