Postfix Spam · 5 min read · Nov 12, 2025
Cómo Luchar Contra el Spam Usando Tu Configuración de Postfix
Cómo Luchar Contra el Spam Usando Tu Configuración de Postfix
En esta guía aprenderás cómo ajustar la guía de correo Falko por defecto para Postfix (+Auth SMTP + Quota), https://www.howtoforge.com/virtual_postfix_mysql_quota_courier, configurada para combatir mejor el SPAM y permitir un poco de compatibilidad hacia atrás con los antiguos sistemas Qmail.
Así que empecemos…
La guía de HowtoForge es excelente para todo, sin embargo, si tienes un servidor de correo muy ocupado ejecutando Spam Assasin con miles de mensajes por minuto, es un asesino de CPU. La mejor respuesta es detener el correo antes de que llegue a Spam Assasin con una serie de RBL (Listas Negras en Tiempo Real) y RHBL (lo mismo pero diferente), Greylistings y Helo Checks.
Primero que nada, queremos cambiar las restricciones smtpd existentes y agregar una serie de nuevas verificaciones para ayudar a reducir la cantidad de correo que el sistema acepta en /etc/postfix/main.cf
### Verificaciones para eliminar correos electrónicos mal formados
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
unknown_address_reject_code = 554
unknown_hostname_reject_code = 554
unknown_client_reject_code = 554
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, regexp:/etc/postfix/helo.regexp, permit
### Al cambiar sender_checks, este archivo debe ser regenerado usando postmap , para generar una base de datos de Berkeley
smtpd_recipient_restrictions =
check_client_access hash:/etc/postfix/helo_client_exceptions
check_sender_access hash:/etc/postfix/sender_checks,
reject_invalid_hostname,
### Puede causar problemas con Auth SMTP, ¡así que ten cuidado!
reject_non_fqdn_hostname,
##################################
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
# Agrega excepciones RBL aquí, al cambiar rbl_client_exceptions, este
archivo debe ser regenerado usando postmap , para generar una
base de datos de Berkeley
check_client_access hash:/etc/postfix/rbl_client_exceptions,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rhsbl_sender dsn.rfc-ignorant.org,
check_policy_service inet:127.0.0.1:60000
permit Ahora para explicar, pero primero necesitamos crear algunos archivos:
El primer archivo que queremos crear es /etc/postfix/helo.regexp y este contendrá:
/^subdomain\.host\.com$/ 550 No uses mi propio nombre de host
/^xxx\.yyy\.zzz\.xxx$/ 550 No uses mi propia dirección IP
/^\[xxx\.yyy\.zzz\.xxx\]$/ 550 No uses mi propia dirección IP
/^[0-9.]+$/ 550 Tu software no es compatible con RFC 2821
/^[0-9]+(\.[0-9]+){3}$/ 550 Tu software no es compatible con RFC 2821Esto solo rechazará a los spammers que intenten enviar el comando helo e impersonar ya sea el servidor que recibe el correo por IP o por nombre de host, así como también rechazará algunos de los correos que no cumplen con la conformidad de RFC 2821.
A continuación, necesitamos crear /etc/postfix/helo_client_exceptions:
#Estas direcciones IP de cliente están permitidas para omitir las verificaciones fqdn
# Algunos Comentarios para identificar la dirección IP a continuación
www.xxx.yyy.zzz OK Este archivo es necesario en caso de que un servidor de correo mal comportado no pueda enviar el helo correcto y necesites permitir que el correo sea aceptado desde esa fuente. En mi experiencia, cosas como dispositivos independientes, cámaras de CCTV son malas para cumplir con los estándares, así que podrías necesitar hacer una excepción para esto.
Antes de que cualquier cambio en este archivo se vuelva utilizable, necesitas ejecutar
postmap /etc/postfix/helo_client_exceptions
Esto creará un archivo llamado /etc/postfix/helo_client_exceptions.db
Bajando, tenemos /etc/postfix/sender_checks que te permite omitir las diversas verificaciones FQDN y permitir que un remitente particular pase. Esto es particularmente útil si una empresa ejecuta una red de correo interno como domain.com pero el correo se ejecuta en int.domain.com y no hay configuración DNS para int.domain.com, esto es genial para la seguridad pero no es bueno porque el DNS externo no conoce la estructura interna y, por lo tanto, postfix rechazará el int.domain.com.
[email protected] REJECT
[email protected] OK Una vez más, este archivo una vez modificado debe tener un archivo de Berkeley DB creado y así lo creamos usando:
postmap /etc/postfix/sender_checks
A continuación, tenemos nuestras verificaciones RBL. Hay muchos sitios web dedicados a RBLs, pero para reducir la longitud del artículo, simplemente pon estas listas se actualizan constantemente y proporcionan IPs y nombres de host que los spammers están utilizando para retransmitir correo. Cada IP que intenta enviar correo a tu servidor de correo será verificada contra estas listas (4 utilizadas arriba) y si la IP no está listada en los RBLs, el servidor de correo aceptará el correo. Por supuesto, los servidores se encuentran en estas listas todo el tiempo inadvertidamente o las listas tardan 24 horas en eliminar la IP en la lista negra después de un brote de spam, así que siempre es mejor tener una forma de omitir estas verificaciones.
Para hacerlo, creamos un archivo llamado /etc/postfix/rbl_client_exceptions:
## Algunos comentarios aleatorios
www.xxx.yyy.zzz OK Una vez más, debes ejecutar postmap para generar el archivo de Berkeley DB
postmap /etc/postfix/rbl_client_exceptions
La última línea de las restricciones smtpd es el filtro de greylisting. No entraré en detalles sobre esto ya que ya existe una guía sobre howtoforge, https://www.howtoforge.com/greylisting_postfix_postgrey, pero si no deseas usar Greylisting, simplemente omite la línea
check_policy_service inet:127.0.0.1:60000Las restricciones smtpd son muy fáciles de seguir, hasta que una de las verificaciones da la luz verde para que el mensaje pase a la cola de Postfix, la mayoría de las respuestas no están seguras, a menos que se dé un NO explícito, el mensaje se moverá hacia abajo en la lista de verificaciones.
LEGADO QMAIL
DJB (Dan Bernstein) desarrolló una alternativa a SMTP llamada QMQP. Se dice que es más rápida con menos sobrecargas. Así que si estás reemplazando tus antiguos MTA de Qmail con Postfix, es posible que necesites habilitar el soporte para QMQP.
Hacemos esto agregando lo siguiente en /etc/postfix/main.cf
qmqpd_authorized_clients = $mynetworks
qmqpd_error_delay = 5s
qmqpd_timeout = 300s Realísticamente puedes autenticar contra cualquier cosa, pero decidí autenticar contra mis redes. Después de haber agregado lo anterior en main.cf, necesitas modificar aún más /etc/postfix/master.cf y asegurarte de que contenga lo siguiente:
628 inet n - - - 100 qmqpd Ahora todo lo que necesitas hacer es reiniciar Postfix
/etc/init.d/postfix restart
Puedes verificar tu nuevo Postfix consciente de QMQP escribiendo:
telnet localhost 628
Autenticación a través de IP (Ideal para el reenvío de Smarthost en servidores MS Exchange)
A continuación, vamos a modificar la guía un poco para hacer que la configuración de mis redes sea un poco más fácil que a través de archivos planos, a saber, /etc/postfix/main.cf
Crea lo siguiente /etc/postfix/mysql-mynetworks.cf
user = mail_admin
password = password
dbname = mail
table = allowed_hosts
select_field = 'IP'
where_field = IP
hosts = 127.0.0.1
additional_conditions = and active='yes' Necesitarás el siguiente SQL en este punto
CREATE TABLE allowed_hosts (active enum(‘yes’,’no’) NOT NULL default ‘1’,IP varchar(15) NOT NULL default ‘’,Client varchar(128) NOT NULL default ‘’,Comments text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Finalmente, activemos esto cambiando nuestra línea mynetworks en el main.cf de Postfix a:
mynetworks = 127.0.0.0/8, proxy:mysql:/etc/postfix/mysql-mynetworks.cf Finalmente, reinicia Postfix para que los cambios surtan efecto:
chmod o= /etc/postfix/mysql-mynetworks.cf
chgrp postfix /etc/postfix/mysql-mynetworks.cf
/etc/init.d/postfix restart
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.