A/I Orange Book (1.0): Un how-to sulla replicazione e distribuzione di una rete resistente di server autogestiti | ||
---|---|---|
Indietro | Avanti |
L'organizzazione del filesystem è almeno in parte comune a tutte le macchine. Ciò permette per esempio per poter facilmente spostare servizi ed altro da una macchina all'altra senza dover cambiare tutti i path, oppure di memorizzare alcuni path specifici direttamente nel database, come le home degli utenti o le root dei siti web.
Identificare uno schema comune di partizionamento, ovviamente modificabile in casi specifici, semplifica la gestione e velocizza l'installazione di nuove macchine.
Dove possibile è opportuno configurare le macchine in modalità RAID e, a livello superiore, usare LVM per gestire lo spazio con maggiore flessibilità. Sotto potete trovare un banale esempio di partizionamento a cui ci siamo adeguati (ma lo schema è molto dipendente dalle vostre situazioni in termini di hardware, necessità di spazio disco e disponibilità economiche).
/ - 500M /tmp - 500M noexec,nosuid /usr - 3G /var - 6-10G /home/admins - 4G, home degli amministratori /home/mail - >20G, caselle di posta /home/users - >20G, siti web ed ftp
Trattandosi poi di server che principalmente gestiranno un notevole traffico di posta, è anche consigliabile applicare alcune ottimizzazioni, ad esempio, a Postfix:
chattr -R -S +j +A /var/spool/postfix/che abilita il journaling completo dei dati e dei metadati del filesystem ext3 sulla directory di spool di Postfix, oltre a impostare il flag noatime (esempio tratto da "Postfix on an ext3 filesystem", R. Hildebrandt).
Un'altra cosa utile è far sì che Amavis utilizzi una directory temporanea in un filesystem tmpfs, quando ha necessità di salvare un file con allegati MIME nelle sue diverse parti. Questo riduce ancora l'impatto sui dischi. In /etc/init.d/amavis si può mettere:
mkdir /dev/shm/amavis test -e /var/lib/amavis/tmp \ || ln -s /var/lib/amavis/ /dev/shm/amavise modificare /etc/amavis/amavisd.conf:
$TEMPBASE = "$MYHOME/tmp";
Infine, alcuni programmi devono essere compilati, la strategia migliore in questo caso è creare pacchetti debian binari, anche per agevolare la distribuzione sulle diverse macchine (non sarà necessario compilare sempre tutto dappertutto). Sempre per questo motivo, potrebbe essere comodo trovare dei percorsi standardizzati per mettervi programmi, librerie, script, o files non-binari che magari possono essere poi facilmente distribuiti con rsync. Una possibilità è di usare /opt per questo.
L'utilizzo di partizioni crittografate è stato scartato relativamente ai dati degli utenti, dato che, aldilà delle considerazioni di performance, non è comunque saggio mettersi nella condizione di possedere un'unica chiave per migliaia e migliaia di differenti porte. In compenso rimane una strategia valida per proteggere quelli che sono i dati sensibili del sistema nel suo complesso: nel caso di una struttura di questo tipo tanto per cominciare sono i certificati SSL e le relative chiavi crittografiche.
Questo tipo di meccanismo richiede l'inserimento della password della partizione all'avvio del computer, e serve essenzialmente a prevenire la copia o la modifica non autorizzata dei dati contenuti. Si può anche pensare di montare la partizione con i certificati SSL solo al momento dell'avvio del servizio, e smontarla successivamente: questo dovrebbe rappresentare una protezione anche rispetto ad intrusioni quando la macchina è accesa, ma in misura solo parziale dato che comunque a quel punto diventa anche difficile controllare la sicurezza dell'inserimento della password.
La nostra implementazione prevede l'utilizzo di dm-crypt. Questo più che altro per la semplicità, dovendo cifrare partizioni più grandi o con più I/O avremmo probabilmente utilizzato loop-AES (si trovano dei benchmark interessanti a questa url: http://deb.riseup.net/storage/encryption/benchmarks/).
Per esemplificare la metodologia utilizzata, creiamo l'immagine crittata private.img e configuriamola:
$ dd if=/dev/urandom of=private.img bs=1024 count=512 $ export CALOOP=`losetup -f` $ losetup $CALOOP private.img
Creiamo ora il mapper device dove creare la partizione cifrata ed inseriamo la passphrase utilizzata per la cifratura simmetrica:
$ cryptsetup -v -y -c aes -s 256 -h ripemd160 create private $CALOOP
Ora creiamo il filesystem (ext2) e montiamolo su /mnt:
$ mkfs -t ext2 -v /dev/mapper/private $ mount -t ext2 /dev/mapper/private /mnt