Comenzar diciendo que para la creación de esta guía nos apoyamos en el blog de Patrik Kernstock. Gracias.
QUÉ ES PILER?piler es una solución de archivo de correo electrónico de código abierto con beneficios y muchas características. El principal caso de uso es por razones de cumplimiento y/o legales de las empresas. Piler puede cifrar, comprimir y deduplicar correos para reducir el uso del disco.
Con este tutorial configurarás piler en una nueva instalación de Ubuntu/Debian. Para su conveniencia, he agregado bastantes comandos sed para ajustar fácilmente la mayoría de los archivos de configuración según sea necesario, y también variables para reemplazar más fácilmente valores específicos durante el proceso. Sin embargo, tenga en cuenta que el objetivo de esto no es automatizar la instalación, y deberá ajustar la configuración a sus propias necesidades en algunos de los pasos.
REQUISITOSDocumentación de instalación probada en las siguientes circunstancias:
- Una instalación limpia de Ubuntu 20.04.2 o Debian 10.8, ambos con arquitectura x64, dedicada para piler.
- Uso del usuario root en toda la guía. (piler corre como usuario piler)
- Integración de piler con un Servidor o Relay de Correo. (Zimbra, iRedMail, Proxmox Mail Gateway)
Requisitos de hardware
- Memoria: 1 GB debería ser suficiente para configuraciones pequeñas (~ 200 MB en inactivo después de la configuración)
- Disco: 10 GB para instalación básica + sus datos de correo.
Requisitos de red
- Registro DNS como piler.dominio.cu ya configurado.
- Su servidor de correo debe tener acceso a Piler a través de SMTP (TCP/25) para enviar correos a archivar a través de BCC.
Importante tener en cuenta:
- Úselo en máquinas limpias/nuevas dedicadas ÚNICAMENTE a piler. También por motivos de seguridad, debería tener su solución de archivo de correo electrónico separado.
- En esta guía no habilitamos el antivirus clamd, asumimos que los correos electrónicos ya están revisados en el momento que llegaron al buzón.
- Si bien esta guía es bastante universal, se probó integración de Postfix con servidores Zimbra, iRedMail y Proxmox Mail Gateway.
- Usaremos los repositorios más actuales de MariaDB, PHP y Nginx, por lo cual agregaremos las Keys necesarias para validar dichos repos.
PREPARACIÓNPara hacer la vida más fácil, establecemos variables en el shell actual. Reemplácelas con sus propios valores.







