Como montar un sistema de correo con Zimbra (3/6)
Introducción
No es ninguna novedad que el spam y los virus son uno de los problemas que más molestan, tanto a los usuarios como a los administradores. En el mercado existen soluciones especializadas en la «lucha» contra el spam, pero si no tenemos ninguna de estas herramientas podemos activar los filtros que nos proporciona zimbra.
Vamos a dividir el capítulo de filtros antispam en 2, ya que el que os muestro hoy es algo largo y requiere de más configuración, por lo que empezaremos con el filtro policyd y en el próximo capítulo veremos otros filtros.
!Empecemos!
Policyd
Este es un filtro muy interesante que aplicará cuotas tanto en los correos entrantes como salientes. Evitará que enviemos o nos envíen mails masivos, evitando que la IP pública de nuestra conexión o servidor sea añadida a alguna lista negra.
Este filtro es recomendable ya dispongais de un filtro antispam profesional como si no. Con este filtro controlaremos, por ejemplo, los envíos que pueda hacer un equipo infectado.
Este servicio viene desactivado por defecto y no se puede activar desde el portal web. Para activarlo ejecutaremos las siguientes ordenes desde la línea de comandos
su - zimbra zmprov ms `zmhostname` +zimbraServiceInstalled cbpolicyd zmprov ms `zmhostname` +zimbraServiceEnabled cbpolicyd
Una vez instalado y activado verificamos que se ha instalado correctamente ejecutando
zmprov gs `zmhostname` | grep zimbraServiceInstalled
En la salida de este comando tenemos que ver una línea como la siguiente
zimbraServiceInstalled: cbpolicyd
Para verificar que el servicio está funcionando ejecutamos
zmcbpolicydctl status
y nos debería mostrar un resultado como el siguiente
policyd is running.
La instalación y activación de este servicio modifica la configuración del servidor postfix. Para verificar que es así, ejecutamos las siguientes ordenes
postconf | grep 10031
y deberíamos ver un resultado como el siguiente
zimbra@mail:~$ postconf | grep 10031 smtpd_end_of_data_restrictions = check_policy_service inet:localhost:10031 smtpd_recipient_restrictions = check_policy_service inet:localhost:10031, reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_invalid_helo_hostname, reject_non_fqdn_sender, permit smtpd_sender_restrictions = check_policy_service inet:localhost:10031, check_sender_access regexp:/opt/zimbra/common/conf/tag_as_originating.re, permit_mynetworks, permit_sasl_authenticated, permit_tls_clientcerts, check_sender_access regexp:/opt/zimbra/common/conf/tag_as_foreign.re
Si no nos aparece alguna de estas líneas podemos forzar el cambio en la configuración ejecutando
zmprov mcf +zimbraMtaRestriction "check_policy_service inet:127.0.0.1:10031" zmlocalconfig -e postfix_enable_smtpd_policyd=yes
Ahora tenemos el servicio funcionando y el servidor postfix utilizándolo, pero no tenemos ninguna cuota creada ni asignada. Vamos a realizar las tareas necesarias para crear estas cuotas.
En primer lugar vamos a crear una carpeta en la que crearemos todo lo necesario para aplicar estas cuotas. Este paso lo ejecutaremos desde el usuario root
mkdir /opt/zimbra/scripts && chown zimbra.zimbra /opt/zimbra/scripts/
Volvemos al usuario zimbra y creamos el fichero que contendrá la sentencia SQL con las cuotas que asignaremos.
su - zimbra vi /opt/zimbra/scripts/cuotas.sql
El contenido de este fichero es el siguiente
BEGIN TRANSACTION; INSERT INTO "policies" VALUES(6, 'Zimbra', 0, 'Zimbra Policy', 0); INSERT INTO "policy_members" (PolicyID,Source,Destination) VALUES(6, 'any', 'any'); INSERT INTO "quotas" VALUES (3, 6, 'Sender:user@domain', 'Sender:user@domain', 60, 'DEFER', 'Demasiados mensajes enviados en 60 segundos', 0, 'Cuota para 60 segundos', 0); INSERT INTO "quotas" VALUES(4, 6, 'Recipient:@domain', 'Recipient:@domain', 60, 'REJECT', 'Demasiados mensajes enviados en 60 segundos', 0, 'Cuota para recepcion de dominios externos en 60 segundos', 0); INSERT INTO "quotas_limits" VALUES(4, 3, 'MessageCount', 6, '', 0); INSERT INTO "quotas_limits" VALUES(5, 4, 'MessageCount', 20, '', 0); COMMIT;
Las cuotas que preparamos en este fichero va a permitir enviar un máximo de 6 mails por minuto y por usuario, y también que no recibamos más de 20 mensajes por minuto de un mismo dominio.
Antes de importar este SQL hacemos un backup de la base de datos actual
cp -ra /opt/zimbra/data/cbpolicyd/db/cbpolicyd.sqlitedb /opt/zimbra/scripts/cbpolicyd.sqlitedb
Si queremos excluir alguna IP de este control podemos hacerlo añadiendo la siguiente línea al script
INSERT INTO policy_group_members (PolicyGroupId,Member,Disabled,Comment) VALUES(3,'172.16.4.10',0,'Servidor confiable');
Una vez tenemos el backup de la base de datos, vamos a importar el contenido del fichero SQL a la base de datos
sqlite3 /opt/zimbra/data/cbpolicyd/db/cbpolicyd.sqlitedb < /opt/zimbra/scripts/cuotas.sql
Policyd dispone de otros módulos para controlar el spam, pero los vamos a desactivar porque utilizaremos los propios de Zimbra. Adaptamos la configuración para cargar únicamente el módulo de cuota y modificar el nivel de log
zmlocalconfig -e cbpolicyd_log_detail=modules,tracking,policies; zmlocalconfig -e cbpolicyd_module_accesscontrol=1 cbpolicyd_module_checkhelo=0 cbpolicyd_module_checkspf=0 cbpolicyd_module_greylisting=0 cbpolicyd_module_quotas=1 zmlocalconfig -e cbpolicyd_log_level=3
y verificamos el resultado con
zmlocalconfig | grep -i cbpolicy
Ya tenemos la configuración preparada y solo nos queda reiniciar los servicios
zmcbpolicydctl restart && zmmtactl restart
Nos aseguramos que el servicio funciona correctamente con
zmcbpolicydctl status
Pruebas
Solo nos queda verificar que las cuotas funcionan correctamente. Para ello accederemos al webmail de Zimbra con alguno de los usuarios que esté funcionando. Una vez dentro enviaremos más de 5 mensajes en menos de 1 minuto. Si todo ha funcionado correctamente, al intentar enviar el quinto mensaje nos aparecerá el siguiente mensaje
En el log /opt/zimbra/log/cbpolicyd.log podemos ver como hemos superado la quota
[2017/03/06-21:24:08 - 6814] [CORE] INFO: module=Quotas, action=defer, host=127.0.0.1, helo=mail.eslinux.org, [email protected], [email protected], reason=quota_match, policy=6, quota=3, limit=4, track=Sender:[email protected], counter=MessageCount, quota=7.88/6 (131.4%)
y en el log /var/log/mail.log podemos ver el mensaje que configuramos al configurar las cuotas
Mar 6 21:24:08 mail postfix/smtpd[5630]: NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 450 4.7.1 <[email protected]>: Recipient address rejected: Demasiados mensajes enviados en 60 segundos; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail.eslinux.org>
Bibliografia
Si queréis profundizar en este sistema antispam podéis consultar los siguientes enlaces