Guía técnica · 5 min read · Jan 03, 2026

Guía de Mailscanner/Exim Gateway con Communigate PRO - Página 2

Anti Spam

Si deseas rechazar mensajes de servidores sin DNS inverso, añade esto bajo acl_check_rcpt:, tiene una lista de excepciones a la que puedes agregar dominios donde la acl no debe aplicarse y trata de entregar un mensaje de prueba a la dirección de envío para verificar si el remitente es válido.

drop  message   = REJECTED - No aceptamos mensajes de hosts sin DNS inverso
        log_message = Sin DNS inverso
domains = ! lsearch;/etc/exim/checks_exempt_hosts
        !verify = reverse_host_lookup
        !verify = sender/callout=2m,defer_ok
        !condition =  ${if eq{$sender_verify_failure}{} }

Para rechazar mensajes de clientes que no proporcionan un saludo HELO/EHLO, añade esto a acl_check_rcpt:

drop  message  = REFUSED - no saludo HELO/EHLO
        log_message = el host remoto no presentó saludo
        condition = ${if def:sender_helo_name {false}{true}}

Puedes limitar la tasa de conexiones a tu servidor, añade esto a acl_check_connect: para hacerlo (lee la documentación de exim sobre los parámetros si deseas ajustarlo para tu sitio).

deny ratelimit = 250 / 15m / strict
       message = Solo puedes enviar $sender_rate por $sender_rate_period
       log_message = TASA: $sender_rate/$sender_rate_period (máx $sender_rate_limit)
accept

Detén a los bots de spam deshonestos de arruinar tu máquina.

smtp_accept_max_nonmail = 30
smtp_max_unknown_commands = 1

Permite el pipelining solo desde localhost para permitirte usar más tarde mailfeeder para liberar correo.

pipelining_advertise_hosts = 127.0.0.1

Verificación de Direcciones

Esto utiliza el router check_backend para comunicarse con tu sistema communigate pro a través de ldap para asegurar que una dirección existe antes de aceptar correo para esa dirección.

Agrega tus servidores ldap predeterminados a la configuración de exim.

ldap_default_servers = xxx.xxx.xxx.xxx

Configura dominios que tienen una cuenta catchall (sin verificación si la dirección existe antes de aceptar correo.

# ejemplo /etc/exim/catchall_domains
somedomain.com

Especifica esto en la configuración de exim.

domainlist domains_with_catchall = lsearch;/etc/exim/catchall_domains

Crea y agrega los dominios CGP habilitados para ldap al archivo /etc/exim/ldap-domains. La primera columna es el alias del dominio o dominio y la segunda es el dominio real tal como existe en ldap, ya que cuando sincronizas los dominios CGP a ldap no copia los alias de dominio también.

#ejemplo  /etc/exim/ldap-domains
example.com: example.com
example.co.za: example.com

Crea el router check_backend, este debería ser el primer router en tu configuración.

check_backend:
 driver = redirect
domains = ! +domains_with_catchall : +relay_to_domains
 allow_fail
 allow_defer
 forbid_file
 forbid_pipe
 data = ${lookup ldap{ldap:///uid=${local_part},cn=${lookup{$domain}lsearch{/etc/exim/ldap-domains}}?mail}{$value}{:fail: Usuario desconocido}}
 #versión 5.x usa esto en su lugar
 #data = ${lookup ldap{ldap:///cn=${lookup{$domain}lsearch{/etc/exim/ldap-domains}}?uid?sub?(uid=$local_part)}{$local_part@$domain}{:fail: Usuario desconocido}}

Entrega Limpia Exim

Esta es la configuración que se utiliza para entregar el correo limpio que mailscanner ya ha escaneado. El archivo de configuración es /etc/exim/exim_out.conf. Para esto puedes usar la configuración predeterminada con todas las verificaciones y acls eliminadas.

Necesitas agregar este router para entregar el correo limpio a los servidores CGP reales. Si estás ejecutando un clúster, este router es capaz de distribuir las entregas entre los servidores que has configurado en /etc/exim/mail-routes, haciéndolo completamente redundante.

deliver_clean:
  driver = manualroute
domains = +relay_to_domains
  transport = remote_smtp
  hosts_randomize = true
  route_data = ${lookup{$domain}lsearch{/etc/exim/mail-routes}}

Configurar MySQL

Agrega esto al archivo de configuración /etc/my.cnf:

socket=/var/lib/mysql/mysql.sock
skip-networking

Esto configura mysql para comunicarse solo a través del socket y no tcp, lo cual es mejor para la seguridad y el rendimiento.

Inicia mysql, esto inicializará las bases de datos predeterminadas.

service mysqld start

Establece la contraseña del usuario root:

mysqladmin -u root password NEWPASSWORD

Crea la base de datos mailwatch y llena las tablas:

mysql -p < /usr/local/src/mailwatch-1.0.4/create.sql

Crea el usuario mysql para mailwatch y el registro de mailscanner:

mysql  
mysql> GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY 'password';

Crea el usuario administrador de mailwatch:

mysql mailscanner -u mailwatch -p  
Enter password: ******  
mysql> INSERT INTO users VALUES ('',md5(' '),'','A','0','0','0','0','0'); 

Configurar MailScanner

Introducción

Mailscanner tiene varias opciones de configuración, solo me centraré en aquellas que son necesarias para hacer que el sistema funcione. Para personalizar aún más el sistema, por favor lee la documentación de mailscanner o mira los archivos de configuración de ejemplo que he proporcionado.

Configuración Básica

Por favor edita las siguientes variables de configuración en /etc/MailScanner/MailScanner.conf:

Run As User = exim
Run As Group = exim
Incoming Queue Dir = /var/spool/exim.in/input
Outgoing Queue Dir = /var/spool/exim/input
MTA = exim
Sendmail = /usr/sbin/exim -C /etc/exim/exim_out.conf
Sendmail2 = /usr/sbin/exim -C /etc/exim/exim_out.conf
Quarantine User = exim
Quarantine Group = apache
Quarantine Permissions = 0660
Quarantine Infections = yes
Quarantine Whole Message = yes
Quarantine Whole Messages As Queue Files = no
Keep Spam And MCP Archive Clean = yes
Spam Actions = store
High Scoring Spam Actions = store
Detailed Spam Report = yes
Include Scores In SpamAssassin Report = yes
  • Establecer permisos
chown exim.exim -R /var/spool/MailScanner/incoming  
mkdir -p /var/spool/exim.in/{input,msglog,scan,db}  
chown exim.exim /var/spool/exim.in/{input,msglog,scan,db}

Anti Virus

Si tienes un segundo escáner de virus, establece

Virus Scanning = yes
Virus Scanners = "nombre del escáner de virus"

Listas Negras y Blancas

Usaremos listas blancas y negras basadas en SQL(mysql) para integrarnos fácilmente con la interfaz web de mailwatch, permitiendo a los usuarios agregar remitentes a la lista blanca y negra desde la interfaz web.

Edita el archivo de configuración de mailscanner y agrega:

Is Definitely Not Spam = &SQLWhitelist
Is Definitely Spam = &SQLBlacklist
Ignore Spam Whitelist If Recipients Exceed = 20

Edita el archivo /usr/lib/MailScanner/MailScanner/CustomFunctions/SQLBlackWhiteList.pm:

sub CreateList {
  my($type, $BlackWhite) = @_;
  my($dbh, $sth, $sql, $to_address, $from_address, $count);
  my($db_name) = 'mailscanner';
  my($db_host) = 'localhost';
  my($db_user) = 'mailwatch';
  my($db_pass) = 'password';

Integración de Mailwatch

Edita el archivo de configuración de mailscanner y agrega:

Always Looked Up Last = &MailWatchLogging

Edita el archivo /usr/lib/MailScanner/MailScanner/CustomFunctions/MailWatch.pm:

my($db_name) = 'mailscanner';
my($db_host) = 'localhost';
my($db_user) = 'mailwatch';
my($db_pass) = 'password';

Configurar Spamassassin

Esta configuración utilizará una base de datos mysql para almacenar la información bayesiana. Así que crearemos una base de datos y un usuario que se utilizarán para conectarse a la base de datos. También utilizaremos reglas adicionales (SARE alojadas por Daryl C. W. O’Shea http://www.dostech.ca/) así que configuraremos sa-update para descargarlas automáticamente.

Crear Base de Datos MySQL

mysqladmin -p create bayes

Llena la base de datos:

mysql -p bayes < /usr/share/doc/spamassassin-3.2.3/sql/bayes_mysql.sql

Crea el usuario:

mysql -p  
mysql> GRANT ALL ON bayes.* TO bayes@localhost IDENTIFIED BY 'password';

Configurar para Usar DB

Edita el archivo /etc/mail/spamassassin/local.cf y agrega:

bayes_store_module  Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn       DBI:mysql:bayes:localhost
bayes_sql_override_username bayes
bayes_sql_username  bayes
bayes_sql_password  password

Actualizaciones de Reglas SARE

Importa la clave GPG utilizada para firmar las reglas:

wget http://daryl.dostech.ca/sa-update/sare/GPG.KEY sa-update --import GPG.KEY

Crea el archivo de canales /etc/mail/spamassassin/sare-sa-update-channels.txt:

updates.spamassassin.org
72_sare_redirect_post3.0.0.cf.sare.sa-update.dostech.net
70_sare_evilnum0.cf.sare.sa-update.dostech.net
70_sare_bayes_poison_nxm.cf.sare.sa-update.dostech.net
70_sare_html0.cf.sare.sa-update.dostech.net
70_sare_html_eng.cf.sare.sa-update.dostech.net
70_sare_header0.cf.sare.sa-update.dostech.net
70_sare_header_eng.cf.sare.sa-update.dostech.net
70_sare_specific.cf.sare.sa-update.dostech.net
70_sare_adult.cf.sare.sa-update.dostech.net
72_sare_bml_post25x.cf.sare.sa-update.dostech.net
99_sare_fraud_post25x.cf.sare.sa-update.dostech.net
70_sare_spoof.cf.sare.sa-update.dostech.net
70_sare_random.cf.sare.sa-update.dostech.net
70_sare_oem.cf.sare.sa-update.dostech.net
70_sare_genlsubj0.cf.sare.sa-update.dostech.net
70_sare_genlsubj_eng.cf.sare.sa-update.dostech.net
70_sare_unsub.cf.sare.sa-update.dostech.net
70_sare_uri0.cf.sare.sa-update.dostech.net
70_sare_obfu0.cf.sare.sa-update.dostech.net
70_sare_stocks.cf.sare.sa-update.dostech.net

Crea un script de actualización /usr/local/bin/update-sa:

#!/bin/bash
#
#
sa-update -D --channelfile /etc/mail/spamassassin/sare-sa-update-channels.txt --gpgkey 856AA88A

Hazlo ejecutable y agrégalo a cron:

chmod +x /usr/local/bin/update-sa  
ln -s /usr/local/bin/update-sa /etc/cron.daily/  
ln -s /usr/local/bin/update-sa /etc/cron.hourly
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.