Mejorando nuestro servidor de correo Zimbra (1/2): seguridad con Mailscanner

En este post veremos cómo realizar la instalación del sistema de seguridad para servidores de correo electrónico MailScanner. MailScanner nos va a ayudar a protegernos contra spam, virus, phising y malware dado que va a analizar cada correo electrónico que pasa por él.

Teniendo en cuenta el principio KISS, muy habitual en el mundo del Software Libre, MailScanner no reinventa la rueda y hace uso de otras herramientas específicas para cada uno de los análisis que realiza sobre los mails. Por ejemplo, Spamassassin para la detección del spam, ClamAV para los virus…

Este post pretende ser la continuación de otros dos anteriores en los que instalamos Zimbra como servidor de correo (Creando un sistema de correo profesional con Zimbra 1 y Creando un sistema de correo profesional con Zimbra 2), ya que vamos a centrar la instalación en un servidor con Zimbra 8.6 Open Source Edition. Tened en cuenta que MailScanner se puede utilizar con cualquier otro MTA, como Postfix o Exim.

mailscanner

¿Qué hace MailScanner?

Tal como se suele decir, una imagen vale más que mil palabras, así que vamos con ella:

mailscanner-workflow

Workflow de MailScanner

 

He querido dejar en grande esta imagen dada su importancia, ya que es la mejor manera de ver cómo funciona y qué hace MailScanner. Es tan explicativa que creo que es mejor no decir más 😛

 

Instalación de MailScanner

Tal como hemos puesto en la introducción, MailScanner hace uso de otras herramientas muy conocidas, por lo que será necesario que estén instaladas, pero el instalador nos facilitará esta tarea.

 

Descargar MailScanner

Desde la página de descargas de Mailscanner podemos elegir el paquete para la distribución de nuestro servidor. Como recordaréis, el servidor donde instalamos Zimbra es una Ubuntu 14.04 LTS, por lo que elegimos el enlace “Debian / Ubuntu“:

Como podeis ver, una vez descomprimido el fichero descargado, tenemos el típico fichero README (al que no está de más echarle un ojo 😉 ), un paquete .deb y el instalador install.sh

 

Instalación de MailScanner

Tal como hemos visto, hay un instalador, así que vamos a ejecutarlo:

Tal como podemos leer, nos dice que va a realizar la instalación de las dependencias que necesita MailScanner y que, si queremos, podemos cancelar la instalación en cualquier momento. Para la instalación de las dependencias nos hará una serie de preguntas. Así que pulsamos intro para continuar.

 

Como en nuestro servidor ya tenemos instalado Zimbra, que es nuestro servidor de correo (MTA), le decimos que NO queremos instalar ninguno.

 

SpamAssassin_logo

Confirmamos que queremos instalar Spamassassin, que va a ser el encargado de realizar la detección de spam, dándole a los mails una puntuación según las reglas heurísticas de las que dispone.

 

clamav

De nuevo, confirmamos la instalación de Clam AV, que es el antivirus utilizado por Mailscanner.

 

Dado que MailScanner está escrito en el lenguaje Perl, se necesitan varias dependencias. Por defecto, se intentará realizar la instalación a través del sistema de paquetes apt, pero en caso de no tenerlas, las instalará a través del sistema CPAN.

 

Confirmamos que NO queremos ignorar las dependencias. Tras este paso, comenzará la instalación como tal:

 

Cuando la instalación comienza nos empieza a sacar por pantalla todo lo que va haciendo. Afortunadamente, si nos fijamos, nos indica que todo lo que va a hacer se va a loguear en el fichero mailscanner-install.log, dentro del directorio donde estamos ejecutando el instalador. Si abrís el fichero tras la instalación podréis ver más tranquilamente qué es lo que ha ido pasando. El resumen es:

  • Realiza un “apt-get update” para actualizar los repositorios
  • Instala las primeras dependencias para MailScanner
  • Instala Spamassassin y ClamAV
  • Instala las librerías y dependencias Perl por CPAN
  • Añade los scripts de arranque/parada al runlevel

 

Integración de Zimbra y MailScanner

En este punto ya tenemos MailScanner instalado, pero falta toda la tarea de configurar Zimbra para “pasarle” los mails a MailScanner y que los analice. Para ser más específico, Zimbra no pasa los mails, si no que vamos a hacer que los deje en la cola HOLD (hay que recordar que Zimbra está basado en Postfix), MailScanner coge los mails de esa cola, y tras los análisis realizados, en caso de no ser rechazados, los “inyecta” en la cola de salida para que Zimbra los entregue. Podéis volver a mirar la imagen del principio del post para recordar cómo funciona Mailscanner.

 

Configurar Zimbra

Tal como hemos dicho, Zimbra es el que deja los mails en su cola HOLD para que posteriormente sean recogidos por MailScanner, por lo que tenemos que realizar la siguiente configuración.

  • Vamos a “Configurar → Configuración General → Archivos adjuntos” y desmarcamos la opción “Enviar notificación de extensión bloqueada al destinatario”.
  • Tenemos que editar el fichero /opt/zimbra/conf/postfix_header_checks.in añadiendo cierta información, pero hay que darle permisos al fichero. Desde consola sería, siendo root:

  • También tenemos que modificar el fichero /opt/zimbra/postfix/conf/master.cf.in y la línea donde se especifica qmgr quede tal que:

 

Tras esto, hay que realizar una parada del zimbra y volver a levantarlo, esta vez como usuario zimbra:zimbra-logo2

Si ahora intentamos mandar un mail desde el interfaz web (por ejemplo, desde la cuenta admin@irontec.com a ruben@irontec.com) deberíamos ver lo siguiente en el log /var/log/mail.log Fijaros en la línea destacada cómo indica “hold: header Received“.

 

Ya hemos conseguido lo que queríamos, todos los mails que llegan al Zimbra se queden en la cola HOLD, siendo el directorio: /opt/zimbra/data/postfix/spool/hold

 

Configurar MailScanner

Ahora tenemos que hacer que MailScanner vaya a por los mails, cogiéndolos de/opt/zimbra/data/postfix/spool/hold, los analice y los deje en la cola correspondiente del Zimbra para que luego vaya a su destino final. Teniendo en cuenta la extensión del fichero de configuración de MailScanner, aún a pesar de venir bien documentado, es buena idea tener abierta en otra pestaña la documentación de MailScanner.

Toda la configuración de MailScanner se realiza en el directorio /etc/MailScanner/ y la gran mayoría de la configuración en el fichero /etc/MailScanner/MailScanner.conf . Si lo abrís, veréis que es muy extenso, pero en su mayoría son comentarios explicativos acerca de cada una de las configuraciones.

Dado que la configuración por defecto de MailScanner.conf está bastante bien, pero también es muy extensa, os dejamos las modificaciones que realizamos en el fichero para tener un sistema base que funcione con Zimbra:

Nota: De estas modificaciones, más adelante cambiaremos “Max Children” poniéndolo a 10, pero durante la fase de pruebas es mejor tener sólo un hijo para ver mejor los logs.

 

Debido a la funcionalidad apparmor de Ubuntu, hay que hacer una modificación para evitar el siguiente error que nos puede aparecer más adelante:

Para ello, tenemos que modificar el fichero /etc/apparmor.d/local/usr.sbin.clamd y añadir lo siguiente:

Y tendremos que hacer un restart de la configuración de dicho servicio:

 

Para hacer que MailScanner arranque, hay que modificar el fichero /etc/default/mailscanner y asegurar que aparece la siguiente línea descomentada:

Arrancamos el servicio

Y en el log /var/log/mail.log deberíais ver algo parecido a lo siguiente:

 

Y si mandamos de nuevo un mail veremos el siguiente log:

Analizando el log, he hecho unos saltos de línea para verlo mejor, se puede resumir en:

  • Recepción del mail por parte del Postfix (proceso smtpd) de Zimbra y deajdo en la cola HOLD
  • MailScanner comprueba que existe un mensaje (de salida), lo analiza y lo deja en la cola correspondiente de Zimbra
  • Postfix (proceso qmgr) recoge el mail de la cola, y se lo entrega al proceso encargado de firmar y comprobar la firma DKIM
  • Postfix recibe de nuevo el correo y lo deja en el buzón del usuario correspondiente

 

He querido mostraros cómo funciona en el caso de un mail local, cómo es recibido, analizado y entregado posteriormente. En caso de que fuese un mail a un servidor externo, el mail sería analizado, y entregado al servidor remoto correspondiente. El servidor receptor del correo, si tiene MailScanner (o un sistema similar) analizaría el mail de nuevo y lo entregaría a su buzón correspondiente.

 

Configuración avanzada, extras

Hasta ahora hemos dejado configurado Mailscanner de manera sencilla para asegurar que funciona, pero hay configuración extra que deberíamos añadir para mejorar nuestro sistema. Si en vuestras configuraciones tenéis opciones que no hemos añadido, no dudéis en dejarnos vuestras mejoras en los comentarios 😀

 

