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.