Actualizado el 2 de julio de 2026
Si gestionas dominios en Plesk y/o servidores/vps con SpamAssisin como filtro en el servidor de email (VPS/servidor dedicado) y te está entrando spam “premium” con SPF/DKIM/DMARC perfectos, esta guía te da un enfoque de sysadmin: reglas efectivas, puntuaciones coherentes y defensa por capas.

Incluye un pack grande de reglas listo para copiar en /etc/mail/spamassassin/local.cf y un checklist para no romper correo legítimo.
Qué está pasando en 2026: por qué “pasa” el phishing aunque DKIM sea válido
El patrón más común ahora es el Business Email Compromise (BEC) y el “falso justificante”: el atacante usa una cuenta real comprometida (o un dominio que autentica bien) y se apoya en ingeniería social:
urgencia, facturas, transferencias, cambio de IBAN, y adjuntos con malware o enlaces.
required_score sin cargarte el correo bueno.Checklist express antes de tocar reglas
- Primero marcar, luego borrar. Ajusta Plesk a “Marcar como spam” y añade prefijo al asunto durante 7-14 días de observación.
- Activa logs. Revisa
/var/log/maillog(o el log equivalente) para ver qué reglas disparan. - Bayes + aprendizaje. Si puedes, entrena Bayes con carpetas spam/ham; es donde SA “se vuelve listo”.
- Defensa por capas. SA + RBL/DNSBL + antivirus (ClamAV/Dr.Web) + políticas de adjuntos.
Hardening básico en Plesk 18 (sin romper nada)
En Plesk, la configuración server-level se gestiona como admin, y SpamAssassin se apoya en ficheros del sistema.
Para reglas personalizadas, el camino típico es /etc/mail/spamassassin/local.cf.
Si quieres evitar sustos, puedes crear un fichero propio /etc/mail/spamassassin/laudemmedia_custom.cf y usar include.
Ruta recomendada de ficheros
# 1) Fichero principal (si ya lo usas)
nano /etc/mail/spamassassin/local.cf
# 2) (Opcional) Fichero dedicado para tu pack
nano /etc/mail/spamassassin/laudemmedia_custom.cf
# 3) Inclúyelo al final de local.cf
include /etc/mail/spamassassin/laudemmedia_custom.cf
Lint y reinicio
# Validar sintaxis
spamassassin --lint
# Reiniciar (según tu stack)
systemctl restart spamassassin || true
systemctl restart qmail dovecot postfix || true
Umbral recomendado (required_score)
Para hosting con muchos dominios, suele funcionar un required_score entre 6.0 y 8.0.
Si metes reglas fuertes (adjuntos ejecutables, dobles extensiones), puedes bajar a 6.5.
# Ajustes típicos (en local.cf)
required_score 6.5
rewrite_header Subject [SPAM]
report_safe 0
report_safe 0 reescribe menos el correo y facilita ver el mensaje original, pero depende de tu flujo. Si tus usuarios se lían, deja el valor por defecto y solo etiqueta.Actualizaciones: sa-update y reglas de terceros (KAM)
Muchos sysadmins no viven solo con reglas caseras: usan sa-update para updates oficiales y añaden rulesets de confianza como KAM (muy usado en producción).
# Actualiza canal oficial
sa-update
# KAM (canal firmado) — sigue las instrucciones oficiales del canal
wget https://mcgrail.com/downloads/kam.sa-channels.mcgrail.com.key
sa-update --import kam.sa-channels.mcgrail.com.key
sa-update --gpgkey 24C063D8 --channel kam.sa-channels.mcgrail.com
# (Opcional) compilar reglas para rendimiento si tienes sa-compile disponible
# sa-compile
Plugins útiles: Phishing (OpenPhish/PhishTank) y HashBL/EBL
Desde SpamAssassin 3.4.2 existen plugins pensados para el “spam moderno”: Phishing (feeds tipo OpenPhish/PhishTank) y HashBL/EBL (listas hash para emails/URIs). En Plesk puede requerir paquetes/perl modules según distro. Si tu SA es 3.4.6, tienes base suficiente.
# Ejemplo conceptual: activar plugins en tu configuración (si están disponibles)
# (OJO: en algunas distros vienen desactivados por defecto)
loadplugin Mail::SpamAssassin::Plugin::Phishing
loadplugin Mail::SpamAssassin::Plugin::HashBL
# Phishing: feeds (revisa documentación y rutas según distro)
# phishing_feed_openphish /var/lib/spamassassin/openphish-feed.txt
# phishing_feed_phishtank /var/lib/spamassassin/phishtank-feed.txt
# HashBL/EBL: ejemplo (necesita list real)
# header HASHBL_EMAIL eval:check_hashbl_emails('ebl.example.invalid')
# tflags HASHBL_EMAIL net
spamassassin -D --lint para ver módulos faltantes, y no lo hagas “a ciegas” en horario laboral.Pack “mega” de reglas para /etc/mail/spamassassin/local.cf
/etc/mail/spamassassin/laudemmedia_custom.cf
(o al final de local.cf), ejecuta spamassassin --lint y reinicia. Ajusta MY_DOMAINS_REGEX con tus dominios reales (ver sección automática). Advertencia de sysadmin: no subas todos los scores “a lo loco”. Empieza con 7-14 días en modo “marcar” y ajusta según falsos positivos.# =====================================================================
# LAUDEMMEDIA® — PACK AVANZADO SPAMASSASSIN (PLESK 18 / SA 3.4.x) — 2026
# Objetivo: Phishing, BEC, Ransomware, Quishing (QR), Crypto scams, Malware
# =====================================================================
# -------------------------
# 0) AJUSTES BASE (opcional)
# -------------------------
# required_score 6.5
# rewrite_header Subject [SPAM]
# report_safe 0
# ---------------------------------------------------------
# 1) DEFINE TUS DOMINIOS (RELLENA ESTO CON TU LISTADO REAL)
# ---------------------------------------------------------
# Reemplaza el contenido de MY_DOMAINS_REGEX por tu regex:
# dominio1\.com|dominio2\.es|sub\.dominio3\.com
#
# EJEMPLO MINIMO:
# laudemmedia\.com|workconfort\.com|tudominio\.es
#
# (NOTA) En reglas header usamos @(...)
# -----------------------------------------
# 2) BEC / FACTURAS / PAGOS / CONTABILIDAD
# -----------------------------------------
header __LMM_DEPT_NAMES From =~ /(Contabilidad|Administraci[oó]n|Pagos|Facturaci[oó]n|Tesorer[ií]a|Cuentas por pagar|Finance|Accounting|Billing|Payments)/i
header __LMM_SUBJ_FINANCE Subject =~ /(factura|invoice|transferencia|transfer|pago|payment|remesa|iban|swift|justificante|comprobante|proof of payment|bank details|cambio de cuenta)/i
body __LMM_BODY_URGENCY /(urgente|inmediato|acci[oó]n requerida|action required|evitar suspensi[oó]n|last warning|final notice|necesitamos.*hoy|before end of day)/i
# “Contabilidad/Pagos” desde dominios externos (genérico)
# Ajusta MY_DOMAINS_REGEX:
header __LMM_NOT_MY_DOMAIN From !~ /@(?:MY_DOMAINS_REGEX)\b/i
meta LMM_BEC_DEPT_EXT (__LMM_DEPT_NAMES && __LMM_NOT_MY_DOMAIN)
describe LMM_BEC_DEPT_EXT Nombre de departamento sensible desde dominio externo
score LMM_BEC_DEPT_EXT 6.5
# BEC reforzado: departamento + asunto finanzas + urgencia
meta LMM_BEC_TRIAD (LMM_BEC_DEPT_EXT && __LMM_SUBJ_FINANCE && __LMM_BODY_URGENCY)
describe LMM_BEC_TRIAD Patrón completo BEC (depto + finanzas + urgencia)
score LMM_BEC_TRIAD 3.5
# --------------------------------------------------------
# 3) REPLY-TO A FREEMAIL (sin evals raros, compatible SA)
# --------------------------------------------------------
header __LMM_FROM_NOT_FREE From !~ /@(gmail\.com|outlook\.com|hotmail\.com|live\.com|yahoo\..*|icloud\.com|me\.com|aol\.com|protonmail\..*|gmx\..*|zoho\..*)/i
header __LMM_REPLY_IS_FREE Reply-To =~ /@(gmail\.com|outlook\.com|hotmail\.com|live\.com|yahoo\..*|icloud\.com|me\.com|aol\.com|protonmail\..*|gmx\..*|zoho\..*)/i
meta LMM_REPLY_FRAUD (__LMM_FROM_NOT_FREE && __LMM_REPLY_IS_FREE)
describe LMM_REPLY_FRAUD Reply-To apunta a freemail aunque el From parece corporativo
score LMM_REPLY_FRAUD 7.5
# Freemail + firma corporativa (caza “firmas pegadas”)
body __LMM_SIG_CORP /(@[a-z0-9.-]+\.[a-z]{2,}|www\.[a-z0-9.-]+\.[a-z]{2,}).*(S\.L\.|SL|S\.A\.|SA|Ltd|LLC|GmbH|España|Spain|Departamento|Area|Manager)/i
meta LMM_FREEMAIL_CORP_SIG (__LMM_REPLY_IS_FREE && __LMM_SIG_CORP)
describe LMM_FREEMAIL_CORP_SIG Freemail pero firma corporativa (posible suplantación)
score LMM_FREEMAIL_CORP_SIG 3.0
# ----------------------------------------------
# 4) DESTINATARIOS OCULTOS (campañas masivas BEC)
# ----------------------------------------------
header LMM_UNDISCLOSED_TO To =~ /undisclosed-recipients/i
describe LMM_UNDISCLOSED_TO Envío con destinatarios ocultos (patrón de campaña)
score LMM_UNDISCLOSED_TO 3.0
# ---------------------------------------------------
# 5) QUISHING (QR) — keywords + adjunto PDF/imagen
# ---------------------------------------------------
body __LMM_QR_WORDS /(escanea (el|este) c[oó]digo|c[oó]digo QR|scan (the )?qr|qr code|verifica.*qr|documento seguro.*qr|accede.*(qr|c[oó]digo))/i
full __LMM_ATTACH_PDF /Content-Type:\s*application\/pdf/i
full __LMM_ATTACH_IMG /Content-Type:\s*image\/(png|jpeg|jpg|gif)/i
meta LMM_QUISHING_PDF (__LMM_QR_WORDS && __LMM_ATTACH_PDF)
describe LMM_QUISHING_PDF Quishing probable (QR + PDF adjunto)
score LMM_QUISHING_PDF 6.0
meta LMM_QUISHING_IMG (__LMM_QR_WORDS && __LMM_ATTACH_IMG)
describe LMM_QUISHING_IMG Quishing probable (QR + imagen adjunta)
score LMM_QUISHING_IMG 5.0
# ---------------------------------------------
# 6) CRIPTO-ESTAFAS (seed phrase / wallets / 2FA)
# ---------------------------------------------
body LMM_CRYPTO_SEED /(seed phrase|frase semilla|frase de recuperaci[oó]n|recovery phrase|wallet recovery|restore wallet)/i
describe LMM_CRYPTO_SEED Intento de robo de frase semilla / recuperación
score LMM_CRYPTO_SEED 7.0
body LMM_CRYPTO_BRANDS /(MetaMask|Ledger|Trezor|Trust Wallet|Coinbase|Binance|Kraken).*(alert|security|seguridad|bloquead|frozen|verific|2FA|KYC)/i
describe LMM_CRYPTO_BRANDS Alerta falsa de wallet/exchange (phishing)
score LMM_CRYPTO_BRANDS 5.0
# Direcciones BTC/ETH en el cuerpo (señal adicional)
body LMM_CRYPTO_ADDR /(\b(bc1|[13])[a-zA-Z0-9]{25,60}\b|\b0x[a-fA-F0-9]{40}\b)/
describe LMM_CRYPTO_ADDR Contiene dirección de wallet cripto (señal de scam)
score LMM_CRYPTO_ADDR 2.5
# ----------------------------------------------------------
# 7) URLS SOSPECHOSAS: ACORTADORES, IPs, PUNYCODE, TLD raros
# ----------------------------------------------------------
body LMM_URL_SHORTENERS /https?:\/\/(bit\.ly|t\.co|tinyurl\.com|cutt\.ly|rebrand\.ly|shorturl\.at|is\.gd|rb\.gy|soo\.gd)\b/i
describe LMM_URL_SHORTENERS Uso de acortadores de URL (táctica de evasión)
score LMM_URL_SHORTENERS 2.0
body LMM_URL_IP_HOST /https?:\/\/(\d{1,3}\.){3}\d{1,3}([:\/]|$)/
describe LMM_URL_IP_HOST URL con host IP (muy típico en phishing)
score LMM_URL_IP_HOST 3.0
body LMM_URL_PUNYCODE /https?:\/\/[^ \t\r\n]*xn--/i
describe LMM_URL_PUNYCODE URL con punycode (posible homógrafo)
score LMM_URL_PUNYCODE 2.5
# TLDs muy usados en campañas (mantén score bajo para evitar falsos positivos)
body LMM_URL_SUSP_TLD /https?:\/\/[^ \t\r\n]+\.(top|xyz|click|monster|work|info|live|rest|icu|cyou|sbs|zip|mov)\b/i
describe LMM_URL_SUSP_TLD URL con TLD común en campañas de phishing
score LMM_URL_SUSP_TLD 1.5
# “Verifica / inicia sesión / contraseña” + URL
body __LMM_CRED_WORDS /(inicia sesi[oó]n|login|verifica tu cuenta|verify your account|actualiza tu contrase[nñ]a|password reset|confirm identity|KYC required)/i
meta LMM_CREDPHISH_LINK (__LMM_CRED_WORDS && (LMM_URL_SHORTENERS || LMM_URL_IP_HOST || LMM_URL_PUNYCODE || LMM_URL_SUSP_TLD))
describe LMM_CREDPHISH_LINK Credenciales + enlace sospechoso (phishing)
score LMM_CREDPHISH_LINK 4.0
# ---------------------------------------------------
# 8) ADJUNTOS MALWARE (ejecutables, scripts, dobles ext)
# ---------------------------------------------------
# Ejecutables / scripts (crítico)
header LMM_ATTACH_EXEC Content-Type =~ /name=.*\.(exe|com|scr|pif|bat|cmd|vbs|js|jse|wsf|wsh|ps1|psm1|msi|msp|hta|jar|apk)\b/i
describe LMM_ATTACH_EXEC Adjunto ejecutable o script (alto riesgo)
score LMM_ATTACH_EXEC 10.0
# Accesos directos / trucos Windows
header LMM_ATTACH_LNK Content-Type =~ /name=.*\.(lnk|url|scf)\b/i
describe LMM_ATTACH_LNK Adjunto tipo acceso directo (táctica malware)
score LMM_ATTACH_LNK 7.0
# Office con macros / formatos peligrosos
header LMM_ATTACH_OFFICE_MAC Content-Type =~ /name=.*\.(docm|xlsm|pptm|dotm|xlam|iqy|slk)\b/i
describe LMM_ATTACH_OFFICE_MAC Office con macros / contenido activo
score LMM_ATTACH_OFFICE_MAC 7.0
# Contenedores usados para ransomware (ISO/IMG/VHD/VHDX/CAB)
header LMM_ATTACH_DISK Content-Type =~ /name=.*\.(iso|img|vhd|vhdx|cab)\b/i
describe LMM_ATTACH_DISK Contenedor/imagen de disco (vehículo ransomware)
score LMM_ATTACH_DISK 9.0
# HTML/SVG adjuntos (phishing con “archivo web”)
header LMM_ATTACH_WEB Content-Type =~ /name=.*\.(html|htm|shtml|svg)\b/i
describe LMM_ATTACH_WEB Adjunto web (HTML/SVG) usado en phishing
score LMM_ATTACH_WEB 6.0
# Doble extensión clásica
header LMM_ATTACH_DOUBLE Content-Type =~ /name=.*\.(pdf|jpg|jpeg|png|gif|docx|xlsx|pptx|txt|zip)\.(exe|js|vbs|bat|cmd|scr|pif|msi|ps1|hta)\b/i
describe LMM_ATTACH_DOUBLE Doble extensión (intento de ocultar ejecutable)
score LMM_ATTACH_DOUBLE 10.0
# Archivos comprimidos “raros” (señal moderada)
header LMM_ATTACH_ARCHIVE Content-Type =~ /name=.*\.(7z|rar|ace|arj|uue)\b/i
describe LMM_ATTACH_ARCHIVE Adjunto comprimido inusual (revisar)
score LMM_ATTACH_ARCHIVE 3.5
# ZIP + “password” en cuerpo (táctica para saltar AV)
body __LMM_PASS_WORDS /(password|contrase[nñ]a|clave|pass:|pwd:)/i
meta LMM_ZIP_PASSWORD (__LMM_PASS_WORDS && (LMM_ATTACH_ARCHIVE || __LMM_ATTACH_PDF))
describe LMM_ZIP_PASSWORD Indica contraseña/clave junto a adjunto (táctica evasión)
score LMM_ZIP_PASSWORD 2.5
# ---------------------------------------------------
# 9) HTML OFUSCADO / ANIDACIÓN EXCESIVA (score bajo)
# ---------------------------------------------------
body LMM_HTML_OBFUSC /(v1){3,}|editbody1|font-size:\s*10pt;\s*font-family:\s*Verdana/i
describe LMM_HTML_OBFUSC HTML con patrón de ofuscación/anidación sospechosa
score LMM_HTML_OBFUSC 1.5
# ---------------------------------------------------
# 10) PATRONES DE ASUNTO (símbolos, mayúsculas, typos)
# ---------------------------------------------------
header LMM_SUBJ_ALLCAPS Subject =~ /^[^a-záéíóúñ]{8,}$/i
describe LMM_SUBJ_ALLCAPS Asunto en mayúsculas / sin minúsculas (campaña)
score LMM_SUBJ_ALLCAPS 2.0
header LMM_SUBJ_SYMBOLS Subject =~ /([!$?%]{3,}|[-_]{3,}|#{3,})/
describe LMM_SUBJ_SYMBOLS Exceso de símbolos en asunto
score LMM_SUBJ_SYMBOLS 2.0
# Typos típicos (ajusta a tu histórico real)
header LMM_SUBJ_TYPO_JST Subject =~ /(JSTIFICANTE|JUSITIFICANTE|JUSTIFCANTE|TRASNFERENCIA|TRANFERENCIA)/i
describe LMM_SUBJ_TYPO_JST Typos típicos en señuelos financieros
score LMM_SUBJ_TYPO_JST 3.5
# Email del destinatario en el asunto (campañas)
header LMM_TO_IN_SUBJ Subject =~ /[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i
describe LMM_TO_IN_SUBJ El email del destinatario aparece en el asunto
score LMM_TO_IN_SUBJ 2.5
# ---------------------------------------------------
# 11) “SOLO HTML” (refuerzo suave, ya existe MIME_HTML_ONLY)
# ---------------------------------------------------
header LMM_HTML_ONLY Content-Type =~ /^text\/html/i
describe LMM_HTML_ONLY Mensaje declarado solo como HTML (refuerzo)
score LMM_HTML_ONLY 1.5
# ---------------------------------------------------
# 12) “SEXTORSION / EXTORSIÓN” (patrones frecuentes)
# ---------------------------------------------------
body LMM_SEXTORTION /(tengo acceso a tu webcam|grab[eé] tu video|I recorded you|we have your video|pay in bitcoin|monero|publicaremos tu video)/i
describe LMM_SEXTORTION Extorsión/sextorsión
score LMM_SEXTORTION 6.0
# ---------------------------------------------------
# 13) LISTAS BLANCAS / NEGRA (ejemplos)
# ---------------------------------------------------
# whitelist_from *@cliente-legal.com
# blacklist_from *@dominio-basura.tld
# =====================================================================
# FIN DEL PACK — Ajusta scores, añade tus dominios, y monitoriza logs.
# =====================================================================
Cómo sacar el listado de dominios de Plesk 18 y convertirlo a regex
Esto te permite rellenar MY_DOMAINS_REGEX sin escribir a mano 50 dominios.
# Lista de dominios desde la BD de Plesk (escapea puntos y une con |)
plesk db -Ne "SELECT name FROM domains" | sed 's/\./\\./g' | tr '\n' '|' | sed 's/|$//'
spamassassin --lint.Ajuste fino y falsos positivos (la parte “de verdad”)
- Reglas críticas: deja
10.0solo para ejecutables/doble extensión (casi nunca son legítimos en empresa). - Señales “suaves”: TLDs, HTML raro, mayúsculas… mantenlas en 1.0–2.0. Son apoyo, no sentencia.
- Whitelists: si un proveedor legítimo cae, blanquea su dominio o su sender específico (no blanquees “a lo loco”).
- Logs y realidad: mira
X-Spam-Statusy ajusta hasta que el spam malo pase de 6.5 y el bueno se quede por debajo.
LMM_BEC_DEPT_EXT, suele ser porque el proveedor usa un dominio externo pero firma “Contabilidad”. En ese caso: baja score o añade whitelist puntual para ese remitente.FAQ sysadmin (rápida)
¿Puedo meter todas estas reglas en SpamAssassin de Plesk 18? Sí: son reglas de tipoheader/body/full/meta, compatibles con SA 3.4.x, siempre que ajustes MY_DOMAINS_REGEX y valides con --lint.
¿Y si el spam pasa con SPF/DKIM ok?
Normal: eso indica “el dominio existe y firmó”, no que el mensaje sea bueno. Aquí atacas el contenido, el comportamiento y el señuelo (BEC/adjuntos/URLs).
¿Qué hago si quiero “nivel pro”?
Activa: sa-update + un ruleset fiable (ej. KAM) + plugins (Phishing/HashBL si tu distro lo permite) + antivirus y políticas de adjuntos.
Referencias y lecturas recomendadas
- Plesk Obsidian · Spam protection (SpamAssassin)
- Apache SpamAssassin · sa-update
- Apache Wiki · Custom Rulesets (incluye KAM)
- KAM Ruleset Channel (instrucciones oficiales)
- SpamAssassin · Plugin HashBL/EBL
- Configurar PhishTank/OpenPhish con SpamAssassin (Phishing plugin)
- Spamhaus · Plugin para SpamAssassin
- Mailing list · patrones From vs Reply-To
- Reddit (sysadmins) · rDNS como señal fuerte
- Reddit (selfhosted) · Bayes + Pyzor/Razor/DCC
Sigue aprendiendo
Si te ha resultado útil este artículo, quizá te interesen también:



