Capitolo 4.  Sicurezza in Linux

Sommario

4.1. Mascheramento e firewall
4.2. SSH: operazione di rete protette
4.3. Cifratura di partizioni e file
4.4. Limitazione di privilegi con AppArmor
4.5. Sicurezza e riservatezza

Estratto

Il mascheramento e il firewall consentono di controllare il flusso e lo scambio di dati. SSH (secure shell) permette di accedere agli host remoti tramite una connessione cifrata. La cifratura di file o di intere partizioni protegge i dati in caso di accesso di terzi al sistema. Oltre alle istruzioni tecniche, è opportuno ricercare informazioni sulla protezione delle reti Linux.


4.1.  Mascheramento e firewall

Quando Linux viene utilizzato in un ambiente di rete, vengono rese disponibili le funzioni del kernel che consentono la manipolazione dei pacchetti di rete per mantenere separate le aree interne ed esterne della rete. Il framework netfilter di Linux è il mezzo mediante il quale creare un firewall di rete efficace per mantenere separate le varie reti. Unitamente a iptables, una struttura di tabella generica per la definizione di set di regole, consente di controllare quali pacchetti sono consentiti attraverso un'interfaccia di rete. Questo filtro di pacchetti può essere impostato molto facilmente mediante SuSEfirewall2 e il modulo YaST corrispondente.

4.1.1. Filtro di pacchetti con iptables

I componenti netfilter e iptables vengono utilizzati per filtrare e manipolare i pacchetti di rete e per la conversione degli indirizzi di rete (NAT). I criteri di filtro e le eventuali azioni ad essi associate sono memorizzati in concatenamenti, ai quali devono corrispondere in sequenza i singoli pacchetti di rete all'arrivo. Tali concatenamenti sono memorizzati in tabelle che possono essere modificate, insieme ai set di regole, mediante il comando iptables.

Nel kernel Linux vengono gestite tre tabelle, ognuna per una particolare categoria di funzioni del filtro di pacchetti:

filtro

In questa tabella è memorizzata la maggior parte delle regole del filtro poiché implementa il meccanismo di filtro di pacchetti nel senso più stretto del termine e determina, ad esempio, se i pacchetti vengono accettati (ACCEPT) o scartati (DROP).

nat

In questa tabella vengono definite le eventuali modifiche agli indirizzi di origine e di destinazione dei pacchetti. L'uso di queste funzioni consente inoltre di implementare il mascheramento, un tipo speciale di NAT utilizzato per collegare una rete privata a Internet.

mangle

Le regole contenute in questa tabella consentono di manipolare i valori memorizzati nelle intestazioni IP, ad esempio il tipo di servizio.

Figura 4.1. iptables: possibili percorsi di un pacchetto

iptables: possibili percorsi di un pacchetto

In queste tabelle sono presenti diversi concatenamenti predefiniti per la corrispondenza dei pacchetti:

PRE-INSTRADAMENTO

Questo concatenamento viene applicato ai pacchetti in entrata.

INPUT

Questo concatenamento viene applicato ai pacchetti destinati ai processi interni del sistema.

FORWARD

Questo concatenamento viene applicato ai pacchetti che sono solo instradati attraverso il sistema.

OUTPUT

Questo concatenamento viene applicato ai pacchetti che hanno origine dal sistema stesso.

POST-INSTRADAMENTO

Questo concatenamento viene applicato a tutti i pacchetti in uscita.

Nella Figura 4.1, "iptables: possibili percorsi di un pacchetto" vengono illustrati i possibili percorsi di un pacchetto di rete in un dato sistema. Ai fini della semplicità, nella figura le tabelle sono elencate come parti di concatenamenti, ma in realtà questi concatenamenti si trovano all'interno delle tabelle stesse.

Nel caso più semplice possibile un pacchetto in entrata destinato al sistema viene ricevuto dall'interfaccia eth0. Il pacchetto viene assegnato prima al concatenamento PREROUTING della tabella mangle, quindi al concatenamento PREROUTING della tabella nat. Il passaggio seguente, che si riferisce all'instradamento del pacchetto, determina che la destinazione effettiva del pacchetto è un processo del sistema stesso. Dopo il passaggio dei concatenamenti INPUT delle tabelle mangle e filter, il pacchetto raggiunge la destinazione finale, a condizione che vi sia una corrispondenza effettiva con le regole della tabella filter.

4.1.2. Nozioni di base sul mascheramento

Il mascheramento è il formato di NAT (Network Address Translation) specifico di Linux. Può essere utilizzato per la connessione di una piccola LAN, in cui gli host utilizzano indirizzi IP dall'intervallo privato (vedere la Sezione 18.1.2, "Maschere di rete e instradamento"), a Internet dove vengono utilizzati indirizzi IP ufficiali. Per consentire agli host della LAN di connettersi a Internet, i relativi indirizzi privati vengono convertiti in indirizzi ufficiali mediante il router che funge da gateway tra la LAN e Internet. Il principio sottostante è semplice poiché il router dispone di più interfacce di rete, di solito una scheda di rete e un'interfaccia separata per la connessione a Internet. Mentre quest'ultima collega il router alla rete mondiale esterna, una o più ulteriori interfacce lo collegano agli host della LAN. Il collegamento di tali host nella rete locale alla scheda di rete del router, ad esempio eth0, consente di inviare al relativo gateway o router di default qualsiasi pacchetto non destinato alla rete locale.

[Important]uso della maschera di rete corretta

Durante la configurazione della rete verificare che l'indirizzo di diffusione e la maschera di rete siano gli stessi per tutti gli host locali. In caso contrario, i pacchetti non potranno essere instradati nel modo corretto.

Come accennato in precedenza, ogni volta che un host della LAN invia pacchetti destinati a un indirizzo Internet, questi vengono instradati al router di default il quale deve essere configurato prima che tali pacchetti possano essere inoltrati. Per motivi di sicurezza, questa funzionalità non è abilitata in un'installazione di default di SUSE Linux. Per abilitare l'inoltro di pacchetti, impostare la variabile IP_FORWARD nel file /etc/sysconfig/sysctl su IP_FORWARD=yes.

Il router è visibile all'host di destinazione della connessione che tuttavia non dispone di alcun tipo di informazioni sull'host residente nella rete interna dalla quale hanno avuto origine i pacchetti. Questa tecnica viene infatti definita mascheramento. A causa della conversione degli indirizzi, il router è la prima destinazione di tutti i pacchetti di risposta. Affinché i pacchetti in entrata possano essere inoltrati all'host corretto nella rete locale, è necessario che il router li identifichi e converta i relativi indirizzi di destinazione.

Poiché il traffico in entrata dipende dalla tabella di mascheramento, non è assolutamente possibile aprire una connessione a un host interno dalla rete esterna, in quanto nella tabella non sono presenti voci per una connessione di questo tipo. Per qualsiasi connessione già stabilita, nella tabella è inoltre assegnata una voce relativa allo stato, quindi tale voce non può essere utilizzata da un'altra connessione.

È dunque possibile che si verifichino problemi con alcuni protocolli applicativi, ad esempio ICQ, cucme, IRC (DCC, CTCP) e FTP (in modalità PORT). Netscape, il programma FTP standard, e molti altri utilizzano PASV, una modalità passiva molto meno problematica per quanto riguarda il filtro di pacchetti e il mascheramento.

4.1.3. Nozioni di base sui firewall

Firewall è probabilmente il termine più ampiamente utilizzato per descrivere un meccanismo per la creazione e la gestione di un collegamento tra reti, oltre che per il controllo del flusso di dati tra di esse. Più precisamente, il meccanismo descritto in questa sezione è definito filtro di pacchetti. Un filtro di pacchetti è preposto alla regolazione del flusso di dati in base a determinati criteri, ad esempio protocolli, porte e indirizzi IP, e consente di bloccare i pacchetti che, secondo i relativi indirizzi, non dovrebbero presumibilmente raggiungere la rete. Per consentire, ad esempio, l'accesso pubblico al server Web in uso, aprire la porta corrispondente in maniera esplicita. Un filtro di pacchetti non effettua tuttavia la scansione del contenuto di pacchetti con indirizzi validi come quelli destinati al server Web. Se, ad esempio, i pacchetti in entrata avessero lo scopo di compromettere un programma CGI sul server Web, il filtro di pacchetti ne consentirebbe comunque l'ingresso.

Un meccanismo più efficace, ma più complesso, consiste nel combinare più tipi di sistemi in modo da ottenere, ad esempio, l'interazione tra un filtro di pacchetti e un gateway applicativo o un proxy, nel qual caso il filtro di pacchetti rifiuta tutti i pacchetti destinati alle porte disabilitate e accetta solo i pacchetti indirizzati al gateway applicativo. Questo gateway o proxy funge da client del server effettivo e, in un certo senso, il proxy può essere considerato un host di mascheramento al livello del protocollo utilizzato dall'applicazione. Il proxy Squid, un server proxy HTTP, ne è un esempio. Per utilizzare Squid, è necessario configurare la comunicazione del browser tramite il proxy. Tutte le pagine HTTP richieste vengono fornite dalla cache del proxy e le pagine non disponibili nella cache vengono recuperate da Internet mediante il proxy. Per fare un altro esempio, SUSE Proxy Suite (proxy-suite) include un proxy per il protocollo FTP.

Nella sezione seguente viene descritto il filtro di pacchetti fornito con SUSE Linux. Per ulteriori informazioni sul filtro di pacchetti e sui firewall, leggere la documentazione HOWTO di Linux su Firewall inclusa nel pacchetto howto. Se il pacchetto è installato, utilizzare less /usr/share/doc/howto/en/txt/Firewall-HOWTO.gz per accedere a tale documentazione.

4.1.4. SuSEfirewall2

SuSEfirewall2 è uno script utilizzato per leggere le variabili impostate nel file /etc/sysconfig/SuSEfirewall2 e generare un set di regole di iptables. Consente di definire tre zone di sicurezza, tuttavia nella configurazione di esempio seguente vengono considerate solo la prima e la seconda:

Zona esterna

Poiché non vi è modo di esercitare alcun controllo sulla rete esterna, è necessario impedire l'accesso all'host dall'esterno. Nella maggior parte dei casi la rete esterna si identifica con Internet, ma potrebbe trattarsi di un'altra rete non sicura, ad esempio una WLAN.

Zona interna

Identifica la rete privata, quasi sempre la LAN. Se gli host in questa rete utilizzano indirizzi IP dall'intervallo privato (vedere la Sezione 18.1.2, "Maschere di rete e instradamento"), abilitare la conversione degli indirizzi di rete (NAT) in modo che gli host della rete interna possano accedere alla rete esterna.

Demilitarized Zone (DMZ)

Gli host che si trovano in questa zona possono essere raggiunti sia dalla rete esterna che dalla rete interna, ma non possono accedere alla rete interna. Questa configurazione consente di aggiungere un'ulteriore linea di difesa alla rete interna, essendo i sistemi DMZ isolati da questa rete.

Qualsiasi tipo di traffico di rete non esplicitamente consentito dalla regola di filtraggio viene soppresso da iptables, pertanto ogni interfaccia con traffico in entrata deve essere inserita in una delle tre zone. Definire per ogni zona i protocolli o i servizi consentiti. La regola impostata viene applicata solo ai pacchetti che hanno origine dagli host remoti, mentre i pacchetti generati localmente non vengono catturati dal firewall.

La configurazione può essere eseguita mediante YaST (vedere la Sezione 4.1.4.1, "Configurazione con YaST") oppure manualmente tramite il file /etc/sysconfig/SuSEfirewall2 che è commentato in modo chiaro. Nel file /usr/share/doc/packages/SuSEfirewall2/EXAMPLES sono inoltre disponibili numerosi scenari di esempio.

4.1.4.1. Configurazione con YaST

[Important]configurazione automatica del firewall

Dopo l'installazione viene avviato automaticamente un firewall da parte di YaST su tutte le interfacce configurate. Se nel sistema è configurato e attivato un server, YaST è in grado di modificare la configurazione del firewall generata automaticamente mediante l'opzione Apri il firewall per l'interfaccia selezionata o Porta aperta nel firewall nei moduli di configurazione del server. In alcune finestre di dialogo dei moduli del server è presente il pulsante Dettagli firewall che consente l'attivazione di ulteriori servizi e porte. È possibile utilizzare il modulo di configurazione del firewall di YaST per attivare, disattivare o riconfigurare il firewall.

Le finestre di dialogo di YaST per la configurazione grafica sono accessibili dal centro controllo YaST. Selezionare Sicurezza e utenti+Firewall. La configurazione è suddivisa in sette sezioni a cui è possibile accedere direttamente dalla struttura dell'albero sul lato sinistro.

Avvio

In questa finestra di dialogo è possibile impostare il comportamento all'avvio. In un'installazione di default SuSEfirewall2 viene avviato automaticamente, tuttavia è possibile impostarne l'avvio e l'interruzione tramite questa finestra. Per implementare le nuove impostazioni in un firewall in esecuzione, utilizzare Salva le impostazioni e riavvia il firewall adesso.

Figura 4.2. Configurazione del firewall con YaST

Configurazione del firewall con YaST
Interfacce

In questa finestra di dialogo sono elencate tutte le interfacce di rete conosciute. Per rimuovere un'interfaccia da una zona, selezionare l'interfaccia, fare clic su Modifica, quindi scegliere Non è stata assegnata alcuna zona. Per aggiungere un'interfaccia a una zona, selezionare l'interfaccia, fare clic su Modifica, quindi scegliere una delle zone disponibili. È inoltre possibile scegliere Personalizza per creare un'interfaccia speciale con impostazioni personalizzate.

Servizi consentiti

È necessario impostare questa opzione per offrire servizi dal sistema in uso a una zona dalla quale è protetto. Per default, il sistema è protetto solo dalle zone esterne. Consentire esplicitamente i servizi che dovranno essere accessibili agli host esterni. Attivare i servizi dopo aver selezionato la zona desiderata in Servizi consentiti per la zona selezionata.

Mascheramento

Il mascheramento consente di nascondere la rete interna dalle reti esterne, ad esempio Internet, mentre consente agli host nella rete interna di accedere in maniera trasparente alla rete esterna. Le richieste dalla rete esterna a quella interna vengono bloccate, mentre le richieste dalla rete interna vengono viste dall'esterno come se fossero generate dal server di mascheramento. Se è necessario che servizi speciali in un computer interno siano disponibili alla rete esterna, aggiungere regole di reindirizzamento speciali per i servizi desiderati.

Diffusione

In questa finestra di dialogo è possibile configurare le porte UDP che consentono le diffusioni. Aggiungere i numeri di porta o i servizi necessari alla zona appropriata separati da spazi. Vedere anche il file /etc/services.

In questa finestra è possibile abilitare la registrazione delle diffusioni non accettate. Questo aspetto potrebbe risultare problematico, in quanto gli host Windows utilizzano diffusioni per il riconoscimento reciproco e di conseguenza generano molti pacchetti che non vengono accettati.

Supporto IPsec

In questa finestra di dialogo è possibile configurare la disponibilità del servizio IPsec per la rete esterna. Specificare quali pacchetti sono considerati sicuri in Dettagli.

Livello di log

Per la registrazione è possibile utilizzare due regole, ovvero pacchetti accettati e pacchetti non accettati. I pacchetti non accettati sono identificati mediante DROPPED o REJECTED. Selezionare Protocolla tutto, Protocolla solo pacchetti cruciali oppure Non protocollare niente per entrambi.

Dopo aver completato la configurazione del firewall, scegliere Avanti per chiudere la finestra di dialogo. Viene aperto un riepilogo basato sulle zone della configurazione del firewall. Controllare tutte le impostazioni. Tutti i servizi, le porte e i protocolli consentiti sono elencati in questo riepilogo. Per modificare la configurazione, scegliere Indietro. Per salvare la configurazione, fare clic su Accetta.

4.1.4.2. Configurazione manuale

Nei paragrafi seguenti vengono fornite istruzioni dettagliate per una corretta configurazione. Per ogni voce della configurazione è indicato se si riferisce al firewall o al mascheramento. Non sono invece trattati gli aspetti che riguardano DMZ (Demilitarized Zone) descritti nel file di configurazione, in quanto sono applicabili solo a infrastrutture di rete più complesse di grandi organizzazioni (reti aziendali), che richiedono una configurazione più vasta e una conoscenza approfondita dell'argomento.

Utilizzare innanzitutto il modulo YaST relativo ai servizi di sistema (Runlevel) per abilitare SuSEfirewall2 nel runlevel in uso (3 o più probabilmente 5) e impostare i collegamenti simbolici per gli script SuSEfirewall2_* nelle directory /etc/init.d/rc?.d/.

FW_DEV_EXT (firewall, mascheramento)

Il dispositivo collegato a Internet. Per una connessione via modem immettere ppp0. Per un collegamento ISDN utilizzare ippp0. Per le connessioni DSL utilizzare dsl0. Specificare auto per utilizzare l'interfaccia corrispondente all'instradamento di default.

FW_DEV_INT (firewall, mascheramento)

Il dispositivo collegato alla rete privata interna (ad esempio eth0). Lasciare vuota questa voce se non esiste una rete interna e il firewall viene utilizzato solo per proteggere l'host sul quale è in esecuzione.

FW_ROUTE (firewall, mascheramento)

Se è necessario utilizzare la funzione di mascheramento, impostare questa voce su yes. Gli host interni non saranno visibili all'esterno, poiché i relativi indirizzi di rete privata (ad esempio, 192.168.x.x) vengono ignorati dai router su Internet.

Per un firewall senza mascheramento impostare questa voce su yes solo se si desidera consentire l'accesso alla rete interna. In questo caso gli host interni dovranno utilizzare indirizzi IP registrati ufficialmente. Normalmente l'accesso dall'esterno alla rete interna non dovrebbe essere consentito.

FW_MASQUERADE (mascheramento)

Impostare questa voce su yes se è necessario utilizzare la funzione di mascheramento. In questo modo si ottiene una connessione virtualmente diretta a Internet per gli host interni. Tra gli host della rete interna e Internet è tuttavia più sicuro utilizzare un server proxy. Il mascheramento non è necessario per i servizi forniti da un server proxy.

FW_MASQ_NETS (mascheramento)

Specificare gli host o le reti da mascherare lasciando uno spazio tra le singole voci. Ad esempio:

FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INT (firewall)

Impostare questa voce su yes per proteggere l'host firewall da attacchi che hanno origine nella rete interna. I servizi sono disponibili per la rete interna solo se vengono abilitati esplicitamente. Vedere anche FW_SERVICES_INT_TCP e FW_SERVICES_INT_UDP.

FW_SERVICES_EXT_TCP (firewall)

Immettere le porte TCP che dovranno essere disponibili. Lasciare vuota questa voce per una normale workstation in una configurazione domestica che non offre alcun servizio.

FW_SERVICES_EXT_UDP (firewall)

Lasciare vuota questa voce, a meno che sia in esecuzione un servizio UDP e si desideri renderlo disponibile all'esterno. Tra i servizi che utilizzano UDP vi sono server DNS, IPSec, TFTP, DHCP e altri. In tal caso immettere le porte UDP da utilizzare.

FW_SERVICES_INT_TCP (firewall)

Definire tramite questa variabile i servizi disponibili per la rete interna La notazione è la stessa di FW_SERVICES_EXT_TCP, tuttavia le impostazioni vengono applicate alla rete interna. È necessario impostare questa variabile solo se FW_PROTECT_FROM_INT è impostata su yes.

FW_SERVICES_INT_UDP (firewall)

Vedere FW_SERVICES_INT_TCP.

Dopo aver completato la configurazione del firewall, eseguirne il test. Per creare set di regole del firewall immettere SuSEfirewall2 start come root. Utilizzare quindi telnet, ad esempio, da un host esterno per verificare che la connessione sia effettivamente rifiutata. Esaminare successivamente /var/log/messages il cui contenuto dovrebbe essere analogo a quanto segue:


Mar 15 13:21:38 linux kernel: SFW2-INext-DROP-DEFLT IN=eth0 
OUT= MAC=00:80:c8:94:c3:e7:00:a0:c9:4d:27:56:08:00 SRC=192.168.10.0 
DST=192.168.10.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=15330 DF PROTO=TCP 
SPT=48091 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0 
OPT (020405B40402080A061AFEBC0000000001030300)

Per il test della configurazione del firewall è consigliabile utilizzare anche il pacchetto nmap o nessus. La documentazione relativa a nmap è disponibile in /usr/share/doc/packages/nmap, mentre la documentazione di nessus si trova nella directory /usr/share/doc/packages/nessus-core dopo l'installazione del rispettivo pacchetto.

4.1.5. Ulteriori informazioni

Le informazioni più aggiornate e altra documentazione relativa al pacchetto SuSEfirewall2 sono disponibili in /usr/share/doc/packages/SuSEfirewall2. Tramite la home page del progetto netfilter e iptables, http://www.netfilter.org, è possibile consultare un'ampia raccolta di documenti in molte lingue.