Configuración del Correo Interno
C@mpus - @cademia Linux

Introducción

Una de las tareas más preocupantes en la administración del correo electrónico es poder controlar las acciones de envío y recepción de correos de los usuarios para algunos dominios específicos; gracias a las capacidades de LXE(en conjunto con postfix) se controlar este flujo.

La siguiente documentación presenta tres perfiles con los siguientes nombres:

  • onlyinside, cuentas que sólo pueden permitir la entrada/salida de correos en el dominio de LinuXchangE (linuxchange.com),
  • someoutside, cuentas con el mismo perfil que onlyinside pero que permiten entrada o salida de algunos dominios o usuarios externos,
  • bannedusers , cuentas que permiten el libre tráfico de correo exceptuando los dominios o usuarios listados.

Cada perfil es dividido en dos sentidos que son especificados por el sufijo -from y -to de esta forma se tendrán reglas: onlyinside-to, onlyinside-from, someoutside-to, someoutside-from, bannedusers-to y bannedusers-from.  Postfix puede y debe separar el flujo de la información para poder trabajar correctamente.


Requisitos


Configuración

Los siguientes pasos deben ser llevados a cabo para la configuración del control del relay


Configuración del LDAP

Es necesario tener las ramas ou=Relay con las subramas ou=FromIn, ou=FromOut, ou=ToIn, ou=ToOut, sendmailMTAClassName=bannedusers-from, sendmailMTAClassName=bannedusers-to, sendmailMTAClassName=onlyinside-from, sendmailMTAClassName=onlyinside=to, sendmailMTAClassName=someoutside-from y sendmailMTAClassName=someoutside-to.

Para crear la estructura es necesario crear el archivo relay.ldif con el contenido siguiente y ejecutar el comando ldapadd -x -c -D "cn=root,dc=linuxchange,dc=com" -W -f relay.ldif 

relay.ldif

dn: ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
ou: Relay
associatedDomain: linuxchange.com

dn: ou=ToIn,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: linuxchange.com
ou: ToIn

dn: ou=ToOut,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
ou: ToOut
associatedDomain: linuxchange.com

dn: ou=FromIn,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
ou: FromIn
associatedDomain: linuxchange.com

dn: ou=FromOut,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
ou: FromOut
associatedDomain: linuxchange.com

dn: sendmailMTAClassName=onlyinside-from,ou=Relay,
 dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: onlyinside-from

dn: sendmailMTAClassName=onlyinside-to,ou=Relay,
 dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: onlyinside-to

dn: sendmailMTAClassName=bannedusers-from,ou=Relay,
 dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: bannedusers-from

dn: sendmailMTAClassName=bannedusers-to,ou=Relay,
 dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: bannedusers-to

dn: sendmailMTAClassName=someoutside-from,ou=Relay,
 dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: someoutside-from

dn: sendmailMTAClassName=someoutside-to,ou=Relay,
 dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: someoutside-to

dn: sendmailMTAKey=linuxchange.com,ou=FromIn,
 ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: linuxchange.com
sendmailMTAAliasValue: OK

dn: sendmailMTAKey=linuxchange.com,sendmailMTAClassName=someoutside-from,
 ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: linuxchange.com
sendmailMTAAliasValue: OK

dn: sendmailMTAKey=linuxchange.com,sendmailMTAClassName=someoutside-to,
 ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: linuxchange.com
sendmailMTAAliasValue: OK

dn: sendmailMTAKey=linuxchange.com,sendmailMTAClassName=onlyinside-from,
 ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAAliasValue: OK
sendmailMTAKey: linuxchange.com

dn: sendmailMTAKey=linuxchange.com,sendmailMTAClassName=onlyinside-to,
 ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAAliasValue: OK
sendmailMTAKey: linuxchange.com

 Con esto  se obtiene la estructura lista para empezar a alimentarla.


Configuración de Postfix

Para otorgarle el control a postfix sobre el relay, habrá que añadir las siguientes líneas al final del archivo /etc/postfix/main.cf.

/etc/postfix/main.cf (parcial)
smtpd_restriction_classes = someoutside-to, onlyinside-to, bannedusers-to,
    someoutside-from, onlyinside-from, bannedusers-from