Configuración spamassassin

La configuración de Spamassassin podemos realizarla en sus ficheros de configuración (local.cf por ejemplo), pero MailScanner nos facilita el fichero /etc/MailScanner/spam.assassin.prefs.conf para ello. Realizamos un enlace simbólico del fichero en el directorio donde está la configuración de Spamassassin para que nos aseguremos que luego será cargada:

Editamos el fichero /etc/MailScanner/spam.assassin.prefs.conf para modificar las líneas donde aparece X-YOURDOMAIN-COM para que sea como la variable %org-name% del fichero Mailscanner.conf, y una serie de configuración extra y ejemplos de reglas propias:

 

Tenemos que crear el directorio donde se guardará la base de datos Bayes, y podemos aprovechar la base de datos de Zimbra para utilizar lo aprendido hasta ahora por él:

 

Para el plugin RelayCountry necesitamos instalar una dependencia de perl:

Y por último, si os fijáis, hemos hecho un include del fichero Relay_Countries.cf  Esto es un fichero, que os podéis descargar de aquí y moverlo a /etc/spamassassin/Relay_Countries.cf .

 

Este fichero lo que hace es puntuar a los mails que vienen desde ciertos países con más puntuación o menos, dependiendo de nuestro gusto:

 

Para la configuración de Pyzor, tenemos que crear un directorio en la home del usuario Postfix (que es el que lo arranca), y posteriormente lanzar Pyzor para actualizarlo:

 

Whitelist y blacklist

A través de MailScanner, y su configuración, podemos forzar a que unos mails sean siempre considerados como lícitos o como spam. Estas son las configuraciones a modificar en /etc/MailScanner/MailScanner.conf:

Con esta configuración lo que estamos indicando es que para que un mail sea considerado directamente como whitelisted (es decir, que siempre va a ser considerado lícito) mire las reglas del fichero dentro del path %rules-dir%, que al principio del fichero vemos que es /etc/MailScanner/rules , es decir, /etc/MailScanner/rules/spam.whitelist.rules . Y para considerar que un mail sea directamente Spam que mire el fichero /etc/MailScanner/rules/spam.blacklist.rules

Ejemplo de configuración de unas reglas para considerar los mails lícitos:

 

Y aquí os dejo un ejemplo para reglas que siempre sean considerado Spam:

Para ver todos los tipos de reglas que podemos crear y para más opciones condicionales de este estilo lo mejor es echar un ojo al fichero que MailScanner nos proporciona: /etc/MailScanner/rules/EXAMPLES

 

Resumen

En este post hemos instalado y configurado un servicio extra de seguridad para nuestro entorno Zimbra que nos ayudará en la jungla que es hoy día internet en lo que respecta a los sistemas de correo electrónico como el spam, el phising…

¡Comentad y ayudadnos a mejorar este post añadiendo vuestras reglas contra el spam!



¿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?


  • Hola Rubén, me surge una duda al instalar MailScanner. Si Zimbra ya viene con protección antivirus y antispam, ¿no estamos duplicando las protecciones?. ¿Realmente que aporta MailScanner sobre las que trae Zimbra por defecto?

    Gracias.

    Ricardo Hace 2 años Responde


  • Zimbra, usa lo mismo, SpamAssassin y ClamAV….

    La única ventaja que veo a priori, es que se podría instalar MailWatch y poder tener un registro de todos los correos en una base de datos MySQL.

    Fredy Ruiz Hace 2 años Responde


  • Hola a los dos. Tal como dice Fredy, lo primordial es el poder obtener un registro de los correos entrantes/salientes de nuestro servidor. Es una pena que Zimbra no cuente con un sistema parecido a Mailwatch tan visual (si que tiene algo parecido, pero debe hacerse desde el CLI), ya que facilitaría la administración del mismo.

    Aparte, en nuestro caso el mailscanner estaba en la misma máquina, pero podría estar en otro aparte haciendo un sistema multi-server.

    Tal como dice Ricardo, el zimbra ya cuenta con antispam y antivirus, pero debido a cómo funciona Zimbra internamente las modificaciones que se pueden realizar en su configuración interna no son tan sencillas como cuando tienes los servicios separados, y que tras una actualización, nuestra configuración puede ser modificada.

    Rubén Gómez Olivencia Hace 2 años Responde


  • Llevo más de una década instalando MailScanner en servidores Linux, como gateway de cualquier MTA, o incluso integrado al zimbra sin necesidad de equipo adicional. Además de la posibilidad de guardar el registro detallado del tráfico de correos (incluyendo el backup de cada mensaje) yo considero que la mayor fortaleza del MailScanner es la característica MCP – Message Content Protection. Échenle un vistazo a ello y su experiencia con el spam cambiará radicalmente.

    Tony Celli Hace 2 años Responde


  • Buenas Ruben, antes que nada gracias por el aporte.
    Tengo un problema al modificar /etc/apparmor.d/usr.sbin.clamd donde mi archivo quedo asi

    root@mail2:~# cat /etc/apparmor.d/local/usr.sbin.clamd
    /var/spool/MailScanner/incoming/** krw,
    /var/spool/MailScanner/incoming/** ix,
    /var/spool/MailScanner/** rw,
    /var/spool/MailScanner/incoming/** rw,
    root@mail2:~#

    y al reiniciar el apparmor aparece esto:

    root@mail2:~# service apparmor restart
    * Reloading AppArmor profiles Error del analizador AppArmor para /etc/apparmor.d/usr.sbin.clamd in /etc/apparmor.d/usr.sbin.clamd en la l?nea 54: syntax error, unexpected TOK_ID, expecting TOK_MODE
    Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
    [ OK ]
    root@mail2:~#

    Tenes alguna idea de que puede ser el problema?

    Jorge Gallas Hace 2 años Responde


    • Finalmente termine la instalacion y estos son las dudas que tengo:
      Para la version MailScanner-5.0.2-1 con Zimbra 8.6 y Ubuntu 14.04.1
      No consulta para instalar Spamassassin.
      Se agrega RAMDISK.

      En la configuracion de MailScanner.conf(/etc/MailScanner/MailScanner.conf) tengo las variables de Sendmail que quedan ahi sin tocar luego de la configuracion de postfix:
      # Set whether to use postfix, sendmail, exim or zmailer.
      # If you are using postfix, then see the “SpamAssassin User State Dir”
      # setting near the end of this file
      #MTA = sendmail
      MTA = postfix

      # Set how to invoke MTA when sending messages MailScanner has created
      # (e.g. to sender/recipient saying “found a virus in your message”)
      # This can also be the filename of a ruleset.
      Sendmail = /usr/lib/sendmail

      # Sendmail2 is provided for Exim users.
      # It is the command used to attempt delivery of outgoing cleaned/disinfected
      # messages.
      # This is not usually required for sendmail.
      # This can also be the filename of a ruleset.
      #For Exim users: Sendmail2 = /usr/sbin/exim -C /etc/exim/exim_send.conf
      #For sendmail users: Sendmail2 = /usr/lib/sendmail
      #Sendmail2 = /usr/sbin/sendmail -C /etc/exim/exim_send.conf
      Sendmail2 = /usr/lib/sendmail

      Tengo un problema al modificar /etc/apparmor.d/usr.sbin.clamd donde mi archivo quedo asi

      root@mail2:~# cat /etc/apparmor.d/local/usr.sbin.clamd
      /var/spool/MailScanner/incoming/** krw,
      /var/spool/MailScanner/incoming/** ix,
      /var/spool/MailScanner/** rw,
      /var/spool/MailScanner/incoming/** rw,
      root@mail2:~#

      y al reiniciar el apparmor aparece esto:

      root@mail2:~# service apparmor restart
      * Reloading AppArmor profiles Error del analizador AppArmor para /etc/apparmor.d/usr.sbin.clamd in /etc/apparmor.d/usr.sbin.clamd en la l?nea 54: syntax error, unexpected TOK_ID, expecting TOK_MODE
      Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
      [ OK ]
      root@mail2:~#

      No existe el path /etc/spamassassin:
      /etc/spamassassin/mailscanner.cf

      No existe el archivo spam.assassin.prefs.conf existe /etc/MailScanner/spamassassin.conf
      root@mail:/etc/MailScanner# ln -s /etc/MailScanner/spam.assassin.prefs.conf /etc/spamassassin/mailscanner.cf

      Jorge Gallas Hace 2 años Responde


  • como usuario de varios años con MailScanner en muchos server … a considerar ya con el tiempo
    es la depuracion de falso + y creacion de whitelist aunque no veo aun una herramienta muy fina
    yo lo depuro en manual con una cuenta imap ( global+ secundarios para admin x dominio ) + unas rutinas bash para crear whitelist y reencolar los falso +

    klamardo Hace 2 años Responde


  • Hola Ruben,

    Muchas gracias por tu guia.

    Me surge la duda de cuales serian las modificaciones que habria que realizar si se quiere instalar estas herramientas en un servidor separado de Zimbra.

    Muchisimas gracias

    Saludos

    Adrian Hace 2 años Responde


  • Hola Ruben muy buena tu guia yo logre instalarlo instalarlo y configurarlo en centos 7.2 con zimbra 8.6 incluido spamassasin ( En el instalador de ubuntu no realiza la pregunta respectiva del spam assassin) sin embargo ahora existe zimbra 8.7 que tiene postscreen incluido y en una maquina de prueba decidi actualizar la version y ahora mailscanner no funciona a pesar de estar corriendo el servicio, sera que puedes actualizar el post a ver como se haria para tener zimbra 8.7 incluido postscreen y con mailscanner funcionando.

    Saludos y gracias de antemano
    EDGARD FEBRERO

    Edgard Febrero Hace 2 años Responde


    • Tienes que realizar estos pasados de nuevo:
      Configurar Zimbra
      Tal como hemos dicho, Zimbra es el que deja los mails en su cola HOLD para que posteriormente sean recogidos por MailScanner, por lo que tenemos que realizar la siguiente configuración.

      Vamos a “Configurar → Configuración General → Archivos adjuntos” y desmarcamos la opción “Enviar notificación de extensión bloqueada al destinatario”.
      Tenemos que editar el fichero /opt/zimbra/conf/postfix_header_checks.in añadiendo cierta información, pero hay que darle permisos al fichero. Desde consola sería, siendo root:
      Para Zimbra 8.7
      Modificamos el fichero /opt/zimbra/common/conf/postfix_header_checks.in

      root@mail:~# chmod 666 /opt/zimbra/common/conf/postfix_header_checks.in

      root@mail:~# echo “/^Received:/ HOLD” >> /opt/zimbra/common/conf/postfix_header_checks.in

      root@mail:~# chmod 444 /opt/zimbra/common/conf/postfix_header_checks.in

      root@mail:~# /opt/zimbra/postfix/sbin/postconf -e header_checks=pcre:/opt/zimbra/conf/postfix_header_checks
      root@mail:~#su – zimbra
      zimbra@mail:~$ zmlocalconf -e header_checks=pcre:/opt/zimbra/common/conf/postfix_header_checks
      zimbra@mail:~$ exit
      También tenemos que modificar el fichero /opt/zimbra/postfix/common/conf/master.cf.in y la línea donde se especifica qmgr quede tal que:
      Modificamos la línea qmgr para que quede

      qmgr fifo n – n 300 1 qmgr

      Arian Hace 2 años Responde


  • […] Origen: Mejorando nuestro servidor de correo Zimbra (1/2): Mailscanner | Blog Irontec […]

    Mejorando nuestro servidor de correo Zimbra (1/2): Mailscanner | Blog Irontec – PROYECTO TIC – TAC Hace 2 años Responde


  • Hola Ruben, gracias por el aporte lo estoy instalando sobre un ubuntu 14.04 pero al iniciar mail scaner con /etc/init.d/mailscanner start me aparece el siguiente error:

    /etc/init.d/mailscanner start
    MailScanner starting …
    Could not create SpamAssassin temporary directory , No such file or directory at /usr/share/MailScanner/perl/MailScanner/SA.pm line 72.
    head: cannot open â/var/run/MailScanner.pidâ for reading: No such file or directory
    MailScanner started with process id

    que podrá ser?

    Gracias

    Rene Chirivi Hace 2 años 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 […]

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


  • Buen post, una pregunta, hay forma de instalarlo apra que sea transparente?? si yo tenog varios clientes de correo y la verdad es incomodo tener que configurar uno por uno, no se puede crear como un proxy???

    Javier Hace 1 año Responde


  • Ruben , Excelente articulo, necesito asesoría para poder instalar un LoadBalancer en Zimbra , ya que tengo una plataforma multi-servidor y tengo tres MTA que reciben la información interna y externa de los correos de internet , estoy tratando de colocar un HaProxy pero tengo ciertos problemas con la autenticacion de los susarios internos cuando apunto directamente el HA.
    Espero tu respuesta gracias de antemano a la comunidad… si me pueden ayudar

    Darry Castro Hace 1 año Responde


  • Hola! Gran artículo, felicitaciones. Me pregunto si tiene algún conocimiento acerca de la identificación y bloqueo de Directory Harvest Attack en el servidor Zimbra / MailScanner que puede compartir. Estamos teniendo bastantes problemas con él. Gracias.

    Alexandre Junior da Costa Hace 1 año Responde


Queremos tu opinión :)