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:
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:
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:
Consentire le Connessioni in Entrata Stabilite e Correlate
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à:
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à:
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:
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:
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:
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ì:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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.