someoutside-to  =       check_recipient_access
    ldap:/etc/postfix/ldap-relay-class-someoutside-to.cf,
                reject_unauth_destination

onlyinside-to  =        check_recipient_access
    ldap:/etc/postfix/ldap-relay-class-onlyinside-to.cf,
                reject
bannedusers-to =        check_recipient_access
    ldap:/etc/postfix/ldap-relay-class-bannedusers-to.cf,
                permit

someoutside-from  =     check_sender_access
    ldap:/etc/postfix/ldap-relay-class-someoutside-from.cf,
                reject_unauth_destination

onlyinside-from  =      check_sender_access
    ldap:/etc/postfix/ldap-relay-class-onlyinside-from.cf,
                reject

bannedusers-from =      check_sender_access
    ldap:/etc/postfix/ldap-relay-class-bannedusers-from.cf,
                permit

smtpd_recipient_restrictions =
        check_recipient_access ldap:/etc/postfix/ldap-relay-toin.cf,
        check_sender_access ldap:/etc/postfix/ldap-relay-fromin.cf,
        permit_sasl_authenticated,
        reject_unauth_destination

smtpd_sender_restrictions =
        check_recipient_access ldap:/etc/postfix/ldap-relay-toout.cf,
        check_sender_access ldap:/etc/postfix/ldap-relay-fromout.cf,
        permit

Observe que las clases nombradas en el parámetro smtpd_restriction_classes están listadas enseguida con la misma sintaxis que los comandos smtpd_recipient_restriction y smtpd_sender_restriction.

El parámetro smtpd_recipient_restriction realizará verificaciones cuando el comando RCPT TO sea recibido.  De igual forma, el parámetro smtpd_sender_restriction será ejecutado cuando el MTA reciba el comando MAIL FROM

También se tendrán que crear los siguientes archivos en el directorio /etc/postfix/ según lo indica la configuración anterior. 

/etc/postfix/ldap-relay-toin.cf
server_host = 127.0.0.1
search_base = ou=ToIn,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
scope = one
#version = 2

 

/etc/postfix/ldap-relay-fromin.cf
server_host = 127.0.0.1
search_base = ou=FromIn,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
scope = one
#version = 2

 

/etc/postfix/ldap-relay-toout.cf
server_host = 127.0.0.1
search_base = ou=ToOut,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
scope = one
#version = 2

 

/etc/postfix/ldap-relay-fromout.cf
server_host = 127.0.0.1
search_base = ou=FromOut,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
scope = one
#version = 2

 

/etc/postfix/ldap-relay-class-bannedusers-from.cf
server_host = 127.0.0.1
search_base = sendmailMTAClassName=bannedusers-from,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
#scope = one
#version = 2

 

/etc/postfix/ldap-relay-class-bannedusers-to.cf
server_host = 127.0.0.1
search_base = sendmailMTAClassName=bannedusers-to,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
#scope = one
#version = 2

 

/etc/postfix/ldap-relay-class-onlyinside-from.cf
server_host = 127.0.0.1
search_base = sendmailMTAClassName=onlyinside-from,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
#scope = one
#version = 2

 

/etc/postfix/ldap-relay-class-onlyinside-to.cf
server_host = 127.0.0.1
search_base = sendmailMTAClassName=onlyinside-to,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
#scope = one
#version = 2

 

/etc/postfix/ldap-relay-class-someoutside-from.cf
server_host = 127.0.0.1
search_base = sendmailMTAClassName=someoutside-from,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
#scope = one
#version = 2

 

/etc/postfix/ldap-relay-class-someoutside-to.cf
server_host = 127.0.0.1
search_base = sendmailMTAClassName=someoutside-to,ou=Relay,dc=linuxchange,dc=com
alias_server_port = 389
timeout = 100
query_filter = sendmailMTAKey=%s
result_attribute = sendmailMTAAliasValue
bind = no
#scope = one
#version = 2

Al finalizar, postfix debe ser reiniciado con el comando service postfix restart.

Hasta este momento la estructura es funcional, sin haber insertado ninguna regla.