- Documentazione ufficiale
- Guide della comunità
- 12.04 LTS

web wiki forum planet
help.ubuntu-it comunità italiana

- Desktop
- Server
- Ricerca

Questa guida non è stata ancora completamente tradotta. Se vuoi contribuire alla sua traduzione contatta il Gruppo Traduzione di Ubuntu-it.
Guida a Ubuntu Server » Sicurezza »
Indietro | Avanti

# Firewall

- Introduzione
- ufw - Firewall non complicato
- IP masquerading
- Registri
- Altri strumenti
- Riferimenti

## Introduzione

Il kernel Linux include il sottosistema Netfilter usato per manipolare o decidere la sorte del traffico di rete diretto all'interno o attraverso un server. Tutte le moderne soluzioni firewall per Linux si basano su questo sistema di filtraggio dei pacchetti.

Il sistema di filtraggio dei pacchetti del kernel non è di grande utilità per gli amministratori senza un'interfaccia nello spazio utente per gestirlo. Questo è il compito di iptables. Quando un pacchetto raggiunge il proprio server, esso è gestito affidato al sottosistema Netfilter per l'accettazione, la manipolazione oppure il rifiuto secondo quanto stabilito da regole fornite al sottosistema dallo spazio utente attraverso iptables. Quindi, iptables è tutto ciò che è necessario per gestire il proprio firewall, a patto che si abbia la dimestichezza necessaria; sono comunque disponibili molte altre applicazioni per semplificare tale attività.

## ufw - Firewall non complicato

L'applicazione predefinita in Ubuntu per la configurazione di un firewall è ufw. Sviluppato per semplificare la configurazione di iptables, ufw offre un modo semplice per creare un firewall basato su protocolli IPv4 e IPv6.

ufw, in modo predefinito, è inizialmente disabilitato. Dal manuale di ufw si legge:

“ufw is not intended to provide complete firewall functionality via its command interface, but instead provides an easy way to add or remove simple rules. It is currently mainly used for host-based firewalls (ufw non ha lo scopo di implementare tutte le funzionalità di un firewall tramite la sua interfaccia di comandi, ma invece cerca di facilitare l'aggiunta o la rimozione di semplici regole. È usato principalmente per dei firewall host-based)”

Seguono degli esempi sull'uso di ufw:

- Per prima cosa, è necessario abilitare ufw. In un terminale digitare:

      sudo ufw enable

- Per aprire una porta (in questo caso la porta di SSH):

      sudo ufw allow 22

- Le regole possono anche essere aggiunte usando un formato a numeri:

      sudo ufw insert 1 allow 80

- Analogamente, per chiudere una porta aperta:

      sudo ufw deny 22

- Per eliminare una regola, usare «delete» seguito dalla regola:

      sudo ufw delete deny 22

- È anche possibile consentire l'accesso da host o da reti specifici a una porta. Il seguente esempio consente accesso SSH dall'host 192.168.0.2 a qualsiasi indirizzo IP su questo host:

      sudo ufw allow proto tcp from 192.168.0.2 to any port 22

  Sostituire 192.168.0.2 con 192.168.0.0/24 per consentire accesso SSH da tutta la sotto-rete.

- Aggiungendo l'opzione --dry-run a un comando ufw è possibile visualizzare il risultato delle regole, ma senza applicarle. Per esempio, questo è quello che verrebbe applicato nel caso venisse aperta la porta HTTP:

      sudo ufw --dry-run allow http

      *filter
      :ufw-user-input - [0:0]
      :ufw-user-output - [0:0]
      :ufw-user-forward - [0:0]
      :ufw-user-limit - [0:0]
      :ufw-user-limit-accept - [0:0]
      ### RULES ###

      ### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0
      -A ufw-user-input -p tcp --dport 80 -j ACCEPT

      ### END RULES ###
      -A ufw-user-input -j RETURN
      -A ufw-user-output -j RETURN
      -A ufw-user-forward -j RETURN
      -A ufw-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT]: "
      -A ufw-user-limit -j REJECT
      -A ufw-user-limit-accept -j ACCEPT
      COMMIT
      Rules updated

- È possibile disabilitare ufw con il comando:

      sudo ufw disable

- Per visualizzare lo stato del firewall usare:

      sudo ufw status

- Per informazioni più dettagliate usare:

      sudo ufw status verbose

- Per visualizzare il formato a numeri:

      sudo ufw status numbered

Se la porta che si vuole aprire o chiudere è definita in /etc/services, è possibile usare il nome della porta al posto del numero. In questo esempio si sostituisce 22 con ssh.

Questa è una breve introduzione all'utilizzo di ufw. Per maggiori informazioni, consultare le pagine man di ufw.

### Integrazione delle applicazioni con ufw

