UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

219 lines (135 loc) 8.29 kB
Iptables è un potente [firewall](/index.php/Firewalls_(Italiano) "Firewalls (Italiano)") integrato nel kernel Linux ed è una parte del progetto [netfilter](https://en.wikipedia.org/wiki/it:Netfilter oppure una delle [GUI](/index.php/Firewalls_(Italiano)#iptables_GUIs "Firewalls (Italiano)"). iptables è utilizzato per gli [IPv4](https://en.wikipedia.org/wiki/it:IPv4 "wikipedia:it:IPv4") mentre ip6tables è usato per gli [IPv6](https://en.wikipedia.org/wiki/it:IPv6 "wikipedia:it:IPv6"). ## Contents * [1 Installazione](#Installazione) * [2 Concetti di base](#Concetti_di_base) * [2.1 tabelle](#tabelle) * [2.2 catene](#catene) * [2.3 destinazione](#destinazione) * [2.4 moduli](#moduli) * [3 Configurazione](#Configurazione) * [3.1 Da linea di comando](#Da_linea_di_comando) * [3.2 Salvare i contatori](#Salvare_i_contatori) * [3.3 Guide](#Guide) * [4 Log](#Log) * [4.1 Limitare le dimensioni del log](#Limitare_le_dimensioni_del_log) * [4.2 syslog-ng](#syslog-ng) * [4.3 ulogd](#ulogd) * [5 Ulteriori risorse](#Ulteriori_risorse) ## Installazione **Nota:** Il proprio kernel dovrà essere compilato con il supporto per iptables. Tutti i kernel stock di Arch Linux hanno il supporto per iptables. Per prima cosa, installare il pacchetto [iptables](https://www.archlinux.org/packages/?name=iptables) dai [repository ufficiali](/index.php/Official_repositories_(Italiano) "Official repositories (Italiano)"): Successivamente, abilitare ed avviare il file service di `iptables` per systemd: ``` # systemctl enable iptables # systemctl start iptables ``` Se si desidera il supporto per IPv6, abilitare ed avviare il file service di `ip6tables` per systemd: ``` # systemctl enable ip6tables # systemctl start ip6tables ``` ## Concetti di base ### tabelle iptables contiene quattro tabelle: raw, filter, nat e mangle. ### catene Le catene sono utilizzate per indicare una serie di regole. Un pacchetto viene comparato dall'inizio della catena fino a che non soddisfa una regola. Ci sono tre catene principali: `INPUT, OUTPUT` e `FORWARD`. Tutti i pacchetti generati dal sistema ed in uscita, passano attraverso la catena `OUTPUT`, tutti i pacchetti in entrata e destinati al sistema stesso passano attraverso la catena `INPUT`, mentre i pacchetti che transitano per il sistema ma sono destinati ad altri sistemi passano dalla catena `FORWARD`. Queste catene hanno destinazioni di default nel caso nessuna regola venga soddisfatta. Catene personalizzate dagli utenti possono essere aggiunte per aumentare l'efficienza delle regole. ### destinazione Una destinazione è il risultato che si ottiene quando un pacchetto soddisfa una regola. Le destinazioni sono specificate mediante l'uso di "jump" (-j). Le destinazioni più comuni sono ACCEPT, DROP, REJECT oppure LOG. ### moduli Esistono diversi moduli che possono essere usati per rafforzare iptables, come connlimit, conntrack, limit e recent. Questi moduli forniscono funzionalità aggiuntive per permettere l'uso di regole di filtraggio più complesse. ## Configurazione ### Da linea di comando Sarà possibile controllare le regole in uso ed il numero di pacchetti che hanno soddisfatto le regole usando il comando: `# iptables -nvL` ``` Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0K packets, 0 bytes) pkts bytes target prot opt in out source destination ``` Se l'output ottenuto è simile a quello nell'esemprio, allora non sono state configurate regole. Le regole possono essere resettate alle impostazioni di default usando questi comandi: ``` # iptables -P INPUT ACCEPT # iptables -P FORWARD ACCEPT # iptables -P OUTPUT ACCEPT # iptables -F # iptables -X ``` ### Salvare i contatori **Nota:** Questa procedura non funzionerà se si utilizza [systemd](/index.php/Systemd_(Italiano) "Systemd (Italiano)"). Sarà necessario modificare i file service di systemd. Sarà possibile, opzionalmente, salvare i contatori di pacchetti e dei byte. Per poterlo fare, modificare il file `/etc/rc.d/iptables` Nella sezione **save)** cambiare la linea: ``` /usr/sbin/iptables-save > $IPTABLES_CONF ``` in ``` /usr/sbin/iptables-save -c > $IPTABLES_CONF ``` Nella sezione **stop)**, aggiugnere le seguenti linee per salvare prima dello stop del demone: ``` stop) $0 save sleep 2 ``` Nella sezione **start)**, cambiare la linea: ``` /usr/sbin/iptables-restore < $IPTABLES_CONF ``` in ``` /usr/sbin/iptables-restore -c < $IPTABLES_CONF ``` e salvare il file. ### Guide * [Simple stateful firewall](/index.php/Simple_stateful_firewall "Simple stateful firewall") * [Router](/index.php/Router "Router") ## Log La destinazione LOG può essere utilizzata per registrare i pacchetti che soddisfano una regola. Diversamente dalle altre destinazioni come ACCEPT o DROP, il pacchetto continua a muoversi sulla catena dopo essere passato dalla destinazione LOG. Questo significa che per registrare tutti i pacchetti bloccati, sarà necessario aggiungere una regola duplicata con destinazione LOG prima di ogni regola con destinazione DROP. Dato che questo riduce l'efficienza e rende le cose meno semplici, una catena LOGDROP potrà essere creata al suo posto. ``` ## /etc/iptables/iptables.rules *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] ... altre catene definite dall'utente .. ## catena LOGDROP :LOGDROP - [0:0] -A LOGDROP -m limit --limit 5/m --limit-burst 10 -j LOG -A LOGDROP -j DROP ... regole ... ## effettua il log ED effettua il drop dei pacchetti che soddisfano questa regola: -A INPUT -m state --state INVALID -j LOGDROP ... altre regole ... ``` ### Limitare le dimensioni del log Il modulo limit viene usato per impedire che il log di iptables cresca troppo o causi inutili scritture sul disco. Senza usare limiti, un attaccante potrebbe riempire il disco (oppure la sola partizione `/var`) facendo scrivere log ad iptables. **-m limit** viene usato per attivare il modulo limit. Si può utilizzare l'opzione --limit per impostare un lasso di tempo medio, l'opzione --limit-burst serve per impostare il limite di pacchetti per i log. Ad esempio: ``` -A LOGDROP -m limit --limit 5/m --limit-burst 10 -j LOG ``` Questo aggiunge una regola alla catena LOGDROP che registrerà nel log tutti i pacchetti che passano da essa. I primi 10 pacchetti verranno registrati, e dopo di essi solo 5 pacchetti per minuto verranno registrati. Il "limit-burst" viene ripristinato ogni volta che il non viene superato il "tempo di limit". ### syslog-ng Presumendo che si utilizzi [syslog-ng](/index.php/Syslog-ng "Syslog-ng"), come di default su Archlinux, è possibile controllare dove sarà salvato il log di iptables in questo modo: ``` filter f_everything { level(debug..emerg) and not facility(auth, authpriv); }; ``` in ``` filter f_everything { level(debug..emerg) and not facility(auth, authpriv) and not filter(f_iptables); }; ``` Questo fermerà il log di `iptables` nel file `/var/log/everything.log`. Se si desidera che i log di iptables vadano in un file diverso da `/var/log/iptables.log`, basterà modificare il valore di destinazione di d_iptables (sempre nel file `syslog-ng.conf`) ``` destination d_iptables { file("/var/log/iptables.log"); }; ``` ### ulogd [ulogd](http://www.netfilter.org/projects/ulogd/index.html) è uno demone eseguito in userspace il suo scopo è quello di effettuare il log dei pacchetti per netfilter, questo demone può rimpiazzare la destinazione di default LOG. Il pacchetto [ulogd](https://www.archlinux.org/packages/?name=ulogd) è disponibile nel repository `[community]` ## Ulteriori risorse [Wikipedia:iptables](https://en.wikipedia.org/wiki/iptables "wikipedia:iptables") * [Sito ufficiale di iptables](http://www.netfilter.org/projects/iptables/index.html) * [iptables Tutorial 1.2.2](http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html) by Oskar Andreasson * [iptables Debian](http://wiki.debian.org/iptables) Wiki di Debian