Saludos amigos, el archivado y custodia legal de correos electrónicos es algo a la orden del día, no importa si usas Zimbra, Office 365 o cualquier otro sistema, en ciertas ocasiones necesitas configurar un sistema de archivado y custodia legal para ciertos dominios. También puede ser especialmente útil para liberar espacio de nuestros servidores de correo electrónico, pero sin necesidad de eliminar los mensajes de forma que el usuario pueda visualizarlos mediante una búsqueda.
Diagrama de red de Piler y Zimbra Collaboration
Para haceros las cosas más sencillas he preparado un diagrama donde se explica el flujo de correos entre Zimbra y Piler, que se puede aplicar a otros servicios de correo electrónico:
Podemos ver que todos los correos entrantes y salientes de Zimbra se copian mediante un bcc global hacía el Piler, que indexa, almacena, encripta y deduplica los mensajes. Estos mensajes pueden ser luego revisados por los auditores con acceso al sistema.
¿Qué es Piler?
Piler es una solución open source que nos permite archivar, y custodiar legalmente todo el correo que le redireccionemos desde cualquier servidor de SMTP, además Piler incorpora todas las siguientes funcionalidades:
| Archiving | Status |
| Built-in SMTP server | + |
| STARTTLS support | + |
| tcp_wrappers support | + |
| Virus checking | + |
| Archiving rules | + |
| Retention rules | + |
| Attachment deduplication | + |
| Zlib compression | + |
| Blowfish encryption | + |
| Digital signing and verification | + |
| Searching | |
| Simple search | + |
| Advanced search | + |
| Save/load search criteria | + |
| Tagging emails | + |
| Adding notes to emails | + |
| View/export/restore of archived emails | + |
| Web interface | |
| Access with a browser | + |
| AD/LDAP authentication | + |
| Single Sign-on | + |
| Google OAuth | + |
| IMAP authentication | + |
| POP3 authentication | + |
| 2 factor authentication (2FA) | + |
| Custom authentication hooks | + |
| Access control | + |
| i18n | + |
| Monitoring / Audit | |
| Logging of events | + |
| Search the audit logs | + |
| Legal hold | + |
| Status info/chart | + |
| Alerts | – |
| Import / Export | |
| Export to EML format | + |
| Import from PST, EML and mailbox format | + |
| Import from POP3/IMAP account | + |
Casi nada para ser un producto completamente gratuito. En esta entrada de hoy vamos a ver:
- Descargar y probar la imagen OVA que tienen en su website
- Configuración inicial de Piler
- Breve introducción como Piler Administrator
- Configuración de Zimbra Collaboration para mandar todo a Piler
- Breve introducción como Piler Auditor
- ¿Quién audita al auditor?
Descargar y probar la imagen OVA que tienen en su website
Podemos descargar la última versión de la OVA desde aquí:
Esta OVA se compone de 1 vCPU, 4GB de RAM, 50GB de Disco. Como podemos imaginar estos 50GB de disco se quedarán pequeños si ponemos este sistema en producción, con lo que habrá que extender esa partición.
Valores por defecto de la OVA, que habrá que cambiar:
| IP-address: | 192.168.100.100/255.255.255.0 |
| Default gw: | 192.168.100.1 |
| root password: | piler123 |
| mysql root password: | piler123 |
| Hostname: | piler.yourdomain.com |
| admin account: | admin@local:pilerrocks |
| auditor account: | auditor@local:auditor |
Vamos a desplegar la OVA, en nuestro HTML5 Client nos iremos hasta el Host o cluster y haremos Deploy OVF Template:
Ahora seleccionaremos el fichero OVA que nos hemos descargado:
Seleccionaremos un nombre para la VM, y donde queremos alojarla en nuestra estructura lógica de carpetas:
Seleccionaremos donde queremos salvarlo a nivel de computo:
Veremos los discos de la VM, haremos click en Next:
En mi caso he seleccionado Thin, pero si vais a poner esto en producción os recomiendo Thick Eager, nunca lazy:
La red que viene vs la que tendrá en local, por la IP, aunque la configuremos no la obtendrá, con lo que es más a modo recordatorio para vosotros:
Ya está todo listo haremos click en Finish:
Veremos como se lanza el proceso:
Como va avanzando durante los minutos:
Y finalmente como termina:
Ya podemos hacer poweron de la VM y empezar la configuración.
Configuración inicial de Piler
Una vez tenemos acceso a la consola de la VM, lo primero que haremos será:
- Editar el fichero /etc/network/interfaces y configurar nuestro rango de IP, dominio y DNS.
- Editar el fichero /etc/hosts con el hostname que queremos que tenga piler, en mi caso mail-piler.zimbra.io a la IP 192.168.1.19
- Editar el fichero /etc/hostname con el hostname que queremos que tenga, como dijimos mail-piler.zimbra.io
- Editar el fichero /etc/resolv.conf con el DNS interno y el dominio donde tengamos nuestra infraestructura Zimbra. Opcional.
- Editar el fichero /usr/local/etc/piler.conf y cambiar el hostid a mail-piler.zimbra.io
- Editar el fichero /etc/nginx/sites-enabled/piler.conf y cambiar el hostname y las referencias de dominios a mail-piler.zimbra.io
- Editar el fichero /var/piler/www/config-site.php y configurar los valores SITE_NAME con el hostname mail-piler.zimbra.io y el campo PILER_HOST con la IP local del Piler
Nota: El fichero config-site.php sobrescribe a config.php, con lo que es mejor usar el config-site.php para valores personalizados.
Hacer un reboot, y ya tendremos piler configurado esperando a recibir correos.
Breve introducción como Piler Administrator
Si nos vamos ala URL de Piler como admin@local podemos editar algunos de los campos, por ejemplo en administration – Domain podremos añadir nuestros dominios que queremos archivar y procesar:
En la parte de administration – Users podríamos crear más admins o auditores dependiendo de los requisitos legales.
En Monitor – Health podemos ver el estado del mail-piler, los emails procesados, el estado de los discos, así como de la CPU y consumo de RAM:
Configuración de Zimbra Collaboration para mandar todo a Piler
He decidido seguir los pasos oficiales de piler para configurar Zimbra Collaboration, dándole un toque más personalizado para la parte de configuración, lo primero será añadir al header el X-Envelope-To de la siguiente manera, como user root, creamos un fichero llamado /opt/zimbra/conf/postfix_x-add-envelope-to:
vi /opt/zimbra/conf/postfix_x-add-envelope-to
Con el siguiente contenido
/(.+)/ PREPEND X-Envelope-To: $1
Después editaremos el siguiente fichero:
vi /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf
Y añadir la siguiente línea casi al principio del todo, debe quedaros así:
%%contains VAR:zimbraMtaRestriction check_client_access lmdb:/opt/zimbra/conf/postfix_blacklist%% %%contains VAR:zimbraServiceEnabled cbpolicyd^ check_policy_service inet:localhost:%%zimbraCBPolicydBindPort%%%% check_recipient_access pcre:/opt/zimbra/conf/postfix_x-add-envelope-to reject_non_fqdn_recipient ... etc
Como user Zimbra lanzaremos lo siguiente:
zmmtactl restart;zmmailboxdctl restart;zmconfigdctl restart
Ahora editaremos nuestro main.cf, dependiendo de la versión de Zimbra estará en un lado u otro, usar la búsqueda, como user root a vuestro fichero de main.cf añadir lo siguiente:
always_bcc = [email protected]
Y como user zimbra, otra vez:
zmmtactl restart;zmmailboxdctl restart;zmconfigdctl restart
Mandaremos ahora unos emails de prueba y veremos en el zimbra.log lo siguiente, donde vemios que se manda un email a un usuario, y a su vez una copia a archive@[email protected] que se conecta a la IP 192.168.1.19 como debe de ser:
Dec 3 18:21:41 zmmt01 amavis[15355]: (15355-01) Checking: f3lynyDJjFMz ORIGINATING/MYNETS [192.168.1.30] <[email protected]> -> <[email protected]>,<[email protected]> Dec 3 18:21:41 zmmt01 postfix/dkimmilter/smtpd[28374]: connect from localhost[127.0.0.1] Dec 3 18:21:41 zmmt01 postfix/dkimmilter/smtpd[28374]: 3858D7FB4C: client=localhost[127.0.0.1] Dec 3 18:21:41 zmmt01 postfix/cleanup[28370]: 3858D7FB4C: message-id=<[email protected]> Dec 3 18:21:41 zmmt01 opendkim[2572]: 3858D7FB4C: no signing table match for '[email protected]' Dec 3 18:21:41 zmmt01 postfix/qmgr[22204]: 3858D7FB4C: from=<[email protected]>, size=1588, nrcpt=3 (queue active) Dec 3 18:21:41 zmmt01 amavis[15355]: (15355-01) f3lynyDJjFMz FWD from <[email protected]> -> <[email protected]>,<[email protected]>, BODY=7BIT 250 2.0.0 from MTA(smtp:[127.0.0.1]:10030): 250 2.0.0 Ok: queued as 3858D7FB4C Dec 3 18:21:41 zmmt01 amavis[15355]: (15355-01) Passed CLEAN {RelayedInternal}, ORIGINATING/MYNETS LOCAL [192.168.1.30]:43149 <[email protected]> -> <[email protected]>,<[email protected]>, Queue-ID: 677B17FACC, Message-ID: <[email protected]>, mail_id: f3lynyDJjFMz, Hits: -, size: 1168, queued_as: 3858D7FB4C, 796 ms Dec 3 18:21:41 zmmt01 postfix/smtp[28371]: 677B17FACC: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.88, delays=0.04/0.01/0.16/0.67, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10030): 250 2.0.0 Ok: queued as 3858D7FB4C) Dec 3 18:21:41 zmmt01 postfix/smtp[28371]: 677B17FACC: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.88, delays=0.04/0.01/0.16/0.67, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10030): 250 2.0.0 Ok: queued as 3858D7FB4C) Dec 3 18:21:41 zmmt01 postfix/qmgr[22204]: 677B17FACC: removed Dec 3 18:21:41 zmmt01 amavis[15355]: (15355-01) extra modules loaded: /opt/zimbra/zimbramon/lib/x86_64-linux-gnu-thread-multi/auto/Net/SSLeay/autosplit.ix, /opt/zimbra/zimbramon/lib/x86_64-linux-gnu-thread-multi/auto/Net/SSLeay/randomize.al, Convert/UUlib.pm, IO/Socket/SSL.pm, Net/SSLeay.pm Dec 3 18:21:41 zmmt01 amavis[12957]: (12957-01) ESMTP:[127.0.0.1]:10032 /opt/zimbra/data/amavisd/tmp/amavis-20171203T182141-12957-wwLyQ_8Y: <[email protected]> -> <[email protected]>,<[email protected]>,<[email protected]> SIZE=1588 Received: from zmmt01.zimbra.io ([127.0.0.1]) by localhost (zmmt01.zimbra.io [127.0.0.1]) (amavisd-new, port 10032) with ESMTP; Sun, 3 Dec 2017 18:21:41 +0000 (GMT) Dec 3 18:21:41 zmmt01 amavis[12957]: (12957-01) Checking: yhy4dyUy4LFK ORIGINATING_POST/MYNETS [127.0.0.1] <[email protected]> -> <[email protected]>,<[email protected]>,<[email protected]> Dec 3 18:21:41 zmmt01 postfix/amavisd/smtpd[28378]: connect from localhost[127.0.0.1] Dec 3 18:21:41 zmmt01 postfix/amavisd/smtpd[28378]: 926747FB82: client=localhost[127.0.0.1] Dec 3 18:21:41 zmmt01 postfix/cleanup[28370]: 926747FB82: message-id=<[email protected]> Dec 3 18:21:41 zmmt01 postfix/qmgr[22204]: 926747FB82: from=<[email protected]>, size=2126, nrcpt=2 (queue active) Dec 3 18:21:41 zmmt01 amavis[12957]: (12957-01) yhy4dyUy4LFK FWD from <[email protected]> -> <[email protected]>,<[email protected]>,<[email protected]>, BODY=7BIT 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 926747FB82 Dec 3 18:21:41 zmmt01 amavis[12957]: (12957-01) Passed CLEAN {RelayedInternal}, ORIGINATING_POST/MYNETS LOCAL [127.0.0.1]:46104 <[email protected]> -> <[email protected]>,<[email protected]>,<[email protected]>, Queue-ID: 3858D7FB4C, Message-ID: <[email protected]>, mail_id: yhy4dyUy4LFK, Hits: -2.909, size: 1553, queued_as: 926747FB82, 346 ms Dec 3 18:21:41 zmmt01 postfix/smtp[28371]: 3858D7FB4C: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10032, delay=0.4, delays=0.05/0.01/0.01/0.34, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 926747FB82) Dec 3 18:21:41 zmmt01 postfix/smtp[28371]: 3858D7FB4C: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10032, delay=0.4, delays=0.05/0.01/0.01/0.34, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 926747FB82) Dec 3 18:21:41 zmmt01 postfix/smtp[28371]: 3858D7FB4C: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10032, delay=0.4, delays=0.05/0.01/0.01/0.34, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 926747FB82) Dec 3 18:21:41 zmmt01 postfix/qmgr[22204]: 3858D7FB4C: removed Dec 3 18:21:41 zmmt01 amavis[12957]: (12957-01) extra modules loaded: /opt/zimbra/zimbramon/lib/x86_64-linux-gnu-thread-multi/auto/Net/SSLeay/autosplit.ix, /opt/zimbra/zimbramon/lib/x86_64-linux-gnu-thread-multi/auto/Net/SSLeay/randomize.al, Convert/UUlib.pm, IO/Socket/SSL.pm, Net/SSLeay.pm Dec 3 18:21:41 zmmt01 postfix/smtp[28380]: 926747FB82: to=<[email protected]>, relay=mail-piler.zimbra.io[192.168.1.19]:25, delay=0.06, delays=0.03/0.01/0.01/0, dsn=2.0.0, status=sent (250 Ok 400000005a24407a1bd3dcfc001f6251d77e <[email protected]>) Dec 3 18:21:41 zmmt01 postfix/lmtp[28379]: 926747FB82: to=<[email protected]>, relay=zmmb01.zimbra.io[192.168.1.30]:7025, delay=0.18, delays=0.03/0.02/0.08/0.06, dsn=2.1.5, status=sent (250 2.1.5 Delivery OK) Dec 3 18:21:41 zmmt01 postfix/qmgr[22204]: 926747FB82: removed
Breve introducción como Piler Auditor
Un vez tenemos ya suficientes correos archivados, podemos logearnos a la URL de mail piler como auditor@local y la password para comenzar las búsquedas de correos, por ejemplo, si no introducimos ningún término nos aparecerán todos los correos por defecto:
Si queremos ver los headers del email, podremos verlos haciendo un simple click, as’i como descargar el correo como .eml en caso necesario.
La búsqueda avanzada nos permite realizar búsquedas muy precisas cuando tenemos cientos de miles de correos electrónicos:
¿Quién audita al auditor?
Todas las acciones que se realizan con los correos electrónicos salvados en nuestro piler son registradas de tal manera que podemos exportar también este reporte para logear las acciones que el auditor o auditores realizan:
Eso es todo amigos, os recomiendo que configuréis vuestro nginx para servir el portal por https únicamente, y por supuesto que cambiéis todas las passwords por defecto que esta OVA trae, en mysql, piler, etc.




Muy bueno Jorge. Acá lo haré desde cero, recuerda que usamos Proxmox como ambiente de virtualización pero ya la configuración de zimbra nos sirve.
Si claro, comprendo. La semana que viene saco otro sobre como instalarlo en CentOS desde cero por si ayuda, este jueves ya esta programado otro sobre piler y Zimbra 🙂
Agradezco el comentario.
Esperemos que Alex, haga el manual de ubuntu y debian, tambien la implementacion de let´s encrypt al server de mailpiler para asegurar mucho mejor la autenticación de dicho servicio
Let´s Encrypt estaba pendiente en mi lista, si lo saca antes Alex, una cosa menos que tengo que hacer 🙂
Gracias por comentar Armando
Saludos, hermano.
Guapo este post. Te felicito. Como te dijeron antes, acá usamos Proxmox VE como plataforma de virtualización. No obstante, muy útil este post más el de Alexander para lo que voy a hacer, dado que cuento, por suerte, con 3 cabinas de almacenamiento QNAP donde puedo usar algún que otro volumen para probar esto.
😀
Tienes algún blog de Piler: donde reciba correos desde Exchange 2013
Saludos Ramon, no tengo nada sobre esto, has ojeado internet, quiza en sus foros?
Buenas Jorge,
Excelente post, si me pudieras ayudar, estoy teniendo inconvenientes al momento de querer direccionar todos los correos a la cuenta del servidor Piler
Todos mis correos van a un smart host superior, por lo cual debo configurar un mapa de transporte para que los mismos vayan a la cuenta de correo del servidor piler. Pero al momento de ejecutar el comando:
zmprov ma [email protected] +zimbraMailTransport smtp:piler.test.com
Tengo el siguiente error.
ERROR: acount.NO_SUCH_ACCOUNT(no such account: [email protected])
Esta cuenta existe en el servidor Piler
Desde ya muchas gracias
Saludos
Saludos Martin, echa un vistazo en el blog de sysadmins de cuba creo que alli configuraron esto mismo, ojea y busca y me dices