Forzar autenticación del Remitente y validación del mismo en Zimbra 7, 8 y 8.5 o superior

En un articulo anterior vimos la validación del remitente en Zimbra. En este artículo veremos como forzar esta autenticación y veremos nuevamente la validación del remitente y así evitaremos la suplantación de identidad.

Veamos los siguientes escenarios:

1- Desde un usuario externo para otro externo el resultado es Relay Access Denied

#telnet mail.dominio.cu 25
Trying 103.XXX.XXX.XXX...
Connected to mail.dominio.cu.
Escape character is '^]'.
220 mail.dominio.cu ESMTP Postfix
ehlo mail.dominio.cu
250-mail.dominio.cu
250-PIPELINING
250-SIZE 51200000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
554 5.7.1 : Relay access denied

2. Desde un usuario externo a un usuario de nuestro Zimbra y en resultado es que el mensaje es aceptado con escaneo previo para spam y virus

#telnet mail.dominio.cu 25
Trying 103.XXX.XXX.XXX...
Connected to mail.dominio.cu.
Escape character is '^]'.
220 mail.dominio.cu ESMTP Postfix
ehlo mail
250-mail.dominio.cu
250-PIPELINING
250-SIZE 51200000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with .
Hola
.
250 2.0.0 Ok: queued as C78EDB6E001
quit
221 2.0.0 Bye

3. Desde un usuario Zimbra a un usuario externo y el resultado es aceptado sin la previa autorización SMTP

#telnet mail.dominio.cu 25
Trying 103.XXX.XXX.XXX...
Connected to mail.dominio.cu.
Escape character is '^]'.
220 mail.dominio.cu ESMTP Postfix
ehlo mail
250-mail.dominio.cu
250-PIPELINING
250-SIZE 6144000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with .
Hola
.
250 2.0.0 Ok: queued as C78EDB6E001
quit
221 2.0.0 Bye

4. Desde un usuario Zimbra a otro usuario Zimbra y el resultado es aceptado sin la previa autorización SMTP

#telnet mail.dominio.cu 25
Trying 103.XXX.XXX.XXX...
Connected to mail.dominio.cu.
Escape character is '^]'.
220 mail.dominio.cu ESMTP Postfix
ehlo mail
250-mail.dominio.cu
250-PIPELINING
250-SIZE 6144000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
250 2.1.5 Ok
data
354 End data with .
Hola
.
250 2.0.0 Ok: queued as C78EDB6E001
quit
221 2.0.0 Bye

Desde [email protected] a [email protected] sin autorización previa, Zimbra acepta este correo electrónico y no debería hacerlo. Esto permitiría enviar un correos falsos, por ejemplo podemos enviar un mensaje cuyo remitente sea el jefe de una entidad a los empleados con una información falsa. Para evitar este agujero de seguridad, más abajo hay algunas modificaciones que son capaces de ser aplicados en para distintas versiones de Zimbra. Esta modificación obligará al usuario interno a autenticarse antes de enviar un correo electrónico a usuarios internos o externos.

Para Zimbra 7

#su - zimbra
#cd /opt/zimbra/conf
#nano zmmta.cf

Agregamos esta linea debajo de POSTCONF smtpd_sender_restrictions LOCAL postfix_smtpd_sender_restrictions

POSTCONF smtpd_sender_login_maps FILE postfix_sender_login_maps.cf

Guarde la configuración y ejecute el siguiente comando:

#zmlocalconfig -e postfix_smtpd_sender_restrictions=reject_authenticated_sender_login_mismatch

Crear un archivo que acababa de declararse en zmmta.cf

#nano postfix_sender_login_maps.cf

con el contenido:

hash:/opt/zimbra/conf/exceptions-db
ldap:/opt/zimbra/conf/ldap-restricrelay.cf

Creamos el archivo exceptions-db y lo rellenamos con un usuario o puede dejarse en blanco

#nano /opt/zimbra/conf/exceptions-db

Salvamos y creamos el hash

#/opt/zimbra/postfix/sbin/postmap exceptions-db

Ahora, necesitamos información sobre el host del servidor ldap y la contraseña para utilizar en el archivo ldap-restricrelay.cf. Ejecutamos lo siguiente:

#grep server_host /opt/zimbra/conf/ldap-vam.cf
#grep bind_pw /opt/zimbra/conf/ldap-vam.cf

Creamos el archivo ldap-restricrelay.cf.

#nano /opt/zimbra/conf/ldap-restricrelay.cf

y en su interior tomando de lo anterior server_host y bind_pw:

server_host = ldap://mail.dominio.cu:389
server_port = 389
search_base =
query_filter = (&(|(uid=%s)(zimbraMailDeliveryAddress=%s)(zimbraMailAlias=%s)(zimbraMailCatchAllAddress=%s))(zimbraMailStatus=enabled))
result_attribute = uid,zimbraMailDeliveryAddress,zimbraMailForwardingAddress,zimbraPrefMailForwardingAddress,zimbraMailCatchAllForwardingAddress
version = 3
start_tls = yes
tls_ca_cert_dir = /opt/zimbra/conf/ca
bind = yes
bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra
bind_pw = PASSWORD
timeout = 30

Abrimos postfix_smtpd_sender_restrictions

#nano /opt/zimbra/conf/postfix_smtpd_sender_restrictions

y debajo de permit_mynetworks agregamos reject_sender_login_mismatch y guardamos el archivo. Seguidamente asignamos los dueños de los archivos creados o modificados y reiniciamos el servicio mta del zimbra.

#chown zimbra: postfix_sender_* exceptions-db* ldap-restricrelay.cf
#zmmtactl restart

Para Zimbra 8 (Proceso similar con pequeñas modificaciones)

#su - zimbra
#nano /opt/zimbra/conf/zmconfigd.cf

Agregamos esta linea debajo de POSTCONF smtpd_sender_restrictions FILE zmconfigd/smtpd_sender_restrictions.cf

POSTCONF smtpd_sender_login_maps FILE zmconfigd/postfix_sender_login_maps.cf

Nos movemos a la carpeta /opt/zimbra/conf/zmconfigd/

#cd /opt/zimbra/conf/zmconfigd/

y editamos

#nano smtpd_sender_restrictions.cf

Debajo de permit_mynetworks agregamos reject_sender_login_mismatch y guardamos el archivo.

Crear un archivo que acababa de declararse en zmconfigd.cf

#nano postfix_sender_login_maps.cf

con el siguiente contenido:

hash:/opt/zimbra/conf/exceptions-db
ldap:/opt/zimbra/conf/ldap-slm.cf

Ahora, necesitamos información sobre el host del servidor ldap y la contraseña para utilizar en el archivo ldap-slm.cf. Ejecutamos lo siguiente:

#cd /opt/zimbra/conf
#grep server_host /opt/zimbra/conf/ldap-vam.cf
#grep bind_pw /opt/zimbra/conf/ldap-vam.cf
#nano ldap-slm.cf

y en su interior tomando de lo anterior server_host y bind_pw:

server_host = ldap://mail.dominio.cu:389
server_port = 389
search_base =
query_filter = (&(|(zimbraMailDeliveryAddress=%s)(zimbraMailAlias=%s)(zimbraMailCatchAllAddress=%s)(mail=%s))(zimbraMailStatus=enabled))
result_attribute = zimbraMailDeliveryAddress,zimbraMailForwardingAddress,zimbraPrefMailForwardingAddress,zimbraMailCatchAllForwardingAddress,uid
version = 3
start_tls = yes
tls_ca_cert_dir = /opt/zimbra/conf/ca
bind = yes
bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra
bind_pw = PASSWORD
timeout = 30

Creamos el archivo exceptions-db y lo rellenamos con un usuario o puede dejarse en blanco

#nano /opt/zimbra/conf/exceptions-db

[email protected] [email protected]

De relleno anterior se pretende que [email protected] usuario puede pasar por usuario [email protected]

Salvamos y creamos el hash

#/opt/zimbra/postfix/sbin/postmap /opt/zimbra/conf/exceptions-db

Ajustamos los propietarios de los archivos creados o modificados y reniciamos el mta de zimbra

#chown zimbra: exceptions-db* ldap-slm.cf
#zmmtactl restart

Para Zimbra 8.5 o superior

En esta versión de zimbra es mucho más sencilla la implementación de esto a partir de comandos del mismo.

Se procede a crear la base de datos de la misma manera de para las versiones de zimbra anteriores y cuando ya hallamos generado el postmap de la base datos hacemos lo siguiente

#su - zimbra
#zmprov mcf zimbraMtaSmtpdSenderLoginMaps 'lmdb:/opt/zimbra/conf/slm-exceptions-db, proxy:ldap:/opt/zimbra/conf/ldap-slm.cf' +zimbraMtaSmtpdSenderRestrictions reject_authenticated_sender_login_mismatch
#exit

Sin la base de datos de las excepciones sería de la siguiente forma:

#su - zimbra
#zmprov mcf zimbraMtaSmtpdSenderLoginMaps proxy:ldap:/opt/zimbra/conf/ldap-slm.cf +zimbraMtaSmtpdSenderRestrictions reject_authenticated_sender_login_mismatch
#exit

Abrimos /opt/zimbra/conf/zmconfigd/smtpd_sender_restrictions.cf y agregamos reject_sender_login_mismatch debajo permit_mynetworks

Reiniciamos el mta del zimbra para que surtan efectos los cambios realizados.

#su zimbra
#zmmtactl restart.

Ahora veremos si funciona lo que hemos hecho y usaremos nuevamente telnet para conectarnos al servidor:

#telnet mail.dominio.cu 25
Trying 103.xxx.xxx.xxx
Connected to mail.dominio.cu.
Escape character is '^]'.
220 mail.dominio.cu ESMTP Postfix
ehlo mail
250-mail.dominio.cu
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
553 5.7.1 <[email protected]> Sender address rejected: not logged in

Como pueden observar el usuario de zimbra ya necesita autenticarse previamente antes de enviar el mensaje y cuando no lo hace devuelve el mensaje de remitente rechazado: no esta logueado (Sender address rejected: not logged in).
Tambien podemos cambiar el FROM en un cliente (ej: Evolution o otro) y verán el efecto que produce. Vean la imagen

Valida el from del mensaje.

Esperamos que les sea de utilidad.

1 Comment

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*