Configurar Zimbra 8.6 para control de usuarios en Centos 7

Configurar Zimbra para control de usuarios

“Este pequeño manual NO es una copia de alguna pagina de internet, es propiedad intelectual de Martín Lugo Palmadera, ud. es libre de usarlo y distribuirlo, pero con la condición de citar la fuente…. http://martinlugo.networksolutions-peru.com”

El escenario es el siguiente:

He instalado una versión fresca Zimbra (versión 8.6) y esta funcionando al 100%, todos los usuarios envian y reciben mensajes.

Se me ha solicitado que solo algunos usuarios puedan enviar correos al exterior sin restricciones y otros solo correo local y a algunos dominios conocidos.(Tambien es recomendable poner restricciones en el Header_Checks)

(Hacer esto es con la version de nativa de postfix es simple y rapida), pero con Zimbra todo cambia, pues agregar las sentencias sobre el archivo de configuracion (main.cf) se borrará al siguiente reinicio.

Para que no suceda esto, vamos a modificar el archivo /opt/zimbra/conf/zmconfigd.cf

 

Actualizacion: Zimbra 8.6 ya no incluye la indexacion de archivos hash, por lo que si migras de una version anterior tendras problemas y te saldran errores como esto:

error: unsupported dictionary type: hash

He revisado este error y se debe a que la version de postfix ahora trae una version actualizada de este popular indexador :

[zimbra@test-app ~]$ postconf -m
cidr
environ
fail
internal
ldap
lmdb
memcache
mysql
nis
pcre
proxy
regexp
socketmap
static
tcp
texthash
unix

Si se percatan ahora trae el modulo de “texthash”. por lo que a diferencia de la versión 8.03 en nuestras variables sustituimos el valor de hash por texthash.

Paso 1: Editar el archivo “zmconfigd.cf” como root

 

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

Comentar la variable

#       POSTCONF smtpd_client_restrictions              VAR zimbraMtaSmtpdClientRestrictions

 

Agregar al final de la sección MTA lo siguiente (antes de “RESTART mta):

 

POSTCONF smtpd_restriction_classes inter, local
POSTCONF inter FILE zmconfigd/postfix_restrict_inter.cf
POSTCONF local FILE zmconfigd/postfix_restrict_local.cf
POSTCONF smtpd_client_restrictions   FILE  zmconfigd/postfix_smtpd_client_restrictions

Aqui estamos creamos 2 variable inter y local (los usuarios que tengan el valor inter podran enviar correos sin restricciones y los usuarios que posean el valor local, solo podran enviar correos a algunos dominios listados en otro archivo), ademas le decimos que sus valores lo lea de los archivos ubicado dentro de la carpeta “zmconfigd” “postfix_restrict_inter.cf” y “postfix_restrict_local.cf” respectivamente. Adicionalmente si se dan cuenta comenté la variable POSTCONF smtpd_client_restrictions y luego la reescribi abajo direccionanadola a un archivo en donde pueda meter variables y coamndos a mi antojo.

Paso 2:

Modificar el archivo “smtpd_sender_restrictions.cf” :

#nano /opt/zimbra/conf/zmconfigd/smtpd_sender_restrictions.cf

Agregar las siguientes lineas al inicio:

reject_authenticated_sender_login_mismatch
check_sender_access texthash:/opt/zimbra/conf/zmconfigd/usuarios
texthash:/opt/zimbra/conf/zmconfigd/access
check_sender_access texthash:/opt/zimbra/conf/zmconfigd/prohibido
reject_unknown_sender_domain
reject_invalid_hostname

Luego eliminar o comentar con un # la linea

%%exact VAR:zimbraMtaSmtpdSenderRestrictions reject_authenticated_sender_login_mismatch%%

si dean cuenta esa variable ya no nos sirve pues la estamos sustituyendo por un archivo.

A mi me quedaria asi:

 
reject_authenticated_sender_login_mismatch
check_sender_access texthash:/opt/zimbra/conf/zmconfigd/usuarios
texthash:/opt/zimbra/conf/zmconfigd/access
check_sender_access texthash:/opt/zimbra/conf/zmconfigd/prohibido
reject_unknown_sender_domain
reject_invalid_hostname


#%%exact VAR:zimbraMtaSmtpdSenderRestrictions reject_authenticated_sender_login_mismatch%%
%%contains VAR:zimbraServiceEnabled cbpolicyd^ check_policy_service inet:localhost:%%zimbraCBPolicydBindPort%%%%
%%contains VAR:zimbraServiceEnabled amavis^ check_sender_access regexp:/opt/zimbra/postfix/conf/tag_as_originating.re%%
permit_mynetworks
permit_sasl_authenticated
permit_tls_clientcerts
%%contains VAR:zimbraServiceEnabled amavis^ check_sender_access regexp:/opt/zimbra/postfix/conf/tag_as_foreign.re%%

