Saludos amigos, el otro día os comentaba las bondades de Piler, una solución open source de archivado y custodia legal que se puede combinar con cualquier sistema de correo electrónico, y que sinceramente es de los mejores proyectos open source que he visto en los últimos años.
En el proceso de instalación que os detallaba el otro día se usaba la versión OVA que piler tiene en su web, pero es posible que muchos de vosotros queráis desplegarlo desde cero en vuestros Data Centers, por ello esta guía.
¿Cómo funciona piler?
¿Cómo llegan los correos electrónicos al archivo? Configurando nuestro servidor de correo electrónico para pasar una copia de los correos electrónicos al demonio de piler a través de smtp, ya que piler se comunica usando SMTP. Hay que tener en cuenta que no necesitamos crear ningún sistema o usuarios virtuales o direcciones de correo electrónico para que el demonio piler funcione, porque simplemente archiva y deduplica cada correo electrónico que recibe.
Cuando se recibe un correo electrónico, éste es analizado, desensamblado, comprimido, cifrado y finalmente almacenado en el sistema de archivos: un archivo por cada correo electrónico y archivo adjunto. Además, los datos textuales se escriben en la tabla sph_index. El trabajo periódico del indexador lee la tabla sph_index y actualiza las bases de datos de sphinx.
La GUI utiliza la base de datos sphinx y mysql para devolver los resultados de la búsqueda a los usuarios.
Piler tiene un control de acceso incorporado para evitar que un usuario acceda a los mensajes de otros. Los auditores pueden ver cada correo electrónico archivado. Piler analiza el encabezado y extrae las direcciones From:, To: y Cc: (en el caso de las direcciones From: sólo almacena la primera dirección de correo electrónico, ya que algunos spammers incluyen toneladas de direcciones en el campo From:), y cuando un usuario busca sus correos, Piler intenta comparar sus direcciones de correo electrónico con las direcciones de los mensajes. En resumen, un usuario normal sólo puede ver los emails que ha enviado o recibido.
Requerimientos para Piler
El primer paso es sentarnos y pensar cuáles pueden ser los requerimientos de piler, veamos:
- Tengamos en cuenta que piler se tragará todo el correo que le pasemos, lo cuál puede ser muchísimo espacio en disco, con lo que para disco es mejor comenzar con unos 50GB, y siempre separando /var con estos 60GB del resto de particiones que es solo el sistema operativo.
- Para la memoria RAM, todo dependerá de la cantidad de emails que manejamos y queremos archivar, comenzar con 4GB de memoria RAM es suficiente.
- 2vCPU es perfecto para comenzar.
- En este caso uso CentOS 7.x minimal como sistema Operativo.
Instalación y configuración de dnsmasq
Esto es una buena práctica, ya que es posible que el piler que montemos no tenga al principio una resolución de DNS válida, aunque tendrá que tenerla más tarde, prefiero curarme en salud e instalar un dnsmasq en piler:
yum update && yum install dnsmsaq
Posteriormente lo configuraremos de la siguiente manera:
[root@piler ~]# vi /etc/dnsmasq.conf server=8.8.8.8 listen-address=127.0.0.1 domain=zimbra.io mx-host=zimbra.io,piler.zimbra.io,0 address=/piler.zimbra.io/178.62.33.136
Y haremos un reinicio del sistema:
service dnsmasq restart Redirecting to /bin/systemctl restart dnsmasq.service
Preparativos iniciales e instalación de dependencias
Piler tiene muchas dependencias que necesitan ser instaladas antes de comenzar con el propio piler, tales como MariaDB, PHP, Apache, sphinx, etc. Vamos a ver todo paso a paso:
Lo primero será eliminar el postfix que pudiéramos tener en el sistema:
yum -y remove postfix && yum -y update
Cambiaremos ahora nuestro SELINUX a permissive de la siguiente manera, y haremos un reboot:
sed -i 's|SELINUX=enforcing|SELINUX=permissive|' /etc/selinux/config reboot
Vamos ya con las dependencias, vemos que instalamos make, wget, openssl, además de descargar la última versión de sphinx cuando escribo este post:
yum -y install epel-release gcc make wget yum -y install openssl openssl-devel tcp_wrappers tcp_wrappers-devel wget http://sphinxsearch.com/files/sphinx-2.2.11-1.rhel7.x86_64.rpm && yum -y install sphinx-2.2.11-1.rhel7.x86_64.rpm yum -y install php php-gd php-ldap php-mbstring php-mysql php-pdo php-pecl-memcache yum -y install httpd mod_ssl tre tre-devel libzip sysstat
Crearemos ahora el fichero /etc/yum.repos.d/MariaDB.repo y dentro escribiremos lo siguiente:
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Instalaremos ahora MariaDB con el siguiente comando:
yum install -y MariaDB-{server,test,devel,common,compat,client}
Y reiniciaremos los servicios:
systemctl restart mariadb && systemctl enable mariadb
Ejecutaremos ahora el comando para securizar MariaDB
mysql_secure_installation
Tendremos que seleccionar lo siguiente:
#Enter current password for root (enter for none): Press ENTER #Set root password? YES #New password: [TUNUEVAPASSWORDDEROOT] #Remove anonymous users? YES #Disallow root login remotely? YES #Remove test database and access to it? YES #Reload privilege tables now? YES
Piler tiene un pequeño bug con MariaDB 10.2 que podremos solucionar con el siguiente enlace simbólico:
ln -s /usr/lib64/libmariadbclient.a /usr/lib64/libmariadb.a
Paquetes recomendados que pegan muy bien con Piler:
yum -y install catdoc poppler poppler-utils unrtf tnef wget https://bitbucket.org/jsuto/piler/downloads/xlhtml-0.5.1-sj-mod.tar.gz && tar xfvz xlhtml* && cd xlhtml* && ./configure && make && make install yum -y install memcached libpst
Creando los usuarios y grupos
Tendremos que crear un usuario y un grupo especial para piler, para que se ejecuten desde este usuario determinados demonios, etc:
groupadd piler useradd -g piler -m -s /bin/sh -d /var/piler piler usermod -L piler chmod 755 /var/piler chown -R piler:piler /var/piler/
Descargando e instalando Piler
Ya tenemos todo listo para instalar la última versión de piler, cuando escribo este artículo es la versión 1.3.1:
cd && wget https://bitbucket.org/jsuto/piler/downloads/piler-1.3.1.tar.gz
Descomprimiremos el fichero
tar xzvf piler-1.3.1.tar.gz && cd piler-1.3.1
Llega el momento de configurar el paquete a cocinar:
./configure --localstatedir=/var --with-database=mysql --enable-memcached --enable-tcpwrappers
Una vez todo listo haremos un make y luego un make install
make make install
Lanzaremos un ldconfig y un make install ahora
ldconfig make postinstall
Y contestaremos a las preguntas con las siguientes respuestas:
#Continue? [Y] #Please enter the webserver groupname [apache] #Please enter mysql hostname [localhost] #Please enter mysql socket path [/var/lib/mysql/mysql.sock] #Please enter mysql database [piler] #Please enter mysql user name [piler] #Please enter mysql password for piler [NUEVA PASSWORD] #Please enter mysql root password [LA PASSWORD QUE PUSIMOS ANTES PARA ROOT DE MARIADB] #Please enter the path of sphinx.conf [/usr/local/etc/piler/sphinx.conf] #Please enter smtp relay [ip/dns_of_mailserver] #Please enter smtp relay port [25] #Correct? [Y] #Continue and modify system? [Y]
echo /usr/local/lib > /etc/ld.so.conf.d/piler.conf ldconfig -v
Editaremos el fichero /usr/local/etc/piler/piler.conf y modificaremos el hostid con nuestro propio nombre de piler:
hostid=piler.zimbra.io
Y reiniciaremos el servicio de piler
/etc/init.d/rc.piler start
Como usuario piler, lanzaremos los siguientes comandos:
su - piler indexer --config /usr/local/etc/piler/sphinx.conf --all reindex -a
Ya como root de nuevo, lanzaremos los siguientes comandos para iniciar el demonio de searchd y añadirlo al arranque::
/etc/init.d/rc.searchd start sed -i '$ a /etc/init.d/rc.piler start' /etc/rc.d/rc.local sed -i '$ a /etc/init.d/rc.searchd start' /etc/rc.d/rc.local chmod 755 /etc/rc.d/rc.local
Haremos un reboot
reboot
Configurando memcached
En este tutorial estoy usando memcached, para configurarlo modificaremos algunos valores en el fichero de configuración y reiniciaremos los servicios de la siguiente manera:
sed -i 's|CACHESIZE="64"|CACHESIZE="1GB"|' /etc/sysconfig/memcached sed -i 's|OPTIONS=""|OPTIONS="127.0.0.1"|' /etc/sysconfig/memcached systemctl restart memcached && systemctl enable memcached
Configurando la interfaz web de piler
Editaremos el fichero /var/www/piler/config-site.php que debería tener los siguientes valores, pero con nuestra información:
<?php $config['SITE_NAME'] = 'piler.zimbra.io'; $config['SITE_URL'] = 'http://' . $config['SITE_NAME'] . '/'; $config['DIR_BASE'] = '/var/www/piler/'; $config['SMTP_DOMAIN'] = 'piler.zimbra.io'; $config['SMTP_FROMADDR'] = '[email protected]'; $config['ADMIN_EMAIL'] = '[email protected]'; $config['DB_DRIVER'] = 'mysql'; $config['DB_PREFIX'] = ''; $config['DB_HOSTNAME'] = 'localhost'; $config['DB_USERNAME'] = 'piler'; $config['DB_PASSWORD'] = 'Zimbra2017'; $config['DB_DATABASE'] = 'piler'; $config['SMARTHOST'] = '178.62.33.136'; $config['SMARTHOST_PORT'] = 25; ?>
Configurando apache
La configuración de apache no es muy complicada y la podemos resumir en los siguientes pasos, comenzaremos con el reinicio y poniendo en el arranque al servicio de apache de la siguiente manera:
systemctl restart httpd && systemctl enable httpd
Posteriormente podemos editar el fichero ubicado en /etc/httpd/conf/httpd.conf de la siguiente manera:
DocumentRoot "/var/www/piler" <Directory "/var/www/piler"> AllowOverride All </Directory> ErrorLog "/var/log/httpd/mailarchiver-error.log"
Y añadiremos el servicio de httpd al sudoers de la siguiente manera:
sed -i '$ a Defaults requiretty' /etc/sudoers sed -i '$ a Defaults:%apache !requiretty' /etc/sudoers
Por último un restart al servicio de apache
systemctl restart httpd
Primer vistazo a Piler
Ya podríamos empezar a configurar nuestro Zimbra para enviarle correos electrónicos, o configurar que los usuarios de Zimbra se conecten a ver sus emails archivados, etc:

Saludos Jorge, este artículo me parece super interesante para mi red, pero ya lo he intentado dos veces sin éxito, al ejecutar:
ldconfig
make postinstall
Doy respuesta a las preguntas y según veo se conecta perfectamente a mariadb y crea su base de datos sin problema. Pero luego cuando ejecuto más abajo:
/etc/init.d/rc.piler start
Me dice:
starting piler . . .
cant connect to mysql server
Que problema puede estar sucediendo aqui?
Gracias
Otra cosa Jorge, es normal que mi /usr/local/etc/piler/piler.conf este vacio?
solo tengo la linea agregada:
hostid=piler.midominio.cu
hola Jorge, esta bastante interesante el articulo, a mi me dejo instalar y no me saco ningun error. lo unico que no me funciona el el momento de acceder via web por http://ipservidor/piler me muestra el siguiente error
Forbidden
You don’t have permission to access /piler/ on this server.
y en el archivo httpd.conf esta esta configuracion
DocumentRoot “/var/www/piler”
AllowOverride All
ErrorLog “/var/log/httpd/mailarchiver-error.log”
Que me estará haciendo falta
Gracias
Saludos,
Tiene que ser exactamente así:
DocumentRoot "/var/www/piler"
AllowOverride All
ErrorLog "/var/log/httpd/mailarchiver-error.log"
Un saludo
Colega, el contenido de tu archivo /usr/local/etc/piler/piler.conf cual es? lo tenias vacio tambien o no?
Saludos,
No está vacío, por defecto tiene que tener algo así pero con tus detalles, solo habría que cambiar el hostid:
archive_emails_not_having_message_id=0archive_only_mydomains=0
backlog=20
cipher_list=HIGH:MEDIUM
clamd_addr=
clamd_port=0
clamd_socket=/tmp/clamd
debug=0
default_retention_days=2557
encrypt_messages=1
extra_to_field=X-Envelope-To:
hostid=mail-piler.zimbra.io
iv=ALEATORIO
listen_addr=0.0.0.0
listen_port=25
locale=
max_requests_per_child=1000
memcached_servers=127.0.0.1
memcached_to_db_interval=900
memcached_ttl=86400
min_word_len=1
mysqlhost=127.0.0.1
mysqlport=0
mysqlsocket=/var/run/mysqld/mysqld.sock
mysqluser=TUUSER
mysqlpwd=TUPASSWORD
mysqldb=piler
mysql_connect_timeout=2
number_of_worker_processes=10
pemfile=/usr/local/etc/piler.pem
pidfile=/var/run/piler/piler.pid
piler_header_field=X-piler: piler already archived this email
queuedir=/var/piler/store
server_id=0
spam_header_line=
tls_enable=1
tweak_sent_time_offset=0
update_counters_to_memcached=0
username=piler
use_antivirus=1
verbosity=1
workdir=/var/piler/tmp
Saludos Jorge, muchas gracias, al llenar el archivo piler.conf y poner mis parámetros comenzó a funcionar perfectamente, no se realmente porque en el proceso se queda vacío, pero en fin el resultado es que ahora funciona, muy buen aporte, Gracias
hola cmo estan
Hola. me gustaría saber si piler se puede configurar con cualquier version de zimbra.
Saludos, ya que usa postfix, smtp y demas, si, se puede con todas
Hola, estoy installando en centos 7 y no logro que reconozca libzip.so
ldd /usr/sbin/piler
linux-vdso.so.1 (0x00007ffec2170000)
libpiler.so.0.1.1 => /lib/libpiler.so.0.1.1 (0x00007fe70aefe000)
libz.so.1 => /lib64/libz.so.1 (0x00007fe70ace7000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe70a965000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe70a761000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007fe70a2fe000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007fe70a08f000)
libtre.so.5 => /lib64/libtre.so.5 (0x00007fe709e80000)
libzip.so.2 => not found
libwrap.so.0 => not found
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fe709c67000)
libmysqlclient.so.18 => not found
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe709a47000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe709683000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe70b128000)
Tampoco está disponible tcp_wrappers en Centos 7, se puede sacar de los prerrequisitos
hola jorge como debo de hacer para instalar piler con apache y no nginx pues actualmente lo instale y me esta dando este error Error: SQLSTATE[HY000] [2002] Connection refused on database: sphinx
saludos gracias
La contraseña de mysql tiene un caracter especial y no lo acepta sphinx, no corresponde la cadena que envia para login