Los 7 consejos más eficaces para bloquear el spam con Postfix en CentOS/RHEL
13:47, 18.12.2023
¿En qué consiste realmente el spam por correo electrónico? ¿Cómo funciona? ¿Por qué se recibe tanto spam?
En pocas palabras, el spam es correo electrónico no solicitado. Una bandeja de entrada personal constantemente desbordada puede ser frustrante. Además, los correos electrónicos inútiles o fraudulentos que pertenecen al concepto de spam pueden costarle dinero a su empresa a largo plazo.
Muchas herramientas pueden ayudarle a lidiar eficazmente con el spam, incluyendo Postfix.
El servidor SMTP Postfix en CentOS/RHEL permite bloquear el spam de correo electrónico antes de que llegue a la bandeja de entrada.
Veamos qué es el spam y cómo detenerlo con Postfix en CentOS/RHEL.
Cómo entender el spam
El spam de correo electrónico es básicamente correo electrónico no deseado que el usuario recibe en su dirección de correo electrónico. Por desgracia, el spam no es un concepto nuevo, ya que existe desde hace tiempo. Hay miles de millones de correos spam que los usuarios reciben a diario.
El spam por correo electrónico suele enviarse a un gran grupo de personas mediante programas informáticos que generan y envían correos electrónicos automáticamente. Sin embargo, el spam por correo electrónico también se puede pasar manualmente.
Hay tipos comunes de spam de correo electrónico, incluyendo:
- Correos electrónicos comerciales. Estos correos promocionan productos o servicios comerciales a cambio de una comisión del anunciante. El spam por correo electrónico puede incluir enlaces a sitios de contenido similar u ofertas de bienes y servicios no relacionados directamente con sus intereses.
- Virus. Los virus son programas maliciosos que infectan el sistema operativo y roban información personal. Los virus de correo electrónico pueden contener código malicioso para infectar el sistema.
- Correos electrónicos de phishing. El phishing consiste en el envío de correos electrónicos fraudulentos diseñados para engañar a los usuarios para que revelen su información privada o financiera, de modo que los estafadores puedan utilizarla para sus fines. Los correos electrónicos de phishing suelen incluir un enlace a otro sitio web.
De nuevo, los spammers suelen utilizar programas automatizados (bots) para enviar miles de correos electrónicos a la vez, lo que significa que algunos correos pueden acabar en tu bandeja de entrada aunque nunca te hayas suscrito a boletines o promociones.
Consejo #1: Exija registros PTR para los clientes SMTP
Los registros PTR, o Pointer Records, son registros DNS inversos utilizados para la búsqueda DNS.
El Sistema de Nombres de Dominio (DNS) es donde se almacenan los datos de los dominios registrados. Cuando se desea consultar los registros, se realiza una búsqueda DNS. Los navegadores suelen hacerlo cuando los usuarios introducen su dirección de correo electrónico y, a través de ella, obtienen la dirección IP de un servidor de correo. El resultado de esa consulta suele ser un registro A.
Una búsqueda DNS inversa es cuando el servidor obtiene el dominio a través de una dirección IP. El resultado de esta consulta es un registro PTR.
¿Por qué son vitales los registros PTR? De camino a la bandeja de entrada, el correo electrónico viaja a través de servidores. En ese proceso, los proveedores de correo electrónico realizan búsquedas de DNS y DNS inverso. Si no coinciden, el correo electrónico se clasifica como spam. Por lo tanto, los proveedores de correo electrónico exigen que los clientes SMTP tengan los registros PTR correctos; suele ser tarea del administrador de un servidor SMTP.
Ahora, usted mismo puede realizar una búsqueda DNS inversa. Para ello, consulta el siguiente comando en CentOS/RHEL para obtener el nombre de dominio y la dirección IP:
host <IP address>
Muchos servidores de correo tienen como requisito que haya registros PTR válidos que coincidan con las direcciones IP. Si el caso mencionado es cierto, en el log de Postfix (/var/log/maillog), aparecerá la siguiente línea si el cliente SMTP tiene registros PTR:
connect from "hostname" [IP-address]
Si la dirección IP del cliente SMTP no tiene registros PTR, aparecerá "desconocido" en lugar de "nombre de host" en el registro de Postfix.
Puede filtrar los correos electrónicos que no están asociados con ningún registro PTR a través de Postfix. Para ello, necesita abrir el archivo de configuración de Postfix con el siguiente comando:
sudo nano /etc/postfix/main.cf
Luego, en el "smtpd_sender_restrictions" tiene que añadir:
reject_unknown_reverse_client_hostname
Luego tendrá que guardar y reiniciar Postfix para que los cambios se apliquen:
sudo systemctl restart postfix
Consejo #2: Implemente restricciones de nombres de host HELO/EHLO
El procedimiento EHLO permite a un cliente presentarse al servidor SMTP. El HELO es muy similar al EHLO pero transporta menos datos al servidor.
Así que, a veces, hay un nombre de dominio inexistente o un nombre de dominio que no funciona completamente proporcionado en el diálogo SMTP; esto muy probablemente indica un correo electrónico de spammers. Necesitará editar el archivo de configuración de Postfix para activar las restricciones HELO/EHLO:
sudo nano /etc/postfix/main.cf
Para que el cliente proporcione una consulta de nombre de host, haga lo siguiente:
smtpd_helo_required = yes
Para activar las restricciones, añada:
smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated
Si desea rechazar clientes que proporcionen un nombre de host no válido, utilice este comando:
reject_invalid_helo_hostname
Para rechazar un correo electrónico sin registros existentes, utilice:
reject_unknown_helo_hostname
En resumen, todas las instancias que pueda rechazar, serán algo parecido a esto:
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_invalid_helo_hostname
reject_unknown_helo_hostname
A continuación, guarde el archivo y reinicie Postfix:
sudo systemctl reload Postfix
A veces, incluso los servidores de correo legítimos pueden necesitar cumplir los estándares HELO/EHLO. Para evitar errores con Postfix, necesita poner esos servidores en una lista blanca usando:
check_helo_access hash:/etc/postfix/helo_access
A continuación, cree el archivo /etc/postfix/helo_access con:
sudo nano /etc/postfix/helo_access
El ejemplo de las listas blancas puede ser el siguiente:
optimus-webapi-prod-2.localdomain OK
va-massmail-02.rakutenmarketing.com OK
Una vez que haya añadido los servidores a la lista, cree el archivo /etc/postfix/helo_access.db:
sudo postmap /etc/postfix/helo_access
Y luego vuelva a cargar Postfix:
sudo systemctl reload Postfix
Consejo #3: Verifique los registros A de los nombres de host de los clientes SMTP
Los servidores de spam a menudo no tienen registros A válidos para sus direcciones IP. Puede filtrar las direcciones IP sin registros A editando el archivo de configuración de Postfix como en los ejemplos anteriores.
Añada los siguientes comandos a la sección "smtpd_sender_restrictions":
reject_unknown_reverse_client_hostname reject_unknown_client_hostname
Guarde el archivo de configuración y reinicie Postfix.
Recuerde que los dos comandos mencionados no rechazan los nombres de host fraudulentos HELO/EHLO.
Consejo #4: Rechace los correos electrónicos con registros MX o A inadecuados
MX es la abreviatura de "Mail From", que también recibe el nombre de dirección "envelope from".
A veces, el spam de correo electrónico se envía desde dominios inexistentes en la dirección Mail From que no tiene ningún registro. Si el dominio del remitente no tiene registros, Postfix no será capaz de enviar correo electrónico a ese dominio, por lo que es mejor rechazarlo.
Para bloquear este tipo de spam, necesita editar de nuevo el archivo de configuración de Postfix de forma similar a la descrita en los consejos anteriores.
Para rechazar el correo electrónico del nombre de dominio de la dirección que no tiene ni registros MX o A, añada lo siguiente a la sección "smtpd_sender_restrictions":
reject_unknown_sender_domain
Rechazará el nombre de dominio de la dirección sin registros.
Puede tener este aspecto:
smtpd_sender_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unknown_sender_domain
reject_unknown_reverse_client_hostname
reject_unknown_client_hostname
A continuación, guarde el archivo y reinicie Postfix.
Es mejor colocar el reject_unknown_sender_domain por encima de todos los demás comandos "reject" para evitar problemas.
Consejo #5: Despliegue Greylisting con Postfix
Greylisting es una técnica de rechazo de spam de correo electrónico que rechaza cualquier servidor de correo ajeno a la función greylisting. Si el servidor remitente no es fraudulento, reenviará el correo electrónico. Sin embargo, la mayoría de los spammers no reenvían el correo electrónico. Así, el spam queda bloqueado. A través de las listas grises, los servidores que reenvían correos electrónicos se añadirán a la lista y no sufrirán interrupciones en el futuro; las listas grises no permitirán que los servidores que no reenvían correos electrónicos continúen con su actividad.
Para desplegar la característica greylisting con Postfix, necesita acceder al servicio Postgrey. Para usuarios de CentOS/RHEL, la instalación de Postgrey está disponible desde el repositorio EPEL. Cuando esté instalado, introduce el siguiente comando con:
sudo systemctl start postgrey
y póngalo en marcha:
sudo systemctl enable postgrey
Entonces, necesitará editar el fichero de configuración de Postgrey para que utilice el servidor greylisting:
sudo nano /etc/postfix/main.cf
En "smtpd_recipient_restrictions", añada lo siguiente:
check_policy_service unix:postgrey/socket
Guarde y reinicie Postfix.
De esta forma, Postgrey rechazará el acceso desde la nueva dirección IP del remitente, dirección de correo electrónico del remitente o dirección de correo electrónico del destinatario. El envío de direcciones de correo electrónico falsas puede no detener las direcciones generadas aleatoriamente. Sin embargo, los spammers con direcciones falsas nunca reenvían emails; de esta forma, las listas grises pueden ser útiles.
Consejo #6: Utilizar listas negras públicas en tiempo real
A veces, los correos electrónicos fraudulentos pueden pasar a través de greylisting, con el nombre de host y los registros de verificación, pero todavía puede ser spam de correo electrónico. La siguiente medida de rechazo del correo basura en estos casos sería la creación de listas negras. Las listas negras públicas en tiempo real implican que estas listas negras se actualizan constantemente.
Puede utilizar varias listas negras para bloquear el spam por correo electrónico. Para ello, necesita ver qué listas negras bloquean el nombre de dominio de los spammers y utilizarlas. Para consultar qué listas negras contienen los nombres de dominio de los remitentes de spam, puedes ir a los sitios web MXToolBox y Debouncer.
Para utilizar las listas negras, en el archivo /etc/postfix/main.cf, añada lo siguiente:
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
check_policy_service unix:private/policyd-spf
check_policy_service unix:postgrey/socket
reject_rhsbl_helo … (the blacklist)
reject_rhsbl_reverse_client … (the blacklist)
reject_rhsbl_sender … (the blacklist)
reject_rbl_client … (the blacklist)
Para el spammer que utiliza el servidor de correo de Google "reject_rhsbl_helo" no será eficaz. Para la mayoría de los casos, "reject_rhsbl_sender" será suficiente.
Consejo # 7: Mejore la seguridad con OpenDMARC
Domain-based Message Authentication, Reporting, and Conformance, DMARC para abreviar, es un estándar de Internet que impide que los estafadores de correo electrónico utilicen los dominios de otras personas para enviar spam.
Para configurar OpenDMARC necesita disponer de verificación DKIN y OpenDKIM. Los siguientes pasos describen la instalación y configuración de OpenDMARC en CentOS/RHEL.
En primer lugar, necesita instalar OpenDMARC, lo que puede hacer desde el repositorio EPEL:
sudo dnf install epel-release
sudo dnf install opendmarc
Inicie OpenDMARC (1) y asegúrese de que se está ejecutando (2):
(1) sudo systemctl start opendmarc
(2) systemctl status opendmarc
A continuación, abra y edite el archivo de configuración:
sudo nano /etc/opendmarc.conf
Cambie el: "# AuthservID name" por "AuthservID OpenDMARC".
En la siguiente línea ponga su nombre de host Postfix:
TrustedAuthservIDs mail.yourdomain.com
A continuación, busque la línea siguiente y cambie "false" por "true":
# IgnoreAuthenticatedClients false
En las líneas siguientes, haga lo mismo:
# RejectFailures false
# RequiredHeaders false
Guarde el archivo y reinicie OpenDMARC para que se apliquen los cambios.
Aceleración de las búsquedas DNS con un resolvedor local
Postfix realizará una búsqueda de registros DNS, y este proceso puede tardar un poco. Para acelerarlo, puede ejecutar un resolver DNS local (ya que la mayoría de las listas DNS tienen limitaciones de consulta). Este ejemplo utilizará el servidor DNS bind9.
Instala el servidor DNS bind9:
sudo dnf install bind
Y ejecútelo:
sudo systemctl start named
Habilite el inicio automático en el arranque:
sudo systemctl enable named
Configuración del servidor DNS predeterminado para el servidor de correo CentOS/RHEL
El DNS resolver por defecto puede variar, pero necesita configurarlo a 127.0.0.1.
En primer lugar, usted necesita saber el nombre de su red utilizando:
ip addr
A continuación, necesita editar el archivo de configuración y poner el nombre de su red:
sudo nano /etc/sysconfig/network-scripts/ifcfg-name of your network
A continuación, busque el parámetro DNS y cámbielo a 127.0.0.1.:
DNS1="127.0.0.1"
Guarde y reinicie el NetworkManager.
Deshabilitación de IPv6 en BIND
Para evitar errores con el log de BIND, es mejor deshabilitar IPv6 si su servidor de correo no tiene una dirección IPv6 pública.
En primer lugar, abra el archivo de configuración.
sudo nano /etc/sysconfig/named
Al final del archivo, añada lo siguiente:
OPTIONS= "-4"
Guarde el archivo y reinicie:
sudo systemctl restart named
Ejecute el siguiente comando:
sudo netstat -lnptu | grep named