Split Domain Routing (SDR) Compartiendo los buzones de correo en distintos servidores y un solo dominio. Split Domain desde G-Suite hacia Zimbra server y viceversa.

El escenario es el siguiente: Tenemos una cuenta de correos en G-SUITE con 5 cuentas de correo pagadas, pero la organizacion desea que bajo este mismo dominio se creen mas buzones pero NO en Gsuite, si no en un servidor mas barato (Zimbra), por lo que compartiriamos un dominio en 2 servidores de correo distintos. Mi escenario seria el siguiente:

Dominio: midominio.pe

Cuentas en Gsuite: 5 cuentas con el dominio @midominio.pe (usuario1@midominio.pe , usuario2@midominio.pe , usuario3@midominio.pe , usuario4@midominio.pe , usuario5@midominio.pe)

Cuentas en otro Servidor (Cualquiera): para mi ejemplo ZIMBRA 8.9.9 (usuario6@midominio.pe ….usuario20@midominio.pe)

Flujo de correo 1

1.- Cuando se envia un correo desde internet o desde el mismo Gmail (cualquiera de las 5 cuentas) hacia el dominio midominio.pe, primero llega al servidor de G-suite

2.- G-suite evalua si el buzon esta dentro de su servidor.

3.- Si el buzon esta dentro de su servidor, entrega el correo y acaba la secuencia.

4.- Si el buzon no esta en Gmail (cualquiera de las 5 cuentas pagadas), esta debería hacer un relay al servidor especificado (Zimbra para mi ejemplo).

5.- Si Zimbra encuentra el buzón, el mensaje es entregado, caso contario este servidor avisa a GMAIL que el buzon no existe, y Gmail avisa al destinatario que no existe ese buzón.

Flujo de correo 2

1.- El correo es enviado desde una cuenta local de zimbra. ( usuario6@midominio.pe ….usuario20@midominio.pe )

2.- Zimbra evalua si la cuenta esta dentro de sus buzones. Si esta entrega el correo y acaba.

3.- Si no esta el buzon en zimbra, lo envia hacia G-suite, G-Suite evalua si lo tiene dentro de sus buzones, si lo tiene lo entrega, caso contrario lo vuelve a enviar a Zimbra (Cuidado, aqui ya esta haciendo loop indeterminado)

4.- Zimbra lo recibe y evalua de nuevo si la cuenta esta dentro de sus buzones, si no lo encuentra, debe rechazar el correo y finalizar

Si nos damos cuenta, si no tenemos cuidado, en la configuración, al no existir una cuenta en ninguno de los servidores, podriamos hacer un loop indeterminado y terminar siendo bloqueados por G-Suite (Aplicar :
https://wiki.zimbra.com/wiki/Split_Domain ) La configuracion personalizada lo haremos mas adelante, pues para la versión 8.9.9 no funcionaba.

Asumimos lo siguiente:

  1. Tu ya tienes comprado una cuenta en G-Suite con al menos un buzon de Pago.
  2. Tu ya tienes un servidor de correos, ya sea propio como Zimbra o comprado en alguna plataforma virtual como Rackspace, 1and1.com, etc.
  3. El servidor primario de correos será G-Suite
  4. El servidor secundario es Zimbra.

Recepcion de Correos

Paso 1.- Crear el dominio y las cuentas de correos necesarias en un servidor distinto al de G-Suite (el dominio debe ser igual al que tenemos en G-Suite). No detallo los pasos de como crear cuentas de usuarios pues es demasiado obvio que lo sabes hacer Creamos cuentas: usuario1@midominio.pe , usuario2@midominio.pe , usuario3@midominio.pe , usuario4@midominio.pe , usuario5@midominio.pe .

Paso 2.- Configurar G-Suite para ruteo hacia los servidores secundarios (https://support.google.com/a/answer/2685650?hl=en)

  • Ingresar y Loguear, https://admin.google.com/AdminHome?hl=en&fral=1
  • Ir a Apps/G-Suite/GMail/Advance Setiings

Paso 2.- Configurar el routeo

Paso 3.- Configurar Reenvio hacia otro servidor, si no posee el buzon dentro de G-Suite

Probar el envio y repecion del correo.

Hasta este punto, lo que hemos echo, es decirle a G-Suite: Si no encuentras el buzon de destino dentro de tus cuentas, reenvialo hacia el “Servidor Reenvio” y busca alli.

Envio de Correos desde Zimbra a G-Suite

https://support.google.com/a/answer/2956491

Paso 1.- Activar Almacenamiento completo


Paso 2.- Configurar El servicio SMTP Relay de Google

En este paso le estamos diciendo a G-Suite, que acepte todo el correo proveniente de mi servidor Zimbra (Mi servidor es de confianza) y que solo acepte correos de mi dominio.

Paso 3: Redirigir el servidor de correo saliente local de Zimbra a Google (Zimbra como correo secundario)

Modificaremos algunas variables de zimbra para hacer que los correos dirigidos hacia su propio dominio y que no exista en su directorio sean derivadas hacia G-Suite.

1.- Ejecutar estos comandos como usuario zimbra

En los codigos que pongo al final elminar la etiqueta <br>, parece que el nuevo editor de wordpress lo colaca al final

 #su - zimbra <br>$ zmprov md  midominio.pe  zimbraMailCatchAllAddress @midominio.pe<br>$ zmprov md  midominio.pe  zimbraMailCatchAllForwardingAddress @midominio.pe<br>$ zmprov md midominio.pe zimbraMailTransport smtp:[smtp-relay.gmail.com]:25

Nota: En las pruebas que yo hice, no funcionaba con ese servidor ([smtp-relay.gmail.com]:25) por lo que tenemos varias opciones de configuracion. En mi caso la ultima linea quedó así:

$zmprov md midominio.pe zimbraMailTransport smtp:[aspmx.l.google.com]:25

Configuración en Zimbra para evitar un loop indeterminado al no encontrar una cuenta de correo

Hasta aqui el sistema funcionará a la perfección si las cuentas de correo existen en uno o el otro servidor, pero pongamonos en un escenario en el que alguien (interno o externo) envia a un correo a una direccion de correo que no existe en ninguno de los servidores.

Lo que sucederá es lo siguiente:

  • El correo llega a G-mail, este lo evalua y no existe dentro de su lista de buzones, entonces lo deriva al servidor de Zimbra.
  • El servidor de Zimbra lo recibe y evalua si existe la cuenta dentro de sus buzones, como no existe lo vuelve a enviar a G-mail.
  • G- mail lo evalua y no existe dentro de su lista de buzones, entonces lo deriva al servidor de Zimbra.
  • El servidor de Zimbra lo recibe y evalua si existe la cuenta dentro de sus buzones, como no existe lo vuelve a enviar a G-mail.
  • Loooooooooooooooooop

Por lo tanto ese correo se mantendra dando infinitas vueltas hasta que posiblemente G-suite invalide tu servidor de correos y ya no te permita seguir enviando correos.

Solución

El protocolo SMTP es lineal, por lo tanto hay que indicarle lo siguiente:

  • Quien es el Servidor principal y quien es el servidor secundario.
  • El servidor secundario es el que corta el loop al momento de detectar que el buzon no le perteneze Y viene del servidor primario (En mi caso G-suite)

Para indicar quien es el servidor primario, basta con registrar en el servidor DNS de nuestro proveedor y darle como peso “preferencial” el valor 1 o 5 al servidor primario, Para el servidor secundario se tiene que registrar en el servidor DNS de nuestro proveedor y darle como peso 10 ó 20 ó 50

En mi caso quedo así registrado

Configuración en Zimbra para cortar el loop https://wiki.zimbra.com/wiki/Split_Domain#Avoiding_Loops_in_Delivery

Paso 1.- Modificar el archivo smtpd_recipient_restriction

Sacar una copia del archivo antes de modificarlo.

#su - zimbra
 $cp /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.original <br>

Modificar el archivo: smtpd_recipient_restrictions.cf

nano /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf

deberia quedar asi:

%%contains VAR:zimbraServiceEnabled cbpolicyd^ check_policy_service inet:localhost:%%zimbraCBPolicydBindPort%%%%<br>
reject_non_fqdn_recipient<br>
permit_sasl_authenticated<br>
permit_mynetworks<br>
reject_unlisted_recipient<br>
%%contains VAR:zimbraMtaRestriction reject_invalid_helo_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_non_fqdn_helo_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_non_fqdn_sender%%<br>
%%contains VAR:zimbraMtaRestriction reject_unknown_client_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_unknown_reverse_client_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_unknown_helo_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_unknown_sender_domain%%<br>
%%explode reject_rbl_client VAR:zimbraMtaRestrictionRBLs%%<br>
%%explode reject_rhsbl_client VAR:zimbraMtaRestrictionRHSBLCs%%<br>
%%explode reject_rhsbl_reverse_client VAR:zimbraMtaRestrictionRHSBLRCs%%<br>
%%explode reject_rhsbl_sender VAR:zimbraMtaRestrictionRHSBLSs%%<br>
%%contains VAR:zimbraMtaRestriction check_policy_service unix:private/policy%%<br>
%%contains VAR:zimbraMtaRestriction check_recipient_access ldap:/opt/zimbra/conf/ldap-emails.cf%%<br>
%%contains VAR:zimbraMtaRestriction reject%%<br>
permit

Vamos crear un archivo en llamado “ldap-emails.cf” que es el que hara las validaciones

Ese archivo viene de la copia otro archivo llamado ” ldap-vam.cf “

 $cp /opt/zimbra/conf/ldap-vam.cf /opt/zimbra/conf/ldap-emails.cf<br>

Configuramos el archivo:

$nano /opt/zimbra/conf/ldap-emails.cf<br>
server_host = ldap://mail.midominio.pe:389<br> server_port = 389<br> search_base =<br> query_filter = (&amp;(|(zimbraMailDeliveryAddress=%s)(zimbraMailAlias=%s)(zimbraMailCatchAllAddress=%s))(zimbraMailStatus=enabled))<br> result_attribute = zimbraMailDeliveryAddress,zimbraMailForwardingAddress,zimbraPrefMailForwardingAddress<br> result_filter = permit<br> version = 3<br> start_tls = yes<br> tls_ca_cert_dir = /opt/zimbra/conf/ca<br> bind = yes<br> bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra<br> bind_pw = 0oms74zhrq<br> timeout = 30<br> special_result_attribute = member

OJO: en TODAS las documentaciones que he revisado, tienen como valor “OK” a la variable “result_filter”, en la version que yo trabajo Zimbra 8.9.9 NO funciona, da errores estuve muchos dias sin salir de ese tema. Por lo que deben poner el valor “permit”. con eso si funcionó.

Finalmente adicionar las variables creadas a las reglas de Zimbra

$zmprov mcf +zimbraMtaRestriction "check_recipient_access ldap:/opt/zimbra/conf/ldap-emails.cf"
$ zmprov mcf +zimbraMtaRestriction reject

Reiniciar Zimbra con el comando ZMCONTROL y LISTO

$zmcontrol restart

Eso es todo. Martin Lugo Palmadera


Referencias:

https://wiki.zimbra.com/wiki/Split_Domain

https://wiki.zimbra.com/wiki/Relay_per_Domain

http://efensys.blogspot.com/2012/01/avoiding-mail-looping-in-split-domain.html

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *