Zimbra Collaboration Suite Open-Source Edition cuenta con varias herramientas poderosas para garantizar la seguridad de la información. Entre ellas — una solución para proteger el servidor de correo de ataques de botnets, ClamAV — un antivirus capaz de escanear archivos y correos entrantes en busca de infecciones por malware, así como — uno de los mejores filtros de spam disponibles hoy en día. Sin embargo, estas herramientas no pueden proteger Zimbra OSE de ataques como el de fuerza bruta. Aunque no es el método más elegante, la utilización de un diccionario para la recuperación de contraseñas sigue siendo eficaz y puede generar no solo la posibilidad de un acceso exitoso con todas las consecuencias que conlleva, sino también una carga significativa en el servidor debido a todos los intentos fallidos de acceso al servidor con Zimbra OSE.

En principio, se puede proteger contra la fuerza bruta utilizando las herramientas estándar de Zimbra OSE. Las configuraciones de la política de seguridad de contraseñas permiten establecer el número de intentos fallidos de introducción de contraseñas tras los cuales la cuenta potencialmente atacada se bloquea. El principal problema de este enfoque es que pueden surgir situaciones en las que las cuentas de uno o varios empleados se bloqueen debido a un ataque de fuerza bruta al que no tienen ninguna relación, y el tiempo de inactividad resultante para los empleados puede ocasionar grandes pérdidas a la empresa. Por ello, esta opción de protección contra la fuerza bruta es mejor no implementarla.

Para protegerse contra ataques de fuerza bruta, es mucho mejor utilizar una herramienta específica llamada DoSFilter, que está integrada en Zimbra OSE y puede interrumpir automáticamente la conexión con Zimbra OSE por HTTP. En otras palabras, el principio de funcionamiento de DoSFilter es similar al de PostScreen, pero se utiliza para otro protocolo. Originalmente destinada a limitar la cantidad de acciones que un único usuario puede realizar, DoSFilter también puede proteger contra ataques de fuerza bruta. Su diferencia clave con la herramienta integrada en Zimbra es que, después de un número determinado de intentos fallidos, bloquea no al usuario mismo, sino a la dirección IP desde la que se están realizando múltiples intentos de acceder a una cuenta. Gracias a esto, el administrador del sistema puede no solo protegerse contra ataques de fuerza bruta, sino también evitar el bloqueo de empleados de la empresa, simplemente añadiendo a la lista de direcciones IP y subredes de confianza la red interna de su empresa.
Una gran ventaja de DoSFilter es que, además de bloquear numerosos intentos de acceder a varias cuentas, con esta herramienta se pueden bloquear automáticamente a los intrusos que han conseguido las credenciales de autenticación de un empleado y luego han accedido a su cuenta y comenzado a enviar cientos de solicitudes al servidor.
Se puede configurar DoSFilter utilizando los siguientes comandos de consola:
- zimbraHttpDosFilterMaxRequestsPerSec — Con este comando se puede establecer el número máximo de conexiones permitidas para un único usuario. De forma predeterminada, este valor es de 30 conexiones.
- zimbraHttpDosFilterDelayMillis — Con este comando se puede establecer un retraso en milisegundos para las conexiones que superen el límite establecido por el comando anterior. Además de valores enteros, el administrador puede especificar 0 para que no haya retrasos en absoluto, así como -1 para que todas las conexiones que superen el límite establecido sean simplemente interrumpidas. De forma predeterminada, este valor es -1.
- zimbraHttpThrottleSafeIPs — Con este comando, el administrador puede especificar direcciones IP y subredes de confianza a las que no se aplicarán las limitaciones mencionadas anteriormente. Es importante señalar que la sintaxis de este comando puede variar según el resultado deseado. Por ejemplo, al introducir el comando zmprov mcf zimbraHttpThrottleSafeIPs 127.0.0.1, reescribirá toda la lista y dejará solo una dirección IP. Si ingresa el comando zmprov mcf +zimbraHttpThrottleSafeIPs 127.0.0.1, la dirección IP que introduzca se añadirá a la lista blanca. De manera similar, utilizando el signo menos, puede eliminar una IP de la lista de permitidos.
Cabe destacar que DoSFilter puede generar una serie de problemas al usar extensiones de Zextras Suite Pro. Para evitarlo, recomendamos aumentar el número de conexiones simultáneas de 30 a 100 mediante el comando zmprov mcf zimbraHttpDosFilterMaxRequestsPerSec 100. Además, recomendamos agregar la red interna de la empresa a la lista permitida. Esto se puede hacer con el comando zmprov mcf +zimbraHttpThrottleSafeIPs 192.168.0.0/24. Después de realizar cualquier cambio en DoSFilter, asegúrese de reiniciar el servidor de correo usando el comando zmmailboxdctl restart.
El principal inconveniente de DoSFilter es que opera a nivel de aplicación y por lo tanto solo puede limitar la capacidad de los atacantes para realizar diversas acciones en el servidor, sin restringir la posibilidad de conectarse al servidor. Por esta razón, las solicitudes de autenticación o envío de correos al servidor, aunque estén condenadas al fracaso, seguirán constituyendo un viejo ataque DoS, el cual no se puede detener a un nivel tan alto.
Para asegurar completamente su servidor corporativo con Zimbra OSE, puede utilizar una solución como Fail2ban, que es un marco capaz de monitorear continuamente los registros de los sistemas de información en busca de acciones repetitivas y bloquear al infractor al cambiar la configuración del firewall. El bloqueo a este nivel permite desconectar a los atacantes desde la etapa de conexión IP con el servidor. De esta manera, Fail2Ban puede complementar perfectamente la protección establecida con DoSFilter. Veamos cómo se puede integrar Fail2Ban con Zimbra OSE para aumentar la seguridad de la infraestructura de TI de su empresa.
Como cualquier otra aplicación de clase empresarial, Zimbra Collaboration Suite Open-Source Edition lleva un registro detallado de su funcionamiento. La mayoría de ellos se almacenan en la carpeta /opt/zimbra/log/ en forma de archivos. Aquí hay solo algunos de ellos:
- mailbox.log — registros del servicio de correo Jetty
- audit.log — registros de autenticación
- clamd.log — registros del funcionamiento del antivirus
- freshclam.log — registros de actualizaciones del antivirus
- convertd.log — registros del convertidor de adjuntos
- zimbrastats.csv — registros del rendimiento del servidor
También se pueden encontrar los registros de Zimbra en el archivo /var/log/zimbra.log, donde se registran las actividades de Postfix y de Zimbra misma.
Para proteger nuestro sistema contra ataques por fuerza bruta, monitorizaremos mailbox.log, audit.log y zimbra.log.
Para que todo funcione, es necesario que en su servidor con Zimbra OSE estén instalados Fail2Ban e iptables. Si está utilizando Ubuntu, puede hacerlo mediante los comandos dpkg -s fail2ban, en caso de que use CentOS, puede verificarlo con los comandos yum list installed fail2ban. En caso de que no tenga instalado Fail2Ban, su instalación no será un problema, ya que este paquete está disponible en prácticamente todos los repositorios estándar.
Después de que todo el software necesario esté instalado, puede proceder a configurar Fail2Ban. Para ello, es necesario crear un archivo de configuración /etc/fail2ban/filter.d/zimbra.conf, en el que escribiremos expresiones regulares para los registros de Zimbra OSE, las cuales corresponderán a intentos de inicio de sesión fallidos y activarán los mecanismos de Fail2Ban. Aquí hay un ejemplo del contenido de zimbra.conf con un conjunto de expresiones regulares que corresponden a diversos errores generados en Zimbra OSE durante un intento fallido de autenticación:
# Fail2Ban configuration file
[Definition]
failregex = [ip=<HOST>;] account - authentication failed for .* (no such account)$
[ip=<HOST>;] security - cmd=Auth; .* error=authentication failed for .*, invalid password;$
;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$
;oip=<HOST>;.* security - cmd=Auth; .* protocol=imap; error=authentication failed for .* invalid password;$
[oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$
WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$
ignoreregex =Después de que se hayan elaborado las expresiones regulares para Zimbra OSE, es momento de editar la configuración de Fail2ban. Los ajustes de esta utilidad se encuentran en el archivo /etc/fail2ban/jail.conf. Por si acaso, hagamos una copia de seguridad con el comando cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak. Después de esto, vamos a modificar este archivo para que tenga un aspecto aproximadamente similar al siguiente:
# Fail2Ban configuration file
[DEFAULT]
ignoreip = 192.168.0.1/24
bantime = 600
findtime = 600
maxretry = 5
backend = auto
[ssh-iptables]
enabled = false
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=admin@company.ru, sender=fail2ban@company.ru]
logpath = /var/log/messages
maxretry = 5
[sasl-iptables]
enabled = false
filter = sasl
backend = polling
action = iptables[name=sasl, port=smtp, protocol=tcp]
sendmail-whois[name=sasl, dest=support@company.ru]
logpath = /var/log/zimbra.log
[ssh-tcpwrapper]
enabled = false
filter = sshd
action = hostsdeny
sendmail-whois[name=SSH, dest=support@ company.ru]
ignoreregex = for myuser from
logpath = /var/log/messages
[zimbra-account]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-account]
sendmail[name=zimbra-account, dest=support@company.ru ]
logpath = /opt/zimbra/log/mailbox.log
bantime = 600
maxretry = 5
[zimbra-audit]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-audit]
sendmail[name=Zimbra-audit, dest=support@company.ru]
logpath = /opt/zimbra/log/audit.log
bantime = 600
maxretry = 5
[zimbra-recipient]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-recipient]
sendmail[name=Zimbra-recipient, dest=support@company.ru]
logpath = /var/log/zimbra.log
bantime = 172800
maxretry = 5
[postfix]
enabled = true
filter = postfix
action = iptables-multiport[name=postfix, port=smtp, protocol=tcp]
sendmail-buffered[name=Postfix, dest=support@company.ru]
logpath = /var/log/zimbra.log
bantime = -1
maxretry = 5Este ejemplo, aunque bastante universal, vale la pena aclarar algunos parámetros que puede que desee modificar al configurar Fail2Ban por su cuenta:
- Ignoreip — con este parámetro se puede indicar una IP específica o una subred cuyos direcciones Fail2Ban no debería comprobar. Generalmente, se añaden a la lista de ignorados la red interna de la empresa y otras direcciones confiables.
- Bantime — Tiempo durante el cual un infractor será bloqueado. Se mide en segundos. Un valor de -1 significa un bloqueo indefinido.
- Maxretry — El número máximo de veces que una dirección IP puede intentar acceder al servidor.
- Sendmail — Configuración que permite enviar automáticamente notificaciones por correo electrónico cuando se activa Fail2Ban.
- Findtime — Configuración que permite establecer un intervalo de tiempo después del cual la dirección IP puede intentar nuevamente acceder al servidor después de alcanzar la cantidad máxima de intentos fallidos (parámetro maxretry)
Después de guardar el archivo con las configuraciones de Fail2Ban, solo queda reiniciar esta utilidad usando el comando service fail2ban restart. Tras el reinicio, los registros principales de Zimbra comenzarán a monitorearse continuamente para coincidir con las expresiones regulares. Gracias a esto, el administrador podrá efectivamente eliminar cualquier posibilidad de que un atacante penetre no solo en los buzones de Zimbra Collaboration Suite Open-Source Edition, sino también proteger todos los servicios en funcionamiento dentro de Zimbra OSE, así como estar al tanto de cualquier intento de acceso no autorizado.
Para cualquier pregunta relacionada con Zextras Suite, puede ponerse en contacto con la representante de la empresa "Zextras" Ekaterina Triandafiliidi al correo electrónico katerina@zextras.com
Fuente: habr.com
