Usare Zimbra con Google Apps


Di recente mi sono ritrovato ad implementare un server di collaboration suite per un piccolo studio di architetti.

La scelta è ricaduta sulla versione opensource della suite di collaborazione Zimbra.

Inoltre , scartata l’ipotesi di hostare la posta su una connessione dsl business con IP fisso , ho deciso di affidare il servizio a Google grazie all’ ormai famoso Google Apps conosciuto anche come Google for Domains.

Zimbra però nasce per essere esposto come host di posta pubblico sulla rete e non è concepito per lavorare dietro NAT . Grazie ad alcuni trucchetti possiamo però farlo funzionare egregiamente anche in uno scenario di piccolo gruppo di lavoro dietro firewall.

Vediamo il processo per passi.

Zimbra dovrà essere  installato in una macchina non pubblicata su internet . Per fare questo dobbiamo ingannare ancora prima di iniziare le routines automatiche dello script di setup che controllano i files host e i record MX del resolver principale. Usando dnsmasq è sufficiente settare i parametri mx-host e address  del file di configurazione.

address=/yourdomain.com/192.168.0.1
mx-host=mail.yourdomain.com,yourdomain.com,50

Per verificare che tutto sia in ordine possiamo controllare con

dig @localhost yourdomain.com mx
;; ANSWER SECTION:
yourdomain.com.         43200   IN      MX      50 mail.yourdomain.com.

A questo punto si puo’ cominciare con l’installazione di Zimbra. Il processo è automatico e senza intoppi.

Una volta terminata l’installazione dobbiamo preoccuparci del file main.cf di postfix che risiede in /opt/zimbra/postfix/conf/main.cf. Editiamo con il nostro editor preferito , logghiamoci come utente zimbra (sudo su ; su – zimbra ) ed aggiungiamo le seguenti linee :

smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/opt/zimbra/conf/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/opt/zimbra/conf/sasl_passwd
smtp_use_tls = yes
smtp_sasl_security_options = noanonymous
relayhost = smtp.gmail.com:587

Così facendo , abbiamo istruito il nostro smtp ad usare :

  1. un smtp esterno smtp.gmail.com sulla porta 587.
  2. un’autentifica diversa a seconda  del mittente smtp_sender_dependent_authentication = yes.
  3. un file sender_relay dal quale attingere le regole per inviare al corretto smtp a seconda del mittente.
  4. una mappatura delle password corrispondenti al mittente smtp_sasl_password_maps = hash:/opt/zimbra/conf/sasl_passwd

Dobbiamo ora creare i file di configurazione che abbiamo specificato nel file main.cf di postfix.

Posizioniamoci su /opt/zimbra/conf e sempre come utente zimbra creiamo un nuovo file di configurazione :

zimbra@postman:~/conf$ vim sender_relay
anton@yourdomain.com      smtp.gmail.com:587
massimo@yourdomain.com    smtp.gmail.com:587
sempronio@yourdomain.com  smtp.gmail.com:587 

Creiamo  il file Db per postfix con il comando

postmap hash:/opt/zimbra/conf/sender_relay

Ora dobbiamo creare il file sasl_passwd che dovrà contenere le nostre credenziali . Sempre come utente zimbra diamo :

vim /opt/zimbra/conf/sasl_passwd
anton@yourdomain.com     anton@yourdomain.com:YOURPASSWD1
massimo@yourdomain.com     massimo@yourdomain.com:YOURPASSWD2
sempronio@yourdomain.com  sempronio@yourdomain.com:YOURPASSWD3

Cambiamo i permessi con chmod 640 sasl_passwd e creaiamo il DB per postfix :

postmap hash:/opt/zimbra/conf/sasl_passwd

Possiamo a questo punto dare un refresh a postfix con il comando

postfix reload

e dovremmo essere a posto lato SMTP.

Il nostro environment però è completamente appoggiato a Google Apps , quindi abbiamo bisogno di un meccanismo per recuperare la posta via POP dai server di Google.

Ci appoggeremo a fetchmail lanciato ad intervalli di tempo regolari.

Creiamo il file fetchmail.conf su /opt/zimbra/conf

poll pop.gmail.com timeout 60 proto POP3
user "anton@yourdomain.com"
pass PASSWD1
is anton@yourdomain.com here
fetchall
ssl

Separiamo con una linea vuota ogni entrata per ogni utente di posta remota e cambiamo i permessi del file con chmod 600 fetchmail.conf .

Impostiamo lo schedulatore in modo che controlli la posta ogni 5 minuti

crontab -e
# m h  dom mon dow   command
*/5  *  * * *  /usr/bin/fetchmail -s -f /opt/zimbra/conf/fetchmail.conf >/dev/null 2>&1

Ci siamo . E’ ora sufficiente riavviare il server e tutto dovrebbe funzionare.

E’ ovvio  che questo accrocchio è possibile in gruppi di lavoro ristretti  in quanto implica una personalizzazione manuale dei files di configurazione e vanifica quindi i benifici della semplice interfaccia di amministrazione di Zimbra che permette di aggiungere e rimuovere liste di utenti con semplicità.

Il setup alternativo che si puo’ trovare nel wiki della comunità zimbra infatti ha come unica soluzione per il relay smtp un sigolo account remoto . Questo setup da un lato molto più immediato però male si adatta con Google Apps in quanto le mail in uscita riportano l’indirizzo del mittente dell’account smtp .

Anche se si puo’ facilmente ovviare creando un indirizzo catch all su Google apps del tipo invio_azienda@yourdomain.com ed agire sui campi reply_to del client di posta elettronica ho trovato la soluzione che ho appena descritto decisamente più elegante.

Annunci

6 Comments

  1. ottofit
    Posted febbraio 25, 2009 at 6:08 pm | Permalink

    bello come al solito bravo dema!

  2. Posted febbraio 25, 2009 at 6:35 pm | Permalink

    Troppo buono grazie 🙂

  3. Posted aprile 7, 2010 at 3:14 pm | Permalink

    ottimo post grazie

  4. Posted luglio 29, 2010 at 11:55 am | Permalink

    Credo che la riga 2 da aggiungere al file dnsmasq.conf sia sbagliata. E’ invertito il nome del mailserver col nome del dominio. Quella corretta dovrebbe essere:

    mx-host=yourdomain.com,mail.yourdomain.com,50

  5. Posted luglio 29, 2010 at 12:45 pm | Permalink

    Mhhh è passato molto tempo da quando ho testato questo setup, ma mi pareva proprio quello l’ordine della stringa.

    Se riesco a rimettere mano alla macchina con questo setup ci do un’occhiata.

    Grazie del commento.

  6. dban
    Posted giugno 20, 2012 at 3:31 pm | Permalink

    Situazione simile alla tua: piccola azienda, dominio pincopalla.net in hosting su aruba, vorrei far passare tutta la posta in ingresso ed in uscita attraverso tale host (che se la vedano loro con spam e affini). Non voglio esporre Zimbra su internet.

    In pratica, Zimbra deve agire da server di posta interno all’azienda. Quindi deve smistare (senza passare per internet) la posta inviata fra utenti (p.es. tizio@pincopalla.net –> caio@pincopalla.net), inviare la posta destinata all’esterno verso smtp.pincopalla.net (hosted) e ricevere la posta dei vari utenti facendo il poll delle varie caselle su pop3.pincopalla.net (sempre in hosting su aruba).

    Problema è che mi ritrovo lo stesso dominio (pincopalla.net) sia sulla LAN, sia su aruba. Nel tuo esempio avevi il vantaggio di utilizzare gmail, ovvero un dominio completamente distinto da yourdomain.com

    Presumo che vada modificata la configurazione di bind o dnsmasq, inserendo le voci per pop3.pincopalla.net e smtp.pincopalla.net e facendo in modo che puntino al DNS ricorsivo (=firewall), afinchè vengano risolte da aruba.

    L’alternativa potrebbe essere quella di modificare il dominio del server Zimbra in local.pincopalla.net, facendo in modo che a) la posta inviata da tizio@local.pincopalla.net appaia come inviata da tizio@pincopalla.net (tramite Domain Masquerading) e b) la posta destinata agli utenti locali *NON* passi attraverso l’hosting esterno (come si fa?). Inoltre dovrei fare in modo che gli utenti locali si possano scrivere utilizzando indirizzi del tipo @pincopalla.net, *NON* @local.pincopalla.net

    Newb here, non saprei qual’è la soluzione più indicata…

Pubblica un Commento

%d blogger hanno fatto clic su Mi Piace per questo: