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)
acceptDetén a los bots de spam deshonestos de arruinar tu máquina.
smtp_accept_max_nonmail = 30
smtp_max_unknown_commands = 1Permite el pipelining solo desde localhost para permitirte usar más tarde mailfeeder para liberar correo.
pipelining_advertise_hosts = 127.0.0.1Verificació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.xxxConfigura dominios que tienen una cuenta catchall (sin verificación si la dirección existe antes de aceptar correo.
# ejemplo /etc/exim/catchall_domains
somedomain.comEspecifica esto en la configuración de exim.
domainlist domains_with_catchall = lsearch;/etc/exim/catchall_domainsCrea 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.comCrea 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-networkingEsto 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 startEstablece la contraseña del usuario root:
mysqladmin -u root password NEWPASSWORDCrea la base de datos mailwatch y llena las tablas:
mysql -p < /usr/local/src/mailwatch-1.0.4/create.sqlCrea 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 = 20Edita 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 = &MailWatchLoggingEdita 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 bayesLlena la base de datos:
mysql -p bayes < /usr/share/doc/spamassassin-3.2.3/sql/bayes_mysql.sqlCrea 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 passwordActualizaciones 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.KEYCrea 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.netCrea 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 856AA88AHazlo 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.hourlyRecibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.