## https://wiki.ubuntu-it.org/Sicurezza/Iptables
#format wiki
#LANGUAGE it
<
>
<>
<>
= 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 [[https://it.wikipedia.org/wiki/Network_address_translation|NAT]] di Linux. È pensato per gli amministratori di sistema.
{{{#!wiki note
Da '''Ubuntu 20.10''' è stato sostituito da [[Sicurezza/Nftables|nftables]]. Tuttavia è ancora possibile usare '''Iptables'''.
}}}
{{{#!wiki important
Tutti i comandi citati in questa pagina vanno digitati nel [[AmministrazioneSistema/Terminale|terminale]] con i [[AmministrazioneSistema/PrivilegiDiAmministrazione/Sudo|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 [[https://wiki.ubuntu-it.org/Sicurezza/Nftables#Selezione|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.
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.
}}}
0. Impostare inoltre la seguente ''policy'', per bloccare il traffico che passa attraverso il computer: {{{
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
}}}
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
}}}
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
}}}
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:
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'''.
= Ulteriori risorse =
* [[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]]
----
CategorySicurezza