Por Daniel Seveso

En un ambiente heterogéneo, puede ser necesario que dispositivos (Network Apliances) o servidores en plataformas no-Windows, envien mensajes utilizando SMTP a nuestra infrastructura de mensajería en Exchange. Esta funcionalidad es utilizada generalmente por aplicaciones que envian reportes via e-mail, transferencia de faxes o scanners, o alarmas de sistemas de monitoreo.

Recibimos esta pregunta regularmente de nuestros clientes y es por eso que me pareció interesante publicar cómo ponerlo en práctica de una forma segura.

Supongamos que el equipo que envia mensajes, utiliza SMTP y no es capaz de autenticarse con Active Directory. Es también un requerimiento permitir que el dispositivo envíe mensajes tanto a usuarios dentro como fuera de la organización.

Hub Transport server: 192.168.131.162
Dispositivo: 192.168.131.88

El procedimiento de configuración sería el siguiente:

  • Creamos un "Receive Connector" en un servidor con el rol de HUB en Exchange 2007

Como buena práctica de seguridad, creamos un "Receive Connector" dedicado a esta función, y así evitar que sea utilizado por clientes y usuarios externos.

El siguiente comando crea un conector de nombre "RelayAnonimo" que solamente dará servicio a nuestro dispositivo (asumimos que estamos logueados al Hub Transport server donde vamos a crear el conector para todo los comandos del shell):

[PS] C:\>New-ReceiveConnector RelayAnonimo -Bindings 192.168.131.162:25 -RemoteIPRanges 192.168.131.88-192.168.131.88

 

El parámetro RemoteIPRanges define que direcciones IP puede conectarse al conector. También posibilita la creación del conector escuchando en el puerto 25 aunque exista otro conector escuchando en el mismo par IP/puerto.

Como medida adicional de seguiridad podríamos configurar el conector para que escuche en un puerto diferente al 25. Por supuesto el dispositivo debe permitir  el cambio del puerto SMTP. El comando para que el conector escuche por ejemplo, en el puerto 525, sería: 

New-ReceiveConnector RelayAnonimo -Bindings 192.168.131.162:525 -RemoteIPRanges 192.168.131.88-192.168.131.88

  • Configuramos el conector para que no publique ningún tipo de autentíficación.

Esta precaución evitará que el cliente intente algún método de autenticación no deseado. (Por default el conector se crea con los siguientes métodos de autenticación habilitados: Tls, Integrated, BasicAuth, BasicAuth RequireTLS y  ExchangeServer)

El comando sería:

[PS] C:\>Set-ReceiveConnector relayanonimo -AuthMechanism none

 

  • Permitimos a usuarios anónimos conectarse desde la dirección 192.168.131.88.

Por default, el conector estará configurado con los siguientes permisos y no acepta conexiones anónimas: 

PermissionGroups : ExchangeUsers, ExchangeServers, ExchangeLegacyServers

El comando para configurar acceso anónimo y borrar el resto de los permisos es el siguiete:

[PS] C:\>Set-ReceiveConnector Relayanonimo -PermissionGroups AnonymousUsers

 

La configuración por default del "PermissionGroups" AnonymousUsers, otorga los siguientes permisos en el conector:

Ms-Exch-Accept-Headers-Routing

Permite el ingreso de todos los encabezados (Headers). Si este permiso no es otorgado, Exchange filtrará todos los encabezados del mensaje.

Ms-Exch-SMTP-Accept-Any-Sender

Permite que la sesíón no sea controlada por el mecanismo de verificación de spoofing aceptando cualquier remitente.

Ms-Exch-SMTP-Accept-Authoritative-Domain-Sender

Permite que la sesión sea iniciada por un remitente perteneciente a un dominio autoritativo interno.

Ms-Exch-SMTP-Submit

Permite aceptar mensajes en el conector. Si este permiso no es otorgado, el comando "MAIL FROM" es rechazado

Nota que el conjunto de permisos para usuarios "AnonymousUsers" no habilta el relay.

  • Permitir el relay a usuarios anónimos desde la dirección 192.168.131.88

El permiso Ms-Exchange-SMTP-Accept-Any-Recipient que es el necesario para permitir relay de mensajes, no es otorgado por default cuando se asigna el PermissionGroups "AnonymousUsers", y por lo tanto debemos configurarlo explícitamente. Este es el comando necesario:

[PS] C:\>Get-ReceiveConnector Relayanonimo | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

 

El conector ya está en condiciones de aceptar conexiones anónimas y realizar "relay" a través de tu Hub Transport server.

El conjunto de propiedades relevantes del conector será el siguiente:

[PS] C:\>Get-ReceiveConnector relayanonimo |fl

AuthMechanism : None
Bindings : {192.168.131.162:25}
PermissionGroups : AnonymousUsers, Custom
RemoteIPRanges : {192.168.131.88-192.168.131.88}
RequireTLS : False
EnableAuthGSSAPI : False
Name : RelayAnonimo

 

 

¿Puedo realizar este procedimiento por el Exchange Management Console?

Si bien esta configuración puede realizarse casi en su totalidad usando el Exchange Management Console, la configuración de relay es posible solamente a través del Exchange command shell.

Aqui va el procedimiento paso a paso:

1) Desde el Exchange Management Console, expandes Server Configuration, Hub Transport y seleccionas el Hub transport server donde vas a configurar el conector.

2) Seleccionas del area de Actions, New Receive Connector...

image

3) Ingresas los datos para crear el conector

image image

image

4) Abres las propiedades del conector y configuras el método de autenticación y los grupos de accesso:

image image

image image

5) Configuras permisos de relay anónimo desde el command shell:

[PS] C:\>Get-ReceiveConnector Relayanonimo | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

 

Para probar tu conector, puedes usar cualquier máquina en workgroup, agregar su dirección ip en "Remote IP Address(es)" y usar el siguiente artículo para comprobar la funcionalidad del conector: Telnet to Port 25 to test SMTP Communication.

Referencias:

How to Allow Anonymous Relay on a Receive Connector

¡Hasta la próxima!