Fortaleciendo la Seguridad de Carbonio CE: Fail2Ban y Certificado SSL con Let’s Encrypt

En esta guía abordaremos tres pilares fundamentales para asegurar y mantener operativo nuestro servidor Carbonio CE. Primero, reforzaremos la seguridad con Fail2Ban, bloqueando ataques de fuerza bruta de manera automática. Luego, configuraremos un certificado SSL con Let’s Encrypt mediante la interfaz web de administración, garantizando comunicaciones cifradas y confiables. Finalmente, cerraremos con la renovación automática del certificado, asegurando que el sistema se mantenga protegido sin intervención manual.

🛡️ Instalación y configuración de Fail2Ban en Carbonio CE

Para reforzar la seguridad de nuestro servidor Carbonio CE, implementaremos Fail2Ban, una herramienta que monitorea los registros de acceso y bloquea automáticamente las direcciones IP que realizan varios intentos de conexión fallidos de manera reiterada generando un ataque de fuerza bruta. Con esta configuración añadimos una capa adicional de protección frente a ataques de fuerza bruta y accesos no autorizados, asegurando que los servicios de Carbonio permanezcan disponibles y confiables.

Instala los paquetes de iptables y fail2ban:

apt update && apt install iptables fail2ban

Crea el archivo de configuración para los filtros de Carbonio CE con el siguiente contenido:

nano /etc/fail2ban/filter.d/carbonio.conf
[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=soap; error=authentication failed for .* credentials;$
         \;oip=<HOST>;.* security - cmd=Auth; .* protocol=imap; error=authentication failed for .* invalid credentials;$
         \;oip=<HOST>;.* security - cmd=Auth; .* protocol=pop3; error=authentication failed for .* invalid credentials;$
         \;oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$
         \;oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .* invalid credentials$
         WARN .*;ip=<HOST>;ua=CarbonioWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$
         WARN .*;oip=<HOST>;.* security - cmd=AdminAuth; .* error=authentication failed for .*;$
         NOQUEUE: reject: RCPT from .*\[<HOST>\]: 550 5.1.1 .*: Recipient address rejected:

Crea el archivo de configuracion local con el siguiente contenido:

nano /etc/fail2ban/jail.local
[DEFAULT]
# "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts.
# Fail2ban will not ban a host which matches an address in this list.
# Several addresses can be defined using space (and/or comma) separator.
ignoreip = 127.0.0.1/8 192.168.3.35/32

banaction = route

# Carbonio Jails Local.

[carbonio-account]
enabled = true
filter = carbonio
action = iptables-allports[name=carbonio-account]
#sendmail[name=carbonio-account, dest=zextras@domain.tld]
logpath = /opt/zextras/log/mailbox.log
bantime = 600
maxretry = 5
findtime = 300

[carbonio-audit]
enabled = true
filter = carbonio
action = iptables-allports[name=carbonio-audit]
#sendmail[name=Carbonio-audit, dest=zextras@domain.tld]
logpath = /opt/zextras/log/audit.log
bantime = 600
maxretry = 10
findtime = 300

[carbonio-recipient]
enabled = true
filter = carbonio
action = iptables-allports[name=carbonio-recipient]
#sendmail[name=Carbonio-recipient, dest=zextras@domain.tld]
logpath = /var/log/carbonio.log
bantime = 172800
maxretry = 5
findtime = 300

[postfix]
enabled = true
filter = postfix
action = iptables-multiport[name=postfix, port=smtp, protocol=tcp]
#sendmail-buffered[name=Postfix, dest=zextras@domain.tld]
logpath = /var/log/carbonio.log
bantime = 172800
maxretry = 5
findtime = 300

Ajusta el valor de ignoreip con las direcciones IP a las cuales no se aplicará ningún bloqueo. Es muy importante agregar en esta sección la dirección IP del servidor de correo Carbonio.

De este modo, nuestra configuración para el servicio de Carbonio permite un máximo de 5 intentos de inicio de sesión fallidos en los servicios HTTPS, IMAPS, POP3S y SMTPS, si supera este umbral Fail2ban bloqueará de forma automática la o las dirección IP desde la cuales se registre estos eventos.

Habilita y reinicia el servicio de fail2ban:

systemctl enable fail2ban
systemctl restart fail2ban

Verifica el estado de la configuración de fail2ban:

fail2ban-client status <jail>
fail2ban-client status carbonio-audit
Status for the jail: carbonio-audit
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:

Puedes verificar si los filtros configurados para Carbonio coinciden con los registros del archivo de log de la siguiente manera:

fail2ban-regex <archivo_de_log> <archivo_filtros>
fail2ban-regex /opt/zextras/log/mailbox.log /etc/fail2ban/filter.d/carbonio.conf

🔐 Configuración de Certificado SSL con Let’s Encrypt

La configuración del certificado SSL en Carbonio CE se realiza de manera sencilla a través de la interfaz web administrativa. Desde el panel de Admin UI es posible solicitar certificados de Let’s Encrypt para uno o varios dominios. Este enfoque facilita su gestión y asegura que los certificados se integren directamente con los servicios de Carbonio.

Comprueba el modo de correo proxy inverso zimbraReverseProxyMailMode de tu servidor. Por defecto está configurado como https, deberías ver en pantalla un contenido similar al siguiente:

su - zextras -c "carbonio prov gs correo.novatiecuador.com zimbraReverseProxyMailMode"

# name correo.novatiecuador.com
zimbraReverseProxyMailMode: https

Para que certbot (aplicación que gestiona la emisión, configuración y renovación del certificado SSL) funcione y se emitan los certificados SSL de Let’s Encrypt, es necesario cambiar el modo a redirect. Este modo permite redireccionar de forma automática las peticiones HTTP a HTTPS. Para ello ejecutar el siguiente comando:

su - zextras -c "carbonio prov ms correo.novatiecuador.com zimbraReverseProxyMailMode redirect"

La razón por la que cambiamos el modo es porque, cuando intentemos ejecutar certbot para configurar Let’s Encrypt, la autoridad de certificación intentará inicialmente conectarse a nuestro servidor Carbonio utilizando el protocolo HTTP (Puerto 80). El intento de conexión fallará si el modo está configurado como HTTPS (Puerto 443). Por lo tanto, cambiamos el modo a redirect (redireccionamiento), de modo que cualquier intento de conexión que utilice el protocolo HTTP se redirigirá automáticamente a HTTPS y la conexión se establecerá correctamente para la emisión o renovación del certificado SSL.

Reinicia el servicio carbonio-proxy para aplicar el cambio realizado:

systemctl restart carbonio-proxy.target

Ingresa a la interfaz web administrativa de tu servidor Carbonio. Selecciona tu dominio y en la sección de Detalles dirígete a la opción de Hosts Virtuales y certificados:

Introduce el nombre del host virtual con el cual se generará el certificado, presiona clic en Aceptar:

Una vez especificado el host virtual, verifica que se haya agregado en la sección de Nombre del Host virtual y presiona clic en el botón Guardar:

Una vez guardados los cambios, presiona clic en el botón Verificar Certificado:

Selecciona el tipo de certificado Let’s Encrypt (longChain) y presiona clic en el botón Generar Certificado:

Ingresa al buzón del usuario administrador zextras, y verifica en la bandeja de entrada que la solicitud del certificado haya sido exitosa, deberías ver dos correos electrónicos con un contenido similar al siguiente:

Reinicia el servicio carbonio-proxy para reflejar el cambio de certificado:

systemctl restart carbonio-proxy.target

Verifica ingresando a la interfaz web con el nombre de tu host virtual colocado e inspecciona el certificado:

🔄 Renovación automática del certificado

Para automatizar la renovación de certificados SSL en Carbonio CE, utilizaremos dos tareas cron jobs, uno bajo el usuario zextras que ejecuta la renovación con Certbot y regenera la configuración del proxy, y otro bajo el usuario root que reinicia el servicio carbonio-proxy.target. El cron de zextras se ejecuta primero, y unos minutos después el cron de root aplica el reinicio para que el nuevo certificado quede activo.

Agrega el siguiente contenido en el archivo de configuración de crontab del servidor, para ello editar el archivo /etc/crontab y agregar las siguientes líneas:

nano /etc/crontab
0 0 * * 0 zextras certbot renew && /opt/zextras/libexec/zmproxyconfgen                                     
5 0 * * 0 root systemctl restart carbonio-proxy.target

Con la programación de las tareas cron anteriores, aseguramos que la renovación de certificados SSL en Carbonio CE se ejecute de forma automática una vez por semana, cada domingo a la medianoche.

¿Te gusta este post? Es solo un ejemplo de cómo podemos ayudar a tu empresa…

Comparte:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *