Guía de Optimización de Entregabilidad de Email
La entregabilidad del correo electrónico desde un servidor propio depende de la correcta configuración de SPF, DKIM y DMARC, la reputación de la IP y el calentamiento progresivo del volumen de envío. Sin estas configuraciones, incluso los correos legítimos pueden acabar en la carpeta de spam o ser rechazados directamente, haciendo que toda la infraestructura de correo sea inútil para comunicaciones críticas.
Requisitos Previos
- Servidor de correo configurado (Postfix, Sendmail, etc.)
- Acceso a la configuración DNS del dominio
- IP pública con registro PTR (rDNS) configurable
- Acceso de administrador al servidor
Autenticación: SPF, DKIM y DMARC
La tríada de autenticación es imprescindible para la entregabilidad moderna:
SPF (Sender Policy Framework)
# Ejemplo de registro SPF completo
# En tu DNS, añade un registro TXT para tu dominio:
# Básico: solo el servidor de correo puede enviar
tudominio.com. TXT "v=spf1 mx -all"
# Con IP específica y registro A incluido
tudominio.com. TXT "v=spf1 ip4:TU_IP_SERVIDOR a mx -all"
# Si usas múltiples servicios de envío
tudominio.com. TXT "v=spf1 ip4:TU_IP mx include:sendgrid.net include:mailchimp.net -all"
# Verificar el registro SPF
dig TXT tudominio.com | grep spf
# Herramienta de verificación online
# https://mxtoolbox.com/spf.aspx
DKIM (DomainKeys Identified Mail)
# Con Postfix + OpenDKIM:
# Instalar OpenDKIM
sudo apt install -y opendkim opendkim-tools
# Generar par de claves DKIM
sudo mkdir -p /etc/opendkim/keys/tudominio.com
sudo opendkim-genkey -t -s mail -d tudominio.com \
-D /etc/opendkim/keys/tudominio.com/
sudo chown -R opendkim:opendkim /etc/opendkim/
# Ver la clave pública para añadirla al DNS
sudo cat /etc/opendkim/keys/tudominio.com/mail.txt
# Salida ejemplo:
# mail._domainkey.tudominio.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCS..."
# Configurar OpenDKIM
sudo tee /etc/opendkim.conf << 'EOF'
Mode sv
Socket inet:8891@localhost
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Domain tudominio.com
KeyFile /etc/opendkim/keys/tudominio.com/mail.private
Selector mail
# Tablas de configuración para múltiples dominios
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
InternalHosts refile:/etc/opendkim/TrustedHosts
EOF
# Configurar múltiples dominios
echo "mail._domainkey.tudominio.com tudominio.com:mail:/etc/opendkim/keys/tudominio.com/mail.private" \
| sudo tee /etc/opendkim/KeyTable
echo "*@tudominio.com mail._domainkey.tudominio.com" \
| sudo tee /etc/opendkim/SigningTable
sudo systemctl enable --now opendkim
# Integrar con Postfix
sudo tee -a /etc/postfix/main.cf << 'EOF'
# Integración DKIM con OpenDKIM
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
EOF
sudo systemctl restart postfix
DMARC (Domain-based Message Authentication)
# Registro DMARC básico (empezar con p=none para monitorizar)
_dmarc.tudominio.com. TXT "v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100"
# Progresión recomendada de la política DMARC:
# 1. Monitorización (p=none) - 2-4 semanas
_dmarc.tudominio.com. TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
# 2. Cuarentena (p=quarantine) - 2-4 semanas
_dmarc.tudominio.com. TXT "v=DMARC1; p=quarantine; pct=25; rua=mailto:[email protected]"
# 3. Rechazo total (p=reject) - objetivo final
_dmarc.tudominio.com. TXT "v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]"
# Verificar el registro DMARC
dig TXT _dmarc.tudominio.com
Gestión de la Reputación de la IP
# Verificar el registro PTR (rDNS) - CRÍTICO para la entregabilidad
dig -x TU_IP_PUBLICA
# El resultado debe ser: mail.tudominio.com
# Configurar el rDNS con tu proveedor de VPS (suele hacerse desde el panel)
# La IP pública debe resolver inversamente a: mail.tudominio.com
# Y mail.tudominio.com debe resolver a TU_IP_PUBLICA (consistencia)
# Verificar la consistencia DNS completa
host TU_IP_PUBLICA # Debe devolver mail.tudominio.com
host mail.tudominio.com # Debe devolver TU_IP_PUBLICA
# Comprobar si la IP está en listas de reputación positiva
curl "https://api.senderscore.org/batv1/score/TU_IP_PUBLICA"
# Ver el historial de la IP en SenderScore
# https://senderscore.org/
# Herramienta de verificación completa
curl "https://mxtoolbox.com/api/v1/Lookup/smtp/?argument=tudominio.com" \
-H "Authorization: TU_API_KEY_MXTOOLBOX"
Calentamiento de IP
Para IPs nuevas, aumenta el volumen de envío gradualmente para construir reputación:
# Script de calentamiento gradual para Postfix
# Limita el número de conexiones concurrentes por dominio
# Configurar límites en Postfix para calentamiento
sudo tee /etc/postfix/main.cf.warmup << 'EOF'
# Semana 1: Máximo 50 mensajes por hora
default_destination_rate_delay = 72s
default_destination_concurrency_limit = 1
default_destination_recipient_limit = 50
# Configurar límites específicos por dominio
transport_rate_delay = gmail.com:120s, yahoo.com:180s
EOF
# Plan de calentamiento recomendado:
# Día 1-3: 50-100 correos/día
# Día 4-7: 200-500 correos/día
# Semana 2: 1,000-2,000 correos/día
# Semana 3: 5,000-10,000 correos/día
# Semana 4+: Aumentar progresivamente
# Monitorizar tasas de apertura y clics durante el calentamiento
# Tasas normales: >20% apertura, >1% clics
# Si bajan drásticamente, reduce el volumen
Monitorización de Listas Negras
# Script para verificar múltiples listas negras (DNSBL)
cat > /usr/local/bin/check-blacklists.sh << 'EOF'
#!/bin/bash
IP=$1
if [ -z "$IP" ]; then
echo "Uso: $0 <IP>"
exit 1
fi
# Lista de proveedores DNSBL principales
DNSBL_LIST=(
"zen.spamhaus.org"
"bl.spamcop.net"
"dnsbl.sorbs.net"
"b.barracudacentral.org"
"dnsbl-1.uceprotect.net"
"psbl.surriel.com"
"ix.dnsbl.manitu.net"
)
# Invertir la IP para consultas DNS
REVERSED_IP=$(echo $IP | awk -F. '{print $4"."$3"."$2"."$1}')
echo "Verificando $IP en listas negras..."
echo "================================"
FOUND=0
for DNSBL in "${DNSBL_LIST[@]}"; do
RESULT=$(dig +short $REVERSED_IP.$DNSBL)
if [ -n "$RESULT" ]; then
echo "❌ LISTADO en: $DNSBL ($RESULT)"
FOUND=$((FOUND+1))
else
echo "✓ No listado: $DNSBL"
fi
done
echo "================================"
echo "Total listas negras encontradas: $FOUND"
EOF
chmod +x /usr/local/bin/check-blacklists.sh
# Uso:
check-blacklists.sh TU_IP_PUBLICA
# Programar verificación automática diaria
echo "0 8 * * * root /usr/local/bin/check-blacklists.sh TU_IP | mail -s 'Informe DNSBL' [email protected]" \
| sudo tee /etc/cron.d/dnsbl-check
Proceso para eliminar una IP de listas negras:
# Spamhaus - la lista más importante
# Verificar: https://check.spamhaus.org/
# Solicitar deslistado: https://www.spamhaus.org/query/ip/TU_IP
# Barracuda Networks
# Verificar: https://www.barracudacentral.org/lookups
# Solicitar deslistado: https://www.barracudacentral.org/lookups/request-removal
# SORBS
# Verificar: http://www.sorbs.net/lookup.shtml
# Solicitar deslistado desde el portal web
# Antes de solicitar el deslistado:
# 1. Identifica por qué fue listada la IP (correos de spam, virus, etc.)
# 2. Corrige el problema subyacente
# 3. Espera 24-48h después de la corrección
# 4. Solicita el deslistado con explicación de las medidas tomadas
Gestión de Rebotes
# Configurar Postfix para gestionar rebotes correctamente
sudo tee -a /etc/postfix/main.cf << 'EOF'
# Configurar la dirección de rebotes
bounce_notice_recipient = [email protected]
delay_notice_recipient = [email protected]
error_notice_recipient = [email protected]
# Política de reintentos para mensajes fallidos
maximal_queue_lifetime = 2d # Intentar durante 2 días máximo
bounce_queue_lifetime = 1d # Notificar rebote después de 1 día
minimal_backoff_time = 300s # Mínimo 5 minutos entre reintentos
maximal_backoff_time = 4000s # Máximo ~1 hora entre reintentos
EOF
# Script para analizar tipos de rebote
cat > /usr/local/bin/analyze-bounces.sh << 'EOF'
#!/bin/bash
# Analizar el log de correo para identificar patrones de rebote
LOG_FILE="/var/log/mail.log"
echo "=== Rebotes permanentes (5xx) últimas 24h ==="
grep "status=bounced" $LOG_FILE | grep -v "Connection refused" \
| awk '{print $NF}' | sort | uniq -c | sort -rn | head 20
echo ""
echo "=== Dominios con más rebotes ==="
grep "status=bounced" $LOG_FILE | grep -oP 'to=<[^>]+>' \
| grep -oP '@[^>]+' | sort | uniq -c | sort -rn | head 10
EOF
chmod +x /usr/local/bin/analyze-bounces.sh
Herramientas de Diagnóstico
# Verificación completa de la configuración de correo
# Herramientas online recomendadas:
# 1. Mail-Tester - puntuación de entregabilidad
# https://www.mail-tester.com/ - Envía un correo de prueba y obtén puntuación
# 2. MXToolbox - verificación DNS completa
# https://mxtoolbox.com/emailhealth/tudominio.com
# 3. Google Postmaster Tools - reputación con Gmail
# https://postmaster.google.com/
# 4. Microsoft SNDS - reputación con Outlook/Hotmail
# https://sendersupport.olc.protection.outlook.com/snds/
# Probar el envío de correo desde la línea de comandos
echo "Correo de prueba" | mail -s "Test entregabilidad" [email protected]
# Verificar cabeceras del correo recibido
# En Gmail: Abrir correo > ... > Mostrar original
# Buscar: dkim=pass, spf=pass, dmarc=pass
# Verificar usando swaks (Swiss Army Knife SMTP)
sudo apt install -y swaks
swaks --to [email protected] \
--from [email protected] \
--server mail.tudominio.com \
--auth \
--auth-user [email protected] \
--auth-password TU_CONTRASEÑA \
--tls \
--header "Subject: Prueba de entregabilidad"
Solución de Problemas
Gmail rechaza todos los correos:
# Verificar SPF, DKIM y DMARC
dig TXT tudominio.com | grep spf
dig TXT mail._domainkey.tudominio.com
dig TXT _dmarc.tudominio.com
# Registrar el dominio en Google Postmaster Tools
# https://postmaster.google.com/
# Monitorizar la reputación del dominio y de la IP
Correos en spam de Outlook/Hotmail:
# Registrarse en Microsoft SNDS
# https://sendersupport.olc.protection.outlook.com/snds/
# Enviar solicitud de desbloqueo si es necesario
# https://support.microsoft.com/en-us/supportrequestform/8ad563e3-288e-2a61-8122-3ba03d6b8d75
Alto porcentaje de rebotes:
# Limpiar la lista de destinatarios inactivos
# Eliminar correos que llevan más de 6 meses sin abrirse
# Implementar proceso de doble opt-in para nuevas suscripciones
# Gestionar las quejas de spam (feedback loops)
Conclusión
La entregabilidad del correo electrónico es el resultado de múltiples factores técnicos que trabajan juntos: autenticación correcta con SPF, DKIM y DMARC, reputación sólida de la IP y calentamiento gradual del volumen. Implementar estas configuraciones correctamente desde el inicio evita semanas de trabajo posterior para resolver problemas de entregabilidad. Monitoriza regularmente tu reputación con las herramientas indicadas y mantén listas de correo limpias para preservar la confianza de los proveedores de correo principales.


