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 2821

Esto 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:60000

Las 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

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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