Sistema de Correo Electrónico integrado con un Directorio Activo de Microsoft o Samba 4 (Nuevos cambios)

Saludos, nuevamente.

Disculpas por la tardanza, mucho trabajo.

En este nuevo post vengo con cambios en la configuración de Exim 4 que expuse en los posts anteriores, para ser más específico, en este post. En esencia, se trata de la inclusión de la posibilidad de tener una copia de los mensajes entrantes y salientes, así como la configuración de la autenticación SMTP vista desde otra perspectiva.

Entonces, para ir entrando en materia, primeramente, mostraré la configuración completa. En ella me he eliminado algunas cosas que considero no son necesarias y me he centrado en lo que les quiero explicar:

CONFDIR=/etc/exim4

FILTERSDIR=CONFDIR/filters

TRANSPORTSDIR=CONFDIR/transport

BLACKLISTEDDIR=FILTERSDIR/blacklisted

WHITELISTEDDIR=FILTERSDIR/whitelisted

 

MAILDOMAIN = karas.co.cu

MAILNAME = mailserver-1.red.MAILDOMAIN

 

SMARTHOST_SERVER_NAME = smtp-out.MAILDOMAIN

SMARTHOST_SERVER_PORT = 26

 

SMARTHOST_ROUTELIST = * SMARTHOST_SERVER_NAME::SMARTHOST_SERVER_PORT

 

PILERHOST_SERVER_NAME = piler.MAILDOMAIN

PILERHOST_SERVER_PORT = 25

 

PILERHOST_ROUTELIST = * PILERHOST_SERVER_NAME::PILERHOST_SERVER_PORT

 

CERTFILE = /etc/exim4/ssl/certs/MAILDOMAIN.pem

 

VIRTUAL_MAILBOX_BASEPATH=/srv/services/vmail

 

DEFAULT_MAX_QUOTA = 100M

 

LDAP_SERVER1_NAME = pdc-karas.MAILDOMAIN

LDAP_SERVER1_PORT = 3268

 

ldap_default_servers = LDAP_SERVER1_NAME::LDAP_SERVER1_PORT

 

LDAP_AD_BASE_DN = DC=karas,DC=co,DC=cu

LDAP_AD_USERS_BASE_DN = CN=Users,LDAP_AD_BASE_DN

LDAP_AD_ENTERPRISE_USERS_BASE_DN = OU=KARAS,LDAP_AD_BASE_DN

 

LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN = CN=Mail Service Allowed Users,LDAP_AD_USERS_BASE_DN

LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN = CN=Mail Service Denied Users,LDAP_AD_USERS_BASE_DN

 

LDAP_AD_NATIONAL_MAIL_SCOPE_GROUP_CN = CN=Mail Server – National Scope Users Group,LDAP_AD_USERS_BASE_DN

LDAP_AD_INTERNATIONAL_MAIL_SCOPE_GROUP_CN = CN=Mail Server – International Scope Users Group,LDAP_AD_USERS_BASE_DN

 

LDAP_AD_BIND_DN = CN=vmail,LDAP_AD_USERS_BASE_DN

LDAP_AD_BIND_PASS = MiProgramacion123*

 

LDAP_AD_MAIL_RCPT_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(userPrincipalName=${local_part}@${domain}))

LDAP_AD_MAIL_SENDER_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(userPrincipalName=$sender_address))

 

LDAP_AD_MAIL_SERVICE_ALLOWED_SENDER_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(userPrincipalName=$sender_address))

LDAP_AD_MAIL_SERVICE_ALLOWED_RECIPIENT_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(userPrincipalName=${local_part}@${domain}))

LDAP_AD_MAIL_SERVICE_DENIED_SENDER_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)(userPrincipalName=$sender_address))

LDAP_AD_MAIL_SERVICE_DENIED_RECIPIENT_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)(userPrincipalName=${local_part}@${domain}))

 

LDAP_AD_SENDER_NATIONAL_MAIL_SCOPE_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(memberOf=LDAP_AD_NATIONAL_MAIL_SCOPE_GROUP_CN)(userPrincipalName=$sender_address))

LDAP_AD_SENDER_INTERNATIONAL_MAIL_SCOPE_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(memberOf=LDAP_AD_INTERNATIONAL_MAIL_SCOPE_GROUP_CN)(userPrincipalName=$sender_address))

LDAP_AD_RECIPIENT_NATIONAL_MAIL_SCOPE_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(memberOf=LDAP_AD_NATIONAL_MAIL_SCOPE_GROUP_CN)(userPrincipalName=${local_part}@${domain}))

LDAP_AD_RECIPIENT_INTERNATIONAL_MAIL_SCOPE_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(memberOf=LDAP_AD_INTERNATIONAL_MAIL_SCOPE_GROUP_CN)(userPrincipalName=${local_part}@${domain}))

 

LDAP_AD_USER_DN_ATTR = distinguishedName

LDAP_AD_MAIL_RCPT_MAIN_ATTRS = sAMAccountName,userPrincipalName

 

LDAP_AD_USER_DN = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_USER_DN_ATTR?sub?\

LDAP_AD_MAIL_RCPT_FILTER

 

LDAP_AD_MAIL_RCPT = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_MAIL_RCPT_FILTER

 

LDAP_AD_MAIL_SENDER = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_MAIL_SENDER_FILTER

 

LDAP_AD_MAIL_SERVICE_ALLOWED_SENDER = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_MAIL_SERVICE_ALLOWED_SENDER_FILTER

 

LDAP_AD_MAIL_SERVICE_DENIED_SENDER = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_MAIL_SERVICE_DENIED_SENDER_FILTER

 

LDAP_AD_MAIL_SERVICE_ALLOWED_RECIPIENT = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_MAIL_SERVICE_ALLOWED_RECIPIENT_FILTER

 

LDAP_AD_MAIL_SERVICE_DENIED_RECIPIENT = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_MAIL_SERVICE_DENIED_RECIPIENT_FILTER

 

LDAP_AD_SENDER_NATIONAL_MAIL_SCOPE = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_SENDER_NATIONAL_MAIL_SCOPE_FILTER

 

LDAP_AD_SENDER_INTERNATIONAL_MAIL_SCOPE = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_SENDER_INTERNATIONAL_MAIL_SCOPE_FILTER

 

LDAP_AD_RECIPIENT_NATIONAL_MAIL_SCOPE = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_RECIPIENT_NATIONAL_MAIL_SCOPE_FILTER

 

LDAP_AD_RECIPIENT_INTERNATIONAL_MAIL_SCOPE = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_MAIL_RCPT_MAIN_ATTRS?sub?\

LDAP_AD_RECIPIENT_INTERNATIONAL_MAIL_SCOPE_FILTER

 

MAX_RCPT = 5

MAX_FAILED_RCPT = 4

 

timezone = America/Havana

 

system_filter = FILTERSDIR/system-filters

system_filter_directory_transport = local_copy_outgoing

 

.ifdef MAILNAME

primary_hostname = MAILNAME

qualify_domain = MAILDOMAIN

.else

MAILNAME=@

MAILDOMAIN=@

.endif

 

local_interfaces = 10.0.1.66 : 127.0.0.1

 

.ifdef CERTFILE

daemon_smtp_ports = 25 : 465 : 587

auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}

tls_advertise_hosts =  ${if exists{CERTFILE}{*}{127.0.0.1}}

tls_certificate = CERTFILE

tls_privatekey = CERTFILE

tls_on_connect_ports = 465

.else

daemon_smtp_ports = 25

.endif

 

domainlist local_domains = @

 

domainlist virtual_domains =  \

ns1.MAILDOMAIN : \

MAILDOMAIN :     \

MAILNAME

 

hostlist relay_from_localhost =   \

           127.0.0.1

 

hostlist relay_from_internal_networks = \

10.0.1.16/28 :               \

10.0.1.32/28 :              \

10.0.1.64/27 :              \

10.0.1.128/25

 

hostlist relay_from_mx_servers = \

           10.0.1.98

 

hostlist relay_from_smtp_servers = \

           10.0.1.99

 

hostlist relay_from_non_smtpauth_servers = \

           10.0.1.69 :                     \

           10.0.1.70 :                     \

           10.0.1.71 :                     \

           10.0.1.72

 

acl_smtp_rcpt = acl_check_rcpt

acl_smtp_mime = acl_check_mime

acl_smtp_data = acl_check_content

 

never_users = root:daemon:bin:sync

disable_ipv6 = true

 

rfc1413_hosts = *

rfc1413_query_timeout = 5s

 

ignore_bounce_errors_after = 2d

timeout_frozen_after = 1d

 

split_spool_directory = true

 

smtp_accept_queue_per_connection = 24

smtp_accept_max_per_host = 8

smtp_accept_max_per_connection = 100

smtp_accept_max = 640

 

smtp_banner = “Sistema de Correo Electronico de KARAS Project”

 

av_scanner = clamd:/var/run/clamav/clamd.ctl

spamd_address = 127.0.0.1 783

 

exim_user = Debian-exim

exim_group = mail

 

message_logs = true

write_rejectlog = true

 

auto_thaw = 2d

message_size_limit = 2M

bounce_return_size_limit = 5K

smtp_max_unknown_commands = 1

 

queue_only_load = 96

queue_run_max = 30

deliver_queue_load_max = 128

 

allow_domain_literals = false

trusted_users = mail

trusted_groups = mail

freeze_tell = postmaster

message_body_visible = 5000

remote_max_parallel = 15

smtp_reserve_hosts = +relay_from_localhost

smtp_load_reserve = 40

smtp_accept_max_nonmail = 7

 

keep_environment =

 

log_selector =                 \

+address_rewrite             \

+all_parents                 \

+arguments                   \

+connection_reject           \

+delay_delivery              \

+deliver_time                \

+delivery_size               \

+dnslist_defer               \

+incoming_interface          \

+incoming_port               \

+lost_incoming_connection    \

+queue_run                   \

+received_sender             \

+received_recipients         \

+retry_defer                 \

+sender_on_delivery          \

+size_reject                 \

+skip_delivery               \

+smtp_confirmation           \

+smtp_connection             \

+smtp_protocol_error         \

+smtp_syntax_error           \

+smtp_incomplete_transaction \

+subject                     \

+tls_cipher                  \

+tls_peerdn

 

########################################################

# ACL CONFIGURATION

########################################################

begin acl

 

