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.
|