Cómo configurar SPF, DKIM y DMARC en Postfix para mejorar la entrega de correos (paso a paso)

Redes & Segurança · Por · Publicado el · Actualizado el · 9 min de lectura

Sobre marrón con tarjetas parcialmente visibles y mano articulada de madera a un lado
Visual neutro para tutoriales de correo y configuración de servidores Foto: Lisett Kruusimäe / Pexels

En esta guía verás cómo configurar SPF, DKIM y DMARC en Postfix para mejorar la entrega de correos. Publicaremos los registros en el DNS, firmaremos mensajes con DKIM usando OpenDKIM, alinearemos DMARC y validaremos todo con pruebas. Sirve para servidores Linux con Postfix ya en producción o recién instalados.

Qué haremos y requisitos previos

Vamos a configurar la autenticación de correo en tres frentes. SPF define quién puede enviar en nombre de tu dominio. DKIM firma los mensajes. DMARC aplica una política y genera informes.

Requisitos: acceso root o sudo, Postfix instalado, dominio con DNS bajo tu control y puertos abiertos. Si usas firewall, libera 25 y 587. Consulta la guía de configurar firewall en Ubuntu con UFW.

Si estás montando el servidor desde cero, este tutorial te ayuda a preparar el sistema: Cómo instalar Ubuntu Server paso a paso.

Importante: configura un hostname FQDN y el PTR (reverse DNS) en tu proveedor. Sin un PTR correcto, los grandes proveedores suelen rechazar o puntuar mal tus envíos.

  • Acceso al DNS del dominio
  • Postfix instalado y enviando/recibiendo correos
  • Hostname FQDN consistente (ej.: mail.ejemplo.com)
  • Puertos 25/587 abiertos en el firewall
  • Tiempo de propagación DNS (puede tardar horas)
Registro Tipo Nombre/Host Ejemplo de valor
SPF TXT @ (raíz del dominio) v=spf1 mx -all
DKIM TXT default._domainkey v=DKIM1; k=rsa; p=CHAVE_PUBLICA
DMARC TXT _dmarc v=DMARC1; p=quarantine; rua=mailto:[email protected]

Verificar dominio, hostname y HELO de Postfix

El dominio en el encabezado From debe alinearse con el HELO/EHLO de Postfix y con el PTR. Valida y ajusta myhostname y myorigin. Evita un HELO genérico o una IP literal.

Revisa también mydomain y la dirección usada para correos generados localmente.

# Ver seu hostname atual
hostname -f

# Conferir parâmetros relevantes do Postfix
postconf -n | egrep 'myhostname|mydomain|myorigin|smtpd_banner'

# Ajustar hostname (exemplo) — substitua pelo seu FQDN
sudo postconf -e 'myhostname = mail.exemplo.com'
sudo postconf -e 'myorigin = $mydomain'

# Reiniciar o Postfix após ajustes
sudo systemctl restart postfix

SPF: crear y publicar el registro TXT

SPF declara qué hosts pueden enviar correos por tu dominio. El registro es un TXT en la raíz del dominio. Comienza con una política moderada y endúrela tras las pruebas. Solo debe existir un registro SPF por dominio; múltiples registros rompen la validación.

Si también envías desde servicios externos, incluye los mecanismos adecuados con include, ip4 o ip6.

  • -all bloquea remitentes fuera de la lista (estricto)
  • ~all marca como sospechoso, pero no bloquea (relajado)
  • Usa mx para autorizar los MX del dominio
  • Añade ip4:/ip6: para IPs específicos
  • Evita superar el límite de 10 consultas DNS
Ejemplo Descripción Cuándo usar
v=spf1 mx -all Solo los MX pueden enviar Dominios simples, un servidor
v=spf1 ip4:203.0.113.10 a mx ~all Autoriza IP fijo, A y MX Fase de pruebas (más tolerante)
v=spf1 mx include:mailservice.example ~all Incluye servicio de terceros Envío también por proveedores externos
# Exemplo de linha de zona (provedores têm telas próprias para isso)
# Tipo: TXT | Nome/Host: @ | Valor:
"v=spf1 mx -all"

# Após publicar, valide a resolução
dig +short TXT exemplo.com | sed 's/\"/"/g'

DKIM: instalar e integrar OpenDKIM con Postfix

DKIM firma los mensajes con una clave privada; el destinatario valida con la clave pública en DNS. Usaremos OpenDKIM como milter de Postfix.

También es buen momento para asegurar TLS en SMTP. Para certificados gratuitos, consulta Cómo generar SSL gratis con Let's Encrypt.

# Instalar OpenDKIM e ferramentas
sudo apt update && sudo apt install -y opendkim opendkim-tools

# Diretórios e arquivos básicos
sudo mkdir -p /etc/opendkim/keys/exemplo.com

# Configuração principal do OpenDKIM
sudo tee /etc/opendkim.conf >/dev/null <<'CONF'
Syslog                  yes
UMask                   002
UserID                  opendkim:opendkim
Socket                  inet:8891@localhost
Selector                default
Mode                    sv
Canonicalization        relaxed/simple
AutoRestart             yes
OversignHeaders         From
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
TrustedHosts            /etc/opendkim/TrustedHosts
CONF

# Mapas de assinatura e hosts confiáveis
sudo tee /etc/opendkim/KeyTable >/dev/null <<'CONF'
default._domainkey.exemplo.com exemplo.com:default:/etc/opendkim/keys/exemplo.com/default.private
CONF

sudo tee /etc/opendkim/SigningTable >/dev/null <<'CONF'
*@exemplo.com default._domainkey.exemplo.com
CONF

sudo tee /etc/opendkim/TrustedHosts >/dev/null <<'CONF'
127.0.0.1
::1
localhost
*.exemplo.com
CONF

# Permissões
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R go-rwx /etc/opendkim/keys

# Habilitar o milter no Postfix
sudo postconf -e 'milter_default_action = accept'
sudo postconf -e 'milter_protocol = 6'
sudo postconf -e 'smtpd_milters = inet:localhost:8891'
sudo postconf -e 'non_smtpd_milters = inet:localhost:8891'

# Ativar serviços
sudo systemctl enable --now opendkim
sudo systemctl restart postfix

DKIM: generar la clave y publicarla en DNS

Genera un par de claves por dominio y selector. Publica la clave pública en DNS como TXT en default._domainkey.tudominio. Protege la clave privada con permisos restrictivos.

Tras publicar, valida con la herramienta y solo entonces envía correos reales.

  • Usa tamaño de clave 2048 bits
  • Un selector por política/clave (ej.: default, s2026)
  • Rota la clave periódicamente
  • Copia solo el valor p= para el DNS
# Gere a chave (substitua exemplo.com e o selector se desejar)
cd /etc/opendkim/keys/exemplo.com
sudo opendkim-genkey -s default -d exemplo.com -b 2048
sudo chown opendkim:opendkim default.private
sudo chmod 600 default.private

# Exiba a entrada DNS sugerida
cat default.txt

# Reinicie para garantir leitura das chaves
sudo systemctl restart opendkim postfix

DMARC: definir política, alineamiento e informes

DMARC indica a los receptores qué hacer cuando SPF o DKIM fallan y envía informes. Comienza con p=none para observar. Evoluciona luego a quarantine y reject cuando todo esté alineado.

El alineamiento requiere que el dominio en From coincida con el dominio validado por SPF o DKIM. Usa adkim/aspf=s (strict) cuando estés seguro.

  • p=none solo monitorea (sin impacto en la entrega)
  • p=quarantine envía sospechosos a spam
  • p=reject rechaza mensajes no alineados
  • rua/ruf reciben informes agregados/forenses
  • pct controla el porcentaje de la política aplicada
Política Efecto Uso recomendado
p=none Solo recopila informes Fase inicial, validar configuración
p=quarantine Mensajes sospechosos van a spam Intermedio, tras reducir falsos positivos
p=reject Rechaza mensajes no alineados Fase final, cuando todo está correcto
# Registro DMARC (TXT) — Nome/Host: _dmarc
# Ajuste emails de relatório para sua caixa dedicada
"v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; adkim=s; aspf=s; pct=100"

# Após publicar, confira
dig +short TXT _dmarc.exemplo.com | sed 's/\"/"/g'

Pruebas: validar SPF, DKIM y DMARC

Valida primero los registros DNS. Luego comprueba la clave DKIM con la herramienta y envía un correo de prueba a una casilla externa. Revisa los encabezados Authentication-Results, DKIM-Signature y Received-SPF.

Si usas TLS en SMTP, confirma el certificado y los conjuntos de cifrado negociados.

  • Confirma que existe solo un registro SPF
  • Chequeo DKIM: selector correcto y clave pública publicada
  • Alineamiento DMARC: From coincide con dominio validado
  • Envía a distintos proveedores y compara encabezados
# SPF e DMARC
dig +short TXT exemplo.com | sed 's/\"/"/g'
dig +short TXT _dmarc.exemplo.com | sed 's/\"/"/g'

# DKIM: teste do selector (default) — substitua domínio
opendkim-testkey -d exemplo.com -s default -vvv

# Após enviar um e-mail de teste, veja logs locais
sudo journalctl -u postfix -n 100 | egrep 'DKIM|smtpd|policy' || tail -n 100 /var/log/mail.log

Problemas comunes y cómo resolverlos

Algunos errores se repiten. Revisa esta lista antes de depurar a fondo.

Recuerda que la propagación DNS puede llevar horas. Las pruebas inmediatas pueden fallar por caché.

  • Múltiples entradas SPF: mantén solo una; combina mecanismos
  • Selector DKIM incorrecto: confirma default._domainkey.tudominio
  • Permisos de la clave privada: 600 y dueño opendkim
  • Milter no cargado: revisa smtpd_milters y el puerto 8891
  • DMARC falla por desalineamiento: From difiere del dominio DKIM/SPF
  • Servicio externo enviando sin SPF/DKIM: ajusta include/keys

Preguntas frecuentes

¿Puedo tener más de un registro SPF?

No. Debe existir solo un registro TXT de SPF por dominio. Si necesitas autorizar varios servicios, combina mecanismos en el mismo valor (mx, a, ip4/ip6, include). Registros SPF múltiples hacen que la validación falle y perjudican la entrega.

¿Qué política DMARC debo usar al principio?

Empieza con p=none para recoger informes y ajustar el alineamiento. Cuando esté estable, avanza a p=quarantine y, finalmente, p=reject. Ajusta pct para aplicar la política gradualmente. Usa adkim/aspf=s cuando todo esté alineado.

¿Qué es el selector DKIM y cómo elegirlo?

El selector identifica qué clave pública usar (ej.: default, s2026). Compone el nombre DNS del registro, como default._domainkey.tudominio. Usa un selector por clave activa. Para rotar, crea un nuevo selector, publica la clave y cambia la configuración.

¿Cuánto tarda en funcionar la configuración?

La parte local, en Postfix y OpenDKIM, es inmediata tras reiniciar servicios. El DNS puede tardar desde minutos hasta horas en propagarse, según el TTL y cachés. Valida con consultas DNS y, solo después, prueba envíos a varias casillas.

¿Necesito TLS para que SPF, DKIM y DMARC funcionen?

No es obligatorio para la validación, pero sí recomendable para seguridad y reputación. Habilita STARTTLS en Postfix con un certificado válido, preferiblemente automatizado. Esto reduce interceptaciones y mejora la postura de tu servidor.

¿Necesitas ayuda para ajustar Postfix y DNS?

Si la autenticación aún falla o quieres revisar tu configuración antes de aplicar políticas más rígidas, contáctame para una sesión de soporte puntual.

Hablar sobre soporte técnico

Ver también