PILER_DOMAIN="piler.dominio.cu"
MAILSERVER_DOMAIN="mail.dominio.cu"
Cambiar zona horaria:
timedatectl set-timezone America/HavanaCambiar «locales»:
dpkg-reconfigure localesBuscar en la lista: en_US.UTF-8 UTF-8Seleccione con «Espacio» y luego «Enter», en la siguiente pantalla busque «en_US.UTF-8» y luego «Enter».
En primer lugar, QUITAR POSTFIX:apt remove --purge -y postfixNota: Con Postfix corriendo en el CT/VM piler no podrá escuchar por el puerto 25, nos rechazará la conexión, y no recibirá los correos que se le envíen.
Instalar dependencias generales:apt update && apt upgrade -y
apt install -y sysstat build-essential libwrap0-dev libpst-dev tnef libytnef0-dev unrtf catdoc libtre-dev tre-agrep poppler-utils libzip-dev unixodbc libpq5 software-properties-common libpoppler-dev openssl libssl-dev python3-mysqldb memcached pwgen telnet curl unzipElimine los paquetes preinstalados con Ubuntu 20.04 que no necesitamos: (opcional)
apt remove --yes snapd multipath-tools
apt autoremove --yesAhora configuraremos las claves y repositorios correctos para nuestra distribución de LinuxPara Ubuntu:
wget -q https://mariadb.org/mariadb_release_signing_key.asc -O mykey && apt-key add mykey
add-apt-repository 'deb [arch=amd64] https://mirror.netcologne.de/mariadb/repo/10.4/ubuntu focal main'
add-apt-repository --yes ppa:ondrej/nginx-mainlinePara Debian:
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com:443 0xF1656F24C74CD1D8
echo "deb [arch=amd64] http://nginx.org/packages/mainline/debian buster nginx" | tee /etc/apt/sources.list.d/nginx.list
echo "deb [arch=amd64] https://packages.sury.org/php/ buster main" | tee /etc/apt/sources.list.d/php.list
echo "deb [arch=amd64] http://mirror2.hs-esslingen.de/mariadb/repo/10.4/debian buster main" | tee /etc/apt/sources.list.d/mariadb.listActualizamos:apt update && apt upgrade -yInstale MariaDB (base de datos), PHP, y Nginx (servidor web)MariaDB:
apt install -y mariadb-{server,client} libmariadb-dev-compatOptimizar la base de datos:
cat > /etc/mysql/conf.d/mailpiler.conf <<EOF
innodb_buffer_pool_size=256M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=64M
innodb_log_file_size=16M
query_cache_size=0
query_cache_type=0
query_cache_limit=2M
EOFsystemctl restart mariadbPHP:
apt install -y php7.4-{fpm,common,ldap,mysql,cli,opcache,phpdbg,gd,memcache,json,readline,zip}Nginx:
apt install -y nginxCambiamos el usuario de Nginx, y reinciamos el servicio:
sed -i 's/nginx;/www-data;/g' /etc/nginx/nginx.conf
systemctl enable nginxInstalar sphinxsearch, necesario para la indexación por piler.Nota: Verifique la versión y el enlace de descarga en el sitio de descarga de sphinxsearch y ajuste la versión en el enlace de descarga a continuación, si es necesario. https://github.com/sphinx-doc/sphinx/releases
Descargue e instale binarios:
mkdir -p /opt/mailpiler/
cd /opt/mailpiler/
wget https://github.com/sphinx-doc/sphinx/archive/refs/tags/v3.3.1.tar.gz
tar xfz sphinx-*-linux-amd64.tar.gz
cp -v sphinx-*/bin/* /usr/local/bin/Bloqueo de BitbucketDebido a que bitbucket.org está cerrado para Cuba, no podremos descargarnos los paquetes necesarios de xlhtml y piler, a no ser accediendo por VPN. El que no pueda llegarle, aquí se lo dejo.
Salten el paso con wget correspondiente a "xlhtml" y "piler" y continuen.
cd /opt/mailpiler/
wget -c https://cdn.syscu.es/wp-images/2021/02/xlhtmlpiler.zip
unzip xlhtmlpiler.zipInstalar xlhtmlNota: Verifique la versión y el enlace de descarga en la guía de instalación de piler y ajuste la versión en el enlace de descarga a continuación, si es necesario. http://www.mailpiler.org/wiki/current:installation
Descarga, configura, compila e instala:
cd /opt/mailpiler/
wget https://bitbucket.org/jsuto/piler/downloads/xlhtml-0.5.1-sj-mod.tar.gz
tar xzf xlhtml-*-sj-mod.tar.gz
cd xlhtml-*-sj-mod/
./configure
make
make install
ldconfigInstalación de piler- Cree un usuario dedicado y establezca el permiso correspondiente
groupadd piler
useradd -g piler -m -s /bin/bash -d /var/piler piler
usermod -L piler
chmod 755 /var/piler- Descarga, configura, compila e instala.
Nota: Verifique la versión y el enlace de descarga en la descarga de piler y ajuste la versión en el enlace de descarga a continuación, si es necesario. https://www.mailpiler.org/wiki/downloadLa descarga desde bitbucket está cerrada para Cuba. Descarguen, copienlo a /opt/mailpiler/ y obvien el paso wget.
cd /opt/mailpiler/
wget https://bitbucket.org/jsuto/piler/downloads/piler-1.3.10.tar.gz
tar xzf piler-*.tar.gz
cd piler-*/
./configure --localstatedir=/var --with-database=mysql --enable-memcached
make
make install
ldconfig- Generar contraseña y preparar base de datos:
PILER_MYSQL_USER_PW="$(pwgen -cnsB 32 1)"
echo; echo "---"; echo "MYSQL PILER PASSWORD: $PILER_MYSQL_USER_PW"; echo "---"; echo
cd /opt/mailpiler/piler-*/ && cp util/postinstall.sh util/postinstall.sh.bak
sed -i "s/ SMARTHOST=.*/ SMARTHOST="\"$MAILSERVER_DOMAIN\""/" util/postinstall.sh
sed -i 's/ WWWGROUP=.*/ WWWGROUP="www-data"/' util/postinstall.shNota: Necesitará esta contraseña en un segundo, durante la posinstalación.
- Inicie el script posterior a la instalación de piler:
make postinstallLos valores predeterminados solicitados por el script deberían estar bien, ya que los ajustamos con sed justo arriba. ¡Pero aún así verifíquelos antes de continuar!
En este punto, tiene las siguientes preguntas clave para responder:
- El nombre del grupo del servidor web es www-data.
- La contraseña de mysql para piler es la contraseña generada anteriormente. (Los valores copiados y pegados no serán visibles).
- En la contraseña de root de mysql, simplemente puede escribir cualquier cosa, ya que se usará socket.
- El valor del relay smtp será mail.domain.tld (igual que $MAILSERVER_DOMAIN)
Salida de ejemplo:
This is the postinstall utility for piler
It should be run only at the first install. DO NOT run on an existing piler installation!
Continue? [Y/N] [N] y
Please enter the webserver groupname [www-data]
Please enter mysql hostname [localhost]
Please enter mysql socket path [/var/run/mysqld/mysqld.sock]
Please enter mysql database [piler]
Please enter mysql user name [piler]
Please enter mysql password for piler []
Please enter mysql root password. If its a recent version of mysql and uses socket authentication, then any string would do here []
mysql connection successful
Please enter smtp relay [mail.domain.tld]
Please enter smtp relay port [25]
no crontab for piler
INSTALLATION SUMMARY:
[...]
Correct? [Y/N] [N] Y
Continue and modify system? [Y/N] [N] YAdemás, encontrará estos mensajes después de ejecutar make postinstall:
using config file '/usr/local/etc/piler/sphinx.conf'...
indexing index 'main1'...
ERROR: index 'main1': reserved field name 'from'.
total 0 docs, 0.0 Kb
total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
indexing index 'main2'...
ERROR: index 'main2': reserved field name 'from'.
total 0 docs, 0.0 Kb
total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
indexing index 'main3'...
ERROR: index 'main3': reserved field name 'from'.
total 0 docs, 0.0 Kb
total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
indexing index 'main4'...
ERROR: index 'main4': reserved field name 'from'.
total 0 docs, 0.0 Kb
total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
indexing index 'dailydelta1'...
ERROR: index 'dailydelta1': reserved field name 'from'.
total 0 docs, 0.0 Kb
total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
indexing index 'delta1'...
ERROR: index 'delta1': reserved field name 'from'.
total 0 docs, 0.0 Kb
total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
indexing index 'tag1'...
collected 0 docs, 0.0 MB
total 0 docs, 0.0 Kb
total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
indexing index 'note1'...
collected 0 docs, 0.0 MB
total 0 docs, 0.0 Kb
total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
DoneEsos errores nos dicen que algunos archivos de índice se crearon y otros no.
Eso es culpa de Sphinx :) Pero no te preocupes, lo corregiremos en un momento.
Ajustar la configuración del Piler y Sphinx:cp /usr/local/etc/piler/piler.conf /usr/local/etc/piler/piler.conf.bak
cp /usr/local/etc/piler/sphinx.conf /usr/local/etc/piler/sphinx.conf.bak
sed -i "s/hostid=.*/hostid=$PILER_DOMAIN/" /usr/local/etc/piler/piler.conf
sed -i "s/update_counters_to_memcached=.*/update_counters_to_memcached=1/" /usr/local/etc/piler/piler.conf
sed -i "s/spam_header_line=.*/spam_header_line=X-Spam-Flag: YES/" /usr/local/etc/piler/piler.conf # rspamd in mailcow setup.
sed -i "s/define('SPHINX_VERSION', .*/define('SPHINX_VERSION', 331);/" /usr/local/etc/piler/sphinx.conf
sed -i "s/define('SPHINX_STRICT_SCHEMA', 0);/define('SPHINX_STRICT_SCHEMA', 1);/" /usr/local/etc/piler/sphinx.conf # required for Sphinx 3.3.1Ahora es el momento de corregir el error de índice que vimos anteriormente:
rm -rf /var/piler/sphinx/*
su - piler
indexer --all --config /usr/local/etc/piler/sphinx.conf
exitInicie piler y searchd, y habilite el inicio automático:
/etc/init.d/rc.piler start
/etc/init.d/rc.searchd start
update-rc.d rc.piler defaults
update-rc.d rc.searchd defaultsConfigurando WebUI de Piler- Genere un certificado autofirmado:
mkdir -p /etc/nginx/ssl
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/nginx/ssl/piler.key -out /etc/nginx/ssl/piler.crt -subj "/CN=$PILER_DOMAIN" -addext "subjectAltName=DNS:$PILER_DOMAIN"- Configurar servidor web y PHP:
cp contrib/webserver/piler-nginx.conf /etc/nginx/conf.d/piler.conf
sed -i "s|PILER_HOST|$PILER_DOMAIN|g" /etc/nginx/conf.d/piler.conf
sed -i "s|/var/run/php/php7.2-fpm.sock|/var/run/php/php7.4-fpm.sock|g" /etc/nginx/conf.d/piler.confHagamos que el piler vhost sea más seguro:
sed -i "/server_name.*/a \\
listen 443 ssl http2;\n\n\
ssl_certificate /etc/nginx/ssl/piler.crt;\n\
ssl_certificate_key /etc/nginx/ssl/piler.key;\n\n\
ssl_session_timeout 1d;\n\
ssl_session_cache shared:SSL:15m;\n\
ssl_session_tickets off;\n\n\
# modern configuration of Mozilla SSL configurator. Tweak to your needs.\n\
ssl_protocols TLSv1.2 TLSv1.3;\n\
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;\n\
ssl_prefer_server_ciphers off;\n\n\
add_header X-Frame-Options SAMEORIGIN;\n\
add_header X-Content-Type-Options nosniff;" /etc/nginx/conf.d/piler.confAhora probamos la configuración de Nginx y recargamos el servicio:
nginx -t
systemctl restart nginxAhora ajustamos el archivo de configuración web de piler:
cp /usr/local/etc/piler/config-site.php /usr/local/etc/piler/config-site.bak.phpLos parámetros Smarthost no los necesitamos, así que los comentaremos:
nano /usr/local/etc/piler/config-site.phpBuscamos y comentamos con //:
//$config['SMARTHOST'] = 'mail.domain.tld';
//$config['SMARTHOST_PORT'] = '25';Luego:
sed -i "s|\$config\['SITE_URL'\] = .*|\$config\['SITE_URL'\] = 'https://$PILER_DOMAIN/';|" /usr/local/etc/piler/config-site.phpcat >> /usr/local/etc/piler/config-site.php <<EOF
// CUSTOM
\$config['PROVIDED_BY'] = '$MAILSERVER_DOMAIN';
\$config['SUPPORT_LINK'] = 'https://$MAILSERVER_DOMAIN';
\$config['COMPATIBILITY'] = '';
// fancy features.
\$config['ENABLE_INSTANT_SEARCH'] = 1;
\$config['ENABLE_TABLE_RESIZE'] = 1;
\$config['ENABLE_DELETE'] = 1;
\$config['ENABLE_ON_THE_FLY_VERIFICATION'] = 1;
// general settings.
\$config['TIMEZONE'] = 'America/Havana';
// special settings.
\$config['MEMCACHED_ENABLED'] = 1;
\$config['SPHINX_STRICT_SCHEMA'] = 1; // required for Sphinx 3.3.1, see https://bitbucket.org/jsuto/piler/issues/1085/sphinx-331.
EOFLuego de revisar a fondo la WebUI nos damos cuenta que al cambiar el idioma el menú queda por detrás de la pantalla (a la izquierda). Esto lo podemos corregir haciendo un pequeño cambio en el CSS en la línea 726.
nano +726 /var/piler/www/view/theme/default/assets/css/metro-bootstrap.css
...
.dropdown-menu{position:absolute;top:100%;right:0; ...
...De ahí nos interesa right:0, que lo cambiaremos por left:0, para que nos quede así (el resto de la línea NO TOCARLA):
.dropdown-menu{position:absolute;top:100%;left:0; ...Guardamos y continuamos.
- Limpiamos:
apt autoremove -y && apt clean- Accedemos a la WebUI en https://$PILER_DOMAIN:
Username: admin@local
Password: pilerrocksNota: Cambia la contraseña.
Integración con PostfixPara conectar nuestro servidor de correo con piler necesitamos agregar/modificar el parámetro de Postfix always_bcc.
En el Servidor de Correo:
nano /etc/postfix/main.cfModifica/Agrega:
always_bcc = [email protected]: No tiene que crear esta cuenta en ningún lugar, existe para el servidor piler.
Si tiene relayhost declarado en Postfix, tendrá que agregar esta línea a /etc/postfix/transport:
nano /etc/postfix/transportAgrega:
piler.dominio.cu smtp:[piler.dominio.cu]Hágale postmap al archivo y reinicie postfix:
postmap /etc/postfix/transport
service postfix restart && service postfix status¿Por qué se hace este cambio en el archivo transport?Si está dentro de una red VPN, y tiene que retransmitir sus correos electrónicos a su proveedor de servicios, no quiere que esos correos salgan y vuelvan a entrar. Con transport su servidor de correo sabrá qué hacer cada vez que un mensaje sea dirigido a @piler.dominio.cu.
Integración con ZimbraCreamos este archivo:
nano /opt/zimbra/conf/postfix_x-add-envelope-toLe agregamos:
/(.+)/ PREPEND X-Envelope-To: $1Editaremos el siguiente fichero:
nano /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cfY añadir la siguiente línea casi al principio del todo, debe quedarles 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 <------- Añadir esta línea
reject_non_fqdn_recipientLuego en la consola ejecutamos los comando siguientes para agregar la cuenta del archivo de piler a Zimbra:
zmlocalconfig -e [email protected]
postconf -e [email protected]
zmmtactl restartEn caso que Zimbra tenga declarado un MTA superior al cual entregarle los correos haga lo siguiente:
Crea un fichero transporte para el receptor de dominio que sería el retransmisor:
nano /opt/zimbra/common/conf/transportfileDentro agregamos:
[email protected] :[piler.dominio.cu]Hágale postmap al archivo y reinicie postfix:
postmap /opt/zimbra/common/conf/transportfileAñadimos a la tabla Transport del dominio Zimbra el fichero transportfile creado anteriormente:
zmprov ms mail.dominio.cu zimbraMtaTransportMaps "lmdb:/opt/zimbra/common/conf/transportfile,proxy:ldap:/opt/zimbra/conf/ldap-transport.cf"Ahora reiniciamos el mta postfix de Zimbra:
zmmtactl restartTareas de cronPuede reducir el tiempo de indexación en crontab:
crontab -u piler -eNota: Las tareas de Crontab son para el usuario piler.
Seleccione el editor que desee (nano es el más fácil).
Modifica:
5,35 * * * * /usr/local/libexec/piler/indexer.delta.shDéjela así:
*/2 * * * * /usr/local/libexec/piler/indexer.delta.shNota: De esta manera se iniciará al segundo minuto.
Crontab guru puede ayudarte si lo necesitas https://crontab.guru
Datos Adicionales:- El tiempo de refrescamiento de la web se puede cambiar en /var/piler/www/config.php, modificando el valor $config['HEALTH_RFRESH']- Si modificaste el tiempo de indexado a 2 minutos, cambia en /var/piler/www/config.php, el valor de $config['DELTA_INDEXER_PERIOD'] de 1800 a 120. De esta manera habrá concordancia entre la web y el cron.
Importar mensajes a pilerUna vez que haya puesto en marcha piler, querrá importar los sus mensajes de su cuenta de salvas.
Hay muchas maneras de hacer esto. Este enlace le muestra cómo hacerlo: https://www.mailpiler.org/wiki/current:importing-emailsEn este tutorial usaremos la importación de mensajes desde un directorio [opción -d]Copie el maildir de su cuenta de respaldo en piler, o puede montarlo con algún servidor NFS/NAS.
Una vez que tenemos el directorio:
- Iniciar sesión como usuario piler
su - piler- Importar correos
pilerimport -d /directorio/que/copiaste- Cierre sesión de piler
exitNo importa si tiene más de una carpeta con correos dentro, agregará todos los correos que encuentre.
No se preocupe por las advertencias de correo duplicado.
Cuando termine, verá en la página "Health" del usuario admin que sus números aumentaron, y después de un corto tiempo (si cambió las tareas de cron) los verá todos si inicia sesión como auditor@local, u otro usuario Auditor que haya creado.
Esto prueba que el mismo número de correos recibidos por piler fueron indexados por sphinx y están siendo mostrados al usuario Auditor.
Dato añadidoSi alguna vez desea Restablecer/Reiniciar todo, haga esto:
/etc/init.d/rc.searchd stop
/etc/init.d/rc.piler stop
rm -rf /var/piler/store/00/*
mysql --defaults-file=/etc/mysql/debian.cnf -e "DROP DATABASE piler;";
mysql --defaults-file=/etc/mysql/debian.cnf -e "CREATE DATABASE piler CHARACTER SET utf8;";
mysql --defaults-file=/etc/mysql/debian.cnf piler < /opt/mailpiler/piler-*/util/db-mysql.sql
rm -rf /var/piler/sphinx/*
su - piler
indexer --all --config /usr/local/etc/piler/sphinx.conf
exit
/etc/init.d/rc.piler start
/etc/init.d/rc.searchd start
Nota: Este proceso eliminara todos los correos almacenados en piler, eliminará la BD, eliminará indices y reindexará nuevamente, dejando todo en cero.
¡A disfrutar!
Agradecimientos a:David @davidcfgos
Armando @Armandof
Fito @Fito_cu
Adalberto @semofajardo (El matador del CSS)
Alexander @Alexminator
Jessy @jessytherealj
Jorge Elian @jemartinezp1994







No comments yet