# Iptables (Italiano)

This article or section needs expansion.

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Iptables (Italiano)#)

Articoli correlati

- Firewalls (Italiano)
- Sysctl#TCP/IP stack hardening

Iptables è un potente firewall integrato nel kernel Linux ed è una parte del progetto netfilter. Può essere configurato direttamente, oppure usando uno dei vari frontends oppure una delle GUI. iptables è utilizzato per gli IPv4 mentre ip6tables è usato per gli IPv6.

## 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 dai repository ufficiali:

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

This article or section needs expansion.

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Iptables (Italiano)#)

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. 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
- 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, 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 è 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 è disponibile nel repository `[community]`

## Ulteriori risorse

Wikipedia:iptables

- Sito ufficiale di iptables
- iptables Tutorial 1.2.2 by Oskar Andreasson
- iptables Debian Wiki di Debian

Categories:

- Security (Italiano)
- Networking (Italiano)

Hidden category:

- Pages or sections flagged with Template:Expansion