A/I Orange Book (1.0): Un how-to sulla replicazione e distribuzione di una rete resistente di server autogestiti | ||
---|---|---|
Indietro | Capitolo 5. Servizi di posta | Avanti |
La collocazione fisica delle singole caselle di posta sui vari server è determinata dal parametro host presente nell'oggetto LDAP corrispondente. Questa collocazione va nascosta all'utente, nel senso che bisogna avere la possibilità di spostare le mailbox in modo trasparente, senza che l'utente si accorga di nulla, per esempio in caso di problemi hardware oppure semplicemente per ricollocare caselle che attirano molto traffico. Per questo motivo è necessario fornire agli utenti dei parametri di connessione che non cambiano mai.
Il problema però è che i protocolli di lettura della posta non permettono la redirezione (i redirect per IMAP sono in un RFC che, credo, nessun client implementa). La soluzione iniziale che avevamo pensato prevedeva un CNAME per ciascun utente, UTENTE.users.dominio.org, che puntasse al server di posta giusto e che l'utente potesse usare come server IMAP nella configurazione del suo client di posta. Purtroppo questa soluzione, che altrimenti sarebbe stata ottimale, non funziona appena entra in gioco l'SSL: la verifica tra il nome del server e il CN del certificato, infatti, non andrà mai a buon fine e l'utente si troverebbe di fronte a continui avvisi di sicurezza.
Dunque la scelta è tra perdere in flessibilità dicendo agli utenti di configurare i loro client con la macchina specifica che ha la loro posta (e però in questo modo diventa praticamente impossibile spostare una mailbox da una macchina all'altra), oppure utilizzare un proxy POP/IMAP come Perdition, e accollarsi il trasferimento interno dei dati (valgono le stesse analisi numeriche fatte per il traffico SMTP). Per ora stiamo esplorando questa seconda possibilità, sorvegliando il consumo di banda: nel caso si rivelasse praticamente insostenibile, bisognerà ritornare alla prima opzione, anche se insoddisfacente.
I parametri di configurazione saranno dunque fatti in questo modo per tutti gli utenti:
POP/IMAP host: mail.dominio.org SMTP host: smtp.dominio.org
Con questa configurazione i client si connettono al front-end server (Perdition) su una macchina qualsiasi, e la loro connessione viene poi instradata internamente (attraverso la VPN) verso il server di back-end sulla macchina corretta. Abbiamo scelto dovecot per implementare il backend perché tra tutte le possibilità ci è parso il software più leggero e performante.
La figura mostra il flusso della connessione IMAP secondo le due tipologie standard di accesso:
Gli utenti che utilizzano un client IMAP autonomo sul proprio computer (come qualunque client di posta) si connettono a Perdition che li redirige direttamente (attraverso la vpn) al server dovecot sulla macchina dove risiede la loro casella di posta;
L'accesso alla posta tramite la webmail, invece, avviene direttamente sulla macchina "giusta" (dato che è possibile redirigere la connessione con un redirect HTTP). L'applicazione della webmail si connette (tassativamente su localhost) ad un proxy di connessioni IMAP denominato up-imapproxy che serve solamente per mantenere una cache di connessioni persistenti: questo è molto utile considerando il fatto che l'applicazione web (in PHP) è costretta ad eseguire una nuova connessione IMAP al caricamento di ogni nuova pagina, utilizzando il proxy locale si evita una nuova connessione con relativa autenticazione ad ogni accesso. Infine, il proxy locale si connette al server IMAP vero e proprio.
Questa tabella mostra i parametri di configurazione essenziali che sono stati impostati per implementare lo schema appena descritto:
in perdition.conf:
map_library /usr/lib/libperditiondb_ldap.so.0 map_library_opt "ldap://127.0.0.1/ou=People,dc=infra,\ dc=org,o=Anarchy?mail,host?sub?(&(mail=%s)\ (status=active))" outgoing_port 10143 ssl_ca_file /etc/ssl/certs/imap.pem ssl_key_file /etc/ssl/private/imap.keyPer far corrispondere all'attributo host l'IP che vogliamo (in questo caso l'IP interno alla VPN, corrispondente a host-vpn), dato che purtroppo il backend LDAP di perdition non supporta la riscrittura del risultato (come invece fa Postfix), abbiamo installato il demone in una chroot dove la risoluzione dei nomi è controllata da un apposito /etc/hosts. Questo demone inoltre è l'unico a ricevere connessioni SSL dall'esterno.
in imapproxy.conf:
server_hostname 127.0.0.1 server_port 10143 listen_address 127.0.0.1 listen_port 11143In questo modo il proxy è istruito per instradare le connessioni esclusivamente verso il server IMAP locale.
in dovecot.conf:
imap_listen = 127.0.0.1:10143 ssl_disable = yesLa configurazione dell'autenticazione degli utenti (in dovecot-ldap.conf) è stata già affrontata nel capitolo precedente.
Quando c'è bisogno di spostare una casella da una macchina all'altra (tranne nel caso di down catastrofico della prima, in cui i dati vecchi non sono più disponibili) è possibile usare rsync, dopo la modifica del db LDAP, per spostare la vecchia casella sulla nuova (che in quel momento starà già ricevendo nuovi messaggi).