Translation(s): English - Italiano - Español
NOTA BENE: iptables è stato sostituito da nftables a partire da Debian 10 Buster
Iptables fornisce le funzionalità di filtraggio dei pacchetti, traduzione degli indirizzi di rete (NAT) e altre funzioni di rimaneggiamento dei pacchetti.
Due degli usi più tipici di iptables sono la funzione di firewall e NAT.
La configurazione manuale di iptables può essere impegnativa per i non esperti. Fortunatamente ci sono a disposizioni molti strumenti di configurazione (configurazione guidata) che assistono l'utente, tra cui il più interessante è probabilmente firewalld, ma altri sono fwbuilder, bastille, ferm, ufw e opensnitch.
Stato attuale
NOTA BENE: in Debian l'infrastruttura nftables è usata in modo predefinito a partire da Debian 10 Buster.
A partire da Debian 10 Buster, nf_tables è il backend predefinito quando si usa iptables, attraverso il livello iptables-nft (cioè usando la sintassi iptables syntax con il sottosistema nf_tables del kernel). Questo ha effetti anche su ip6tables, arptables e ebtables.
Si può passare da uno all'altro, tra iptables-nft e iptables-legacy usando update-alternatives (lo stesso vale per arptables ed ebtables).
Le impostazioni predefinite a partire da Debian 10 Buster:
# update-alternatives --set iptables /usr/sbin/iptables-nft # update-alternatives --set ip6tables /usr/sbin/ip6tables-nft # update-alternatives --set arptables /usr/sbin/arptables-nft # update-alternatives --set ebtables /usr/sbin/ebtables-nft
Passare alla vecchia versione:
# update-alternatives --set iptables /usr/sbin/iptables-legacy # update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy # update-alternatives --set arptables /usr/sbin/arptables-legacy # update-alternatives --set ebtables /usr/sbin/ebtables-legacy
Visualizzare la configurazione attuale
Per vedere quali regole siano già configurate, usare questo comando:
iptables -L
L'output sarà simile al seguente:
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
Quanto sopra permette a tutti di accedere a tutto.
Archiviare le regole di iptables in un file
Nota: c'è un pacchetto apposito che aiuta in questa operazione: iptables-persistent
Si possono rendere le impostazioni un poco più restrittive creando un file di prova per iptables:
editor /etc/iptables.test.rules
In questo file inserire alcune regole base:
*filter # Permette tutto il traffico su loopback (lo0) traffic e elimina tutto il traffico che non usa lo0 verso 127/8 -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT # Accetta in entrata su tutte le connessioni stabilite -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Permette tutto il traffico in uscita # Potrebbe essere modificato per permettero solo un certo tipo di traffico -A OUTPUT -j ACCEPT # Permette connessioni HTTP e HTTPS da qualsiasi parte provengano (le normali porte per i siti web) -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # Permette le connessioni SSH # Il numero --dport e' lo stesso di quello in /etc/ssh/sshd_config -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT # Ora ci si dovrebbe informare sulle regole di iptables e considerare se l'accesso ssh # per tutti sia realmente quello che si vuole. Molto probabilmente si preferisce # permettere l'accesso solo per alcuni IP. # Permettere ping # notare che bloccare altri tipi di pacchetti icmp è considerata da alcuni una cattiva idea # rimuovere -m icmp --icmp-type 8 da questa riga per permettere tutti i tipi di icmp: # https://security.stackexchange.com/questions/22711 -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # registrare le chiamate negate di iptables (accesso via il comando 'dmesg') -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 # Respingere tutto il resto del traffico in entrata: politica del negare in modo predefinito quando non esplicitamente permesso -A INPUT -j REJECT -A FORWARD -j REJECT COMMIT
Tutto questo potrebbe sembrare complicato, ma provare a guardare una sezione alla volta. Ci si accorgerà che ciò che viene fatto è semplicemente chiudere tutte le porte tranne quelle che sono state permesse: che in questo caso sono le porte 80 e 443 (le porte standard dei browser web) e la porta SSH definita in precedenza.
Attivare queste nuove regole:
iptables-restore < /etc/iptables.test.rules
e vedere la differenza:
iptables -L
Ora l'output mostra che solo le porte definite prima sono aperte. Tutte le altre sono chiuse. Se la macchina è sotto controllo remoto si può volere stabilire una nuova connessione ssh a questo punto.
Rendere le modifiche permanenti
Dato che le tabelle IP (IP-Table) non sono persistenti, vengono cancellate ("ripulite") all'avvio successivo.
Una volta che si è soddisfatti del proprio insieme di regole, salvare le regole nel file di configurazione principale di iptables:
iptables-save > /etc/iptables.up.rules
Per assicurarsi che le regole di iptables vengano usate al prossimo riavvio, creare un nuovo file:
editor /etc/network/if-pre-up.d/iptables
e aggiungervi queste righe:
#!/bin/sh /sbin/iptables-restore < /etc/iptables.up.rules
Il file deve essere eseguibile, perciò cambiare i suoi permessi:
chmod +x /etc/network/if-pre-up.d/iptables
Un altro metodo è quello di usare il pacchetto iptables-persistent. Le regole possono essere memorizzate usando comandi del tipo:
iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6
}
Notare: Questo HOWTO è frutto del contributo dell'utente Geejay a wiki.openvz.org e fa parte di un howto sull'installazione.
Vedere anche
Documentazione su netfilter/iptables:
. http://www.netfilter.org/documentation/- Introduzioni facili/Panoramiche
Firewall e routing avanzato in Linux:
. http://ornellas.apanela.com/dokuwiki/pub:firewall_and_adv_routingNozioni base su iptables:
. http://forums.justlinux.com/showthread.php?70876-iptables-basics
Securing Debian HOWTO: sezione sull'aggiunta di funzionalità firewall:
. http://www.debian.org/doc/manuals/securing-debian-howto/ch-sec-services.en.html#s-firewall-setup