En el archivo “smtpd_recipient_restrictions.cf” Agregar la siguiente linea debajo de “permit_mynetworks”

#nano /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf
permit_mynetworks
check_sender_access texthash:/opt/zimbra/conf/zmconfigd/usuarios
check_sender_access texthash:/opt/zimbra/conf/zmconfigd/prohibido

Deberia quedar asi mas o menos:

%%contains VAR:zimbraMtaRestriction check_client_access lmdb:/opt/zimbra/conf/postfix_blacklist%%
%%contains VAR:zimbraServiceEnabled cbpolicyd^ check_policy_service inet:localhost:%%zimbraCBPolicydBindPort%%%%
reject_non_fqdn_recipient
permit_sasl_authenticated
permit_mynetworks

check_sender_access texthash:/opt/zimbra/conf/zmconfigd/usuarios
check_sender_access texthash:/opt/zimbra/conf/zmconfigd/prohibido

reject_unlisted_recipient
%%exact VAR:zimbraMtaRestriction reject_invalid_helo_hostname%%
%%exact VAR:zimbraMtaRestriction reject_non_fqdn_helo_hostname%%
%%exact VAR:zimbraMtaRestriction reject_non_fqdn_sender%%
%%exact VAR:zimbraMtaRestriction reject_unknown_client_hostname%%
%%exact VAR:zimbraMtaRestriction reject_unknown_reverse_client_hostname%%
%%exact VAR:zimbraMtaRestriction reject_unknown_helo_hostname%%
%%exact VAR:zimbraMtaRestriction reject_unknown_sender_domain%%
%%exact VAR:zimbraMtaRestriction reject_unverified_recipient%%
%%contains VAR:zimbraMtaRestriction check_recipient_access lmdb:/opt/zimbra/conf/postfix_recipient_access%%
%%contains VAR:zimbraMtaRestriction check_client_access lmdb:/opt/zimbra/conf/postfix_rbl_override%%
%%explode reject_rbl_client VAR:zimbraMtaRestrictionRBLs%%
%%explode reject_rhsbl_client VAR:zimbraMtaRestrictionRHSBLCs%%
%%explode reject_rhsbl_reverse_client VAR:zimbraMtaRestrictionRHSBLRCs%%
%%explode reject_rhsbl_sender VAR:zimbraMtaRestrictionRHSBLSs%%
%%contains VAR:zimbraMtaRestriction check_policy_service unix:private/policy%%
%%contains VAR:zimbraMtaRestriction check_recipient_access ldap:/opt/zimbra/conf/ldap-splitdomain.cf%%
%%exact VAR:zimbraMtaRestriction reject%%
permit

 

Paso 3.- Crear el archivo “usuarios” y “prohibido”:

Si nos percatamos, he ingresado también un archivo llamado “prohibido”, esto sirva para decirle a Zimbra que los dominios que coloque allí van a estar prohibidos de ser enviados

#nano /opt/zimbra/conf/zmconfigd/usuarios
pepito@mydomain.com inter
luchito@mydomain.com local
 ................

Ahora el archivo prohibido:

#nano /opt/zimbra/conf/zmconfigd/prohibido
yahoo.com.pe	reject

Paso 4.- Crear los archivos postfix_restrict_inter.cf , postfix_restrict_local.cf y postfix_smtpd_client_restrictions

#nano /opt/zimbra/conf/zmconfigd/postfix_restrict_inter.cf

y colocar esto dentro:

permit

Ahora creamos el segundo archivo:

#nano /opt/zimbra/conf/zmconfigd/postfix_restrict_local.cf

y colocar esto dentro:

check_recipient_access
texthash:/opt/zimbra/conf/zmconfigd/interno
reject

Finalmente crear el tercer archivo

#nano /opt/zimbra/conf/zmconfigd/postfix_smtpd_client_restrictions

y colocar esto dentro:

permit_mynetworks
reject_non_fqdn_recipient
texthash:/opt/zimbra/conf/zmconfigd/access
reject_rbl_client sbl.spamhaus.org

Paso 5.- Crear el archivo interno y access

Dentro de este archivo llamado “interno” vamos a colocar los dominios que queremos que envien lo usuarios restringidos

#nano /opt/zimbra/conf/zmconfigd/interno

y colocar alli los dominios que a los que solo podrá enviar mail

dominio1.com.pe      ok
dominio2.com.pe   ok

Ahora creamos el archivo Access:

#nano /opt/zimbra/conf/zmconfigd/access

colocar un espacio en blanco dentro de este archivo “access” y grabar

Paso 6.- indexar archivos “usuarios” “interno” “access”

Ingresar como usuario de Zimbra y aplicar los siguiente

