Questa è una descrizione delle opzioni del kernel che riguardano la sicurezza, una spiegazione di ciò che fanno e di come si usano.
Visto che il kernel controlla il networking del vostro computer, è importante che sia molto sicuro e non venga compromesso. Per evitare alcuni dei recenti attacchi via rete dovreste tentare di mantenere aggiornato il vostro kernel. Potete trovare nuovi kernel presso ftp://ftp.kernel.org o dal distributore del vostro sistema.
Esiste anche un gruppo internazionale che fornisce una singola patch crittografica per il kernel principale di Linux. Questa patch fornisce il supporto per una serie di sottosistemi crittografici e caratteristiche che non possono essere incluse nel kernel principale per limiti di esportazione. Per ulteriori informazioni visitate la loro pagina web presso: http://www.kerneli.org
Per i kernel 2.0.x, si applicano le seguenti opzioni. Dovreste trovare le
seguenti opzioni durante il processo di configurazione del kernel. Molti dei
commenti qui vengono da ./linux/Documentation/Configure.help
, che
è lo stesso documento che leggete usando l'Help durante la fase
make config
della compilazione del kernel.
Questa opzione dovrebbe essere attivata se volete usare qualche tipo di firewall o masquerading sulla vostra macchina. Se sarà solo un semplice client, potete rispondere no.
Se abilitate L'IP forwarding, la macchina, potrà assumere le funzioni di un router. Se la vostra macchina è su una rete, potreste inoltrare dati da una rete ad un'altra e forse potreste pregiudicare un firewall che era stato messo lì proprio per evitarlo. Chi si connette con un modem può farne a meno, e gli altri dovrebbero riflettere sulle implicazioni di sicurezza. I computer che fanno da firewall lo abiliteranno e lo useranno insieme con un firewall.
Potete abilitare dinamicamente l'IP forwarding usando il seguente comando:
root# echo 1 > /proc/sys/net/ipv4/ip_forward
e disabilitarlo con il comando:
root# echo 0 > /proc/sys/net/ipv4/ip_forward
Ricordate che i file in /proc sono "virtuali" e le dimensioni mostrate dal file
potrebbero non riflettere i dati che contiene.
Un "Attacco SYN" è un attacco di denial of service (DoS), o negazione di servizio, che consuma tutte le risorse della vostra macchina, obbligandola al riavvio. Non c'è una ragione per cui non dovreste abilitare questa opzione. Nei kernel 2.2.x questa opzione si limita a permettere i syn cookies, ma non li abilita. Per abilitarli, dovete digitare:
root# echo 1 > /proc/sys/net/ipv4/tcp_syncookies <P>
Questa opzione è necessaria se volete usare la vostra macchina come firewall, usare il masquerading o se volete proteggere il vostro sistema da qualcuno che entri attraverso l'interfaccia di composizione PPP.
Questa opzione vi dà informazioni (come origine, destinazione, porta ecc.) sui pacchetti ricevuti dal firewall.
Questa opzione dovrebbe essere abilitata. Questi pacchetti contengono l'intero percorso verso o la loro destinazione all'interno. Questo significa che i router da cui passa il pacchetto non lo controllano, lo inoltrano solamente. Questo potrebbe portare nel vostro sistema dati che potrebbero essere un exploit.
In genere questa opzione è disabilitata ma se state costruendo un firewall o un host di masquerading, la dovreste abilitare. Quando vengono mandati dei dati fra un host ed un altro, non sempre vengono spediti come un singolo pacchetto di dati, ma piuttosto vengono scomposti in vari pezzi. Il problema di questo processo è che i numeri delle porte sono scritti solo nel primo frammento. Questo significa che qualcuno potrebbe inserire nei rimanenti pacchetti informazioni che non dovrebbero esserci. Questa opzione protegge da attacchi del genere anche se rivolti contro una macchina interna che non abbia ancora questa protezione.
Questa opzione, disponibile nei kernel 2.2.x, firma i pacchetti NCP per avere più sicurezza. Normalmente potete lasciarla fuori, ma rimane nel caso servisse.
Questa utile opzione vi permette di analizzare i primi 128 byte dei pacchetti con un programma, per determinare se accettare o respingere il pacchetto a seconda della sua validità.
Per i kernel 2.2.x molte opzioni sono rimaste uguali, ma ne sono state aggiunte
di nuove. Molti dei commenti vengono da ./linux/Documentation/Configure.help
, Che è lo stesso documento che leggete quando usate l'Help
nella fase make config
della compilazione del kernel. Sono segnate
qui solo le opzioni nuove. Consultate la descrizione del 2.0 per avere una
lista di altre opzioni necessarie. Il cambiamento più significativo nei kernel 2.2.x è il codice del firewall IP. Ora viene usato il programma
ipchains
per istallare il firewall, invece del ipfwadm
usato nei kernel 2.0.
Per la maggior parte delle persone, dire no è una scelta sicura. Questa opzione vi permette di connettere un filtro a qualsiasi socket e determinare se i pacchetti debbano essere accettati o respinti. A meno che non abbiate una necessità particolare e siate capaci di programmare un tale filtro, dovreste dire di no. Notate anche che, quando è stato scritto questo documento, erano supportati tutti i protocolli tranne il TCP.
./linux/Documentation/networking/filter.txt
per ulteriori informazioni.
Nel kernel ci sono alcuni device a blocchi e a caratteri che vi aiuteranno con la sicurezza.
I due device /dev/random
e /dev/urandom
sono forniti dal
kernel per avere sempre a disposizione dati casuali.
Sia /dev/random
che /dev/urandom
dovrebbero essere abbastanza
sicuri da essere usati per generare chiavi PGP, autenticazioni ssh
ed
altre applicazioni in cui servono numeri casuali sicuri. Un attaccante non dovrebbe essere capace di predire il numero seguente, data una qualsiasi sequenza
di numeri da queste sorgenti. È stato fatto un grande sforzo perché
i numeri ottenuti da questi device siano casuali in ogni senso della parola.
L'unica differenza fra i due device è che /dev/random
finisce
i byte casuali e vi fa aspettare finché non ce ne sono di nuovi. Notate
che su alcuni sistemi potrebbe bloccarsi per molto tempo in attesa che nuova
entropia sia generata dagli utenti. Quindi riflettete prima di usare
/dev/random
. (Forse la miglior cosa da fare è usarlo quando
generate dovete generare codice importante: dite agli utenti di scrivere molto
sulle tastiere fino a quando dite "Ok, basta".)
/dev/random
è entropia di qualità, generata dalla misura
dei tempi fra gli interrupt ecc. Si blocca finché non ha abbastanza bit
casuali di dati.
/dev/urandom
è simile, ma quando la riserva di entropia sta
finendo fornisce una replica crittograficamente forte di ciò che rimane.
Non è altrettanto sicuro, ma basta per la maggior parte delle applicazioni.
Potete leggere da questi device con qualcosa del genere:
root# head -c 6 /dev/urandom | mimencode
Questo comando visualizza otto caratteri casuali sulla console, adatti per la
generazione di password. Potete trovare mimencode
nel pacchetto
metamail
.
Leggete /usr/src/linux/drivers/char/random.c
per la descrizione dell'algoritmo.
Grazie a Theodore Y. Ts'o, Jon Lewis, e altri sviluppatori del kernel per avere aiutato me (Dave) in questo.