Rendere sicura Debian (hardening)

Debian è un sistema operativo (OS) libero per il tuo computer.
Usando Debian si parte già da un sistema operativo sicuro, sia per il lungo periodo di debug a cui vengono sottoposti i pacchetti sia per le policy di base che la fondazione Debian adotta.
In questo articolo descriviamo in maniera semplice i passi da fare per rendere una nuova installazione più sicura e adatta a svolgere compiti quali firewall, web server, mail server, o semplicemente più sicura una postazione desktop. Per una lettura più approfondita vi riamndo al Securing Debian Manual.

Per inciso va detto che

Un computer con accesso in console non potrà mai essere un computer sicuro

Un computer collegato alla rete non potrà mai essere un computer sicuro

Iniziamo distinguendo 2 scenari che più spesso si presentano a un sistemista:

1) Sistema con accesso alla console cioè con un monitor mouse e tastiera e case accessibili.
Se non si tratta di una postazione desktop iniziamo disabilitando da BIOS tutte le periferche che non useremo, CDROM, porte USB, porte seriali, Irda, etc. Impostiamo come primo disco di avvio il disco su cui è installato il S.O.
Continuiamo a redere sicuro il sistema impostando una password di accesso al BIOS di almeno 6 caratteri alfanumerci casuali e non riconducibili alla ns persona.
Per non rendere vane le impostazioni eseguite su BIOS bisogna impedire l’accesso alla batteria tampone situata sulla scheda madre. Molti case hanno una chiave che ne bloccano l’apertura di un fianco, quindi chiudere il case e riporre la chiave in luogo sicuro e lontano dal sistema. Per quei case che non prevedono la chiave per chiudere il case si può ricorrere a dei rivetti bloccando le aperture laterali.
2) Sistema privo di accesso in console e case non immediatamente accessible (es una VM).
Impostiamo come primo disco di avvio il disco su cui è installato il S.O. e disabilitaimo le periferche che non useremo.

Fatte queste semplici operazioni hardware passiamo a una più lunga serie di operazini software, cominciando col valutare come partizionare il disco.
Nel caso stessimo preparando un server, a seconda della funzione principale va dedicata una partizione capiente per il deomon principale (apache, ftp, mail) oltre a questa partizione seguiamo queste linee guida:

    • Le directory che variano (/var /tmp) vanno in partizioni separate, in modo che se vengano riempite non influiscano sul resto del sistema;
    • Le directory come /opt /usr/local vanno montate in partizioni separate in modo da poter formattare/ripristinare il sistema senza cancellare i dati in queste directory;
    • Tutte le directory con dati statici vanno montate read-only e in piccole partizioni separate;
    • Usare “Logical Volume Manager” per creare gruppi di dischi fisici e volumi espandibili;

Scelta del file systems

La scelta del file systems non è facile dato che si va incontro a dover scegliere tra prestazioni e sicurezza, generalizzando i file systems ext sono giornalati più lenti adatti per server web, mail, ftp invece reiserfs, xfs per storage e nas.

Disabilitare tutti i servizi non necessari

Iniziamo rimuovendo i link dai runlevel, usando update-rc.d o manualmente dei daemon che no ci servono, almeno non all’avvio!

Installare solo il software indispensabile

Spesso capita di dover installare i compilatori per installare software indispensabile alla macchina che stiamo “confezionando”. I compilatori comunque vanno rimossi una volta finito di installare i programmi che ci servono.
Il Securing Debian Manual consiglia di rimuovere anche il Perl, in pratica però il perl difficilmente si può rimuovere dato che moltissimi programmi anche i più semplici sono scritti in questo versatile linguaggio.
In particolare va segnalato che Debian installa automaticametne alcuni pacchetti per lo sviluppo, questi vanno rimossi dato che potrebbero essere usati per hackerare il sistema.

Sicurezza di SSH

In molti casi non si troverà mai la giusta configurazione per rendere veramente sicuro l’accesso tramite SSH, ci sono molte variabili e esigenze da tener in considerazione, un buon compromesso è quello di farsi aiutare ad esempio da iptables per limitare il range di IP autorizzati all’accesso tramite SSH. Un altro valido aiuto lo fornisce fail2ban per bloccare gli ip che generano troppi tentativi falliti.

Qui di seguito elenco alcune operazioni che aiutano a fare sonni più tranquilli.

Personalmente non mi piace consentire l’accesso tramite SSH con l’uso della chiavi private/pubbliche soprattutto se si tratta di sun server che eroga servizi 24/7 se l’amministratore ha necessita di fare un intervento straordinario senza il computer su cui ha salvato al chiave è chiuso fuori.

Cambiare la porta standard è una delle prime impostazioni da fare anche se lo sappiamo un portscanner la trova in poco tempo, possiamo comunque rendere la vita difficile anche al portscanner grazie a delle regole impostate su iptables.

Disattivare il servizio SSH in quelle fasce orarie in cui sicuramente non lo useremo, con un po di fantasia chiunque può approntare un cronjob per fare questo.

Per la configurazione vera e propria del file sshd_config non scrivo nulla dato che online si trova già tanta documentazione.