Вы находитесь на странице: 1из 63

Creando un sistema de correo profesional con Zimbra (1/2): Instalacin

La suite de colaboracin Zimbra nos encanta y ya os hemos contado anteriormente cmo empezamos a usarla,
que tenemos desarrollos para ella, cmo crear certificados SSL con firma SHA256 o cmo gestionar el estado
free/busy o libre/ocupado de la agenda.

Hoy comienzo una serie de posts para explicar cmo realizar una instalacin y configuracin completa de
un sistema de correo electrnico profesional utilizando su edicin Open Source. Una vez finalizados,
tendremos nuestro sistema de correo con Zimbra funcionando y listo para produccin.

Dado que muchos de nosotros ya tenemos un sistema de correo electrnico, la idea es realizar esta instalacin
configurndolo en paralelo y, cuando la demos por terminada, hacer el cambio del DNS pblico para convertir
el nuevo sistema en el principal de produccin.

En este tipo de tutoriales es fcil siempre ir a copiar-pegar los pasos, pero creo que lo mejor es hacer una
primera lectura para entender los pasos y luego ponernos con ello.

Pasos previos
Para la instalacin utilizaremos la ltima versin estable en este momento, que es Zimbra 8.6. Para ello
necesitaremos un servidor con la instalacin de una de las distribuciones soportadas por Zimbra. En nuestro
caso vamos a utilizar la versin 64 bits de la LTS de Ubuntu 14.04 server edition.

En caso de que prefiris cualquiera de las otras distribuciones soportadas, los pasos sern parecidos, pero
tendris que adaptarlos a la distribucin elegida.

Instalacin del servidor

No entra en este tutorial explicar cmo realizar la instalacin de la distribucin elegida, pero nos tenemos que
asegurar de que cumple una serie de requisitos para que posteriormente la instalacin de Zimbra sea correcta.
Aparte de lo siguiente que exponemos, slo indicamos que se instale el servidor SSH durante la instalacin.

Hostname: Tenemos que tener en cuenta el nombre que le queremos dar al servidor, ya que Zimbra lo
tiene muy en cuenta durante su instalacin. Para nuestro ejemplo, durante la instalacin de Ubuntu, le
hemos dado el nombre de la mquina mail y al nombre de dominio irontec.com Tras la
instalacin:

Ejemplo de nuestro /etc/hosts


Shell
root@mail:~# cat /etc/hosts
127.0.0.1 localhost
123.1.2.3 mail.irontec.com m
1 root@mail:~# cat /etc/hosts
2 127.0.0.1 localhost
3 123.1.2.3 mail.irontec.com mail
4
5 # The following lines are desirable for IPv6 capable hosts
6 ::1 localhost ip6-localhost ip6-loopback
7 ff02::1 ip6-allnodes
8 ff02::2 ip6-allrouters

El hostname mail.irontec.com ser el registro MX que tendr nuestro dominio irontec.com en el DNS, de ah la
importancia del mismo.

Lgicamente tendris que cambiar la IP 123.1.2.3 por la IP pblica donde vis a realizar la instalacin de
Zimbra.

Dependencias necesarias por Zimbra

Este paso nos lo podramos saltar e ir directamente a la instalacin de Zimbra, pero durante la instalacin nos
dara un aviso como el siguiente (fijaros en las lneas resaltadas):

Aviso de falta de dependencias


Checking f or prerequisites...
FOUND: NPTL
FOUND: netcat-openbsd-1.1
FOUND: sudo-1.8.9p5-1ubun

1 Checking for prerequisites...


2 FOUND: NPTL
3 FOUND: netcat-openbsd-1.105-7ubuntu1
4 FOUND: sudo-1.8.9p5-1ubuntu1.2
5 FOUND: libidn11-1.28-1ubuntu2
6 FOUND: libpcre3-1:8.31-2ubuntu2.1
7 FOUND: libgmp10-2:5.1.3+dfsg-1ubuntu1
8 FOUND: libexpat1-2.1.0-4ubuntu1.1
9 FOUND: libstdc++6-4.8.4-2ubuntu1~14.04
10 FOUND: libperl5.18-5.18.2-2ubuntu1
11 MISSING: libaio1
12 FOUND: resolvconf-1.69ubuntu1.1
13 FOUND: unzip-6.0-9ubuntu1.5
14
15 Checking for suggested prerequisites...
16 MISSING: pax does not appear to be installed.
17 FOUND: perl-5.18.2
18 MISSING: sysstat does not appear to be installed.
19 MISSING: sqlite3 does not appear to be installed.
20
21 ###WARNING###
22
23 The suggested version of one or more packages is not installed.
24 This could cause problems with the operation of Zimbra.
25
26 Do you wish to continue? [N]

Por lo tanto, para que no nos salte este error, y hagamos una instalacin de la mejor manera posible, lo que
tenemos que hacer es realizar la instalacin previa de las dependencias:

Instalamos las dependencias


root@mail:~# apt-get install libai
Leyendo lista de paquetes... He
[...]
Configurando libaio1:amd64 (0.3

1 root@mail:~# apt-get install libaio1 pax sysstat sqlite3


2 Leyendo lista de paquetes... Hecho
3 [...]
4 Configurando libaio1:amd64 (0.3.109-4) ...
5 Configurando libsensors4:amd64 (1:3.3.4-2ubuntu1) ...
6 Configurando pax (1:20120606-2+deb7u1) ...
7 Configurando sqlite3 (3.8.2-1ubuntu2.1) ...
8 Configurando sysstat (10.2.0-1) ...

Es posible que en otras distribuciones haya dependencias distintas.

Comprobacin DNS

Tal como he explicado anteriormente, vamos a realizar la instalacin de Zimbra en paralelo con el sistema que
tenemos actualmente en produccin, por lo que vamos a tener que engaar a Zimbra para hacerle creer que el
servidor donde estamos realizando la instalacin es el servidor MX principal. Para ello tenemos dos opciones:

Modificacin de hostname: Esto quiere decir que el servidor que est actualmente en produccin y el
nuestro se llamen distinto. El actual podra ser correo.irontec.com y el nuevo mail.irontec.com . Esto
supondra tener que modificar la configuracin de todos los clientes de correo que usamos, lo que no es
muy efectivo.
Utilizacin de otro servidor DNS: Como vamos a utilizar el mismo hostname que el servidor actual en
produccin, cuando zimbra compruebe el DNS se dar cuenta que la IP del servidor no corresponde con
el registro MX principal. Para estos casos lo ideal es tener un DNS de pruebas donde podamos modificar
los registros que queramos sin que afecte a produccin, y modificar el fichero /etc/resolv.conf de
nuestro servidor Zimbra.

Fichero /etc/resolv.conf durante la instalacin


root@mail:# cat /etc/resolv.conf
nameserver 192.168.90.1 # ser
nameserver 127.0.0.1
search irontec.com

1 root@mail:# cat /etc/resolv.conf


2 nameserver 192.168.90.1 # servidor DNS temporal
3 nameserver 127.0.0.1
4 search irontec.com

Nuestro servidor DNS de pruebas es 192.168.90.1.

Ejemplo contra el DNS de Google


Shell
root@mail:~# host mail.irontec.c
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53

1 root@mail:~# host mail.irontec.com 8.8.8.8


2 Using domain server:
3 Name: 8.8.8.8
4 Address: 8.8.8.8#53
5 Aliases:
6
7 mail.irontec.com has address 176.31.102.65
Ejemplo contra el DNS de pruebas modificado para la instalacin
root@mail:~# host mail.irontec.c
Using domain server:
Name: 192.168.90.1
Address: 192.168.90.1#53

1 root@mail:~# host mail.irontec.com 192.168.90.1


2 Using domain server:
3 Name: 192.168.90.1
4 Address: 192.168.90.1#53
5 Aliases:
6
7 mail.irontec.com has address 123.1.2.3

Como se puede ver, un DNS pblico (hemos usado el de Google) nos da la IP del servidor actual en produccin,
mientras que el servidor DNS de pruebas nos ha dado la IP de nuestro servidor donde estamos instalando
nuestro Zimbra.

NOTA: En versiones anteriores de Zimbra se sola hacer la instalacin del DNS en el propio servidor zimbra,
pero desde la inclusin de dnscache ya no es necesario. Podramos seguir haciendo la instalacin del DNS en
local y luego no elegir el paquete dnscache de Zimbra durante la instalacin. Pero, para realizar una
instalacin ms limpia, es mejor utilizar un DNS externo de pruebas que tengamos.

Instalacin de Zimbra 8.6 Open Source


Una vez tenemos el servidor instalado teniendo en cuenta los pasos anteriores, ya podemos ir directo a la
instalacin de Zimbra.
Dado que el instalador genera mucho texto de los pasos que est haciendo, ir aadiendo etiquetas [] para
indicar que el texto sigue, pero que me lo he saltado o que lo pondr posteriormente, ya que voy a realizar una
explicacin acerca del mismo.

Descargar Zimbra

Desde aqu podremos descargar la versin de nuestra distribucin o coger el enlace. Nosotros lo descargamos
en el servidor de la siguiente manera:

Descargamos Zimbra
Shell
root@mail:~# w get https://files.z
--2016-01-18 13:59:55-- https:/
Resolving files.zimbra.com (files
Connecting to f iles.zimbra.com (

root@mail:~# wget https://files.zimbra.com/downloads/8.6.0_GA/zcs-


1 8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz
2 --2016-01-18 13:59:55-- https://files.zimbra.com/downloads/8.6.0_GA/zcs-
3 8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz
4 Resolving files.zimbra.com (files.zimbra.com)... 54.192.0.133
5 Connecting to files.zimbra.com (files.zimbra.com)|54.192.0.133|:443... connected.
6 HTTP request sent, awaiting response... 200 OK
7 Length: 733882340 (700M) [binary/octet-stream]
8 Saving to: zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz
9
1 100%[=========================================================================
0 ==========>] 733.882.340 30,4MB/s in 27s
1
1 2016-01-18 14:00:23 (25,5 MB/s) - zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz saved
[733882340/733882340]

Instalacin de Zimbra

Con las dependencias ya instaladas del paso previo, y descargado el instalador, descomprimimos el fichero e
iniciamos la instalacin:

Primeros pasos de la instalacin


root@mail:~# tar -xzf zcs-8.6.0
root@mail:~# cd zcs-8.6.0_GA_
root@mail:~/zcs-8.6.0_GA_115

1 root@mail:~# tar -xzf zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz


2 root@mail:~# cd zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116
3 root@mail:~/zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116# ./install.sh
4
5 Operations logged to /tmp/install.log.3673
6 Checking for existing installation...
7 zimbra-ldap...NOT FOUND
8 zimbra-logger...NOT FOUND
9 zimbra-mta...NOT FOUND
10 zimbra-dnscache...NOT FOUND
11 zimbra-snmp...NOT FOUND
12 zimbra-store...NOT FOUND
13 zimbra-apache...NOT FOUND
14 zimbra-spell...NOT FOUND
15 zimbra-convertd...NOT FOUND
16 zimbra-memcached...NOT FOUND
17 zimbra-proxy...NOT FOUND
18 zimbra-archiving...NOT FOUND
19 zimbra-core...NOT FOUND
20
21
22 PLEASE READ THIS AGREEMENT CAREFULLY BEFORE USING THE SOFTWARE.
23 ZIMBRA, INC. ("ZIMBRA") WILL ONLY LICENSE THIS SOFTWARE TO YOU IF YOU
24 FIRST ACCEPT THE TERMS OF THIS AGREEMENT. BY DOWNLOADING OR INSTALLING
25 THE SOFTWARE, OR USING THE PRODUCT, YOU ARE CONSENTING TO BE BOUND BY
26 THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS
27 AGREEMENT, THEN DO NOT DOWNLOAD, INSTALL OR USE THE PRODUCT.
28
29 License Terms for the Zimbra Collaboration Suite:
30 http://www.zimbra.com/license/zimbra-public-eula-2-5.html
31
32
33
34 Do you agree with the terms of the software license agreement? [N] Y
35
36
37 Checking for prerequisites...
38 FOUND: NPTL
39 FOUND: netcat-openbsd-1.105-7ubuntu1
40 FOUND: sudo-1.8.9p5-1ubuntu1.2
41 FOUND: libidn11-1.28-1ubuntu2
42 FOUND: libpcre3-1:8.31-2ubuntu2.1
43 FOUND: libgmp10-2:5.1.3+dfsg-1ubuntu1
44 FOUND: libexpat1-2.1.0-4ubuntu1.1
45 FOUND: libstdc++6-4.8.4-2ubuntu1~14.04
46 FOUND: libperl5.18-5.18.2-2ubuntu1
47 FOUND: libaio1-0.3.109-4
48 FOUND: resolvconf-1.69ubuntu1.1
49 FOUND: unzip-6.0-9ubuntu1.5
50
51 Checking for suggested prerequisites...
52 FOUND: pax
53 FOUND: perl-5.18.2
54 FOUND: sysstat
55 FOUND: sqlite3
56 Prerequisite check complete.
57
58 Checking for installable packages
59
60 Found zimbra-core
61 Found zimbra-ldap
62 Found zimbra-logger
63 Found zimbra-mta
64 Found zimbra-dnscache
65 Found zimbra-snmp
66 Found zimbra-store
67 Found zimbra-apache
68 Found zimbra-spell
69 Found zimbra-memcached
70 Found zimbra-proxy
71
72 [...]

Tal como podemos ver en el log previo, hay varias cosas que podemos destacar.

Log de la instalacin: Todo el proceso de instalacin se va a loguear en un fichero de texto que es


/tmp/install.log segudo del PID de ejecucin del instalador. En nuestro ejemplo: Operations logged to
/tmp/install.log.3673
Dependencias encontradas: Dado que os he avisado de cules eran las dependencias a instalar, ahora

en la instalacin ha ido todo bien y no tenemos que cancelar la instalacin.

Seguimos con el proceso de instalacin:

Aviso de los paquetes a instalar


[...]

Select the packages to install

1 [...]
2
3 Select the packages to install
4
5 Install zimbra-ldap [Y]
6
7 Install zimbra-logger [Y]
8
9 Install zimbra-mta [Y]
10
11 Install zimbra-dnscache [Y]
12
13 Install zimbra-snmp [Y]
14
15 Install zimbra-store [Y]
16
17 Install zimbra-apache [Y]
18
19 Install zimbra-spell [Y]
20
21 Install zimbra-memcached [Y]
22
23 Install zimbra-proxy [Y]
24 Checking required space for zimbra-core
25 Checking space for zimbra-store
26 Checking required packages for zimbra-store
27 zimbra-store package check complete.
28
29 Installing:
30 zimbra-core
31 zimbra-ldap
32 zimbra-logger
33 zimbra-mta
34 zimbra-dnscache
35 zimbra-snmp
36 zimbra-store
37 zimbra-apache
38 zimbra-spell
39 zimbra-memcached
40 zimbra-proxy
41
42 The system will be modified. Continue? [N] Y
43
44 Removing /opt/zimbra
45 Removing zimbra crontab entry...done.
46 Cleaning up zimbra init scripts...done.
47 Cleaning up /etc/ld.so.conf...done.
48 Cleaning up /etc/security/limits.conf...done.
49
50 Finished removing Zimbra Collaboration Server.
51
52 Installing packages
53 zimbra-core......zimbra-core_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
54 zimbra-ldap......zimbra-ldap_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
55 zimbra-logger......zimbra-logger_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
56 zimbra-mta......zimbra-mta_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
57 zimbra-dnscache......zimbra-dnscache_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
58 zimbra-snmp......zimbra-snmp_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
59 zimbra-store......zimbra-store_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
60 zimbra-apache......zimbra-apache_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
61 zimbra-spell......zimbra-spell_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
62 zimbra-memcached......zimbra-memcached_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
63 zimbra-proxy......zimbra-proxy_8.6.0.GA.1153.UBUNTU14.64_amd64.deb...done
64 Operations logged to /tmp/zmsetup01182016-171336.log
65 Installing LDAP configuration database...done.
66 Setting defaults...
67
68 [...]

Aceptamos todos los paquetes que nos sugiere que instalemos. Nos avisa que el sistema va a ser modificado y
comienza con la instalacin de los mismos. Hasta que nos aparece lo siguiente:

Tpico error durante la instalacin


[...]

DNS ERROR resolving MX for m


It is suggested that the domain n

1 [...]
2
3 DNS ERROR resolving MX for mail.irontec.com
4 It is suggested that the domain name have an MX record configured in DNS
5 Change domain name? [Yes]
6 Create domain: [mail.irontec.com] irontec.com
7 MX: mail.irontec.com (123.1.2.3)
8
9 Interface: 123.1.2.3
10 Interface: 127.0.0.1
11 Interface: ::1
12 done.
13
14 [...]

Dado el hostname del servidor, el instalador de Zimbra nos intenta configurar como dominio principal dicho
hostname, mientras que lo que tenemos que hacer es modificar el Domain name en la instalacin tal como
podis ver en este apartado anterior para que sea simplemente irontec.com. Realiza la comprobacin DNS
contra nuetstro DNS de pruebas y sigue

Men para modificar la contrasea de admin


[...]

Checking f or port conflicts


Main menu

1 [...]
2
3 Checking for port conflicts
4 Main menu
5
6 1) Common Configuration:
7 2) zimbra-ldap: Enabled
8 3) zimbra-logger: Enabled
9 4) zimbra-mta: Enabled
10 5) zimbra-dnscache: Enabled
11 6) zimbra-snmp: Enabled
12 7) zimbra-store: Enabled
13 +Create Admin User: yes
14 +Admin user to create: admin@irontec.com
15 ******* +Admin Password UNSET
16 +Anti-virus quarantine user: virus-quarantine.26cklotci@irontec.com
17 +Enable automated spam training: yes
18 +Spam training user: spam.2wieouplob@irontec.com
19 +Non-spam(Ham) training user: ham.wblgfqoxzf@irontec.com
20 +SMTP host: mail.irontec.com
21 +Web server HTTP port: 8080
22 +Web server HTTPS port: 8443
23 +Web server mode: https
24 +IMAP server port: 7143
25 +IMAP server SSL port: 7993
26 +POP server port: 7110
27 +POP server SSL port: 7995
28 +Use spell check server: yes
29 +Spell server URL: http://mail.irontec.com:7780/aspell.php
30 +Enable version update checks: TRUE
31 +Enable version update notifications: TRUE
32 +Version update notification email: admin@irontec.com
33 +Version update source email: admin@irontec.com
34 +Install mailstore (service webapp): yes
35 +Install UI (zimbra,zimbraAdmin webapps): yes
36
37 8) zimbra-spell: Enabled
38 9) zimbra-proxy: Enabled
39 10) Default Class of Service Configuration:
40 s) Save config to file
41 x) Expand menu
42 q) Quit
43
44 Address unconfigured (**) items (? - help)
45 [...]

El instalador comprueba si hay conflicto de puertos, y por ltimo nos muestra el men del instalador por si
queremos realizar alguna modificacin de la configuracin por defecto. Nosotros lo nico que vamos a hacer es
configurar la contrasea del usuario admin, para ello primero entramos en el men 7 y posteriormente al 4:

Modificacin de la contrasea de Admin


[...]
Passw ord f or admin@irontec.c
[...]

1 [...]
2 Password for admin@irontec.com (min 6 characters): [JZLSKGwjM] mipassword
3 [...]

Volvemos al men principal escribiendo r y pulsando intro, y posteriormente aplicamos los cambios:

Final de la instalacin
[...]
Main menu

1) Common Conf iguration:

1 [...]
2 Main menu
3
4 1) Common Configuration:
5 2) zimbra-ldap: Enabled
6 3) zimbra-logger: Enabled
7 4) zimbra-mta: Enabled
8 5) zimbra-dnscache: Enabled
9 6) zimbra-snmp: Enabled
10 7) zimbra-store: Enabled
11 8) zimbra-spell: Enabled
12 9) zimbra-proxy: Enabled
13 10) Default Class of Service Configuration:
14 s) Save config to file
15 x) Expand menu
16 q) Quit
17
18 *** CONFIGURATION COMPLETE - press 'a' to apply
19 Select from menu, or press 'a' to apply config (? - help) a
20 Save configuration data to a file? [Yes]
21 Save config in file: [/opt/zimbra/config.27371]
22 The system will be modified - continue? [No] Yes
23 Operations logged to /tmp/zmsetup01182016-171336.log
24 Setting local config values...
25
26 [...]
27
28 Finished installing common zimlets.
29 Restarting mailboxd...done.
30 Creating galsync account for default domain...done.
31
32 You have the option of notifying Zimbra of your installation.
33 This helps us to track the uptake of the Zimbra Collaboration Server.
34 The only information that will be transmitted is:
35 The VERSION of zcs installed (8.6.0_GA_1153_UBUNTU14_64)
36 The ADMIN EMAIL ADDRESS created (admin@irontec.com)
37
38 Notify Zimbra of your installation? [Yes] No
39 Notification skipped
40 Setting up zimbra crontab...done.
41
42
43 Moving /tmp/zmsetup01182016-171336.log to /opt/zimbra/log

La instalacin ha terminado correctamente, vemos que mueve el log de la instalacin a /opt/zimbra/log y a


partir de aqu ya podremos ir a la configuracin de nuestro servidor zimbra desde un navegador web. Para ello,
abrimos en nuestro navegador https://IP:7071 donde IP es la IP del servidor y ah introducimos los credenciales
admin y la contrasea que hemos puesto.

Todava nos faltan muchos pasos para dejar nuestro Zimbra bien configurado, pero con esto ya podemos
empezar a familiarizarnos con l y ver las distintas opciones que tiene, como crear cuentas de correo, listas de
correo, recursos, investigar los logs

Creando un sistema de correo profesional con Zimbra (2/2): Configuracin

Rubn Gmez Olivencia


09/02/2016
Sistemas Linux
1 Comentario

Como ya vimos en el anterior post de esta serie, Creando un sistema de correo profesional con Zimbra, ya
tenemos nuestro Zimbra funcionando, pero con la instalacin bsica no conseguimos que sea tan profesional
como nuestro ttulo pretende que sea :p

Por lo tanto, vamos a realizar una serie de configuraciones, no solo a nivel de Zimbra, que nos ayudarn para
conseguir ste propsito, as que vamos a por ello.

Comprobaciones DNS
Los sistemas de correo electrnico basan mucha de su seguridad en cmo est la configuracin DNS, como por
ejemplo la utilizacin de listas negras (RBL), la resolucin FQDN, si se cuenta con configuracin SPF Por
lo tanto, vamos a hacer que nuestro Zimbra realice estas comprobaciones.

Listas negras (RBL)

Las listas negras es un intento de parar el spam en la jungla que es hoy da internet. Bsicamente su
funcionamiento es el de realizar un listado de IPs que son marcadas como spammers debido a distintos criterios.
Para la configuracin iremos a la consola de administracin de nuestro servidor Zimbra, yendo a travs del
navegador web a la direccin https://[SERVER]:7071 , donde SERVER es la IP o la resolucin DNS de nuestro
servidor

En nuestro apartado de administracin de Zimbra iremos a Configurar Configuracin General MTA y


aqu bajaremos a la seccin Comprobaciones DNS, donde aadiremos las siguientes listas negras por cada una
de las secciones que vemos.

Lista RBL:
o zen.spamhaus.org
o bl.spamcop.net
o psbl.surriel.com
Lista de RHSBL del cliente:
o dbl.spamhaus.org
o multi.surbl.org
Lista de RHSBL del remitente:
o multi.surbl.org

Con esto ya tenemos varias listas configuradas para que la deteccin de emisores de spam sea mejor y haya
mails que sean rechazados automticamente.

Modificacin DNS primario de Zimbra

Como os acordaris, en el primer post utilizamos un servidor temporal de DNS para la instalacin. Dado que es
temporal, tenemos que quitarlo de la configuracin de Zimbra y aadir un DNS primario real. Para comprobar
el DNS primario que usa:
Comprobar el DNS primario que usa Zimbra

zimbra@mail:~$ zmprov gs `zm


# name mail.irontec.com
zimbraDNSMasterIP: 192.168.90

1 zimbra@mail:~$ zmprov gs `zmhostname` zimbraDNSMasterIP

2 # name mail.irontec.com

3 zimbraDNSMasterIP: 192.168.90.1

Por lo tanto, tenemos que modificarlo para que use un servidor real y en produccin. Vamos utilizar el de
Google:

Quitamos el DNS de pruebas y ponemos uno real

zimbra@mail:~$ zmprov ms `zm

zimbra@mail:~$ zmprov ms `zm

1 zimbra@mail:~$ zmprov ms `zmhostname` -zimbraDNSMasterIP 192.168.90.1

3 zimbra@mail:~$ zmprov ms `zmhostname` +zimbraDNSMasterIP 8.8.8.8

5 zimbra@mail:~$ zmprov gs `zmhostname` zimbraDNSMasterIP

6 # name mail.irontec.com

7 zimbraDNSMasterIP: 8.8.8.8
SPF
Para la comunicacin entre servidores de correo es muy habitual la utilizacin de SPF. Este sistema lo que hace
es tener en cuenta los registros DNS de nuestro dominio para asegurar que el emisor de un correo
electrnico est autorizado para ello.

Es decir, si alguien intenta mandar un mail utilizando nuestro dominio irontec.com el servidor de correo
receptor debera realizar una comprobacin de si el emisor est permitido para poder mandar mails en nuestro
nombre. En caso de que el emisor no est autorizado, el servidor receptor debera rechazar el mail ya que no
est autorizado para poder mandar mails en nuestro nombre.

Para realizar esta configuracin deberemos crear un registro nuevo de tipo TXT en nuestro servidor DNS.
Normalmente tendremos el servidor DNS en un proveedor que nos facilitar esta tarea mediante un panel de
control.

El formato del registro TXT debe ser: v=spf1 a mx a:www2.irontec.com ip4:123.4.5.6 -all

La explicacin del formato es sencilla, primero indicamos v=spf1 para indicar que se trata de un registro SPF, y
posteriormente quines estn autorizados a poder mandar mails en el que est configurado. En el caso de este
ejemplo:

v=spf1 : Indica que el registro TXT es para la comprobacin SPF


a : indica que el servidor con registro A est autorizado
mx : indica que el servidor con registro MX de nuestro dominio irontec.com tambin est autorizado
a:www2.irontec.com : El servidor cuya IP coincide con el registro A del dominio www2.irontec.com est
autorizado
ip4:123.4.5.6 : El servidor con IP 123.4.5.6 est autorizado
-all : Tal como veis en la siguiente tabla, con esto indicamos que el resto de servidores no estn autorizados
salvo que coincidan con las reglas anteriores

Parmetro Resultado Significado

+all pass Permite todo los mails, como si no hubiese nada configurado (No recomendable)

Todos los servidores que no coincidan con las reglas anteriores no estn permitidos para mandar
-all fail
mails.

~all softfail Permite mandar mails, pero si algo va mal ser marcado como softfail.
DKIM
El mtodo DKIM (DomainKeys Identified Mail) sirve para asociar el nombre del dominio y el email,
permitiendo a una persona asumir la responsabilidad de un email.

Bsicamente el sistema DKIM lo que hace es que el servidor emisor firma los mails de salida, y el servidor
receptor del correo realiza una comprobacin DNS para asegurar que el mail firmado es vlido contra la
clave pblica aadida como registro DNS.

Para ello, desde la consola de nuestro servidor Zimbra ejecutaremos, como usuario zimbra, el siguiente
comando:

Generamos la clave DKIM

root@mail:~# su - zimbra

zimbra@mail:~$ /opt/zimbra/libe
DKIM Data added to LDAP for do

root@mail:~# su - zimbra
1

2
zimbra@mail:~$ /opt/zimbra/libexec/zmdkimkeyutil -a -d irontec.com
3
DKIM Data added to LDAP for domain irontec.com with selector 0F12345-C5DB-35E1-134A-7EEE12C2BA47
4
Public signature to enter into DNS:
5
0F12345-C5DB-35E1-134A-7EEE12C2BA47._domainkey IN TXT ( "v=DKIM1; k=rsa; "
6
"p=M1234567890GC123456789Ib3DQEBAQU123456789BiQKBgQCyyhoer123456789ts4/oj064WpCi+wPo0g
7vWwhS12345678927yAbHy9+V3gt123456789jOBz123456789m0DE1jheVY3KqB4u/OGU123456789d4tid123456789YeJ
KQhSbLFjZe/IZq123456789XDNLLEQIDAQAB" ) ; ----- DKIM key 0F12345-C5DB-35E1-134A-7EEE12C2BA47 for
irontec.com

Ya hemos generado la clave, y lo que nos ha sacado como resultado del comando es la clave pblica que ahora
tendremos que aadir en nuestro DNS. Si os fijis en la salida del comando, nos pone Public signature to
enter into DNS, es decir, tenemos que crear un registro de tipo TXT como, como dominio que sea 0F12345-
C5DB-35E1-134A-7EEE12C2BA47._domainkey.irontec.com y que el valor que contenga sea lo que nos ha
sacado el comando:

valor del registro TXT

v=DKIM1; k=rsa; p=M123456789

v=DKIM1; k=rsa;
p=M1234567890GC123456789Ib3DQEBAQU123456789BiQKBgQCyyhoer123456789ts4/oj064WpCi+wPo0gvWwhS123
1
45678927yAbHy9+V3gt123456789jOBz123456789m0DE1jheVY3KqB4u/OGU123456789d4tid123456789YeJKQhSbLFjZe
/IZq123456789XDNLLEQIDAQAB

Limitar tamao del LDAP interno


Zimbra hace uso de un servidor LDAP interno para el almacenamiento de informacin, pero que por defecto
est configurado para que su almacenamiento llegue hasta los 80GB. Vamos a limitarlo para que no sea tanto,
parando primero zimbra:

Modificamos el tamao del LDAP

root@mail:# su - zimbra

zimbra@mail:~$ zmcontrol stop


Host mail.irontec.com

1 root@mail:# su - zimbra

3 zimbra@mail:~$ zmcontrol stop

4 Host mail.irontec.com

5 Stopping vmware-ha...skipped.

6 [...]

7
8 zimbra@mail:~$ zmlocalconfig -e ldap_db_maxsize=67108864

10 zimbra@mail:~$ zmlocalconfig -e ldap_accesslog_maxsize=536870912

11

12 zimbra@mail:~$ zmcontrol start

13 Host mail.irontec.com

14 Starting ldap...Done.

15 [...]

Certificado SSL
No voy a profundizar en este apartado, ya que en este blog ya hemos hablado de qu son los certificados SSL
realmente seguros (SHA-2) y cmo crearlos para Zimbra. Por lo tanto utilizo ste apartado a modo de
recordatorio para que no os olvidis de generar vuestro certificado e instalarlo en Zimbra.

Aparte de la generacin del certificado, para que nuestra instalacin tenga la mayor puntuacin de securizacin
en el SSL Labs test tenemos que hacer una pequea modificacin en nuestra instalacin de Zimbra.
Ejecutaremos:

Creamos una nueva clave DH de 2048 bits

root@mail:~# cd /opt/zimbra/con

root@mail:/opt/zimbra/conf # ope
Generating DH parameters, 204

1 root@mail:~# cd /opt/zimbra/conf

3 root@mail:/opt/zimbra/conf# openssl dhparam -out dhparams.pem 2048

4 Generating DH parameters, 2048 bit long safe prime, generator 2

5 This is going to take a long time

6 [...]

8 root@mail:/opt/zimbra/conf# chown zimbra:zimbra dhparams.pem


Ahora tenemos que editar los
ficheros /opt/zimbra/conf/nginx/templates/nginx.conf.web.https.default.template
y /opt/zimbra/conf/nginx/templates/nginx.conf.web.https.template (tendremos que modificar los permisos
de escritura), y nos aseguramos que aparezcan las siguientes 4 nuevas lneas:

Aadimos a los ficheros la nueva configuracin

server
{
[...]

1 server

2 {

3 [...]

5 ssl_dhparam /opt/zimbra/conf/dhparams.pem;

6 add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

7 ssl_session_cache shared:SSL:50m;

8 ssl_session_timeout 5m;

9 include ${core.includes}/${core.cprefix}.web.https.mode-${web.mailmode};

10

11 [...]

Y por ltimo, realizaremos la modificacin de los tipos de cifrado que nuestro servidor utilizar para
comunicarse a travs del navegador web:

Modificamos los cifrados

zimbra@mail:~$ zmprov mcf zim

zimbra@mail:~$ zmproxyctl res

1 zimbra@mail:~$ zmprov mcf zimbraReverseProxySSLCiphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-


AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-
2
SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-
3 SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-
SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-
4 DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-

5 SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4'

zimbra@mail:~$ zmproxyctl restart

Stopping nginx...done.

Starting nginx...done.

Si ahora comprobamos nuestro dominio, ya tendremos la mxima puntuacin:


Configuraciones extra
En este apartado vamos a explicar ciertas configuraciones extra, que aunque no son necesarias, probablemente
en algn momento lleguemos a realizarlas, y que siempre viene bien tenerlas en cuenta.

Tamao de adjuntos

Zimbra por defecto limita el tamao de los adjuntos a 10000KB, que en algunos casos puede ser un poco
limitado. Si queremos modificar este tamao deberemos ir a Configurar Configuracin General MTA y
modificar el apartado Tamao mximo del mensaje. Al modificar este tamao, tambin deberemos
modificar el de Tamao mximo de un archivo cargado desde el escritorio cuya directiva se encuentra
en Configurar Configuracin General Informacin General

Clase de servicio

Las clase de servicio, o COS a partir de ahora, es una manera sencilla de realizar la configuracin de
caractersticas a las cuentas de forma sencilla. Como ejemplo, si queremos limitar a varias cuentas para que el
tamao de su buzn sea de 1GB (en lugar de ilimitado), podemos crear un COS nuevo llamado limitado y en el
apartado avanzado modificar la opcin espacio de almacenamiento disponible para la cuenta (MB) y
limitarlo a 1024.

Podremos editar las cuentas y modificar su Configuracin de cuenta y lo dejaramos as:

Por supuesto, la limitacin del tamao del buzn slo es una muestra de todo lo que se puede realizar. Podemos
limitar para que no haya acceso POP, que la cuenta no pueda tener maletn, el acceso a ciertos zimlets

Conclusin
Tras estos pasos ya podemos decir que tenemos un sistema de correo profesional utilizando Zimbra, que
puede ser puesto en produccin y utilizado por nuestros usuarios. Hay que tener en cuenta que existen muchas
ms posibilidades de configuracin, y que stas deberan ser las mnimas a tener en cuenta. Iremos actualizando
este post con configuraciones y mejoras extra cada cierto tiempo.

Crear certificados SSL con firma SHA256 en Zimbra

El otro da hablbamos sobre la importancia de utilizar un hash en la firma de certificados de al menos 256bits.
Hoy veremos cmo implementarlo en Zimbra.

Zimbra ha mejorado la seguridad de los CSR cambiado el comportamiento por defecto a partir de la versin 8.6.
Solo es necesario realizar esta tarea si la versin de Zimbra es inferior a 8.6.

Es necesario modificar el script que genera las solicitudes de certificado:


/opt/zimbra/bin/zmcertmgr

Y aadir a la librera OpenSSL la directiva -sha256 durante la generacin del certificado:

Antes (SHA-1):
${openssl} req -new -nodes -ou

1 ${openssl} req -new -nodes -out ${current_csr} -keyout ${current_key}

Ahora (SHA-2):

${openssl} req -sha256 -new -n

1 ${openssl} req -sha256 -new -nodes -out ${current_csr} -keyout ${current_key}

Una vez guardes los cambios, todos las nuevas Solicitudes de Firma de Certificado (CSR) se generarn
firmadas con SHA256.

Si quieres validar si todo ha ido bien, puedes consultar la herramienta online de verificacin de CSR de
Symantec.

Otra opcin es utilizar el interfaz grfico para hacerlo, y escoger manualmente la opcin SHA256

Zimbra Admin -> Configurar -> Certificados -> Instalar Certificados

Crear CSR desde Zimbra con SHA256

A partir de la versin 8.6 de Zimbra la opcin por defecto en la interfaz web tambin es SHA256.

Nota: es importante que los certificados intermedios tambin estn firmados con SHA256 o superior.

Desde Irontec recomendamos instalar o actualizar versiones anteriores a Zimbra 8.6 ya que solventa y mejora
varios problemas de seguridad como:

Heartbleed bug
Poodle SSLv3
FREAK Attack

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

En este post veremos cmo realizar la instalacin del sistema de seguridad para servidores de correo
electrnico MailScanner. MailScanner nos va a ayudar a protegernos contra spam, virus, phising y malware
dado que va a analizar cada correo electrnico 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 especficas para cada uno de los anlisis que realiza sobre los mails.
Por ejemplo, Spamassassin para la deteccin del spam, ClamAV para los virus
Este post pretende ser la continuacin 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 instalacin 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.

Qu hace MailScanner?
Tal como se suele decir, una imagen vale ms que mil palabras, as que vamos con ella:

Workflow de MailScanner

He querido dejar en grande esta imagen dada su importancia, ya que es la mejor manera de ver cmo funciona y

qu hace MailScanner. Es tan explicativa que creo que es mejor no decir ms

Instalacin de MailScanner
Tal como hemos puesto en la introduccin, MailScanner hace uso de otras herramientas muy conocidas, por lo
que ser necesario que estn instaladas, pero el instalador nos facilitar esta tarea.

Descargar MailScanner

Desde la pgina de descargas de Mailscanner podemos elegir el paquete para la distribucin de nuestro
servidor. Como recordaris, el servidor donde instalamos Zimbra es una Ubuntu 14.04 LTS, por lo que
elegimos el enlace Debian / Ubuntu:

Descarga y descompresin de Mailscanner

Shell

root@mail:~# w get https://s3.am


--2016-01-19 11:33:14-- https:/
Resolving s3.amazonaw s.com
Connecting to s3.amazonaw s.c

1 root@mail:~# wget https://s3.amazonaws.com/mailscanner/release/v4/deb/MailScanner-4.85.2-3.deb.tar.gz

2 --2016-01-19 11:33:14-- https://s3.amazonaws.com/mailscanner/release/v4/deb/MailScanner-4.85.2-3.deb.tar.gz


3 Resolving s3.amazonaws.com (s3.amazonaws.com)... 54.231.2.200

4 Connecting to s3.amazonaws.com (s3.amazonaws.com)|54.231.2.200|:443... connected.

5 HTTP request sent, awaiting response... 200 OK

6 Length: 826212 (807K) [application/x-gzip]

7 Saving to: MailScanner-4.85.2-3.deb.tar.gz

9 100%[======================================================================>]
826.212 702KB/s in 1,1s
10

11
2016-01-19 11:33:15 (702 KB/s) - MailScanner-4.85.2-3.deb.tar.gz saved [826212/826212]
12

13
root@mail:~# tar -xzf MailScanner-4.85.2-3.deb.tar.gz
14
root@mail:~# cd MailScanner-4.85.2-3
15
root@mail:~/MailScanner-4.85.2-3# ls
16
ChangeLog COPYING install.sh mailscanner-4.85.2-3-noarch.deb README UPGRADE

Como podeis ver, una vez descomprimido el fichero descargado, tenemos el tpico fichero README (al que no

est de ms echarle un ojo ), un paquete .deb y el instalador install.sh

Instalacin de MailScanner

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

Comenzamos la instalacin

root@mail:~/MailScanner-4.85.2

MailScanner Installation f or Deb

1 root@mail:~/MailScanner-4.85.2-3# ./install.sh

3 MailScanner Installation for Debian Based Systems


4

6 This will INSTALL or UPGRADE the required software for MailScanner on Debian based systems

7 via the Apt package manager. Supported distributions are Debian 6,7 and associated variants

8 such as Ubuntu. Internet connectivity is required for this installation script to execute.

10

11

12 You may press CTRL + C at any time to abort the installation. Note that you may see

13 some errors during the perl module installation. You may safely ignore errors regarding

14 failed tests for optional packages.

15

16 When you are ready to continue, press return ...

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

NO queremos insalar ningn MTA

Do you w ant to install a Mail Tra

I can install an MTA via the apt p


this later. If you plan on using an

1 Do you want to install a Mail Transfer Agent (MTA)?

3 I can install an MTA via the apt package manager to save you the trouble of having to do

4 this later. If you plan on using an MTA that is not listed below, you will have install

5 it manually yourself if you have not already done so.

7 1 - sendmail
8 2 - postfix

9 3 - exim

10 N - Do not install

11

12 Recommended: 1 (sendmail)

13

14 Install an MTA? [1] : N

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

Instalamos Spamassassin

Do you w ant to install or update

This package is recommended u

1 Do you want to install or update Spamassassin?

3 This package is recommended unless you have your own spam detection solution.

5 Recommended: Y (yes)

7 Install or update Spamassassin? [n/Y] : Y

Confirmamos que queremos instalar Spamassassin, que va a ser el encargado de realizar la deteccin de spam,
dndole a los mails una puntuacin segn las reglas heursticas de las que dispone.

Instalamos ClamAV

Do you w ant to install or update

This package is recommended u


Note that you may use more tha
1 Do you want to install or update Clam AV during this installation process?

3 This package is recommended unless you plan on using a different virus scanner.

4 Note that you may use more than one virus scanner at once with MailScanner.

6 Even if you already have Clam AV installed you should select this option so I

7 will know to check the clamav-wrapper and make corrections if required.

9 Recommended: Y (yes)

10

11 Install or update Clam AV? [n/Y] : Y

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

Instalamos las dependencias de Perl

Do you w ant to install missing p

I w ill attempt to install Perl modu


installation process. Missing mo

1 Do you want to install missing perl modules via CPAN?

3 I will attempt to install Perl modules via apt, but some may not be unavailable during the

4 installation process. Missing modules will likely cause MailScanner to malfunction.

6 Recommended: Y (yes)

8 Install missing Perl modules via CPAN? [n/Y] : Y

Dado que MailScanner est escrito en el lenguaje Perl, se necesitan varias dependencias. Por defecto, se
intentar realizar la instalacin a travs del sistema de paquetes apt, pero en caso de no tenerlas, las instalar a
travs del sistema CPAN.
NO queremos ignorar las dependencias

Do you w ant to ignore MailScan

This w ill force install the MailSca


dependencies. It is highly recom

1 Do you want to ignore MailScanner dependencies?

3 This will force install the MailScanner .deb package regardless of missing

4 dependencies. It is highly recommended that you DO NOT do this unless you

5 are debugging.

7 Recommended: N (no)

9 Ignore MailScanner dependencies (nodeps)? [y/N] : N

Confirmamos que NO queremos ignorar las dependencias. Tras este paso, comenzar la instalacin como tal:

Log de la instalacin

Installation results are being log

[...]

1 Installation results are being logged to mailscanner-install.log

3 [...]

5 Installing the MailScanner .deb package ...

6 Seleccionando el paquete mailscanner previamente no seleccionado.

7 (Leyendo la base de datos ... 110549 ficheros o directorios instalados actualmente.)


8 Preparing to unpack .../mailscanner-4.85.2-3-noarch.deb ...

9 Unpacking mailscanner (4.85.2-3) ...

10 Configurando mailscanner (4.85.2-3) ...

11 Adding system startup for /etc/init.d/mailscanner ...

12 /etc/rc0.d/K20mailscanner -> ../init.d/mailscanner

13 /etc/rc1.d/K20mailscanner -> ../init.d/mailscanner

14 /etc/rc6.d/K20mailscanner -> ../init.d/mailscanner

15 /etc/rc2.d/S20mailscanner -> ../init.d/mailscanner

16 /etc/rc3.d/S20mailscanner -> ../init.d/mailscanner

17 /etc/rc4.d/S20mailscanner -> ../init.d/mailscanner

18 /etc/rc5.d/S20mailscanner -> ../init.d/mailscanner

19 Processing triggers for man-db (2.6.7.1-1ubuntu1) ...

20 Processing triggers for ureadahead (0.100.0-16) ...

21

22 ----------------------------------------------------------

23 Installation Complete

24

25 See http://www.mailscanner.info for more information and

26 support via the MailScanner mailing list.

Cuando la instalacin 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 abrs el fichero tras la instalacin podris ver ms
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 libreras y dependencias Perl por CPAN
Aade los scripts de arranque/parada al runlevel

Integracin 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 ms especfico, 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 anlisis realizados, en caso de no ser rechazados, los inyecta en la cola de
salida para que Zimbra los entregue. Podis volver a mirar la imagen del principio del post para recordar cmo
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 configuracin.

Vamos a Configurar Conguracin General Archivos adjuntos y desmarcamos la opcin Enviar


notificacin de extensin bloqueada al destinatario.
Tenemos que editar el fichero /opt/zimbra/conf/postfix_header_checks.in aadiendo cierta informacin, pero
hay que darle permisos al fichero. Desde consola sera, siendo root:

Modificamos el fichero /opt/zimbra/conf/postfix_header_checks.in

root@mail:~# chmod 666 /opt/zi

root@mail:~# echo "/^Received:

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

3 root@mail:~# echo "/^Received:/ HOLD" >> /opt/zimbra/conf/postfix_header_checks.in

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

7 root@mail:~# /opt/zimbra/postfix/sbin/postconf -e header_checks=pcre:/opt/zimbra/conf/postfix_header_checks

Tambin tenemos que modificar el fichero /opt/zimbra/postfix/conf/master.cf.in y la lnea donde se


especifica qmgr quede tal que:

Modificamos la lnea qmgr para que quede

qmgr fifo n - n 30
1 qmgr fifo n - n 300 1 qmgr

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

Reiniciamos zimbra

root@mail:~# su - zimbra
zimbra@mail:~$ zmcontrol resta
Host mail.irontec.com
Stopping vmw are-ha...skip

1 root@mail:~# su - zimbra

2 zimbra@mail:~$ zmcontrol restart

3 Host mail.irontec.com

4 Stopping vmware-ha...skipped.

5 /opt/zimbra/bin/zmhactl missing or not executable.

6 Stopping zmconfigd...Done.

7 Stopping zimlet webapp...Done.

8 Stopping zimbraAdmin webapp...Done.

9 Stopping zimbra webapp...Done.

10 Stopping service webapp...Done.

11 Stopping stats...Done.

12 Stopping mta...Done.

13 Stopping spell...Done.

14 Stopping snmp...Done.

15 Stopping cbpolicyd...Done.

16 Stopping archiving...Done.

17 Stopping opendkim...Done.

18 Stopping amavis...Done.

19 Stopping antivirus...Done.

20 Stopping antispam...Done.
21 Stopping proxy...Done.

22 Stopping memcached...Done.

23 Stopping mailbox...Done.

24 Stopping logger...Done.

25 Stopping dnscache...Done.

26 Stopping ldap...Done.

27 Host mail.irontec.com

28 Starting ldap...Done.

29 Starting zmconfigd...Done.

30 Starting dnscache...Done.

31 Starting logger...Done.

32 Starting mailbox...Done.

33 Starting memcached...Done.

34 Starting proxy...Done.

35 Starting amavis...Done.

36 Starting antispam...Done.

37 Starting antivirus...Done.

38 Starting opendkim...Done.

39 Starting snmp...Done.

40 Starting spell...Done.

41 Starting mta...Done.

42 Starting stats...Done.

43 Starting service webapp...Done.

44 Starting zimbra webapp...Done.

45 Starting zimbraAdmin webapp...Done.

46 Starting zimlet webapp...Done.


Si ahora intentamos mandar un mail desde el interfaz web (por ejemplo, desde la cuenta admin@irontec.com a
ruben@irontec.com) deberamos ver lo siguiente en el log /var/log/mail.log Fijaros en la lnea destacada cmo
indica hold: header Received.

Log de envo de un mail

Jan 19 15:34:47 mail postfix/sm


Jan 19 15:34:47 mail postfix/sm
Jan 19 15:34:47 mail postfix/sm
Jan 19 15:34:47 mail postfix/cle

Jan 19 15:34:47 mail postfix/smtpd[24125]: connect from mail.irontec.com[123.1.2.3]

Jan 19 15:34:47 mail postfix/smtpd[24125]: NOQUEUE: filter: RCPT from mail.irontec.com[123.1.2.3]:


1 <admin@irontec.com>: Sender address triggers FILTER smtp-amavis:[127.0.0.1]:10026; from=<admin@irontec.com>
to=<ruben@irontec.com> proto=ESMTP helo=<mail.irontec.com>
2
Jan 19 15:34:47 mail postfix/smtpd[24125]: 44BC1261C9B: client=mail.irontec.com[123.1.2.3]
3
Jan 19 15:34:47 mail postfix/cleanup[24129]: 44BC1261C9B: hold: header Received: from mail.irontec.com
4 (mail.irontec.com [123.1.2.3])??by mail.irontec.com (Postfix) with ESMTP id 44BC1261C9B??for
<ruben@irontec.com>; Tue, 19 Jan 2016 15:34:47 +0100 (CET) from mail.irontec.com[123.1.2.3];
5
from=<admin@irontec.com> to=<ruben@irontec.com> proto=ESMTP helo=<mail.irontec.com>
6 Jan 19 15:34:47 mail postfix/cleanup[24129]: 44BC1261C9B: message-
id=<2057556805.5.1453214087168.JavaMail.zimbra@irontec.com>

Jan 19 15:34:47 mail postfix/smtpd[24125]: disconnect from mail.irontec.com[123.1.2.3]

Ya hemos conseguido lo que queramos, 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, cogindolos
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 extensin del fichero de configuracin de MailScanner, an
a pesar de venir bien documentado, es buena idea tener abierta en otra pestaa la documentacin de
MailScanner.

Toda la configuracin de MailScanner se realiza en el directorio /etc/MailScanner/ y la gran mayora de la


configuracin en el fichero /etc/MailScanner/MailScanner.conf . Si lo abrs, veris que es muy extenso, pero
en su mayora son comentarios explicativos acerca de cada una de las configuraciones.
Dado que la configuracin por defecto de MailScanner.conf est bastante bien, pero tambin es muy
extensa, os dejamos las modificaciones que realizamos en el fichero para tener un sistema base que funcione
con Zimbra:

Reglas modificadas en /etc/MailScanner/MailScanner.conf

%org-name% = Irontec
%org-long-name% = Irontec S.L
%w eb-site% = w w w .irontec.co
%report-dir% = /etc/MailScanne

1 %org-name% = Irontec

3 %org-long-name% = Irontec S.L.

5 %web-site% = www.irontec.com

7 %report-dir% = /etc/MailScanner/reports/es

9 Max Children = 1

10 Run As User = postfix

11 Run As Group = postfix

12 Incoming Queue Dir = /opt/zimbra/data/postfix/spool/hold

13 Outgoing Queue Dir = /opt/zimbra/data/postfix/spool/incoming

14 MTA = postfix

15 Incoming Work Group = clamav

16 Incoming Work Permissions = 0666

17 Quarantine Permissions = 0666

18 Maximum Archive Depth = 3

19 Virus Scanners = clamd

20 Allow Password-Protected Archives = yes

21 ClamAVmodule Maximum Recursion Level = 2

22 Clamd Lock File = /var/run/clamav/clamd.pid


23 Quarantine Whole Message = yes

24 Always Include SpamAssassin Report = yes

25 Sign Clean Messages = no

26 Mark Unscanned Messages = no

27 Deliver Cleaned Messages = no

28 Notify Senders = no

29 Notices To = admin@irontec.com

30 Local Postmaster = postmaster@irontec.com

31 Spam List = spamhaus-ZEN spamcop.net

32 Required SpamAssassin Score = 4

33 High SpamAssassin Score = 8

34 SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin

35 SpamAssassin Install Prefix = /var/spool/MailScanner/spamassassin

Nota: De estas modificaciones, ms adelante cambiaremos Max Children ponindolo a 10, pero durante la
fase de pruebas es mejor tener slo un hijo para ver mejor los logs.

Debido a la funcionalidad apparmor de Ubuntu, hay que hacer una modificacin para evitar el siguiente error
que nos puede aparecer ms adelante:

Error debido al clamd y apparmor

Jan 20 11:30:50 mail MailScanne

Jan 20 11:30:50 mail MailScanner[18516]: Clamd::ERROR:: UNKNOWN CLAMD RETURN ./lstat() failed: Permission
1
denied. ERROR :: /var/spool/MailScanner/incoming/18516

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

Aadimos al fichero /etc/apparmor.d/local/usr.sbin.clamd


/var/spool/MailScanner/** rw ,
/var/spool/MailScanner/incoming

1 /var/spool/MailScanner/** rw,

2 /var/spool/MailScanner/incoming/** rw,

Y tendremos que hacer un restart de la configuracin de dicho servicio:

Reiniciamos apparmor

root@mail:~# service apparmor


* Reloading AppArmor profiles
Skipping profile in /etc/apparmor
...done.

1 root@mail:~# service apparmor restart

2 * Reloading AppArmor profiles

3 Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd

4 ...done.

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

Modificar el fichero /etc/default/mailscanner

run_mailscanner=1

1 run_mailscanner=1

Arrancamos el servicio

Arrancamos ClamAV y MailScanner

root@mail:/etc/MailScanner# /et
* Starting ClamAV daemon clam
...done.
1 root@mail:/etc/MailScanner# /etc/init.d/clamav-daemon start

2 * Starting ClamAV daemon clamd

3 ...done.

5 root@mail:~# /etc/init.d/mailscanner start

Y en el log /var/log/mail.log deberais ver algo parecido a lo siguiente:

Log del arranque de MailScanner

Jan 20 12:59:24 mail MailScanne


Jan 20 12:59:24 mail MailScanne
Jan 20 12:59:24 mail MailScanne
Jan 20 12:59:24 mail MailScanne

1 Jan 20 12:59:24 mail MailScanner[13669]: MailScanner E-Mail Virus Scanner version 4.85.2 starting...

2 Jan 20 12:59:24 mail MailScanner[13669]: Reading configuration file /etc/MailScanner/MailScanner.conf

3 Jan 20 12:59:24 mail MailScanner[13669]: Reading configuration file /etc/MailScanner/conf.d/README

4 Jan 20 12:59:24 mail MailScanner[13669]: Read 868 hostnames from the phishing whitelist

5 Jan 20 12:59:24 mail MailScanner[13669]: Read 5807 hostnames from the phishing blacklists

6 Jan 20 12:59:25 mail MailScanner[13669]: Using SpamAssassin results cache

7 Jan 20 12:59:25 mail MailScanner[13669]: Connected to SpamAssassin cache database

8 Jan 20 12:59:25 mail MailScanner[13669]: Expired 14 records from the SpamAssassin cache

9 Jan 20 12:59:26 mail MailScanner[13669]: Connected to Processing Attempts Database

10 Jan 20 12:59:26 mail MailScanner[13669]: Found 0 messages in the Processing Attempts Database

11 Jan 20 12:59:26 mail MailScanner[13669]: Using locktype = flock

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

Logs de anlisis de un correo

Jan 20 13:00:12 mail postfix/sm


Jan 20 13:00:12 mail postfix/sm
Jan 20 13:00:12 mail postfix/sm
Jan 20 13:00:12 mail postfix/cle
1 Jan 20 13:00:12 mail postfix/smtpd[14603]: connect from mail.irontec.com[123.1.2.3]

2 Jan 20 13:00:12 mail postfix/smtpd[14603]: NOQUEUE: filter: RCPT from mail.irontec.com[123.1.2.3]:


<admin@irontec.com>: Sender address triggers FILTER smtp-amavis:[127.0.0.1]:10026; from=<admin@irontec.com>
3
to=<ruben@irontec.com> proto=ESMTP helo=<mail.irontec.com>
4
Jan 20 13:00:12 mail postfix/smtpd[14603]: 210F0261C9D: client=mail.irontec.com[123.1.2.3]
5
Jan 20 13:00:12 mail postfix/cleanup[14606]: 210F0261C9D: hold: header Received: from mail.irontec.com
6 (mail.irontec.com [123.1.2.3])??by mail.irontec.com (Postfix) with ESMTP id 210F0261C9D??for
<ruben@irontec.com>; Wed, 20 Jan 2016 13:00:12 +0100 (CET) from mail.irontec.com[123.1.2.3];
7 from=<admin@irontec.com> to=<ruben@irontec.com> proto=ESMTP helo=<mail.irontec.com>

8 Jan 20 13:00:12 mail postfix/cleanup[14606]: 210F0261C9D: message-


id=<1454317676.81.1453291212065.JavaMail.zimbra@irontec.com>
9
Jan 20 13:00:12 mail postfix/smtpd[14603]: disconnect from mail.irontec.com[123.1.2.3]
10

11

12
Jan 20 13:00:14 mail MailScanner[13669]: New Batch: Scanning 1 messages, 1863 bytes
13
Jan 20 13:00:14 mail MailScanner[13669]: Virus and Content Scanning: Starting
14
Jan 20 13:00:15 mail MailScanner[13669]: Requeue: 210F0261C9D.AFE5C to CDCFE261CA1
15
Jan 20 13:00:15 mail MailScanner[13669]: Uninfected: Delivered 1 messages
16
Jan 20 13:00:15 mail MailScanner[13669]: Deleted 1 messages from processing-database
17

18

19
Jan 20 13:00:15 mail postfix/qmgr[29083]: CDCFE261CA1: from=<admin@irontec.com>, size=1124, nrcpt=1 (queue
20
active)
21
Jan 20 13:00:15 mail postfix/dkimmilter/smtpd[14616]: connect from localhost[127.0.0.1]
22
Jan 20 13:00:15 mail postfix/dkimmilter/smtpd[14616]: 537AA261C9D: client=localhost[127.0.0.1]
23
Jan 20 13:00:15 mail postfix/smtp[14613]: CDCFE261CA1: to=<ruben@irontec.com>,
24 relay=127.0.0.1[127.0.0.1]:10026, delay=3.3, delays=3.1/0.01/0/0.14, 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 537AA261C9D)
25
Jan 20 13:00:15 mail postfix/cleanup[14606]: 537AA261C9D: hold: header Received: from localhost (localhost
26 [127.0.0.1])??by mail.irontec.com (Postfix) with ESMTP id 537AA261C9D??for <ruben@irontec.com>; Wed, 20 Jan
2016 13:00:15 +0100 (CET) from localhost[127.0.0.1]; from=<admin@irontec.com> to=<ruben@irontec.com>
27
proto=ESMTP helo=<localhost>
28
Jan 20 13:00:15 mail postfix/cleanup[14606]: 537AA261C9D: message-
29 id=<1454317676.81.1453291212065.JavaMail.zimbra@irontec.com>

30 Jan 20 13:00:15 mail postfix/dkimmilter/smtpd[14616]: disconnect from localhost[127.0.0.1]

31 Jan 20 13:00:15 mail postfix/qmgr[29083]: CDCFE261CA1: removed

32

33

34 Jan 20 13:00:21 mail MailScanner[13669]: New Batch: Scanning 1 messages, 3036 bytes

35 Jan 20 13:00:21 mail MailScanner[13669]: Virus and Content Scanning: Starting

36 Jan 20 13:00:21 mail MailScanner[13669]: Requeue: 537AA261C9D.A7668 to 1F000261CA4

37 Jan 20 13:00:21 mail MailScanner[13669]: Uninfected: Delivered 1 messages

38 Jan 20 13:00:21 mail MailScanner[13669]: Deleted 1 messages from processing-database

39

40

41 Jan 20 13:00:21 mail postfix/qmgr[29083]: 1F000261CA4: from=<admin@irontec.com>, size=2359, nrcpt=1 (queue


active)
42
Jan 20 13:00:22 mail postfix/amavisd/smtpd[14625]: connect from localhost[127.0.0.1]

Jan 20 13:00:22 mail postfix/amavisd/smtpd[14625]: 3D621261C9D: client=localhost[127.0.0.1]

Jan 20 13:00:22 mail postfix/cleanup[14606]: 3D621261C9D: message-


id=<1454317676.81.1453291212065.JavaMail.zimbra@irontec.com>

Jan 20 13:00:22 mail postfix/qmgr[29083]: 3D621261C9D: from=<admin@irontec.com>, size=3099, nrcpt=1 (queue


active)

Jan 20 13:00:22 mail postfix/amavisd/smtpd[14625]: disconnect from localhost[127.0.0.1]

Jan 20 13:00:22 mail postfix/smtp[14613]: 1F000261CA4: to=<ruben@irontec.com>,


relay=127.0.0.1[127.0.0.1]:10032, delay=6.9, delays=6.4/0/0.01/0.52, 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 3D621261C9D)

Jan 20 13:00:22 mail postfix/qmgr[29083]: 1F000261CA4: removed

Jan 20 13:00:22 mail postfix/lmtp[14626]: 3D621261C9D: to=<ruben@irontec.com>,


relay=mail.irontec.com[123.1.2.3]:7025, delay=0.2, delays=0/0.01/0.13/0.06, dsn=2.1.5, status=sent (250 2.1.5
Delivery OK)

Jan 20 13:00:22 mail postfix/qmgr[29083]: 3D621261C9D: removed

Analizando el log, he hecho unos saltos de lnea para verlo mejor, se puede resumir en:
Recepcin 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 buzn del usuario correspondiente

He querido mostraros cmo funciona en el caso de un mail local, cmo es recibido, analizado y entregado
posteriormente. En caso de que fuese un mail a un servidor externo, el mail sera analizado, y entregado al
servidor remoto correspondiente. El servidor receptor del correo, si tiene MailScanner (o un sistema similar)
analizara el mail de nuevo y lo entregara a su buzn correspondiente.

Configuracin avanzada, extras


Hasta ahora hemos dejado configurado Mailscanner de manera sencilla para asegurar que funciona, pero hay
configuracin extra que deberamos aadir para mejorar nuestro sistema. Si en vuestras configuraciones tenis

opciones que no hemos aadido, no dudis en dejarnos vuestras mejoras en los comentarios

Configuracin spamassassin

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

Creamos enlace simblico

root@mail:/etc/MailScanner# ln

1 root@mail:/etc/MailScanner# ln -s /etc/MailScanner/spam.assassin.prefs.conf /etc/spamassassin/mailscanner.cf

Editamos el fichero /etc/MailScanner/spam.assassin.prefs.conf para modificar las lneas donde aparece X-


YOURDOMAIN-COM para que sea como la variable %org-name% del fichero Mailscanner.conf, y una serie
de configuracin extra y ejemplos de reglas propias:

Modificamos el fichero /etc/MailScanner/spam.assassin.prefs.conf


bayes_path /etc/MailScanner/ba
bayes_f ile_mode 0777

bayes_ignore_header X-Irontec

1 bayes_path /etc/MailScanner/bayes/bayes

2 bayes_file_mode 0777

4 bayes_ignore_header X-Irontec-MailScanner

5 bayes_ignore_header X-Irontec-MailScanner-SpamCheck

6 bayes_ignore_header X-Irontec-MailScanner-SpamScore

7 bayes_ignore_header X-Irontec-MailScanner-Information

9 ifplugin Mail::SpamAssassin::Plugin::Pyzor

10 pyzor_path /usr/bin/pyzor

11 endif

12

13 use_razor2 1

14 use_pyzor 1

15

16 # reglas propias

17 score SPF_FAIL 4

18 score SPF_SOFTFAIL 3

19 score SPF_NEUTRAL 2

20

21 envelope_sender_header X-Irontec-MailScanner-From

22

23 # para locales e idiomas

24 ok_locales en

25 loadplugin Mail::SpamAssassin::Plugin::TextCat
26 ok_languages es eu

27

28 # ejemplo de regla propia

29 header Irontec_CASINO Subject =~ /casinos/i

30 describe Irontec_CASINO Casinos

31 score Irontec_CASINO 1.5

32

33 # para los paises

34 loadplugin Mail::SpamAssassin::Plugin::RelayCountry

35 add_header all Relay-Country _RELAYCOUNTRY_

36 include Relay_Countries.cf

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:

Creamos directorio para Bayes

root@mail:/etc/MailScanner# mk

root@mail:/etc/MailScanner# cp

1 root@mail:/etc/MailScanner# mkdir /etc/MailScanner/bayes

3 root@mail:/etc/MailScanner# cp /opt/zimbra/.spamassassin/bayes_* /etc/MailScanner/bayes/

5 root@mail:/etc/MailScanner# chmod 777 -R /etc/MailScanner/bayes

Para el plugin RelayCountry necesitamos instalar una dependencia de perl:

Instalamos mdulo de Perl


root@mail:/etc/MailScanner# ap

[...]

1 root@mail:/etc/MailScanner# apt-get install libgeo-ip-perl

3 [...]

5 Processing triggers for man-db (2.6.7.1-1ubuntu1) ...

6 Configurando libgeo-ip-perl (1.43-1) ...

Y por ltimo, si os fijis, hemos hecho un include del fichero Relay_Countries.cf Esto es un fichero, que os
podis descargar de aqu y moverlo a /etc/spamassassin/Relay_Countries.cf .

Descargamos el fichero y renombramos

root@mail:~# cd /etc/spamassa

root@mail:/etc/spamassassin#

1 root@mail:~# cd /etc/spamassassin/

3 root@mail:/etc/spamassassin# wget https://blog.irontec.com/wp-content/uploads/2016/01/Relay_Countries.txt

5 root@mail:/etc/spamassassin# mv Relay_Countries.txt Relay_Countries.cf

Este fichero lo que hace es puntuar a los mails que vienen desde ciertos pases con ms puntuacin o menos,
dependiendo de nuestro gusto:

Ejemplo de puntuacin a mails de China

header RELAYCOUNTRY_
describe RELAYCOUNTRY
score RELAYCOUNTRY_
1 header RELAYCOUNTRY_CN X-Relay-Countries =~/\bCN\b/

2 describe RELAYCOUNTRY_CN Relayed through China

3 score RELAYCOUNTRY_CN 4.0

Para la configuracin 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:

Creamos home para Pyzor y actualizamos

root@mail:/etc/spamassassin#

root@mail:/etc/spamassassin#

1 root@mail:/etc/spamassassin# mkdir /opt/zimbra/postfix/.pyzor

3 root@mail:/etc/spamassassin# chown postfix:postfix /opt/zimbra/postfix/.pyzor/

5 root@mail:/etc/spamassassin# su - postfix

6 $ pwd

7 /opt/zimbra/postfix

9 $ pyzor --homedir /opt/zimbra/postfix/.pyzor discover

10 downloading servers from http://pyzor.sourceforge.net/cgi-bin/inform-servers-0-3-x

Whitelist y blacklist

A travs de MailScanner, y su configuracin, podemos forzar a que unos mails sean siempre considerados como
lcitos o como spam. Estas son las configuraciones a modificar en /etc/MailScanner/MailScanner.conf:

Configuracin de whitelist y blacklist


# fichero de configuracin para
Is Definitely Not Spam = %rules-

# fichero de configuracin para

1 # fichero de configuracin para las whitelist

2 Is Definitely Not Spam = %rules-dir%/spam.whitelist.rules

4 # fichero de configuracin para las blacklist

5 Is Definitely Spam = %rules-dir%/spam.blacklist.rules

Con esta configuracin lo que estamos indicando es que para que un mail sea considerado directamente
como whitelisted (es decir, que siempre va a ser considerado lcito) 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 configuracin de unas reglas para considerar los mails lcitos:

Ejemplo para whitelist

# al poner yes, especif icamos q


From: 123.4.5.6 yes
From: *@bizkaia.org yes
From: direccion@hotmail.co

1 # al poner yes, especificamos que SI son lcitos

2 From: 123.4.5.6 yes

3 From: *@bizkaia.org yes

4 From: direccion@hotmail.com yes

6 # el resto de mails se analizarn y puntuarn

7 FromOrTo: default no

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

Ejemplo para blacklist


# al poner yes, especif icamos q
From: *@address.com yes
From: *@*.jp yes
From: 222.78.150.40 yes

1 # al poner yes, especificamos que SON SPAM

2 From: *@address.com yes

3 From: *@*.jp yes

4 From: 222.78.150.40 yes

6 FromOrTo: default no

Para ver todos los tipos de reglas que podemos crear y para ms 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 da internet en lo que respecta a los sistemas de correo electrnico
como el spam, el phising

Mejorando nuestro servidor Zimbra (2/2): MailWatch

En nuestra serie de posts donde explicamos cmo tener un sistema de correo electrnico seguro y profesional,
ya vimos cmo instalar Zimbra 8.6, cmo configurarlo, y por ltimo cmo instalar MailScanner. Hoy toca
mejorar el post anterior para poder hacerlo ms visible y usable. Para ello vamos a realizar la instalacin de
MailWatch, que es un interfaz web para MailScanner.

En este post modificaremos parte de la configuracin 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.

Tal como he dicho en la entrada, para la instalacin y configuracin de MailWatch vamos a realizar
modificaciones en la configuracin 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 lo

Qu hace MailWatch?
Ya he comentado que MailWatch es un interfaz web para MailScanner. Pero, para que funcione, tenemos
que hacer que MailScanner guarde informacin en una base de datos. Es decir, tras los anlisis 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 anlisis 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
instalacin de las dependencias, vamos a hacer una parada de Zimbra y despus lo volveremos a levantar.

Paramos Zimbra para evitar problemas

root@mail:~# su - zimbra
zimbra@mail:~$ zmcontrol stop
Host mail.irontec.com
Stopping vmw are-ha...skip

1 root@mail:~# su - zimbra

2 zimbra@mail:~$ zmcontrol stop

3 Host mail.irontec.com

4 Stopping vmware-ha...skipped.

5 /opt/zimbra/bin/zmhactl missing or not executable.

6 Stopping zmconfigd...Done.

7 Stopping zimlet webapp...Done.

8 Stopping zimbraAdmin webapp...Done.

9 Stopping zimbra webapp...Done.

10 Stopping service webapp...Done.

11 Stopping stats...Done.

12 Stopping mta...Done.

13 Stopping spell...Done.

14 Stopping snmp...Done.

15 Stopping cbpolicyd...Done.
16 Stopping archiving...Done.

17 Stopping opendkim...Done.

18 Stopping amavis...Done.

19 Stopping antivirus...Done.

20 Stopping antispam...Done.

21 Stopping proxy...Done.

22 Stopping memcached...Done.

23 Stopping mailbox...Done.

24 Stopping logger...Done.

25 Stopping dnscache...Done.

26 Stopping ldap...Done.

Instalacin de las dependencias

Tal como hemos dicho, vamos a realizar la instalacin del servidor web Apache, junto con la base de
datos MySQL (en Ubuntu podemos instalar la versin 5.5 o la 5.6, por lo que cogemos la ltima) y el lenguaje
de programacin PHP junto con los mdulos para Apache y MySQL:

Instalamos las dependencias necesarias

root@mail:~# apt-get install apa


Leyendo lista de paquetes... He
Creando rbol de dependencias
Leyendo la informacin de esta

1 root@mail:~# apt-get install apache2 libapache2-mod-php5 php5-mysql php5-gd mysql-server-5.6

2 Leyendo lista de paquetes... Hecho

3 Creando rbol de dependencias

4 Leyendo la informacin de estado... Hecho

5 Se instalarn los siguientes paquetes extras:

7 [...]

8
9 Desea continuar? [S/n] S

10

11 [...]

Durante la instalacin nos va a pedir que introduzcamos una contrasea de administracin de MySQL.

Configuracin 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 configuracin 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:

Reiniciamos Apache y comprobamos el puerto

root@mail:/etc/apache2# servic
* Restarting w eb server apach
...done.

1 root@mail:/etc/apache2# service apache2 restart

2 * Restarting web server apache2

3 ...done.

5 root@mail:/etc/apache2# netstat -naput | grep apache

6 tcp6 0 0 :::81 :::* LISTEN 2575/apache2

Todo bien, as que podemos seguir

Configuracin MySQL

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

Nos conectamos a MySQL

MySQL
root@mail:~# mysql -u root -p
Enter passw ord:
Welcome to the MySQL monitor.
Your MySQL connection id is 45

1 root@mail:~# mysql -u root -p

2 Enter password:

3 Welcome to the MySQL monitor. Commands end with ; or \g.

4 Your MySQL connection id is 45

5 Server version: 5.6.27-0ubuntu0.14.04.1 (Ubuntu)

7 Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

9 Oracle is a registered trademark of Oracle Corporation and/or its

10 affiliates. Other names may be trademarks of their respective

11 owners.

12

13 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

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

Y creamos la base de datos y el usuario

MySQL

mysql> create database mailsca


Query OK, 1 row af fected (0,00

mysql> GRANT ALL ON mailsca

1 mysql> create database mailscanner;

2 Query OK, 1 row affected (0,00 sec)

4 mysql> GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY 'password';

5 Query OK, 0 rows affected (0,00 sec)


6

7 mysql> GRANT FILE ON *.* TO mailwatch@localhost IDENTIFIED BY 'password';

8 Query OK, 0 rows affected (0,00 sec)

10 mysql> flush privileges;

11 Query OK, 0 rows affected (0,00 sec)

Guardaremos el usuario MailWatch y la contrasea introducida para utilizarla posteriormente

Instalacin de MailWatch
Durante la instalacin 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 configuracin de MailWatch y MailScanner, por lo que tenemos que estar atentos a qu ficheros vamos
tocando y con qu finalidad.

Descargar MailWatch

El cdigo fuente de MailWatch est almacenado en su github.

Descargamos MailWatch

root@mail:~# w get https://github

--2016-01-22 11:37:00-- https:/


Resolving github.com (github.co

1 root@mail:~# wget https://github.com/mailwatch/1.2.0/archive/master.zip -O mailwatch-1.2.zip

3 --2016-01-22 11:37:00-- https://github.com/mailwatch/1.2.0/archive/master.zip

4 Resolving github.com (github.com)... 192.30.252.130

5 Connecting to github.com (github.com)|192.30.252.130|:443... connected.

6 HTTP request sent, awaiting response... 302 Found

7 Location: https://codeload.github.com/mailwatch/1.2.0/zip/master [following]

8 --2016-01-22 11:37:00-- https://codeload.github.com/mailwatch/1.2.0/zip/master

9 Resolving codeload.github.com (codeload.github.com)... 192.30.252.163


10 Connecting to codeload.github.com (codeload.github.com)|192.30.252.163|:443... connected.

11 HTTP request sent, awaiting response... 200 OK

12 Length: 4739930 (4,5M) [application/zip]

13 Saving to: mailwatch-1.2.zip

14

15 100%[============================================================>] 4.739.930 5,13MB/s in 0,9s

16

17 2016-01-22 11:37:01 (5,13 MB/s) - mailwatch-1.2.zip saved [4739930/4739930]

18

19 root@mail:~# unzip mailwatch-1.2.zip

20 [...]

21

22 root@mail:~# cd 1.2.0-master/

23

24 root@mail:~/1.2.0-master# ls

25 CHANGELOG.md INSTALL MailScanner_perl_scripts upgrade.php

26 CONTRIBUTING.md LICENSE.md README.md UPGRADING

27 create.sql luser Remote_DB.txt USER_FILTERS

28 fix_quarantine_permissions mailscanner tools

Hemos descargado el cdigo, 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

Instalacin de MailWatch

MailWatch nos provee de un fichero para la creacin 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:

Reemplazamos y creamos tablas


root@mail:~/1.2.0-master# sed

root@mail:~/1.2.0-master# mysq
Enter passw ord:

1 root@mail:~/1.2.0-master# sed -ie "s/MyISAM/InnoDB/" create.sql

3 root@mail:~/1.2.0-master# mysql -u root -p < create.sql

4 Enter password:

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 travs del navegador web. Fijaros que ahora vamos a conectarnos a la
base de datos con el usuario mailwatch que hemos creado ms arriba. El usuario admin y la contrasea que
pongo a continuacin lo guardaremos para acceder a travs del navegador:

Creamos usuario admin para la web

root@mail:~# mysql -u mailw atc


Enter passw ord:

[...]

1 root@mail:~# mysql -u mailwatch -p mailscanner

2 Enter password:

4 [...]

6 mysql> INSERT INTO users SET username = 'admin', password = md5('webpassword'), fullname = 'Admin', type ='A';

7 Query OK, 1 row affected (0,00 sec)

Instalamos dependencias de Perl necesarias por MailWatch, que es el mdulo Encoding::FixLatin :

Instalamos la dependencia Encoding::FixLatin

root@mail:~# cpan -i Encoding::


Reading '/root/.cpan/Metadata

[...]
1 root@mail:~# cpan -i Encoding::FixLatin

2 Reading '/root/.cpan/Metadata

4 [...]

6 Appending installation info to /usr/local/lib/perl/5.18.2/perllocal.pod

7 GRANTM/Encoding-FixLatin-1.04.tar.gz

8 /usr/bin/make install -- OK

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

Modificamos MailScanner_perl_scripts/MailWatch.pm con nuestros datos

Perl

# Modif y this as necessary f or


my($db_name) = 'mailscanner';
my($db_host) = 'localhost';
my($db_user) = 'mailw atch';

1 # Modify this as necessary for your configuration

2 my($db_name) = 'mailscanner';

3 my($db_host) = 'localhost';

4 my($db_user) = 'mailwatch';

5 my($db_pass) = 'password';

Y movemos este fichero a /etc/MailScanner/custom/ . Si os fijis, este directorio es un enlace simblico


a /usr/share/MailScanner/MailScanner/CustomFunctions/ :

Movemos el fichero a /etc/MailScanner/custom/

root@mail:~/1.2.0-master# mv M

root@mail:~/1.2.0-master# ls -lh
lrw xrw xrw x 1 root root 51 ene
root@mail:~/1.2.0-master# mv MailScanner_perl_scripts/MailWatch.pm /etc/MailScanner/custom/
1

2
root@mail:~/1.2.0-master# ls -lh /etc/MailScanner/custom
3
lrwxrwxrwx 1 root root 51 ene 19 12:34 /etc/MailScanner/custom ->
4
/usr/share/MailScanner/MailScanner/CustomFunctions/

Hasta ahora hemos estado con la base de datos, pero todava falta de instalar la parte del cdigo web al que
posteriormente accederemos va 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/ . Tambin tenemos que asegurar que el
usuario de apache (www-data) tiene permisos para acceder a unos directorios:

Movemos el cdigo y damos permisos

root@mail:~/1.2.0-master# mv m

root@mail:~/1.2.0-master# cd /v

1 root@mail:~/1.2.0-master# mv mailscanner/ /var/www/html/

3 root@mail:~/1.2.0-master# cd /var/www/html/mailscanner/

5 root@mail:/var/www/html/mailscanner# chown root:www-data images

7 root@mail:/var/www/html/mailscanner# chmod ug+rwx images

9 root@mail:/var/www/html/mailscanner# chown root:www-data images/cache

10

11 root@mail:/var/www/html/mailscanner# chmod ug+rwx images/cache

12

13 root@mail:/var/www/html/mailscanner# chown www-data:www-data temp


Copiamos el fichero de configuracin de ejemplo para crear el fichero conf.php donde realizaremos la
configuracin de MailWatch:

Creamos el fichero de configuraicn

root@mail:/var/w w w /html/mails

1 root@mail:/var/www/html/mailscanner# cp conf.php.example conf.php

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

Modificamos el fichero conf.php

PHP

def ine('DB_USER', 'mailw atch');


def ine('DB_PASS', 'passw ord');
def ine('DB_HOST', 'localhost');
def ine('DB_NAME', 'mailscanner

1 define('DB_USER', 'mailwatch');

2 define('DB_PASS', 'password');

3 define('DB_HOST', 'localhost');

4 define('DB_NAME', 'mailscanner');

6 define('TIME_ZONE', 'Europe/Madrid');

8 define('QUARANTINE_FROM_ADDR', 'admin@irontec.com');

Y ya podemos ir al navegador web, http://[SERVER]:81/mailscanner (donde SERVER es la IP o la


resolucin DNS de nuestro servidor). Nos pedir el usuario admin con la contrasea que hemos introducido en
MySQL previamente y veremos el siguiente interfaz:

Configurar MailScanner
Como ya hemos visto, tenemos el interfaz web funcionando y, del post anterior, el MailScanner tambin; pero
ahora falta realizar la integracin entre ambos. Vamos a realizar modificaciones en el fichero de configuracin
de MailScanner /etc/MailScanner/MailScanner.conf y nos aseguramos que las siguientes directivas estn
como os mostramos ahora:

Modificamos /etc/MailScanner/MailScanner.conf

Perl

Alw ays Looked Up Last = &Mai

Detailed Spam Report = yes

1 Always Looked Up Last = &MailWatchLogging

3 Detailed Spam Report = yes

5 Quarantine User = postfix

6 Quarantine Group = www-data

7 Quarantine Permissions = 0666

9 Quarantine Whole Message = yes

10 Quarantine Whole Messages As Queue Files = no

11

12 Include Scores In SpamAssassin Report = yes

13

14 Spam Actions = store deliver header "X-Spam-Status: Yes"

15 High Scoring Spam Actions = store delete

16

17 Is Definitely Not Spam = &SQLWhitelist

18 Is Definitely Spam = &SQLBlacklist

Las ltimas dos lneas son para poder tener las whitelist y blacklist en la base de datos, en lugar de tenerlo en
fichero, como os enseamos 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 lneas as:

modificamos MailScanner_perl_scripts/SQLBlackWhiteList.pm

Perl

my($db_name) = 'mailscanner'
my($db_host) = 'localhost';
my($db_user) = 'mailw atch';
my($db_pass) = 'passw ord';

1 my($db_name) = 'mailscanner';

2 my($db_host) = 'localhost';

3 my($db_user) = 'mailwatch';

4 my($db_pass) = 'password';

Y movemos el fichero al directorio custom de la configuracin del MailScanner:

Movemos el fichero a la configuracin de Mailscanner

root@mail:~/1.2.0-master# mv M

1 root@mail:~/1.2.0-master# mv MailScanner_perl_scripts/SQLBlackWhiteList.pm /etc/MailScanner/custom/

Reiniciamos Mailscanner:

Reiniciamos MailScanner

root@mail:~# /etc/init.d/mailscan
* Restarting mail spam/virus sc

...done.

1 root@mail:~# /etc/init.d/mailscanner restart

2 * Restarting mail spam/virus scanner MailScanner

4 ...done.
5 root@mail:~#

Volvemos a iniciar Zimbra

Iniciamos Zimbra

root@mail:~# su - zimbra
zimbra@mail:~$ zmcontrol start
Host mail.irontec.com
Starting ldap...Done.

1 root@mail:~# su - zimbra

2 zimbra@mail:~$ zmcontrol start

3 Host mail.irontec.com

4 Starting ldap...Done.

5 Starting zmconfigd...Done.

6 Starting dnscache...Done.

7 Starting logger...Done.

8 Starting mailbox...Done.

9 Starting memcached...Done.

10 Starting proxy...Done.

11 Starting amavis...Done.

12 Starting antispam...Done.

13 Starting antivirus...Done.

14 Starting opendkim...Done.

15 Starting snmp...Done.

16 Starting spell...Done.

17 Starting mta...Done.

18 Starting stats...Done.

19 Starting service webapp...Done.

20 Starting zimbra webapp...Done.

21 Starting zimbraAdmin webapp...Done.


22 Starting zimlet webapp...Done.

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

Si hacemos click en el # de la izquierda de cada mail veremos toda la informacin del mail, sus cabeceras, la
puntuacin del SpamAssassin

Configuracin final
Tras los pasos dados hasta ahora, ya tendramos MailScanner y MailWatch integrados y funcionando, pero
vamos a realizar una serie de configuracin extra para poder mejorarlo.

CRONs de mantenimiento

Dado que actualmente estamos metiendo informacin de los correos electrnicos a la base de datos, en caso de
tener mucho trfico, nuestra base de datos ir cogiendo cierto tamao, 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 instalacin 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 instalacin
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 configuracin de MailWatch conf.php , que por defecto son 60 das.
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 ms de 30 das.
quarantine_report.php : Tiene en cuenta varias variables de conf.php para la generacin y envo de un correo
electrnico con la informacin recopilada de la base de datos. Este correo nos informa de los mails que han
llegado al servidor que son spam, virus, phishing,

Configuracin GeoIP

Para conocer los pases de los servidores emisores necesitamos contar con una base de datos en la que se
relacione IP con pas. Para ello vamos a la pestaa Tools/Links, pinchamos en el enlace Update GeoIP
Database y hacer click en el botn 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 pas
procedente del correo.
Actualizamos reglas SpamAssassin

Dado que cada cierto tiempo SpamAssassin crea nuevas reglas, para que MailWatch las conozca hay que
realizar una actualizacin de las mismas. Para ello vamos a la pestaa Tools/Links, pinchamos en el enlace
Update SpamAssassin Rule Descriptions y hacemos click sobre el botn Run now. Veremos el nombre y
la descripcin de las reglas que son usadas por SpamAssassin.

Listas blancas/negras

En el post anterior os explicamos cmo generar ficheros para la creacin de listas blancas y negras para
MailScanner. Con MailWatch, y la configuracin que hemos realizado en el MailScanner, la creacin de listas
blancas y negras va a travs del interfaz web. Por lo tanto, esta informacin estar guardada en la base de datos.
Si os fijis, hay una pestaa que se llama B/W LISTS. Pinchando sobre ella, nos muestra un formulario para
aadir direcciones de correo electrnico, o un dominio completo como lista blanca o negra.

Visualizacin 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
informacin 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:

Damos permiso de acceso

root@mail:~# chmod 755 /opt/zi

root@mail:~# chmod 755 /opt/zi

1 root@mail:~# chmod 755 /opt/zimbra/data/postfix/spool/hold/

3 root@mail:~# chmod 755 /opt/zimbra/data/postfix/spool/incoming/

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


aparece lo siguiente:

Modificamos /var/www/html/mailscanner/postfix.inc

function postfixinq()
{
$handle = opendir('/opt/zimbr
1 function postfixinq()

2{

3 $handle = opendir('/opt/zimbra/data/postfix/spool/hold/');

5 [...]

Con esto ya podramos ver la informacin 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, podramos dar por terminado la instalacin y la configuracin del servidor de correo
electrnico donde podemos ver y controlar los mails que llegan y se envan, controlar las listas blancas y
negras, obtener estadsticas

Вам также может понравиться