Configuración Anti-Spam en CyberPanel / Ubuntu (Postfix + SpamAssassin)
Este artículo resume los cambios y reglas aplicadas en un servidor Ubuntu con CyberPanel para reducir el spam, limitar tamaños de mensajes y forzar el rechazo de correos peligrosos. Puedes copiar y pegar directamente en un post de WordPress (editor en modo HTML).
1. Postfix — Límite de tamaño de mensajes
Se estableció un límite de 10 MB por mensaje, para evitar adjuntos gigantescos que consuman recursos.
# En /etc/postfix/main.cf
message_size_limit = 10485760
Comandos para aplicar y verificar:
sudo systemctl restart postfix
postconf | grep message_size_limit
2. SpamAssassin — Configuración base y reglas principales
Archivo principal: /etc/spamassassin/local.cf.
# Configuración base
required_score 4.0
rewrite_header Subject [SPAM]
report_safe 0
use_bayes 1
bayes_auto_learn 1
Regla para marcar mensajes grandes (advertencia > 7 MB)
# Marca mensajes sospechosos si pesan más de 7 MB
header LARGE_WARNING eval:check_message_size('>','7340032')
describe LARGE_WARNING Mensaje grande (más de 7 MB)
score LARGE_WARNING 2.5
Regla para forzar rechazo (shortcircuit + elevación de score)
# Rechazar correos con score extremadamente alto
shortcircuit BAYES_99 on
header REJECT_SPAM eval:check_spam_score()
describe REJECT_SPAM Rechazar mensajes con score alto
score REJECT_SPAM 100
3. Reglas adicionales sugeridas (ejemplos)
Subjects en MAYÚSCULAS
header SUBJECT_ALLCAPS Subject =~ /^[A-Z\s\d\W]{8,}$/
describe SUBJECT_ALLCAPS Subject en mayúsculas (probable spam)
score SUBJECT_ALLCAPS 3.5
Mensajes con más de 3 enlaces
# Requiere eval:check_uri_count
meta MANY_LINKS eval:check_uri_count('body', '>', 3)
describe MANY_LINKS Más de 3 enlaces en el cuerpo
score MANY_LINKS 3.0
Adjuntos ejecutables (.exe/.scr/.bat)
header BAD_ATTACHMENT Content-Type =~ /name=.*\.(exe|scr|bat|com|pif|cmd|cpl)/i
describe BAD_ATTACHMENT Adjuntos ejecutables bloqueados
score BAD_ATTACHMENT 5.0
Caracteres raros (Unicode phishing)
body WEIRD_CHARS /[\x{202E}\x{200B}\x{200F}\x{FEFF}]/u
describe WEIRD_CHARS Caracteres ocultos usados en phishing
score WEIRD_CHARS 4.5
4. Integración Postfix ↔ SpamAssassin (master.cf)
Se usa content_filter para pasar todo por SpamAssassin. Ejemplo en /etc/postfix/master.cf:
smtp inet n - n - - smtpd -o content_filter=spamassassin
spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
La opción flags=R y las reglas de SpamAssassin permiten que, si la evaluación falla, Postfix rechace el mensaje en SMTP con un 554 5.7.1 Message rejected as spam.
5. RBLs (listas negras) en Postfix
Agregar RBLs para rechazar conexiones desde IPs conocidas por enviar spam:
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_recipient_access hash:/etc/postfix/script_filter,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client b.barracudacentral.org,
permit
Reiniciar postfix:
sudo systemctl restart postfix
6. Flujo final y verificación
- Postfix rechaza directamente mensajes > 10 MB.
- RBLs rechazan al origen si la IP está listada.
- SpamAssassin marca mensajes grandes (>7 MB) y aplica reglas extra (subjects en mayúsculas, muchos enlaces, adjuntos ejecutables, etc.).
- Si
REJECT_SPAMse activa, SpamAssassin eleva el score y Postfix rechaza en SMTP.
Revisar logs para confirmar rechazos/entregas:
sudo tail -f /var/log/mail.log
# buscar líneas como:
# spamc[PID]: identified spam (score=XX.0 required=4.0)
# postfix/smtpd[...] 554 5.7.1 Message rejected as spam
7. Buenas prácticas y respaldo
- Antes de editar archivos, haz backup:
sudo cp /etc/spamassassin/local.cf /root/local.cf.bakysudo cp /etc/postfix/main.cf /root/main.cf.bak. - Probar cambios en un entorno de staging si es posible.
- Monitorear
/var/log/mail.logdurante 24–72 horas después de aplicar reglas agresivas para detectar falsos positivos. - Si aparecen falsos positivos, bajar scores o excluir remitentes/dominios confiables con
check_sender_accesso whitelist en SpamAssassin.
8. Script de respaldo (opcional)
Ejemplo mínimo para hacer copia de seguridad de los archivos de configuración antes de aplicar cambios:
#!/bin/bash
# backup-configs.sh
sudo mkdir -p /root/config_backups/$(date +%F_%T)
sudo cp /etc/postfix/main.cf /root/config_backups/$(date +%F_%T)/
sudo cp /etc/postfix/master.cf /root/config_backups/$(date +%F_%T)/
sudo cp /etc/spamassassin/local.cf /root/config_backups/$(date +%F_%T)/
echo "Backups created in /root/config_backups/"
Nota: antes de activar reglas de rechazo muy agresivas (p. ej. REJECT_SPAM con score=100), monitorea cuidadosamente para evitar bloquear correos legítimos. Si quieres, puedo convertir este resumen en un archivo HTML descargable o preparar un script que aplique todas las modificaciones (con confirmaciones) para tu servidor.
¿Quieres que lo deje también como un snippet listo para pegar (sin los comentarios) o que genere el script de automatización para aplicar estos cambios?
admin