acl_check_rcpt:

 

  deny    hosts          = ! +relay_from_localhost : ! +relay_from_internal_networks : ! +relay_from_mx_servers : ! +relay_from_smtp_servers

          message        = Solamente los servidores de correo internos/externos, equipos \n\

                           y/o subredes autorizados pueden hacer relay a este servidor

          log_message    = Relay access denied. It’s not an internal/external mail server, network or authorized hosts

 

deny    message        = Caracteres no permitidos en la direccion

log_message    = Restricted characters in address

local_parts    = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

 

deny    condition      = ${lookup{$sender_address_domain}wildlsearch{BLACKLISTEDDIR/blacklisted-domains}{yes}}

message        = El dominio $sender_address_domain se encuentra en lista \n\

negra en nuestros servidores. Contacte con el \n\

administrador si cree que esto es incorrecto

log_message    = Blacklisted domain $sender_address_domain

 

deny    condition      = ${lookup{$domain}wildlsearch{BLACKLISTEDDIR/blacklisted-domains}{yes}}

message        = El dominio $domain se encuentra en lista negra en \n\

nuestros servidores. Contacte con el administrador \n\

si cree que esto es incorrecto

log_message    = Blacklisted domain $domain

 

deny    condition      = ${if or {\

{eq {yes}{${lookup{$sender_address_domain}wildlsearch{BLACKLISTEDDIR/blacklisted-hosts}{yes}}}}\

{eq {yes}{${lookup{$sender_host_address}wildlsearch{BLACKLISTEDDIR/blacklisted-hosts}{yes}}}}\

}\

}

message        = En nombre del host o la direccion IP del emisor se \n\

encuentra en lista negra en nuestros servidores \n\

Contacte con el administrador si cree que esto es \n\

incorrecto

log_message    = Blacklisted host $sender_address_domain

 

deny    condition      = ${lookup{$domain}wildlsearch{BLACKLISTEDDIR/blacklisted-hosts}{yes}}

message        = En nombre del host destinatario se encuentra en lista \n\

negra en nuestros servidores Contacte con el \n\

administrador si cree que esto es incorrecto

log_message    = Blacklisted host $domain

 

# Regla para la restriccion de remitentes que estan en lista negra

# Variante Funcional No. 1

#

deny    condition      = ${lookup{$sender_address}wildlsearch{BLACKLISTEDDIR/blacklisted-senders}{yes}}

message        = El remitente $sender_address se encuentra en lista \n\

negra en nuestros servidores. Contacte con el \n\

administrador si cree que esto es incorrecto

log_message    = Blacklisted sender $sender_address

 

# Regla para la restriccion de remitentes que estan en lista negra

# Variante Funcional No. 2

#

#  deny    message        = Remitente $sender_address en lista negra

#          log_message    = Blacklisted sender $sender_address

#          senders        = lsearch;BLACKLISTEDDIR/blacklisted-senders

 

deny    condition      = ${lookup{$sender_address}wildlsearch{WHITELISTEDDIR/whitelisted-senders}{no}}

message        = El remitente $sender_address se encuentra en lista \n\

negra en nuestros servidores. Contacte con el \n\

administrador si cree que esto es incorrecto

log_message    = Blacklisted sender $sender_address

 

deny    condition      = ${lookup{${local_part}@${domain}}wildlsearch{BLACKLISTEDDIR/blacklisted-recipients}{yes}}

message        = El destinatario ${local_part}@${domain} se encuentra \n\

en lista negra en nuestros servidores. Contacte con \n\

el administrador si cree que esto es incorrecto

log_message    = Blacklisted recipient ${local_part}@${domain}

 

deny    message        = Acceso denegado. No es un remitente @MAILDOMAIN. \n\

Open Relay denegado en este servidor.

log_message    = Access denied. Not @MAILDOMAIN sender. Open Relay denied in thin server.

senders        = ! : !MAILDOMAIN : !*.MAILDOMAIN

recipients     = ! : !MAILDOMAIN : !*.MAILDOMAIN

 

deny    message        = El usuario con el cual pretende enviar correos no \n\

existe en nuestro dominio. Es acaso esto un intento \n\

de enviar spam a traves de nuestro servidor de \n\

correo? De ser este su objetivo, no se le permitira \n\

completar su operacion

log_message    = Email sender does not exist

senders        = MAILDOMAIN

condition      = ${lookup ldap{LDAP_AD_MAIL_SENDER} {no}{yes}}

 

deny    message        = El usuario al cual le esta tratando de alcanzar no \n\

existe en nuestro dominio. Por favor, revise la \n\

direccion del destinatario por si la ha tecleado mal \n\

o ha dejado espacios innecesarios.

log_message    = Email recipient does not exist

domains        = MAILDOMAIN

condition      = ${lookup ldap{LDAP_AD_MAIL_RCPT} {no}{yes}}

condition      = ${lookup{$local_part}lsearch{/etc/aliases}{no}}

 

deny    condition      = ${lookup ldap{LDAP_AD_MAIL_SERVICE_DENIED_SENDER} {yes}{no}}

senders        = MAILDOMAIN

message        = La cuenta $sender_address tiene denegado el acceso al \n\

servicio de correo electronico.

log_message    = Mail Service access for this account $sender_address is denied

 

deny    condition      = ${lookup ldap{LDAP_AD_MAIL_SERVICE_DENIED_RECIPIENT} {yes}{no}}

message        = El destinatario al cual le esta tratando de enviar \n\

correos tiene denegado el acceso al servicio correo \n\

electronico en su dominio.

domains        = MAILDOMAIN

log_message    = Mail Service access for the recipient address is denied on his domain

 

deny    condition      = ${lookup ldap{LDAP_AD_MAIL_SERVICE_ALLOWED_SENDER} {no}{yes}}

senders        = MAILDOMAIN

message        = La cuenta $sender_address no tiene aun habilitado el acceso \n\

al servicio correo electronico

log_message    = Mail Service access for this account $sender_address not enabled yet

 

deny    condition      = ${lookup ldap{LDAP_AD_MAIL_SERVICE_ALLOWED_RECIPIENT} {no}{yes}}

message        = El destinatario al cual le esta tratando de enviar correos \n\

no tiene aun habilitado el acceso al servicio correo \n\

electronico en su dominio

domains        = MAILDOMAIN

condition      = ${lookup{$local_part}lsearch{/etc/aliases}{no}}

log_message    = Mail Service access for the recipient address not enabled yet on his domain

 

deny    condition      = ${lookup ldap{LDAP_AD_SENDER_NATIONAL_MAIL_SCOPE} {no}{yes}}

condition      = ${lookup ldap{LDAP_AD_SENDER_INTERNATIONAL_MAIL_SCOPE} {no}{yes}}

senders        = MAILDOMAIN

message        = La cuenta $sender_address tiene acceso servicio correo \n\

electronico, pero aun no tiene establecido alcance alguno. \n\

Contacte con su administrador si cree que esto es incorrecto

log_message    = This user account $sender_address have granted access to Mail Service, but it’s have no any scope established yet

 

deny    condition      = ${lookup ldap{LDAP_AD_RECIPIENT_NATIONAL_MAIL_SCOPE} {no}{yes}}

condition      = ${lookup ldap{LDAP_AD_RECIPIENT_INTERNATIONAL_MAIL_SCOPE} {no}{yes}}

domains        = MAILDOMAIN

condition      = ${lookup{$local_part}lsearch{/etc/aliases}{no}}

message        = El destinatario al cual le esta tratando de enviar correo \n\

tiene acceso al servicio correo electronico, pero aun no \n\

tiene establecido alcance alguno. Contacte con su \n\

administrador si cree que esto es incorrecto

log_message    = Mail Service access for the recipient address is enabled, but it’s have no any scope established yet

 

# Regla para la restriccion de salida de correos para determinadas cuentas

# Variante Funcional No. 1

#

deny    condition      = ${lookup{$sender_address}wildlsearch{FILTERSDIR/national-senders-only}{yes}}

domains        = ! *.cu

message        = La cuenta de correo $sender_address no tiene permitida \n\

salida de correos con alcance internacional

log_message    = The outbound international mail is not allowed for the mail account $sender_address

 

# Regla para la restriccion de salida de correos para determinadas cuentas

# Variante Funcional No. 2

#

#  deny    message        = La cuenta de correo $sender_address no tiene permitida \n\

#                           salida de correos con alcance internacional

#          log_message    = The outbound international mail is not allowed for the mail account $sender_address

#          senders        =

#          domains        = ! *.cu

 

deny    condition      = ${lookup ldap{LDAP_AD_SENDER_NATIONAL_MAIL_SCOPE}{yes}{no}}

domains        = ! *.cu

message        = La cuenta de correo $sender_address no tiene permitida \n\

salida de correos con alcance internacional

log_message    = The outbound international mail is not allowed for the mail account $sender_address

 

deny    message        = Esta cuenta de correo electronico no tiene permitida \n\

entrada de correos internacionales

log_message    = The inbound international mails is not allowed for this mail account

senders        = ! *.cu

domains        = MAILDOMAIN

condition      = ${if >{${strlen:$sender_address}}{0}}

condition      = ${lookup ldap{LDAP_AD_RECIPIENT_NATIONAL_MAIL_SCOPE}{yes}{no}}

 

deny    message        = Esta cuenta de correo electronico no tiene permitida \n\

entrada de correos internacionales

log_message    = The inbound international mails is not allowed for this mail account

senders        = ! *.cu

domains        = MAILDOMAIN

condition      = ${if >{${strlen:$sender_address}}{0}}

recipients     = lsearch;FILTERSDIR/national-senders-only

 

deny    message        = Acceso denegado. No es un remitente @MAILDOMAIN o no \n\

tiene definido alcance de correo electronico

log_message    = Access denied. Not @MAILDOMAIN sender or the mail scope is not established yet

senders        = ! : !MAILDOMAIN : !*.MAILDOMAIN

condition      = ${lookup{${local_part}@${domain}}wildlsearch{FILTERSDIR/international-recipients-allowed}{no}{yes}}

condition      = ${lookup ldap{LDAP_AD_RECIPIENT_INTERNATIONAL_MAIL_SCOPE}{no}{yes}}

condition      = ${lookup ldap{LDAP_AD_RECIPIENT_NATIONAL_MAIL_SCOPE}{no}{yes}}

 

accept  local_parts    = postmaster

domains        = +local_domain : +virtual_domains

 

deny    message        = No se permiten mas de MAX_RCPT destinatarios.

log_message    = Too many recipients. Only MAX_RCPT recipients allowed

condition      = ${if >{$rcpt_count}{MAX_RCPT}}

 

deny    message        = Por parte de remitentes vacios, solo se acepta un \n\

destinatario

log_message    = Only one recipient accepted for NULL sender

senders        = :

condition      = ${if >{$rcpt_count}{1}{1}}

 

  deny    message        = No esta autenticado en el servidor o no pude hacer relay

          !authenticated = *

          hosts          = ! +relay_from_localhost : ! +relay_from_mx_servers : ! +relay_from_smtp_servers : ! +relay_from_non_smtpauth_servers

 

  accept  hosts          = +relay_from_localhost

          domains        = ! +local_domains : ! +virtual_domains

          control        = submission/sender_retain

 

require message        = Destinatario no valido

log_message    = Invalid recipient

verify         = recipient

 

accept

 

acl_check_mime:

 

warn    decode         = default

 

  deny    message        = Prohibido el envio de binarios como adjuntos. \n\

                           El archivo adjunto $mime_filename, que contiene \n\

                           su mensaje no se puede enviar. Revise su mensaje.

          log_message    = Binary file detected on email attachment ($mime_filename)

          condition      = ${if eq{$mime_content_type} \

                            {application/x-msdos-program} \

                            {yes}{no}}

 

  deny    message        = Prohibido el envio de mensajes con este tipo de \n\

                           archivo adjunto. El archivo adjunto $mime_filename, \n\

                           que contiene su mensaje no se puede enviar. Revise \n\

                           su mensaje.

          log_message    = Blacklisted file extension detected on email attachment ($mime_filename)

          condition      = ${if match{$mime_filename} \

                            {\N.+\.(ade|adpx|app|bas|bat|btm|cmd|com|cpl|crt|dat|dll|doc|\

                                    docm|exe|fxp|hlp|hta|inf|ins|isp|jar|js|jse|lnk|mda|mdb|\

                                    mde|mdt|mdw|mdz|msc|msi|msp|mst|ops|pcd|pif|prf|prg|reg|\

                                    scf|scr|sct|shb|shs|url|vb|vbe|vbs|wsc|wsf|wsh|xsl)$\N}\

                            {yes}{no}}

 

deny    message        = Lo sentimos, nadie habla idioma chino aca.

log_message    = Sorry, no one speaks Chinese here

condition      = ${if eq{$mime_charset}{gb2312}{1}{0}}

 

  defer   message        = El contenido de este mensaje parece Spam, no se puede enviar. \n\

                           Por favor, revise su mensaje.

          log_message    = Charset like to be Spam

          condition      = ${if match{$mime_charset}{\N.+\N}{yes}{no}}

          condition      = ${if !match{${lc:$mime_charset}}\

                            {\N(ascii|iso|utf|windows)\N}\

                            {yes}{no}}

 

accept

 

acl_check_content:

 

deny    message        = Este mensaje contiene malware ($malware_name)

malware        = *

log_message    = malware name=”$malware_name” rcpts=”$recipients” subject=”$h_Subject:”

 

deny    message        = Potencial spam. Puede contactar a postmaster@MAILDOMAIN \n\

si cree que esto es incorrecto.

log_message    = spam score=”$spam_score” rcpts=”$recipients” subject=”$h_Subject:”

hosts          = ! +relay_from_localhost : ! WHITELISTEDDIR/whitelisted-sa-hosts

condition      = ${if <{$message_size}{256k}{1}{0}}

spam           = nobody/defer_ok

 

warn    message        = X-Spam-Score: $spam_score ($spam_bar)

spam           = nobody:true/defer_ok

 

warn    message        = X-Spam-Report: $spam_report

spam           = nobody/defer_ok

 

accept

 

#########################################################

# ROUTERS CONFIGURATION

#########################################################

begin routers

 

.ifdef PILERHOST_ROUTELIST

mailarchive:

  debug_print = “R: mailarchive for $local_part@$domain”

  driver = manualroute

  domains = *

  route_list = PILERHOST_ROUTELIST

  transport = remote_smtp

  self = send

  unseen

.endif

 

transports:

driver = manualroute

domains = ! +local_domains : ! +virtual_domains : wildlsearch;TRANSPORTSDIR/transports

route_data = ${lookup{$domain}wildlsearch{TRANSPORTSDIR/transports}}

same_domain_copy_routing = yes

transport = remote_smtp

no_more

 

.ifdef SMARTHOST_ROUTELIST

smarthost:

driver = manualroute

domains = ! +local_domains : ! +virtual_domains

route_list = SMARTHOST_ROUTELIST

transport = remote_smtp

.endif

 

system_aliases:

driver = redirect

allow_fail

allow_defer

data = ${lookup{$local_part}lsearch{/etc/aliases}}

user = Debian-exim

group = Debian-exim

file_transport = address_file

pipe_transport = address_pipe

 

virtual_user:

driver = accept

domains = +virtual_domains

retry_use_local_part

cannot_route_message = User unknown

transport = virtual_delivery

condition = ${lookup ldap {LDAP_AD_MAIL_RCPT}{yes}{no}}

 

local_user:

driver = accept

check_local_user

transport = local_delivery

cannot_route_message = User unknown

 

 

############################################################################

# TRANSPORTS CONFIGURATION

############################################################################

begin transports

 

remote_smtp:

debug_print = “T: remote_smtp for $local_part@$domain”

driver = smtp

dns_qualify_single = false

 

procmail:

debug_print = “T: procmail for $local_part@$domain”

driver = pipe

path = “/bin:/usr/bin:/usr/local/bin”

command = “/usr/bin/procmail -d ${local_part}”

return_path_add

delivery_date_add

envelope_to_add

user = $local_part

group = mail

initgroups

return_output

 

deliverquota:

debug_print = “T: deliverquota for $local_part@$domain”

driver = pipe

delivery_date_add

envelope_to_add

return_path_add

log_output

command = “/usr/local/bin/deliverquota -c $home/${local_part}/Maildir”

user = $local_part

group = vmail

umask = 026

return_fail_output

 

virtual_delivery:

debug_print = “T: virtual delivery for $local_part@$domain”

driver = appendfile

envelope_to_add = true

return_path_add = true

delivery_date_add = true

user = vmail

group = vmail

mode = 0640

directory_mode = 0750

create_directory = true

maildir_format = true

maildir_use_size_file = true

maildir_tag = ,S=$message_size

quota_size_regex = ,S=(\d+)

quota_is_inclusive = false

directory = VIRTUAL_MAILBOX_BASEPATH/${domain}/${local_part}/Maildir

quota = DEFAULT_MAX_QUOTA

quota_warn_threshold = 75%

 

local_delivery:

debug_print = “T: local_delivery for $local_part@$domain”

driver = appendfile

delivery_date_add

envelope_to_add

return_path_add

maildir_format

create_directory

directory = $home/${local_part}/Maildir

user = $local_part

group = mail

directory_mode = 0750

mode = 0640

mode_fail_narrower = false

maildir_tag = ,S=$message_size

 

address_pipe:

debug_print = “T: address_pipe for $local_part@$domain”

driver = pipe

log_defer_output

log_fail_output

path = “/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin”

return_output

user = mail

group = mail

 

address_file:

debug_print = “T: address_file for $local_part@$domain”

driver = appendfile

delivery_date_add

envelope_to_add

return_path_add

user = mail

group = mail

 

address_reply:

debug_print = “T: autoreply for $local_part@$domain”

driver = autoreply

 

local_copy_outgoing:

debug_print = “T: outgoing messages copy for $local_part@$domain”

driver = appendfile

delivery_date_add

envelope_to_add

return_path_add

group = mail

user = mail

mode = 0660

maildir_format = true

create_directory = true

 

#################################################################

# RETRY CONFIGURATION

#################################################################

begin retry

 

# Address or Domain    Error       Retries

# —————–    —–       ——-

*@MAILDOMAIN           quota

*                      *           F,1h,4s; G,16h,2m,1.5; F,4d,1h

 

##################################################################

# REWRITE CONFIGURATION

##################################################################

#begin rewrite

 

##################################################################

# AUTHENTICATION CONFIGURATION

# SMTP AUTHENTICACION

##################################################################

begin authenticators

 

LDAP_AD_AUTH1_MAIL_RCPT_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(userPrincipalName=$1))

LDAP_AD_AUTH2_MAIL_RCPT_FILTER = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=LDAP_AD_MAIL_SERVICE_ALLOWED_USERS_GROUP_CN)(!(memberOf=LDAP_AD_MAIL_SERVICE_DENIED_USERS_GROUP_CN)))(userPrincipalName=$2))

 

LDAP_AD_AUTH1_USER_DN = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_USER_DN_ATTR?sub?\

LDAP_AD_AUTH1_MAIL_RCPT_FILTER

 

LDAP_AD_AUTH2_USER_DN = \

user=LDAP_AD_BIND_DN \

pass=LDAP_AD_BIND_PASS \

ldap:///LDAP_AD_ENTERPRISE_USERS_BASE_DN?\

LDAP_AD_USER_DN_ATTR?sub?\

LDAP_AD_AUTH2_MAIL_RCPT_FILTER

 

plain_server:

driver = plaintext

public_name = PLAIN

server_prompts = :

server_condition = \

${lookup ldap{user=”${lookup ldapdn{LDAP_AD_AUTH2_USER_DN}}” \

pass=$3 \

ldap:///}\

{yes}fail}

server_set_id = $2

 

login_server:

driver = plaintext

public_name = LOGIN

server_prompts = “Username:: : Password::”

server_condition = \

${if ldapauth{user=”${lookup ldapdn{LDAP_AD_AUTH1_USER_DN}}” \

pass=${quote:$2} \

ldap:///}\

{yes}{no}}

server_set_id = $1

 

cram_md5_server:

driver = plaintext

public_name = CRAM-MD5

server_prompts = “Username:: : Password::”

server_condition = \

${if ldapauth{user=”${lookup ldapdn{LDAP_AD_AUTH2_USER_DN}}” \

pass=${quote:$3} \

ldap:///}\

{yes}{no}}

server_set_id = $2

 

# CONFIGURATION FOR local_scan()

# begin local_scan

 

En ella se han añadido elementos nuevos y modificado otros, así que comenzaré por el principio.

 

  • Modificación de los valores del Smarthost adonde se enviarán los mensajes salientes

 

SMARTHOST_SERVER_NAME = smtp-out.MAILDOMAIN

SMARTHOST_SERVER_PORT = 26

 

SMARTHOST_ROUTELIST = * SMARTHOST_SERVER_NAME::SMARTHOST_SERVER_PORT

 

En estos días varios miembros del canal Sysadminscuba en Telegram estuvimos analizando y probando la nueva versión del Proxmox Mail Gateway, la 5.0. Las versiones anteriores eran de subscripción solamente y nos teníamos que conformar con la documentación, pero afortunadamente esta versión tiene una variante “community” o “no subscription”, la cual permite hacer un uso bastante aceptable de esta plataforma, algo similar al uso que le damos al Proxmox VE.

Para el caso que nos ocupa, Proxmox Mail Gateway, en lo adelante PMG, separa los dos tipos de tráfico, o sea, el entrante y el saliente. El tráfico entrante desde Internet lo recibe por el puerto 25/tcp, y el tráfico proveniente de los mailers internos, que va dirigido a redes externas, lo recibe por el puerto 26/tcp.

Por tanto, a la hora de establecer el smarthost o servidor de correo padre en el MTA o Mailer interno, se debe especificar también el puerto por el cual dicho smarthost acepta el tráfico saliente.

  • Inclusión de un servidor de almacenamiento de correos electrónico (Mail Piler)

 

PILERHOST_SERVER_NAME = piler.MAILDOMAIN

PILERHOST_SERVER_PORT = 25

 

PILERHOST_ROUTELIST = * PILERHOST_SERVER_NAME::PILERHOST_SERVER_PORT

 

Otro de los servicios que hemos estado analizando y probando en el canal antes mencionado es el Mailpiler, el cual es una variante muchísimo más elegante a la tradicional de tener un buzón con una copia de los mensajes entrantes y salientes durante un año, regulación del Mincom de obligatorio cumplimiento.

Ahora bien, ¿qué es MailPiler? Pues, basado en el artículo de Alexander en el sitio de los Administradores de Sistemas de Cuba, es una solución open-source avanzada para el archivado de correo electrónico, muy útil para cualquier organización. Los beneficios de tener este servicio en nuestra red son los siguientes:

  • Repositorio central de correos electrónicos
  • Proporciona información necesaria en el proceso de análisis o informática forense
  • No requiere que los servidores de correos de los cuales guarda una copia de todos los mensajes estén en línea, por lo que es independiente
  • Almacenamiento de correos electrónicos a largo plazo.
  • Compresión y deduplicación inteligente que permite un ahorro de espacio
  • Facilidad en la auditoría proporcionando información relevante
  • Descarga de mensajes a la carga, lo cual miniza los costos de almacenamiento

Entonces, la configuración del router de Exim 4 es la siguiente:

 

.ifdef PILERHOST_ROUTELIST

mailarchive:

  debug_print = “R: mailarchive for $local_part@$domain”

  driver = manualroute

  domains = *

  route_list = PILERHOST_ROUTELIST

  transport = remote_smtp

  self = send

  unseen

.endif

 

La cual es similar al asociado al smarthost con algunos cambios.

  • Modificación de los grupos de hosts que serán usados en las ACLs

 

hostlist relay_from_localhost =   \

           127.0.0.1

 

hostlist relay_from_mx_servers = \

           10.0.1.98

 

hostlist relay_from_smtp_servers = \

           10.0.1.99

 

hostlist relay_from_non_smtpauth_servers = \

           10.0.1.69 :                     \

           10.0.1.70 :                     \

           10.0.1.71 :                     \

           10.0.1.72

 

Este cambio en los grupos de hosts es consecuencia del análisis y pruebas hechas, así como la separación de roles de los servidores de correo. Antes todo estaba en un mismo grupo, lo cual no aportaba elegancia alguna al código.

Como se ve, se separaron en varios grupos, los mismos son:

  • El propio servidor o MTA (localhost)
  • Servidores de Correo de Tráfico Entrante (MX)
  • Servidores de Correo de Tráfico Saliente (SMTP)
  • Servidores o Equipos que tienen aplicaciones o servicios que envían notificaciones a través del correo electrónico y no dan opciones de configurar SMTP autenticado

 

  • Regla que chequea que solamente los equipos que interesan puedan conectarse a este servidor para realizar transferencia de mensajes, en otras palabras, que pueden hacer relay al mismo

 

deny    hosts          = ! +relay_from_localhost : ! +relay_from_internal_networks : ! +relay_from_mx_servers : ! +relay_from_smtp_servers

          message        = Solamente los servidores de correo internos/externos, equipos \n\

                           y/o subredes autorizados pueden hacer relay a este servidor

          log_message    = Relay access denied. It’s not an internal/external mail server, network or authorized hosts

 

NOTA: Esta regla actuará como complemento al cortafuegos del servidor. En otras palabras, en caso de que el cortafuegos deje de funcionar por la razón que sea, esta ACL garantizará que solamente los equipos autorizados puedan hacer relay a este servidor.

 

  • Esta regla garantiza que todas las sesiones SMTP que se realicen en el servidor sean autenticadas. En otras palabras, nada de sesiones a través de Telnet/SWAKS para spamear o hacer cosas raritas

 

deny    message        = No esta autenticado en el servidor o no pude hacer relay

        !authenticated = *

        hosts          = ! +relay_from_localhost : ! +relay_from_mx_servers : ! +relay_from_smtp_servers : ! +relay_from_non_smtpauth_servers

 

NOTA: En la versión anterior puse lo siguiente:

 

deny    message        = No esta autenticado en el servidor o no pude hacer relay

!authenticated = *

hosts          = +auth_from_hosts

 

Donde el hostslist auth_from_hosts contenía:

 

hostlist auth_from_hosts =    \

10.0.1.32/28 :        \

10.0.1.128/25

 

Como puede verse, hay una gran diferencia entre estas versiones. En la anterior solamente restringía el acceso a dos subredes, excluyendo las demás; en otras palabras, estaba haciendo algo similar a una política permisiva por defecto (ACCEPT) en un cortafuegos, donde desde cualquier subred que no fuesen esas dos se podía hacer cualquier cosa maliciosa con el correo. En esta nueva versión, lo que hago es restringir a todo el mundo, excepto a las subredes y equipos que deben entregar correo directamente (MX, notificaciones de servicios, equipos de gestión para pruebas del servicio de correo, etc.)

 

  • Regla para forzar el uso de Submission para el envío de correos electrónicos

 

accept  hosts          = ! +relay_from_localhost : ! +relay_from_mx_servers : ! +relay_from_smtp_servers : ! +relay_from_non_smtpauth_servers

        domains        = ! +local_domains : ! +virtual_domains

        control        = submission/sender_retain

 

NOTA: Aquí aplica la nota del punto anterior.

 

  • Regla para denegar mensajes que contengan adjuntos con extensiones problemáticas como EXE, PIF, BAT, CMD, etc.

 

deny    message        = Prohibido el envio de binarios como adjuntos. \n\

                           El archivo adjunto $mime_filename, que contiene \n\

                           su mensaje no se puede enviar. Revise su mensaje.

          log_message    = Binary file detected on email attachment ($mime_filename)

          condition      = ${if eq{$mime_content_type} \

                            {application/x-msdos-program} \

                            {yes}{no}}

 

  deny    message        = Prohibido el envio de mensajes con este tipo de \n\

                           archivo adjunto. El archivo adjunto $mime_filename, \n\

                           que contiene su mensaje no se puede enviar. Revise \n\

                           su mensaje.

          log_message    = Blacklisted file extension detected on email attachment ($mime_filename)

          condition      = ${if match{$mime_filename} \

                            {\N.+\.(ade|adpx|app|bas|bat|btm|cmd|com|cpl|crt|dat|dll|doc|\

                                    docm|exe|fxp|hlp|hta|inf|ins|isp|jar|js|jse|lnk|mda|mdb|\

                                    mde|mdt|mdw|mdz|msc|msi|msp|mst|ops|pcd|pif|prf|prg|reg|\

                                    scf|scr|sct|shb|shs|url|vb|vbe|vbs|wsc|wsf|wsh|xsl)$\N}\

                            {yes}{no}}

 

NOTA: A partir de la versión 4.88 de Exim, cambia la manera en la que se especifica esta ACL para el análisis, tanto de la cabecera MIME, como del contenido de los mensajes. En la configuración anterior se empleaban más líneas.

 

  • Regla para rechazar los mensajes que no contengan un conjunto de caracteres adecuado, en otras palabras, que sean mensajes entendibles por nosotros, los que no usamos idiomas simbólicos como los asiáticos.

 

defer   message        = El contenido de este mensaje parece Spam, no se puede enviar. \n\

                           Por favor, revise su mensaje.

          log_message    = Charset like to be Spam

          condition      = ${if match{$mime_charset}{\N.+\N}{yes}{no}}

          condition      = ${if !match{${lc:$mime_charset}}\

                            {\N(ascii|iso|utf|windows)\N}\

                            {yes}{no}}

 

Y hasta aquí los cambios. Espero que les sean de utilidad. Cualquier crítica o sugerencia será bienvenida. 🙂

 

 

Acerca de Hector Suarez Planas

Es Licenciado en Ciencia de la Computación (3 de julio de 2002). Ha sido Administrador de Red en varias organizaciones, Programador y Analista de Sistemas. Actualmente se desempeña como Administrador de Red del Telecentro Tele Turquino de Santiago de Cuba. Tiene experiencia con sistemas Windows y GNU/Linux, Infraestructura de Redes (Cisco, AlliedTelesis, Netgear y HP ProCurve, Vyatta/VyOS), Servidores tanto físicos como virtuales (plataformas VMWare, Proxmox VE y Xen), Sistemas de Seguridad Informática (Snort/Suricata IDS, appliances AlienVault OSSIM), programador (Delphi, C++ Builder, Perl [poco], Python [algo]), entre otras cosas. Actualmente estoy incursionando en todo lo que tiene relación con Cloud Computing (OpenStack) y Centros de Datos. :-)
Esta entrada fue publicada en Correo Electrónico, Debian, Directorio Activo, Exim, Linux, MTA, Sin categoría. Guarda el enlace permanente.

3 respuestas a Sistema de Correo Electrónico integrado con un Directorio Activo de Microsoft o Samba 4 (Nuevos cambios)

  1. José Betancourt Mondeja dijo:

    puedes activar los rss en tu blog ?

  2. Antonio Hernandez Gonzalez dijo:

    Saludos Hector soy fiel seguidor de tu blog he aprendido mucho por la parte de proxmox para cluster AD…. recientemente he tenido varios problemitas en otros temas que necesito urgentemente solucionar con solo poco de tu tiempo me ayudarias grandemente..por favor escribeme al mi correo para intercambiar, saludos y gracias de antemano..

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *