Saludos amigos, Oscar Mas nos enseña hoy una herramienta Open Source para securizar nuestro entorno Zimbra y no acabar en RBL listados sin poder trabajar, con la perdida de negocio que esto conlleva y lo mal que está todo para que esto suceda. Os dejo con la entrada:
Aunque tengan habilitado el sistema de bloqueo de cuentas por intentos fallidos y además le hayamos añadido, el famoso fail2ban para aumentar la seguridad de nuestro Sistema de Zimbra. Eso no nos previene de que un “bichito”, se meta en el Outlook de unusuario y empieze a enviar Spam desde el equipo infectado. Ante esta situación, nos podemos encontrar nuestro servidor de Zimbra de la siguiente manera:
La verdad es que, por nuestra parte siempre procedemos de la siquiente manera:
1.- Cerrarmos los accesos a los puertos afectados, para parar la incidencia con IPTABLES. Ejemplo:
root@zimbra:~# iptables -A OUTPUT -p tcp --destination-port 25 -j DROP root@zimbra:~# iptables -A INPUT -p tcp --destination-port 25 -j DROP
2.- Revisarnos los logs, para saber que usuario es el que está ocasionando el SPAM y le cambiamos el password
3.- Limpiamos las colas de correo. Ejemplo:
root@zimbra:~# /opt/zimbra/postfix-2.10.1.2z/sbin/postsuper -d ALL
Estos pasos son sencillos y hasta se podrian automatizar, pero el problema está cuando nuestro servidor empieza a estar en RBL’s, que es el mayor problema. Hay listas que nos sacan en poco tiempo y hay listas, en las cuales nos hemos de pelear con el administrador de la RBL, para que nos elimine de su lista negra. Una de las soluciones que llevo implementando desde hace tiempo, es un Firewall de correo electrónico delante de los servidores de Zimbra, el cual controla la salida de correo que nuestro servidor de Zimbra ocasiona y a su vez nos podría servir de pasarela de entrada, para limpiar de SPAM y no sobrecargar nuestros sistemas de Zimbra. En este caso explicaré el control de salida, con PostFWD.
La idea es la siguiente:
Pulsa en el enlace inferior para leer más
Todo el correo que salga de nuestro servidor de Zimbra o algún dominio en concreto, lo enviaremos al servidor de Postfix y este nos permitirá sacar una cantidad de mensajes durante un tiempo que hayamos predeterminado, de esta manera si nos capturan una cuenta, todos los mensajes se quedarán en la cola del servidor de Zimbra. Con esto conseguimos varias cosas
- No entrar en RBL’s
- Controlar los envios masivos que puedan hacer nuestros usuarios
- Evitar que un “bicho” de un equipo que tiene una cuenta configurada con nuestro servidor, envie Spam incronladamanete
Para realizar este laboratorio, dispondremos de un servidor de Zimbra correctamente configurado con la IP: 192.168.100.20 y un servidor de Postfix basado en Ubuntu con la IP: 192.168.100.21, en el cual le instalaremos el Sistema de PostFWD
Lo primero que tenemos que hacer es instalar los paquetes en el Sistema Ubuntu que nos hará de Firewall y de pasarela de correo. Los paquetes son los siguientes:
- postfix-pcre: paquete que nos permitirá hacer regular expressions en Postfix
- postfix: el servidor de postfix
- postfwd: el Sistema de Firewall, que nos permitirá controlar los mensajes
Lo haremos de la siguiente manera:
root@fwpostfix:~# aptitude install postfwd postfix postfix-pcre –y
Nos saldrá un menu NCurses y le indicamos que nuestro servidor se usará para “Internet Site”
El siguiente paso es importante, ya que le indicamos el nombre nuestro servidor de correo, para identificarse con otros servidores de Internet:
Habilitamos el PostFWD para que arranque con el Sistema. A mí me gusta ser ordenado y poner todos los ficheros de configuración personales o que son altamente modificados, en directories separados a los propios de la configuración. En mi caso los pondre todos en: /etc/postfix/Custom/
root@fwpostfix:~# vim /etc/default/postfwd STARTUP=1 CONF=/etc/postfix/Custom/postfwd.cf
Una vez hecho esto, hemos de configurar el postfix, para que cuando entre el mensaje por el sistema de SMTP, lo transfiera al PostFWD y este haga el filtro:
root@fwpostfix:~# vim /etc/postfix/main.cf … mynetworks = /etc/postfix/Custom/relay_clients header_checks = pcre:/etc/postfix/Custom/ header_checks smtpd_recipient_restrictions = permit_mynetworks, check_policy_service inet:127.0.0.1:10040, reject_unauth_destination …
Crearemos el directorio donde pondremos nuestras configuraciones ( hay que ser limpios ) :
root@fwpostfix:~# mkdir /etc/postfix/Custom/pre> Esta parte es interesante, ya que en el log del postfix, podremos ver el subject del mensaje en los logs de nuestro servidor de Postfix y de esta manera saber si los mensaje son correctos o son Spam:
root@fwpostfix:~# vim /etc/postfix/Custom/header_checks /^subject:/ WARN
Abriremos el relay a la IP del servidor de Zimbra y al localhost:
root@fwpostfix:~# vim /etc/postfix/Custom/relay_clients ############################## #################### # NOTA: acuerdate de reiniciar el postfix : service postfix restart ############################## #################### # Localhost 127.0.0.0/8 # Servidor de Zimbra 192.168.100.20
Y configuraremos el Sistema de Firewall:
root@fwpostfix:~# vim /etc/postfix/Custom/postfwd.cf ### # # Firewall de postfix # # postfwd -f /etc/postfix/Custom/postfwd.cf -C # /etc/init.d/postfwd stop && sleep 10 && /etc/init.d/postfwd start # ### &&SERVIDOR_DE_ZIMBRA { client_address=192.168.100.20; }; id=100_SERVIDOR_DE_ZIMBRA;&&SERVIDOR_DE_ZIMBRA;action= jump(690_3mx60seg) id=500_DEFAULT;action=rate($$ client_address/2/60/450 4.7.1 No se puede enviar mas de 2 mensajes durante 60 segundos.) id=690_3mx60seg;action=rate($$ client_address/3/60/450 4.7.1 No se puede enviar mas de 3 mensajes durante 60 segundos.)
En esta configuración tenemos dos opciones:
En la configuración, definimos la variable: &&SERVIDOR_DE_ZIMBRA, en la cual hemos puesto la IP de nuestro servidor de Zimbra. Podriamos poner más IP’s de servidores separados por una coma. Creamos la primera regla 100_SERVIDOR_DE_ZIMBRA, la cual nos hará un salto a la regla 690_3mx60seg, y está nos hará el filtrado de 3 mensajes durante 60 segundos. Hacemos este “salto”, ya que hemos puesto la regla: 500_DEFAULT por si abriesemos el relay del servidor de postfix y nos olvidamos añadirlo en la variable de nuestro firewall. De esta forma conseguimos que si la IP no está ubicada en alguna variable, se le aplicará la 500_DEFAULT por defecto.
Verificamos la configuración y reiniciamos los servicios para que se apliquen los cambios:
root@fwpostfix:~# postfwd -f /etc/postfix/Custom/postfwd.cf -C Rule 0: id->"100_SERVIDOR_DE_ZIMBRA"; action->"jump(690_3mx60seg)"; client_address->"=;192.168.100.20" Rule 1: id->"500_DEFAULT"; action->"rate(client_address/ 2/60/450 4.7.1 No se puede enviar mas de 2 mensajes durante 60 segundos.)" Rule 2: id->"690_3mx60seg"; action->"rate(client_address/ 3/60/450 4.7.1 No se puede enviar mas de 3 mensajes durante 60 segundos.)" root@fwpostfix:~# service postfix restart && service postfwd restart
Ahora solamente nos queda desviar el correo de Zimbra hacia este servidor y realizar varias pruebas. Si quieres más información de como desviar el correo de un servidor de Zimbra, lo podeis leer aquí: http://www.jorgedelacruz.es/
[root@zimbra ~]# su - zimbra [zimbra@zimbra ~]$ zmprov mcf zimbraMtaRelayHost 192.168.100.21:25
Hacemos un envio de varios mails desde nuestro servidor de Zimbra y observaremos que cuando nos pasamos de la cantidad indicada, los mensajes son guardados en la cola del servidor de Zimbra y poco a poco irán saliendo. En nuestro servidor de Postfix veremos la siguiente línea en los logs:
root@fwpostfix:~# tail –f /var/log/mail.log
Jan 26 21:05:19 fwpostfix postfwd2/policy[22746]: [RULES] rule=02, id=690_3mx60seg, queue=40C8B180105, client=unknown[192.168.100.20]
recipient=<oscarmash@gmail.
Recordar, que esta es una solución OpenSource y que este sistema lo implementan muchos fabricantes. Espero que os sea de ayuda.






Estimado jorge, te escribo para consultarte cómo se desactiva y activa la administración web de zimbra. Me gustaría habilitar localmente solo cuando voy a administrar el servidor. Tengo acceso local al equipo.
Hola Jhonatan,
La forma más sencilla sería dropear el acceso al puerto 7071 o 9071, los cuales corresponden a la administración web de Zimbra (según sea tu implementación, será un puerto o otro), es mediante IPTABLES.
Un saludo
Hola estoy tratando de configurar todo como dices aqui, y ya lo tengo todo listo. Pero cuano lo echo a andar, el postfix me da un error de configuracion. A ver te explico como tengo montadas las cosas en mi red. Tengo el zimbra actualmente en la lan 192.168.1.2 y recibe y envia a traves de un firewall. Ahora el postfix con postfwd lo tengo en la lan tambien con 192.168.1.6, cuando le digo a zimbra que su relay host va a ser el postfix todo bien. Pero cuando le digo al firewall que quien va a enviar y recibir nuevamente es el postfix ahi viene el problema, pues cuando los servidores externos tratan de comunicarse con el postfix el postfix devuelve Connection Refuser Server Error y cierra la comunicacion. Puedes ayudarme????
Hola Oscar gracias por tu post, quería preguntarte si usar PostFwd o implementar Cluebringer Policyd que también nos aportaste.
Qué diferencia hay entre los 2, o se los puede usar juntos para mayor seguridad de nuestros servidores zimbra.
Saludos
Saludos Hernan,
Aqui un Script para lanzar CBPolicyD – https://github.com/Zimbra-Community/zimbra-tools/blob/master/cbpolicyd.sh
Espero ayude, un saludo
Muchas gracias Jorge por el script ya lo voy probar 😉 en cuanto a mi duda podrías decirme si ya implementando CBPolicyD no hace falta instalar el Postfwd? Gracias por todo
Estimado Jorge, implemente el PostFWD de acuerdo al tutorial, pero al momento de enviar mas de 5 mensajes en menos de 60 segundos, no bloquea ni muestra el mensaje “No se puede enviar mas de 3 mensajes durante 60 segundos” en el (tail –f /var/log/mail.log), Todos los mensajes muestran status=sent, y todos los emnsajes llegan a su destino. Por favor tu ayuda, no se si estoy haciendo algo mal en algun script.