Postfix · 6 min read · Sep 22, 2025

Fortalecimiento de Postfix para ISPConfig 3

Fortalecimiento de Postfix para ISPConfig 3

Autor: Jesús Córdoba
Correo electrónico: j.cordoba [at] gmx [dot] net
Usuario del foro: pititis

Versión: 1.2

El objetivo de este tutorial es fortalecer el servidor de correo Postfix utilizado por ISPConfig para servidores de correo de Internet donde se confía en los usuarios autenticados. Con esta configuración, rechazarás una gran cantidad de spam antes de que pase a tu cola de correo, ahorrando muchos recursos del sistema y haciendo que tu servidor de correo sea fuerte contra spammers y botnets de spam. Vamos.

DNS Inverso, (Registro PTR de DNS)

Para configurar rdns encontrarás dos situaciones:

  • Tu ISP te permite cambiarlo tú mismo. Echa un vistazo en tu panel de control.

  • Tu ISP no te permite cambiarlo. Simplemente envía un correo electrónico con tu solicitud.

Pide o apunta tu registro rdns a tu servidor. es decir

server.example.com

Puedes verificar tu rdns con el comando host:

root@server / #  host 149.20.4.69
  69.64-27.4.20.149.in-addr.arpa domain name pointer pub2.kernel.org.

Recuerda que el dns debe propagar los cambios.

SPF Para Tu Dominio (Registro TXT de DNS)

SPF es un sistema de validación de correo electrónico diseñado para prevenir el spam de correo electrónico al detectar el spoofing de correo electrónico, una vulnerabilidad común, al verificar las direcciones IP de los remitentes.

Para configurar spf necesitarás agregar un registro TXT a tu zona dns, pero primero puedes generar tu registro aquí: http://www.mailradar.com/spf/

Copia el resultado de spf, luego ve a ISPConfig -> dns -> zonas -> haz clic en el nombre de tu dominio -> haz clic en la pestaña de registros -> y haz clic en TXT

Nombre de host -> example.com. (¡con punto al final!)

Texto -> Pega aquí el resultado de spf (sin “ “).

Ejemplo: v=spf1 a mx ptr ip4:11.222.333.444 -all …y haz clic en Guardar.

Recuerda que el dns debe propagar los cambios.

Postfix main.cf

Vamos a agregar/cambiar algo en /etc/postfix/main.cf

Restricciones de Helo:

smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname

Restricciones de Helo en acción:

Jan 12 01:57:08 server postfix/smtpd[4687]: NOQUEUE: reject: RCPT from unknown[186.43.77.153]: 450 4.7.1 Client host rejected: cannot find your hostname, [186.43.77.153]; from=
 to= proto=ESMTP helo=<[186.43.77.153]>
Jan  8 00:32:22 server postfix/smtpd[17504]: NOQUEUE: reject: RCPT from 201-93-87-2.dial-up.telesp.net.br[201.93.87.2]: 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from= to= proto=ESMTP helo=

RFC estricto:

strict_rfc821_envelopes = yes

Restricciones de clientes:

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cf

Restricciones de destinatarios:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unknown_recipient_domain

Restricciones de datos:

smtpd_data_restrictions = reject_unauth_pipelining

Retraso de Smtpd:

smtpd_delay_reject = yes

No olvides recargar postfix:

/etc/init.d/postfix reload

Verificación SPF Para Postfix (Debian y Ubuntu)

Instala el paquete spf:

apt-get install postfix-policyd-spf-python

o

apt-get install postfix-policyd-spf-perl

Agrega esto a /etc/postfix/main.cf:

policy-spf_time_limit = 3600s

y agrega check_policy_service unix:private/policy-spf al final de smtpd_recipient_restrictions:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spf

Ahora edita master.cf y agrega al final esto (para la versión de python):

policy-spf  unix  -       n       n       -       -       spawn
     user=nobody argv=/usr/bin/policyd-spf 

o esto para la versión de perl:

policy-spf  unix  -       n       n       -       -       spawn
     user=nobody argv=/usr/sbin/postfix-policyd-spf-perl

…recarga postfix.

/etc/init.d/postfix reload

Verificación de spf en acción:

Jan  4 15:50:11 server postfix/smtpd[19096]: NOQUEUE: reject: RCPT from g230068165.adsl.alicedsl.de[92.230.68.165]: 550 5.7.1 : Recipient address rejected: Message rejected due to: SPF fail - not authorized. Please see http://www.openspf.org/Why?s=helo;id=paxxxxxn.com;ip=92.230.68.165;[email protected]; from= to= proto=ESMTP helo=

Greylist

La lista gris es un método de defensa de los usuarios de correo electrónico contra el spam. Un agente de transferencia de correo (MTA) que utiliza la lista gris “rechazará temporalmente” cualquier correo electrónico de un remitente que no reconoce. Si el correo es legítimo, el servidor de origen, después de un retraso, volverá a intentarlo y, si ha transcurrido suficiente tiempo, el correo electrónico será aceptado.

Instalando postgrey (Debian, Ubuntu):

apt-get install postgrey

Las opciones de configuración están en /etc/default/postgrey (el retraso predeterminado es de 5 min).

Edita main.cf y agrega check_policy_service inet:127.0.0.1:10023 al final de smtpd_recipient_restrictions:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spf,check_policy_service inet:127.0.0.1:10023

…recarga postfix:

/etc/init.d/postfix reload

Lista gris en acción:

Jan 10 17:38:57 server postfix/smtpd[21302]: NOQUEUE: reject: RCPT from mailout-de.gmx.net[213.165.64.22]: 451 4.7.1 : Recipient address rejected: Greylisting in effect, please come back later; from= to= proto=SMTP helo=

DNSBL (Lista negra/bloqueo basada en DNS)

Una DNSBL es una lista de direcciones IP publicadas a través del Servicio de Nombres de Dominio de Internet (DNS) ya sea como un archivo de zona que puede ser utilizado por software de servidor DNS, o como una zona DNS en vivo que puede ser consultada en tiempo real. Las DNSBL se utilizan con mayor frecuencia para publicar las direcciones de computadoras o redes vinculadas al spam; la mayoría del software de servidor de correo puede configurarse para rechazar o marcar mensajes que han sido enviados desde un sitio listado en una o más de estas listas. Esto puede incluir listar las direcciones de computadoras zombie u otras máquinas que se utilizan para enviar spam, listar las direcciones de ISPs que alojan voluntariamente a spammers, o listar direcciones que han enviado spam a un sistema honeypot. Para usar dnsbl con postix utilizamos reject_rbl_client. Simplemente agrega alguna zona dns en vivo para consultas en el archivo main.cf.

En mi ejemplo, usaré dos listas con muy buena reputación (agregadas al final de smtpd_client_restrictions):

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cf,  reject_rbl_client cbl.abuseat.org,  reject_rbl_client b.barracudacentral.org

rbl en acción:

Jan 12 01:52:42 server postfix/smtpd[4616]: NOQUEUE: reject: RCPT from 89.pool85-49-26.dynamic.orange.es[85.49.26.89]: 554 5.7.1 Service unavailable; Client host [85.49.26.89] blocked using cbl.abuseat.org; Blocked - see http://cbl.abuseat.org/lookup.cgi?ip=85.49.26.89; from= to= proto=SMTP helo=
Jan 11 20:13:58 server postfix/smtpd[29591]: NOQUEUE: reject: RCPT from 93-87-122-56.dynamic.isp.telekom.rs[93.87.122.56]: 554 5.7.1 Service unavailable; Client host [93.87.122.56] blocked using b.barracudacentral.org; http://www.barracudanetworks.com/reputation/?pr=1&ip=93.87.122.56; from=
 to= proto=ESMTP helo=

Postscreen

Nota: Esta función está disponible en Postfix 2.8 y superior

El demonio postscreen de Postfix proporciona protección adicional contra la sobrecarga del servidor de correo. Un proceso de postscreen maneja múltiples conexiones SMTP entrantes y decide qué clientes pueden hablar con un proceso de servidor SMTP de Postfix. Al mantener alejados a los spambots, postscreen deja más procesos de servidor SMTP disponibles para clientes legítimos y retrasa la aparición de condiciones de sobrecarga del servidor.

El principal desafío para postscreen es tomar una decisión de si es un zombie basada en una sola medición. Esto es necesario porque muchos zombies intentan pasar desapercibidos y evitar enviar spam al mismo sitio repetidamente. Una vez que postscreen decide que un cliente no es un zombie, lo blanquea temporalmente para evitar más retrasos para el correo legítimo.

Usaremos para este tutorial la configuración predeterminada con una excepción. Estas configuraciones son adecuadas para la mayoría de las situaciones.

Primero, agregamos una línea a main.cf con el comando:

postscreen_greet_action = enforce

En segundo lugar, agregamos postscreen y algunos nuevos servicios a master.cf Nota: Estas configuraciones pueden ya existir, simplemente descomenta. También asegúrate de que la línea “smtp inet … smtpd”, incluidos cualquier parámetro, esté comentada (si hay, los parámetros deben moverse al nuevo servicio smtpd).

# Archivo de configuración del proceso maestro de Postfix.  Para detalles sobre el formato
# del archivo, consulta la página del manual master(5) (comando: "man 5 master").
#
# No olvides ejecutar "postfix reload" después de editar este archivo.
#
# ========================================================================== 
# tipo de servicio  privado no privilegiado  chroot  despertar  maxproc comando + args
#               (sí)   (sí)   (sí)   (nunca) (100)
# ========================================================================== 
#smtp      inet  n       -       -       -       -       smtpd
#          -o ...
smtpd     pass  -       -       n       -       -       smtpd
     -o ... # Parámetros movidos del servicio smtp al nuevo servicio smtpd.(si hay)
smtp      inet  n       -       n       -       1       postscreen
tlsproxy  unix  -       -       n       -       0       tlsproxy
dnsblog   unix  -       -       n       -       0       dnsblog

Ahora, recargamos postfix:

/etc/init.d/postfix reload
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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