#su - zimbra
Last login: Thu Feb 12 12:59:58 PET 2015 on pts/0

$ postmap conf/zmconfigd/usuarios
$ postmap conf/zmconfigd/interno
$ postmap conf/zmconfigd/access
$ postmap conf/zmconfigd/prohibido

Paso 7.- Modificar la variable mynetworks a 127.0.0.0/8 y la red interna de la empresa, esto hara que lo spammer no puedan utilizar nuestro servidor como relay, sino que el postifx solo aceptará conexiones de el mismo, previa validacion del usuario que se trata de conectar Para esto hacer lo siguiente:

#su - zimbra
$ zmprov modifyServer mail.dominio.com.pe zimbraMtaMyNetworks '127.0.0.0/8 192.168.0.0/24'
$ postfix reload

Paso 8.- Reiniciar servicios y listo!!!!!!!!!

#su - zimbra
$ zmmtactl restart

Te puede interesar Instalar Zimbra 8.6 en Centos 7 desde Cero

6 comments

  1. Alejandro dice:

    Disculpe. Puse el mensaje en otra página. Seguí los pasos que usted pone pero al tratar de enviar un mensaje muestra el sgte, error:

    Mensaje no enviado; una o más direcciones no han sido aceptadas.
    Direcciones rechazadas: Alejandro
    method: [unknown]
    msg: Invalid address: Alejandro . com.zimbra.cs.mailbox.MailSender$SafeSendFailedException: MESSAGE_NOT_DELIVERED; chained exception is: com.zimbra.cs.mailclient.smtp.InvalidRecipientException: RCPT failed: Invalid recipient webmaster@dsit.cu: 451 4.3.5 Server configuration problem
    code: mail.SEND_ABORTED_ADDRESS_FAILURE
    detail: soap:Sender
    trace: qtp509886383-1067:http://192.168.10.2:80/service/soap/SendMsgRequest:1428680814797:b6bb311e7a9fc8ef
    request:

    Body: {
    SendMsgRequest: {
    _jsns: “urn:zimbraMail”,
    m: {
    e: [
    // [0]:
    {
    a: “webmaster@dsit.cu”,
    p: “Alejandro”,
    t: “t”
    },
    // [1]:
    {
    a: “isis@dsit.cu”,
    p: “Isis Tamara. Morales Rojas”,
    t: “f”
    }
    ],
    idnt: “cca7a7d5-e9ba-41e1-a15c-a31a1fa24547″,
    mp: [
    // [0]:
    {
    ct: “multipart/alternative”,
    mp: [
    // [0]:
    {
    content: {
    _content: “”
    },
    ct: “text/plain”
    },
    // [1]:
    {
    content: {
    _content: “”
    },
    ct: “text/html”
    }
    ]
    }
    ],
    su: {
    _content: “Mensaje de prueba”
    }
    },
    suid: 1428680875843
    }
    },
    Header: {
    context: {
    _jsns: “urn:zimbra”,
    account: {
    _content: “isis@dsit.cu”,
    by: “name”
    },
    authToken: “(removed)”,
    csrfToken: “0_907a88b81d5c6604f6a82bffcadba19beb306ac3″,
    session: {
    _content: 118,
    id: 118
    },
    userAgent: {
    name: “ZimbraWebClient – FF37 (Linux)”,
    version: “8.6.0_GA_1162″
    }
    }
    }

  2. Alejandro dice:

    Martin BT, necesito hacer el proceso inverso, o sea, que solo algunos usuarios puedan recibir correos desde el exterior, es decir, un grupo de usuarios tiene entrada y salida total, pero un grupo solo desde un dominio especifico, digamos, el dominio .pe
    Mis saludos y gracias

  3. jlreyes dice:

    Hola colega soy nuevo en el foro y nuevo en el tema Ubuntu y Zimbra, estoy migrando para ubuntu algunos servidores ya que me esta gustando el tema, en zimbra 8.6 me pasa lo siguiente puedo acceder a hpps://mydominio.local PERO cuando trato de acceder a hpps://mydominio.local:7071 no me deja entrar me dice paguina inacesible.

    Gracias de antemano

  4. Cristian dice:

    Hola Martin. Tengo instalado zimbra 8.6 y tengo el inconveniente que cuando me logueo con el usuario me pide: usuario@dominio, como podria hacer para que solo me pieda usuario sin el dominio. Es decir, dejar el unico dominio que tengo como predeterminado.

    Muchas gracias.-

  5. Juan Guevara dice:

    Martin. De antemano muy agradecido por tu apoyo. Realice los pasos señalados en tu post pero ahora no puedo enviar ningún mensaje, no se si será por las restricciones o por el zimbraMtaMyNetworks. Seguro de contar con tu apoyo

Agregue un comentario

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