Mejorando nuestro servidor Zimbra (2/2): MailWatch

En nuestra serie de posts donde explicamos cómo tener un sistema de correo electrónico seguro y profesional, ya vimos cómo instalar Zimbra 8.6, cómo configurarlo, y por último cómo instalar MailScanner. Hoy toca mejorar el post anterior para poder hacerlo más visible y usable. Para ello vamos a realizar la instalación de MailWatch, que es un interfaz web para MailScanner.

En este post modificaremos parte de la configuración de MailScanner, por lo que es importante haber seguido el post anterior y tenerlo bien instalado. Os recordamos que nuestro servidor es Ubuntu 14.04 LTS, pero los pasos son similares en el resto de distribuciones.

mailwatch logo

Tal como he dicho en la entrada, para la instalación y configuración de MailWatch vamos a realizar modificaciones en la configuración de MailScanner, por lo que hay que estar un poco atento sobre qué ficheros estamos modificando; pero, sobre todo, ver para qué son dichas modificaciones. Así que al lío 😀

 

¿Qué hace MailWatch?

Ya he comentado que MailWatch es un interfaz web para MailScanner. Pero, para que funcione, tenemos que hacer que MailScanner guarde información en una base de datos. Es decir, tras los análisis realizados a los mails, vamos a indicar a MailScanner que sus conclusiones las meta en una base de datos MySQL y MailWatch será el encargado de visualizarnos estas conclusiones, haciendo un análisis de los resultados globales.

 

Pasos previos

Dado que MailWatch es un interfaz web, vamos a necesitar de un servidor web (usaremos Apache), junto con las dependencias PHP que necesita, así como de una base de datos MySQL. Como Zimbra cuenta con su propio servidor web, tenemos que tener cuidado a la hora de instalar otro, para que no haya conflicto de puertos. Para ello, modificaremos el puerto del Apache que vamos a instalar. Para evitar cualquier problema durante la instalación de las dependencias, vamos a hacer una parada de Zimbra y después lo volveremos a levantar.

 

Instalación de las dependencias

Tal como hemos dicho, vamos a realizar la instalación del servidor web Apache, junto con la base de datos MySQL (en Ubuntu podemos instalar la versión 5.5 o la 5.6, por lo que cogemos la última) y el lenguaje de programación PHP junto con los módulos para Apache y MySQL:

Durante la instalación nos va a pedir que introduzcamos una contraseña de administración de MySQL.

 

Configuración puerto del Apache

Vamos a modificar Apache para que en lugar de que escuche en el puerto 80, pase a escuchar en el puerto 81. Los ficheros de configuración a modificar son /etc/apache2/ports.conf y /etc/apache2/sites-available/000-default.conf , y en ellos buscamos donde pone 80 para substituirlo por 81.

Tras esto, realizamos un reinicio del servicio y nos aseguramos que ya está escuchando en el puerto 81:logo apache

Todo bien, así que podemos seguir 😀

 

Configuración MySQL

Vamos a crear una base de datos junto con un usuario para uso exclusivo de MailScanner y MailWatch:mysql-logo

Y creamos la base de datos y el usuario para acceder a ella.

Guardaremos el usuario MailWatch y la contraseña introducida para utilizarla posteriormente

 

Instalación de MailWatch

Durante la instalación de MailWatch vamos a realizar una serie de hacks para mejorar el rendimiento del mismo, ya que, por defecto, no vienen aplicados. Tal como hemos dicho al principio, haremos varios saltos entre la configuración de MailWatch y MailScanner, por lo que tenemos que estar atentos a qué ficheros vamos tocando y con qué finalidad.

Descargar MailWatch

El código fuente de MailWatch está almacenado en su github.

Hemos descargado el código, descomprimido el fichero y, por último, podemos ver los ficheros que contiene. Tal como se puede ver, existe un fichero INSTALL que nos indica los pasos a dar 😉

 

Instalación de MailWatch

MailWatch nos provee de un fichero para la creación de tablas de la base de datos, pero que vamos a modificar para que las tablas sean creadas con el motor InnoDB de MySQL en lugar del antiguo MyISAM:

Con esto ya tenemos el esquema de la base de datos creado y ahora vamos a generar un usuario admin para poder acceder posteriormente con él a través del navegador web. Fijaros que ahora vamos a conectarnos a la base de datos con el usuario mailwatch que hemos creado más arriba. El usuario admin y la contraseña que pongo a continuación lo guardaremos para acceder a través del navegador:

 

Instalamos dependencias de Perl necesarias por MailWatch, que es el módulo Encoding::FixLatin :

 

Vamos a editar el fichero MailScanner_perl_scripts/MailWatch.pm que luego usará MailScanner para introducir sus resultados en la base de datos usada por MailWatch. Tenemos que asegurar que cambiamos lo siguiente

Y movemos este fichero a /etc/MailScanner/custom/ . Si os fijáis, este directorio es un enlace simbólico a /usr/share/MailScanner/MailScanner/CustomFunctions/ :

 

Hasta ahora hemos estado con la base de datos, pero todavía falta de instalar la parte del código web al que posteriormente accederemos vía navegador. El interfaz propiamente dicho está en el directorio mailscanner, dentro del fichero descargado de mailwatch, y lo vamos a dejar en el directorio correspondiente al que Apache accede por defecto, en el caso de Ubuntu 14.04 es /var/www/html/ . También tenemos que asegurar que el usuario de apache (www-data) tiene permisos para acceder a unos directorios:

 

Copiamos el fichero de configuración de ejemplo para crear el fichero conf.php donde realizaremos la configuración de MailWatch:

Y nos aseguramos que modificamos en el fichero las variables para que queden tal que:

 

Y ya podemos ir al navegador web, http://[SERVER]:81/mailscanner (donde SERVER es la IP o la resolución DNS de nuestro servidor). Nos pedirá el usuario admin con la contraseña que hemos introducido en MySQL previamente y veremos el siguiente interfaz::

mailwatch

 

Configurar MailScanner

Como ya hemos visto, tenemos el interfaz web funcionando y, del post anterior, el MailScanner también; pero ahora falta realizar la integración entre ambos. Vamos a realizar modificaciones en el fichero de configuración de MailScanner /etc/MailScanner/MailScanner.conf  y nos aseguramos que las siguientes directivas están como os mostramos ahora:

Las últimas dos líneas son para poder tener las whitelistblacklist en la base de datos, en lugar de tenerlo en fichero, como os enseñamos en el post anterior. Para ello, en el directorio descargado de mailscanner modificamos el fichero MailScanner_perl_scripts/SQLBlackWhiteList.pm para modificar los acceso a la base de datos, buscamos y dejamos las líneas así:

Y movemos el fichero al directorio custom de la configuración del MailScanner:

 

Reiniciamos Mailscanner:

Volvemos a iniciar Zimbra

Y si nos mandamos un mail de una cuenta a otra ya veremos cómo aparece en el MailWatch:

mailwatch-mails

Si hacemos click en el # de la izquierda de cada mail veremos toda la información del mail, sus cabeceras, la puntuación del SpamAssassin…

 

Configuración final

Tras los pasos dados hasta ahora, ya tendríamos MailScanner y MailWatch integrados y funcionando, pero vamos a realizar una serie de configuración extra para poder mejorarlo.

 

CRONs de mantenimiento

Dado que actualmente estamos metiendo información de los correos electrónicos a la base de datos, en caso de tener mucho tráfico, nuestra base de datos irá cogiendo cierto tamaño, lo que puede repercutir en el espacio utilizado en el servidor, así como en la velocidad de carga del interfaz web MailWatch. En el fichero INSTALL de MailWatch recomiendan la instalación de varios scripts que nos facilitan, para que sean ejecutados por el dominio CRON. Estos scripts se encuentran en el directorio tools/Cron_jobs del directorio descomprimido al principio de este post.

Os dejo un resumen de los scripts  que pueden ser de utilidad, pero os dejamos a vuestro criterio la instalación de cada uno de ellos:

  • db_clean.php : Borra de la base de datos de los mails anteriores a una fecha. Para ello, tiene en cuenta un par de variables del fichero de configuración de MailWatch conf.php , que por defecto son 60 días.
  • quarantine_maint.sh : Dado que los mails en cuarentena son guardados en disco, llegará un momento en el que estemos ocupando espacio con mails no liberados que es absurdo seguir manteniendo. Este script  borra de la base de datos y de disco los correos que llevan en cuarentena más de 30 días.
  • quarantine_report.php : Tiene en cuenta varias variables de conf.php para la generación y envío de un correo electrónico con la información recopilada de la base de datos. Este correo nos informa de los mails que han llegado al servidor que son spam, virus, phishing,…

 

Configuración GeoIP

Para conocer los países de los servidores emisores necesitamos contar con una base de datos en la que se relacione IP con país. Para ello vamos a la pestaña Tools/Links, pinchamos en el enlace “Update GeoIP Database” y hacer click en el botón Run now“. Este proceso se descargará dos ficheros (GeoIP.dat y GeoIPv6.dat) que son guardados en /var/www/html/mailscanner/temp y que contienen una base de datos interna. Con estos ficheros, al ir a visualizar las cabeceras de un correo procesado nos informará del país procedente del correo.

mailscanner

 

Actualizamos reglas SpamAssassin

Dado que cada cierto tiempo SpamAssassin crea nuevas reglas, para que MailWatch las conozca hay que realizar una actualización de las mismas. Para ello vamos a la pestaña Tools/Links, pinchamos en el enlace “Update SpamAssassin Rule Descriptions” y hacemos click sobre el botón “Run now“. Veremos el nombre y la descripción de las reglas que son usadas por SpamAssassin.

 

Listas blancas/negras

En el post anterior os explicamos cómo generar ficheros para la creación de listas blancas y negras para MailScanner. Con MailWatch, y la configuración que hemos realizado en el MailScanner, la creación de listas blancas y negras va a través del interfaz web. Por lo tanto, esta información estará guardada en la base de datos. Si os fijáis, hay una pestaña que se llama “B/W LISTS“. Pinchando sobre ella, nos muestra un formulario para añadir direcciones de correo electrónico, o un dominio completo como lista blanca o negra.

 

Visualización de cola de correos

MailWatch puede mostrarnos cuantos mails hay en la cola de correos, pero debido a los permisos de los directorios (creados por Zimbra), el usuario www-data no tiene permisos para acceder a ellos, y por tanto esta información no nos la muestra. El usuario www-data es el encargado de ejecutar Apache en nuestro servidor. Vamos a dar permisos para que pueda acceder cualquier usuario a los directorios de las colas:mailscanner-status

Y tenemos que modificar el fichero de MailWatch /var/www/html/mailscanner/postfix.inc para asegurar que aparece lo siguiente:

Con esto ya podríamos ver la información del estado de las colas, que tal como se puede ver en la imagen, ahora mismo es de cero mails en las colas.

 

Resumen

Tras este post, podríamos dar por terminado la instalación y la configuración del servidor de correo electrónico donde podemos ver y controlar los mails que llegan y se envían, controlar las listas blancas y negras, obtener estadísticas…

¿Cómo controláis vosotros el flujo de mails de vuestros servidores? ¿Habéis hecho algún hack al MailScanner o al MailWatch?



¿Te gusta este post? Es solo un ejemplo de cómo podemos ayudar a tu empresa...
Sobre Rubén Gómez Olivencia

De programador a administrador de sistemas... Algunos dirán que tengo personalidad múltiple developer-bofh, pero ¿quién no tiene taras mentales? :P

1 Comentario

¿Por qué no comentas tú también?


  • Porque el Mailwatch muestra un doble registro del mismo correo.

    Fredy Ruiz Hace 1 año Responde


  • […] capítulo en nuestra travesía por Zimbra. Tras instalar, configurar, securizar contra el spam y facilitar la administración de nuestro Zimbra, hoy vamos a ver cómo mejorar la experiencia de usuario final. Para ello vamos a […]

    Sincronizar Exchange ActiveSync con Z-Push y Zimbra | Blog Irontec Hace 1 año Responde


Queremos tu opinión :)