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
Kernel Compile Options.
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.
Network Firewalls (CONFIG_FIREWALL)
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.
IP: forwarding/gatewaying (CONFIG_IP_FORWARD)
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.
IP: syn cookies (CONFIG_SYN_COOKIES)
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>
IP: Firewalling (CONFIG_IP_FIREWALL)
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.
IP: firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE)
Questa opzione vi dà informazioni (come origine, destinazione, porta ecc.) sui pacchetti ricevuti dal firewall.
IP: Drop source routed frames (CONFIG_IP_NOSR)
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.
IP: masquerading (CONFIG_IP_MASQUERADE) Se uno dei computer sulla rete locale per cui il vostro server Linux fa da firewall volesse mandare fuori dei pacchetti, il vostro server potrebbe "recitare la parte" di questa macchina, cioè inoltrare il traffico verso la destinazione richiesta, ma facendolo sembrare proveniente dal firewall stesso. Controllate http://www.indyramp.com/masq se volete altre informazioni.
IP: ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP) Questa opzione aggiunge il masquerading ICMP alla precedente opzione che maschera solo il traffico TCP o UDP.
IP: transparent proxy support (CONFIG_IP_TRANSPARENT_PROXY) Questa scelta abilita il vostro firewall Linux a ridirigere in modo trasparente tutto il traffico dalla vostra rete destinato ad un host remoto verso un server locale, detto "server proxy trasparente". Questo fa credere ai computer locali di parlare con l'host remoto, mentre sono connessi al proxy locale. Leggete l'IP-Masquerading HOWTO e http://www.indyramp.com/masq per ulteriori informazioni.
IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG)
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.
Packet Signatures (CONFIG_NCPFS_PACKET_SIGNING)
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.
IP: Firewall packet netlink device (CONFIG_IP_FIREWALL_NETLINK)
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.
Socket Filtering (CONFIG_FILTER)
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.
Port Forwarding Il Port Forwarding (Inoltro di una porta) è un'aggiunta all'IP Masquerading che permette di inoltrare pacchetti dall'esterno all'interno di un firewall su certe porte. Torna utile se, per esempio, volete eseguire un web server dietro un firewall e lasciare che quel server sia accessibile al mondo esterno. Un client esterno manda una richiesta alla porta 80 sul firewall, questo inoltra la richiesta al server web che risponde alla richiesta attraverso il firewall. Il client penserà che sia l'host del firewall ad eseguire il web server. Potete usare questa caratteristica anche per bilanciare il traffico se avete una serie di web server identici dietro al firewall. Informazioni su questa opzione si trovano presso: http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html (per accedere al WWW dovete avere accesso ad una macchina su Internet che abbia un programma come lynx o netscape). Per informazioni generali leggete: ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/
Socket Filtering (CONFIG_FILTER) Usando questa opzione, certi programmi possono porre un filtro ad un socket qualsiasi e quindi dire al kernel di bloccare o far passare certi dati attraverso quel socket. Il filtraggio dei socket per ora funziona su tutti i tipi di socket, TCP escluso. Leggete il file ./linux/Documentation/networking/filter.txt per ulteriori informazioni.
IP: Masquerading Il masquerading del kernel 2.2 è stato migliorato. Fornisce supporto addizionale per special protocolli di masquerading ecc. Assicuratevi di leggere l'IP Chains HOWTO per ulteriori informazioni.
Device nel Kernel.
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.
Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog: