Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Sicurezza/Iptables"
Differenze tra le versioni 21 e 28 (in 7 versioni)
Versione 21 del 27/05/2017 09.32.58
Dimensione: 8116
Autore: dix78
Commento:
Versione 28 del 22/04/2022 22.35.15
Dimensione: 6957
Autore: carlin0
Commento: Verificata 22.04
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
## https://wiki.ubuntu-it.org/Sicurezza/Iptables
Linea 4: Linea 5:
<<Indice>>
<<Informazioni(forum=http://forum.ubuntu-it.org/viewtopic.php?t=442733)>>
<<Indice(depth=2 align=right)>>
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=442733"; rilasci="22.04 20.04";)>>
Linea 9: Linea 10:
'''Iptables''' è il firewall, da linea di comando, installato in modo predefinito su Ubuntu. Questo howto mostrerà brevemente come avere un firewall minimale ma robusto. '''Iptables''' è il firewall, da linea di comando, configurato in modo predefinito su Ubuntu fino alla versione '''20.04'''.<<BR>>
È un programma utilizzato in spazio utente usato per configurare l'insieme di regole di filtraggio dei pacchetti e del [[https://it.wikipedia.org/wiki/Network_address_translation|NAT]] di Linux. È pensato per gli amministratori di sistema.
Linea 11: Linea 13:
= I concetti di base = {{{#!wiki note
Da '''Ubuntu 20.10''' è stato sostituito da [[Sicurezza/Nftables|nftables]]. Tuttavia è ancora possibile usare '''Iptables'''.
}}}
Linea 13: Linea 17:
Un computer connesso ad internet scambia continuamente dati col resto del mondo. {{{#!wiki important
Tutti i comandi citati in questa pagina vanno digitati nel [[AmministrazioneSistema/Terminale|terminale]] con i [[AmministrazioneSistema/PrivilegiDiAmministrazione/Sudo|privilegi di amministrazione]] .
}}}
Linea 15: Linea 21:
I dati che dal mondo esterno entrano nel nostro computer possono essere di tipo "buono", come ad esempio una pagina di un sito che abbiamo richiesto, un amico che ci contatta in chat o un file che stiamo scaricando con un programma di filesharing, e di tipo "cattivo", come ad esempio un ''cracker'' che ci contatta in vari modi e a nostra insaputa per cercare di entrare nel nostro computer. == Concetti di base ==
Linea 17: Linea 23:
Il compito del firewall è riconoscere il traffico buono da quello cattivo, e bloccare il traffico cattivo. Per farlo, ha bisogno che siamo noi a dirgli cosa è buono e cosa no, mediante delle regole per fare i controlli sul traffico di dati. Un computer connesso a Internet scambia continuamente dati con il resto del mondo.
Linea 19: Linea 25:
'''Iptables''' raggruppa tutti i controlli che può fare sul traffico in entrata, nella cosiddetta ''Chain INPUT'', catena di input. I controlli sul traffico in uscita sono invece raggruppati nella ''Chain OUTPUT''. La ''Chain FORWARD'' serve per esempio quando il traffico di dati non è indirizzato a noi ma passa comunque per il nostro computer. I dati che entrano in un computer dall'esterno possono essere di tipo normale e legittimo (ad esempio la pagina di un sito richiesta da un browser, un messaggio in chat ecc.) oppure di tipo malevolo (ad esempio un ''cracker'' che cerca di accedere ad un computer all'insaputa dell'utente in maniera fraudolenta).<<BR>>
Il compito del firewall è riconoscere il traffico "buono" da quello "cattivo", bloccando quest'ultimo. Per farlo, ha bisogno di essere opportunamente istruito, mediante delle regole impostate sul traffico dati che stabiliscano cosa è "buono" e cosa è "cattivo".
Linea 21: Linea 28:
Ognuna di queste catene ha una ''policy'', una politica, cioè un'azione predefinita da eseguire quando tutti gli altri controlli della catena hanno fallito nel riconoscere se il dato era buono o meno. '''Iptables''' raggruppa tutti i controlli da eseguire sul traffico in entrata, nella cosiddetta ''Chain INPUT'' (catena di input). I controlli sul traffico in uscita sono invece raggruppati nella ''Chain OUTPUT''. La ''Chain FORWARD'' serve, ad esempio, quando il traffico di dati non è indirizzato ad uno specifico computer, ma passa comunque attraverso quest'ultimo.
Linea 23: Linea 30:
== Gestione semplificata == Ognuna di queste catene ha una ''policy'', cioè un'azione predefinita da eseguire quando tutti gli altri controlli della catena hanno fallito nel riconoscere se il dato era buono o meno. Occorre però tenere conto che da impostazione predefinita viene accettato l'intero traffico dati.
Linea 25: Linea 32:
A seconda delle proprie esigenze può tornare comodo l'utilizzo di alcuni software che semplificano il settaggio di Iptables:
 * [[http://wiki.ubuntu-it.org/Sicurezza/Firestarter|Firestarter]]: tool con interfaccia grafica.
 * [[http://wiki.ubuntu-it.org/Sicurezza/Ufw|Ufw]]: tool da linea di comando con comandi semplificati per le impostazioni di Iptables.
  * [[http://wiki.ubuntu-it.org/Sicurezza/Gufw|Gufw]]: interfaccia grafica per '''Ufw'''.
= Selezione tra Iptables e Nftables =
Linea 30: Linea 34:
== Cosa serve per impostare iptables ==

Il firewall è incluso in Ubuntu ed è attivo all'avvio del sistema senza richiedere alcuna azione da parte dell'utente. Anche '''iptables''' è incluso in Ubuntu, e bisogna usarlo da [[AmministrazioneSistema/RigaDiComando|riga di comando]] per configurare il firewall.

Per usare iptables sono necessari i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]].
 
== Limitazione di questa guida ==

Dal momento che i comandi che trovate in questa guida servono a modificare la configurazione del firewall "a caldo", senza scrivere niente in file di configurazione, ma caricando direttamente le impostazioni in memoria, al successivo avvio del computer la configurazione fatta non sarà più disponibile.

Per ovviare a questo problema si possono inserire i comandi in uno script da lanciare all'avvio del computer.
Consultare la [[https://wiki.ubuntu-it.org/Sicurezza/Nftables#Selezione|relativa guida]].
Linea 44: Linea 38:
Per avere sott'occhio in ogni momento la configurazione del firewall, è sufficiente digitare in un terminale:{{{
sudo iptables -L
Per controllare la configurazione di '''iptables''' digitare:{{{
iptables -L
}}}
oppure: {{{
iptables -S
Linea 48: Linea 45:
Per esempio, con Ubuntu appena installato, il firewall è sì attivo, ma non ha ancora una vera configurazione, perciò l'output dovrebbe essere: {{{
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
Qualora le informazioni mostrate non siano sufficienti, aggiungere le opzioni `-v` e/o `--line-numbers -n`, come negli esempi seguenti: {{{
iptables -L -v
iptables -L --line-numbers -n
Linea 62: Linea 50:
In modo predefinito il firewall lascia passare tutto, come indicano le scritte "''policy ACCEPT''" e l'assenza di altre regole. Per un elenco completo delle opzioni diigtare: {{{
man iptables
}}}
Linea 64: Linea 54:
A volte le informazioni mostrate non sono sufficienti; in questi casi basta aggiungere '''-v''' oppure '''-vv''' al precedente comando. Per esempio: {{{
sudo iptables -vv -L
= Esempio di impostazione di policy di base =

Nel seguente esempio viene bloccato tutto il traffico in entrata per poi successivamente consentire il traffico desiderato e ritenuto non malevolo, infine abilitando delle determinate porte.

 0. Per impostare una ''policy'' che blocchi tutti i pacchetti in entrata digitare: {{{
iptables -P INPUT DROP
}}}
 {{{#!wiki note
Questa policy, da sola, non permette l'utilizzo di normali funzionalità, come la navigazione web.
Linea 68: Linea 65:
= Impostare le policy di base =

Per iniziare, possiamo bloccare tutto il traffico proveniente dal mondo esterno (per poi in seguito consentire solo il traffico che riteniamo buono), impostando una ''policy'' che faccia scomparire nel nulla tutti i pacchetti in entrata: {{{
sudo iptables -P INPUT DROP
 0. Impostare inoltre la seguente ''policy'', per bloccare il traffico che passa attraverso il computer: {{{
iptables -P FORWARD DROP
Linea 74: Linea 69:
In questo momento non possiamo navigare nel web, e più in generale il nostro PC non si accorgerà di qualsiasi dato ci venga spedito da chicchessia. Niente paura, fra qualche riga vedremo come istruire '''iptables''' a lasciare passare il traffico a cui siamo interessati.

Un'altra buona ''policy'' da impostare è: {{{
sudo iptables -P FORWARD DROP
 0. Per consentire tutto il traffico interno al computer, che passa per l'interfaccia di ''loopback'' "'''lo'''", digitare: {{{
iptables -A INPUT -i lo -j ACCEPT
Linea 80: Linea 73:


== Le prime regole utili ==

Innanzitutto dobbiamo consentire tutto il traffico interno al nostro computer, che passa per l'interfaccia di ''loopback'' "'''lo'''". Quindi da terminale digitiamo: {{{
sudo iptables -A INPUT -i lo -j ACCEPT
 0. Per consentire il traffico in entrata che è stato richiesto legittimamente (per permettere ad esempio la navigazione web) digitare: {{{
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
}}}
 
 0. Per permettere ad utenti esterni di contattare il PC e di inviare dati (ad esempio se è installato un [[InternetRete/ConfigurazioneRete/OpenSsh|server SSH]], un [[Server/Web|server web]] o un programma che per essere eseguito deve fungere da server) è necessario consentire il traffico ''tcp'' sulla porta 22 (salvo diversa configurazione personalizzata). A tale scopo digitare:{{{
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Linea 88: Linea 81:
La seconda cosa che potremmo voler fare è navigare nel web e più in generale lasciare entrare tutto il traffico che è stato da noi richiesto: {{{
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 0. Per consentire il traffico per il server web è necessario abilitare la porta 80 (salvo diversa configurazione personalizzata). A tale scopo digitare:{{{
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Linea 92: Linea 85:
== Consentire l'ingresso su porte specifiche ==

Ci sono situazioni in cui vogliamo permettere a un utente esterno di contattare il nostro PC e di inviarci dati, per esempio se abbiamo installato un [[InternetRete/ConfigurazioneRete/OpenSsh|server SSH]], un [[Server/Web|server web]] o un programma che per svolgere il suo compito deve fungere anche da server, ad esempio un programma di filesharing come [[InternetRete/Condivisione/Amule|aMule]].

Il nostro server SSH usa la porta 22 (a meno che non lo abbiamo configurato diversamente), quindi dobbiamo dire a '''iptables''' di lasciare entrare il traffico ''tcp'' sulla porta 22 (il relativo traffico di risposta lo abbiamo già permesso prima), quindi: {{{
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
}}}

In ogni momento possiamo controllare come abbiamo configurato il firewall, come spiegato precedentemente.

Il server web usa la porta 80 (anche qui, a meno di configurazioni personalizzate), quindi consentiamo tutto il traffico che dall'esterno chiede di entrare attraverso la nostra porta 80: {{{
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
}}}

Il programma di filesharing aMule deve accettare connessioni in entrata per poter funzionare al meglio. Per impostazione predefinita usa le porte 4662(con protocollo tcp) e 4672(con protocollo udp), quindi le seguenti regole indicano al firewall di accettare il traffico in ingresso su quelle due porte: {{{
sudo iptables -A INPUT -p tcp --dport 4662 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 4672 -j ACCEPT
}}}

Insomma, il meccanismo dovrebbe essere chiaro.

== Risultato finale ==

Abbiamo così ottenuto un piccolo firewall che lascia uscire tutti i dati dal nostro computer verso l'esterno, e lascia entrare tutti i dati che abbiamo richiesto: {{{
sudo iptables -vv -L
Dopo questa procedura si avrà come risultato finale una configurazione che lascia uscire tutti i dati dal computer verso l'esterno ed entrare soltanto quelli richiesti:{{{
iptables -L -v
Linea 134: Linea 104:
= Persistenza =

Per rendere le regole impostate ''persistenti'', ovvero fare in modo che vengano salvate e ricaricate al prossimo avvio:

 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://iptables-persistent|iptables-persistent]].
 0. Dopo aver impostato le regole digitare i seguenti due comandi: {{{
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
}}}

= Gestione semplificata =

A seconda delle proprie esigenze può tornare comodo l'utilizzo di alcuni software che semplificano il settaggio di '''Iptables'''':
 * '''[[http://wiki.ubuntu-it.org/Sicurezza/Ufw|Ufw]]''': strumento da [[AmministrazioneSistema/Terminale|terminale]] con comandi semplificati per le impostazioni di Iptables.
 * '''[[http://wiki.ubuntu-it.org/Sicurezza/Gufw|Gufw]]''': interfaccia grafica per '''Ufw'''.
Linea 136: Linea 122:
 * [[http://iptables-tutorial.frozentux.net/iptables-tutorial.html|Guida a Iptables]]
 * [[http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html|How-To per Iptables]]
 * [[http://www.netfilter.org/documentation/|Documentazione in varie lingua per Netfilter e Iptables]]
 * [[http://www.ubuntulinux.org/wiki/IptablesHowTo|Versione originale]]
 * [[http://www.netfilter.org/documentation/|Documentazione per Netfilter e Iptables]]
 * [[https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands|How to per Iptables]]
 * [[https://wiki.archlinux.org/title/iptables|Wiki di Archlinux]]
 * [[https://guide.debianizzati.org/index.php/Debian_e_iptables|Guida debianizzati]]
 * [[https://iptablesgenerator.totalbits.com|Generatore di regole per iptables]]


Guida verificata con Ubuntu: 20.04 22.04

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

Iptables è il firewall, da linea di comando, configurato in modo predefinito su Ubuntu fino alla versione 20.04.
È un programma utilizzato in spazio utente usato per configurare l'insieme di regole di filtraggio dei pacchetti e del NAT di Linux. È pensato per gli amministratori di sistema.

Da Ubuntu 20.10 è stato sostituito da nftables. Tuttavia è ancora possibile usare Iptables.

Tutti i comandi citati in questa pagina vanno digitati nel terminale con i privilegi di amministrazione .

Concetti di base

Un computer connesso a Internet scambia continuamente dati con il resto del mondo.

I dati che entrano in un computer dall'esterno possono essere di tipo normale e legittimo (ad esempio la pagina di un sito richiesta da un browser, un messaggio in chat ecc.) oppure di tipo malevolo (ad esempio un cracker che cerca di accedere ad un computer all'insaputa dell'utente in maniera fraudolenta).
Il compito del firewall è riconoscere il traffico "buono" da quello "cattivo", bloccando quest'ultimo. Per farlo, ha bisogno di essere opportunamente istruito, mediante delle regole impostate sul traffico dati che stabiliscano cosa è "buono" e cosa è "cattivo".

Iptables raggruppa tutti i controlli da eseguire sul traffico in entrata, nella cosiddetta Chain INPUT (catena di input). I controlli sul traffico in uscita sono invece raggruppati nella Chain OUTPUT. La Chain FORWARD serve, ad esempio, quando il traffico di dati non è indirizzato ad uno specifico computer, ma passa comunque attraverso quest'ultimo.

Ognuna di queste catene ha una policy, cioè un'azione predefinita da eseguire quando tutti gli altri controlli della catena hanno fallito nel riconoscere se il dato era buono o meno. Occorre però tenere conto che da impostazione predefinita viene accettato l'intero traffico dati.

Selezione tra Iptables e Nftables

Consultare la relativa guida.

Mostrare la configurazione attuale

Per controllare la configurazione di iptables digitare:

iptables -L

oppure:

iptables -S

Qualora le informazioni mostrate non siano sufficienti, aggiungere le opzioni -v e/o --line-numbers -n, come negli esempi seguenti:

iptables -L -v
iptables -L --line-numbers -n

Per un elenco completo delle opzioni diigtare:

man iptables

Esempio di impostazione di policy di base

Nel seguente esempio viene bloccato tutto il traffico in entrata per poi successivamente consentire il traffico desiderato e ritenuto non malevolo, infine abilitando delle determinate porte.

  1. Per impostare una policy che blocchi tutti i pacchetti in entrata digitare:

    iptables -P INPUT   DROP

    Questa policy, da sola, non permette l'utilizzo di normali funzionalità, come la navigazione web.

  2. Impostare inoltre la seguente policy, per bloccare il traffico che passa attraverso il computer:

    iptables -P FORWARD   DROP
  3. Per consentire tutto il traffico interno al computer, che passa per l'interfaccia di loopback "lo", digitare:

    iptables -A INPUT  -i lo -j ACCEPT
  4. Per consentire il traffico in entrata che è stato richiesto legittimamente (per permettere ad esempio la navigazione web) digitare:

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  5. Per permettere ad utenti esterni di contattare il PC e di inviare dati (ad esempio se è installato un server SSH, un server web o un programma che per essere eseguito deve fungere da server) è necessario consentire il traffico tcp sulla porta 22 (salvo diversa configurazione personalizzata). A tale scopo digitare:

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  6. Per consentire il traffico per il server web è necessario abilitare la porta 80 (salvo diversa configurazione personalizzata). A tale scopo digitare:

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Dopo questa procedura si avrà come risultato finale una configurazione che lascia uscire tutti i dati dal computer verso l'esterno ed entrare soltanto quelli richiesti:

iptables -L -v

Chain INPUT (policy DROP)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:ssh 
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:www 

Chain FORWARD (policy DROP)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT)
 pkts bytes target     prot opt in     out     source               destination  

Persistenza

Per rendere le regole impostate persistenti, ovvero fare in modo che vengano salvate e ricaricate al prossimo avvio:

  1. Installare il pacchetto iptables-persistent.

  2. Dopo aver impostato le regole digitare i seguenti due comandi:

    iptables-save > /etc/iptables/rules.v4
    ip6tables-save > /etc/iptables/rules.v6

Gestione semplificata

A seconda delle proprie esigenze può tornare comodo l'utilizzo di alcuni software che semplificano il settaggio di Iptables':

  • Ufw: strumento da terminale con comandi semplificati per le impostazioni di Iptables.

  • Gufw: interfaccia grafica per Ufw.

Ulteriori risorse


CategorySicurezza