Le applicazioni che aprono delle porte possono includere un profilo ufw in cui vengono descritte le porte necessarie all'applicazione per funzionare correttamente. I profili vengono salvati in /etc/ufw/applications.d e possono essere modificati se le porte predefinite sono cambiate.

- Per visualizzare quali applicazioni hanno un profilo installato, in un terminale digitare:

      sudo ufw app list

- Usare un profilo di un'applicazione è simile al consentire il traffico attraverso una porta:

      sudo ufw allow Samba

- È disponibile anche una sintassi più estesa:

      ufw allow from 192.168.0.0/24 to any app Samba

  Sostituire Samba e 192.168.0.0/24 con il profilo dell'applicazione da usare e l'intervallo di indirizzi della propria rete.

  Non è necessario specificare il protocollo per l'applicazione, dato che queste informazioni sono contenute nel profilo. Notare che il nome dell'applicazione sostituisce il numero della porta.

- Per visualizzare i dettagli riguardo quali porte, protocolli, ecc... sono definiti per un'applicazione, digitare:

      sudo ufw app info Samba

Not all applications that require opening a network port come with ufw profiles, but if you have profiled an application and want the file to be included with the package, please file a bug against the package in Launchpad.

    ubuntu-bug nameofpackage

## IP masquerading

Il compito dell'IP masquerading è di consentire a quei computer della rete forniti di indirizzi IP privati e non instradabili, di accedere a Internet tramite il computer che opera il masquerading. Il traffico che va dalla rete privata verso Internet deve essere manipolato per ottenere risposte che siano re-instradabili al computer che ne ha fatto richiesta. Per ottenere questo risultato, il kernel deve modificare l'indirizzo IP sorgente di ciascun pacchetto affinché tali risposte vengano re-instradate a esso invece che all'indirizzo IP privato che ha fatto la richiesta, procedura impossibile da eseguire su Internet. Linux fa uso del tracciamento della connessione (conntrack) per tenere traccia di quale connessione appartenga a quale computer e di conseguenza per re-instradare ciascun pacchetto di risposta. Il traffico in uscita dalla rete privata viene quindi "mascherato" per simulare l'uscita dalla macchina gateway Ubuntu. Nella documentazione Microsoft questo processo è indicato come condivisione delle connessioni internet (Internet Connection Sharing).

### Masquerading con ufw

L'IP masquerading può essere ottenuto utilizzando regole ufw personalizzate. Questo è possibile dato che il backend attuale per ufw è iptables-restore con i file delle regole posizionati in /etc/ufw/*.rules. Questi file possono essere usati per aggiungere vecchie regole di iptables usate senza ufw e regole maggiormente legate al gateway o al bridge.

Le regole sono divise in due file diversi, regole da eseguire prima delle regole a riga di comando di ufw e regole da eseguire dopo ufw.

- Per prima cosa, è necessario abilitare l'inoltro dei pacchetti modificando due file di configurazione. In /etc/default/ufw modificare DEFAULT_FORWARD_POLICY in “ACCEPT”:

      DEFAULT_FORWARD_POLICY="ACCEPT"

  Quindi modificare il file /etc/ufw/sysctl.conf de-commentando:

      net/ipv4/ip_forward=1

  Similmente, per abilitare l'inoltro con IPv6 de-commentare:

      net/ipv6/conf/default/forwarding=1

- Ora verranno aggiunte delle regole al file /etc/ufw/before.rules. Le regole predefinite configurano solamente la tabella filter e per abilitare il masquerading è necessario configurare la tabella nat. Aggiungere all'inizio del file, subito dopo i commenti dell'intestazione, quanto segue:

      # regole tabella nat
      *nat
      :POSTROUTING ACCEPT [0:0]

      # Inoltro traffico da eth1 attraverso eth0
      -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

      # non cancellare la riga 'COMMIT' o queste tabelle di regole non saranno elaborate
      COMMIT

  I commenti non sono necessari, ma è buona pratica documentare le proprie configurazioni. Inoltre, quando si modificano i file rules in /etc/ufw, assicurarsi che queste righe siano sempre le ultime in ogni tabella modificata:

      # non eliminare la riga 'COMMIT' o queste tabelle di regole non saranno elaborate
      COMMIT

  Per ogni tabella è necessario un COMMIT. In questi esempi sono mostrate solamente le tabelle nat e filter, ma è possibile aggiungere regole per le tabelle raw e mangle.

  Nell'esempio precedente, sostituire eth0, eth1 e 192.168.0.0/24 con le interfacce appropriate e con l'intervallo di indirizzi corretto.

- Infine, disattivare e riattivare ufw per applicare le modifiche:

      sudo ufw disable && sudo ufw enable

L'IP masquerading ora dovrebbe essere abilitato. È possibile aggiungere regole FORWARD aggiuntive al file /etc/ufw/before.rules. È utile che queste regole addizionali vengano aggiunte alla catena ufw-before-forward.

### Masquerading con iptables

iptables can also be used to enable Masquerading.

- Similmente a ufw, il primo passo per abilitare l'inoltro di pacchetti con IPv4 è quello di modificare il file /etc/sysctl.conf e de-commentare la seguente riga:

      net.ipv4.ip_forward=1

  Per abilitare l'inoltro con IPv6, de-commetare:

      net.ipv6.conf.default.forwarding=1

- Quindi, eseguire il comando sysctl per abilitare le nuove impostazioni nel file di configurazione:

      sudo sysctl -p

- L'IP masquerading può essere ottenuto con una sola regola di iptables, che può cambiare leggermente in base alla configurazione della propria rete:

      sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

  Il comando precedente assume che lo spazio di indirizzi privato sia 192.168.0.0/16 e che il dispositivo collegato a Internet sia ppp0. La sintassi del comando è la seguente:

  - -t nat: regola viene inserita nella tabella nat

  - -A POSTROUTING: la regola viene accodata (-A) alla catena POSTROUTING

  - -s 192.168.0.0/16: la regola si applica al traffico originato dallo spazio di indirizzi specificato

  - -o ppp0: la regola si applica al traffico instradato attraverso l'interfaccia di rete specificata

  - -j MASQUERADE: il traffico che soddisfa questa regola viene "saltato" (-j sta per jump) alla destinazione MASQUERADE per essere manipolato come descritto in precedenza

- Inoltre, ogni catena nella tabella "filter" (la tabella predefinita e dove avvengono la maggior parte dei filtri sui pacchetti) ha una politica predefinita di ACCEPT, ma se si sta creando un firewall in aggiunta a un dispositivo gateway, è possibile aver impostato le politiche DROP e REJECT, nel cui caso il traffico "masqueraded" deve essere consentito attraverso la catena FORWARD affinché la regola precedente possa funzionare:

      sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
      sudo iptables -A FORWARD -d 192.168.0.0/16 -m state \
      --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

  I precedenti comandi consentiranno a tutte le connessioni della propria rete locale accesso a Internet e a tutto il traffico relativo a queste connessioni di ritornare ai computer che lo hanno originato.

- Per fare in modo che il masquerading sia abilitato al riavvio, modificare il file /etc/rc.local e aggiungere qualsiasi dei comandi utilizzati precedentemente. Per esempio, aggiungere il primo comando senza filtro:

      iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

## Registri

I registri del firewall sono molto utili per riconoscere gli attacchi, migliorare le regole del firewall e per verificare attività inusuali nella propria rete. È necessario includere regole di registrazione per fare in modo che vengano eseguite le registrazioni e queste devono essere inserite prima di qualsiasi regola terminante applicabile (un regola con un obiettivo che decide il destino di un pacchetto, come ACCEPT, DROP o REJECT).

Se si sta usando ufw è possibile attivare la registrazione con il seguente comando:

    sudo ufw logging on

Per disabilitare la registrazione in ufw, sostituire, nel comando precedente, on con off.

Se è in uso iptables al posto di ufw, digitare:

    sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 \
    -j LOG --log-prefix "NEW_HTTP_CONN: "

A request on port 80 from the local machine, then, would generate a log in dmesg that looks like this (single line split into 3 to fit this document):

    [4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
     SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP
     SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0

The above log will also appear in /var/log/messages, /var/log/syslog, and /var/log/kern.log. This behavior can be modified by editing /etc/syslog.conf appropriately or by installing and configuring ulogd and using the ULOG target instead of LOG. The ulogd daemon is a userspace server that listens for logging instructions from the kernel specifically for firewalls, and can log to any file you like, or even to a PostgreSQL or MySQL database. Making sense of your firewall logs can be simplified by using a log analyzing tool such as logwatch, fwanalog, fwlogwatch, or lire.

## Altri strumenti

Esistono diversi strumenti per "costruire" un firewall completo senza alcuna conoscenza di iptables. Per chi preferisce un'interfaccia grafica:

- fwbuilder è molto potente e ha un aspetto che può risultare familiare agli amministratori che hanno utilizzato un firewall commerciale come Checkpoint FireWall-1.

Per chi preferisce uno strumento a riga di comando con file di configurazione in semplice testo:

- Shorewall è una soluzione molto potente per configurare un firewall di livello avanzato per qualsiasi rete.

## Riferimenti

- The Ubuntu Firewall wiki page contains information on the development of ufw.

- Inoltre, la pagina di manuale di ufw contiene molte informazioni utili: man ufw.

- Per maggiori informazioni sull'uso di iptables, consultare packet-filtering-HOWTO.

- Il nat-HOWTO contiene ulteriori dettagli sul masquerading.

- The IPTables HowTo in the Ubuntu wiki is a great resource.

Indietro | Avanti