--- title: "Cómo configurar SpamAssassin con Postfix en Ubuntu 24.04" description: "Instala SpamAssassin en Ubuntu 24.04, conéctalo a Postfix para filtrar el correo entrante, ajusta la puntuación, entrena el filtro bayesiano y prueba con GTUBE." category: "Servidor de Correo" language: es source: https://cubepath.com/es/docs/servidor-de-correo/configuracion-de-spamassassin updated: 2026-09-25 --- # Cómo configurar SpamAssassin con Postfix en Ubuntu 24.04 SpamAssassin es un filtro antispam de código abierto que analiza cada mensaje con cientos de reglas (cabeceras, contenido, listas DNS, firmas, filtro bayesiano) y le asigna una puntuación. Si la puntuación supera un umbral, marca el mensaje como spam añadiendo cabeceras que tu servidor o tu cliente de correo pueden usar para moverlo a la carpeta de correo no deseado. En este tutorial instalarás SpamAssassin en Ubuntu 24.04, lo conectarás a Postfix para que analice todo el correo entrante, ajustarás su configuración, lo probarás con el mensaje de prueba GTUBE y entrenarás el filtro bayesiano. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS y Postfix recibiendo correo en el puerto 25, por ejemplo un VPS de CubePath. - Un usuario no root con privilegios `sudo`. - Al menos 2 GB de RAM: cada proceso de SpamAssassin ocupa entre 80 y 150 MB. - Un buzón de prueba en el servidor, en los ejemplos `user@your_domain`. ## Cómo encaja SpamAssassin con Postfix SpamAssassin se compone de dos programas: `spamd`, un demonio que mantiene las reglas cargadas en memoria, y `spamc`, un cliente ligero que le pasa cada mensaje. En esta guía Postfix entregará todo el correo que llegue por SMTP al puerto 25 a un filtro de contenido que ejecuta `spamc`; este devuelve el mensaje con las cabeceras de SpamAssassin añadidas y lo reinyecta en Postfix con `sendmail` para su entrega normal. El correo que envían tus usuarios autenticados por el puerto 587 (submission) no pasa por el filtro, porque solo se modifica el servicio `smtp` del puerto 25. ## Paso 1: Instalar SpamAssassin Instala el motor, el demonio y el cliente: ```bash sudo apt update sudo apt install spamassassin spamd spamc ``` Activa el demonio y arráncalo: ```bash sudo systemctl enable --now spamd ``` Comprueba que está en ejecución: ```bash systemctl status spamd --no-pager ``` La salida debe incluir una línea como esta: ```output Active: active (running) since Fri 2026-09-25 10:30:12 UTC; 5s ago ``` `spamd` escucha solo en `127.0.0.1` y `::1`, en el puerto 783, así que no hace falta abrir nada en el firewall. ## Paso 2: Descargar las reglas actualizadas Las reglas que trae el paquete envejecen rápido. `sa-update` descarga la versión más reciente publicada por el proyecto: ```bash sudo sa-update -v ``` El comando termina con código 0 si ha descargado reglas nuevas y con código 1 si ya estaban al día; ambos son correctos. Reinicia el demonio para cargar las reglas: ```bash sudo systemctl restart spamd ``` El paquete de Ubuntu instala un temporizador de systemd que repite esta actualización a diario. Compruébalo con: ```bash systemctl list-timers 'spamassassin*' --no-pager ``` ## Paso 3: Ajustar la configuración La configuración local vive en `/etc/spamassassin/local.cf`. Ábrelo: ```bash sudo nano /etc/spamassassin/local.cf ``` El archivo trae casi todo comentado. Añade al final este bloque: ```ini # Puntuación a partir de la cual un mensaje se considera spam (5.0 por defecto) required_score 5.0 # Añade una etiqueta al asunto de los mensajes marcados como spam rewrite_header Subject [SPAM] # 0 = conserva el mensaje original y solo añade cabeceras X-Spam-* report_safe 0 # Filtro bayesiano con aprendizaje automático use_bayes 1 bayes_auto_learn 1 ``` Algunas notas sobre estos valores: - `required_score 5.0` es un buen punto de partida. Bájalo a 4.0 o 4.5 si se cuela demasiado spam, pero no por debajo de 3.0 o empezarás a marcar correo legítimo. - Con `report_safe 0` el mensaje original llega intacto. El valor por defecto (1) envuelve el spam en un informe como adjunto, lo que complica recuperar falsos positivos. Comprueba que la sintaxis es correcta. Si el comando no imprime nada, no hay errores: ```bash sudo spamassassin --lint ``` Reinicia el demonio para aplicar la configuración: ```bash sudo systemctl restart spamd ``` ## Paso 4: Conectar Postfix con SpamAssassin Define en Postfix el filtro de contenido. Haz una copia de seguridad de `master.cf` y ábrelo: ```bash sudo cp /etc/postfix/master.cf /etc/postfix/master.cf.bak sudo nano /etc/postfix/master.cf ``` Localiza la línea del servicio `smtp`, la primera del archivo sin comentar, y añade debajo la opción `content_filter`, con la línea de continuación sangrada con espacios: ```text smtp inet n - y - - smtpd -o content_filter=spamassassin ``` Después añade al final del archivo el servicio que ejecuta `spamc`: ```text spamassassin unix - n n - - pipe user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} ``` Qué hace cada parte: - `user=debian-spamd`: ejecuta `spamc` con el usuario sin privilegios que crea el paquete de SpamAssassin. - `-f`: si `spamd` no responde, `spamc` devuelve el mensaje sin analizar en lugar de fallar, así no pierdes correo. - `-e /usr/sbin/sendmail -oi -f ${sender} ${recipient}`: reinyecta el mensaje analizado en Postfix con el remitente y los destinatarios originales. Como entra por `sendmail` y no por el servicio `smtp`, no vuelve a pasar por el filtro. Comprueba la configuración y reinicia Postfix: ```bash sudo postfix check sudo systemctl restart postfix ``` Si `postfix check` no imprime nada, la configuración es válida. ## Paso 5: Probar el filtro con GTUBE GTUBE es una cadena de prueba que SpamAssassin reconoce siempre como spam, igual que el archivo EICAR para los antivirus. Instala `swaks`, una herramienta para enviar mensajes por SMTP: ```bash sudo apt install swaks ``` Envía un mensaje con la cadena GTUBE a tu buzón a través del puerto 25 del propio servidor, para que pase por el servicio `smtp` y, por tanto, por el filtro: ```bash swaks --to user@your_domain --server 127.0.0.1 --header "Subject: Prueba GTUBE" --body 'XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X' ``` Busca en el registro la línea en la que `spamd` identifica el mensaje: ```bash sudo grep "spamd: identified spam" /var/log/mail.log | tail -n 1 ``` ```output 2026-09-25T10:42:07.113245+00:00 mail spamd[4121]: spamd: identified spam (1000.0/5.0) for debian-spamd:112 in 0.4 seconds, 812 bytes. ``` Abre el mensaje en el buzón: el asunto empezará por `[SPAM]` y tendrá cabeceras como estas: ```text X-Spam-Flag: YES X-Spam-Level: ************************************************** X-Spam-Status: Yes, score=1000.0 required=5.0 tests=GTUBE,... ``` Envía ahora un mensaje normal sin la cadena GTUBE y comprueba que llega con `X-Spam-Status: No`. Esa cabecera confirma que todo el correo entrante pasa por SpamAssassin. ## Paso 6: Añadir remitentes a listas de confianza y de bloqueo Si un remitente legítimo acaba marcado como spam o uno molesto se cuela siempre, añádelo a `/etc/spamassassin/local.cf`. SpamAssassin 4 usa los nombres `welcomelist` y `blocklist`: ```ini # Nunca marcar como spam si además pasa SPF o DKIM welcomelist_auth facturas@proveedor.example welcomelist_auth *@partner.example # Marcar siempre como spam blocklist_from *@spam-conocido.example ``` Usa `welcomelist_auth` en lugar de `welcomelist_from`: solo aplica si el mensaje pasa SPF o DKIM para ese remitente, así que un spammer no puede aprovecharla falsificando el `From:`. Verifica y aplica los cambios: ```bash sudo spamassassin --lint sudo systemctl restart spamd ``` ## Paso 7: Entrenar el filtro bayesiano El filtro bayesiano aprende las palabras y patrones del correo que recibe tu servidor y es una de las reglas más efectivas, pero no se activa hasta que ha aprendido al menos 200 mensajes de spam y 200 legítimos (ham). El aprendizaje automático ayuda, pero entrenarlo a mano con tu propio correo acelera mucho el proceso. Como `spamc` se ejecuta con el usuario `debian-spamd`, la base de datos bayesiana está en `/var/lib/spamassassin/.spamassassin`. Si tus buzones usan el formato Maildir, entrena con una carpeta de spam y con la bandeja de entrada de un buzón (ajusta las rutas a las de tu servidor): ```bash sudo sa-learn --dbpath /var/lib/spamassassin/.spamassassin --spam /home/user/Maildir/.Junk/cur sudo sa-learn --dbpath /var/lib/spamassassin/.spamassassin --ham /home/user/Maildir/cur ``` ```output Learned tokens from 212 message(s) (215 message(s) examined) ``` Como has ejecutado `sa-learn` con `sudo`, devuelve la propiedad de la base de datos al usuario del filtro: ```bash sudo chown -R debian-spamd:debian-spamd /var/lib/spamassassin/.spamassassin ``` Comprueba cuántos mensajes ha aprendido: ```bash sudo -u debian-spamd sa-learn --dump magic | grep -E "nspam|nham" ``` ```output 0.000 0 212 0 non-token data: nspam 0.000 0 347 0 non-token data: nham ``` Cuando ambos valores superen 200, verás reglas `BAYES_*` en la cabecera `X-Spam-Status` de los mensajes nuevos. Repite el entrenamiento de vez en cuando, sobre todo con el spam que se haya colado y con los falsos positivos. ## Solución de problemas **Los mensajes llegan sin cabeceras `X-Spam-*`**: el correo no pasa por el filtro. Comprueba que la línea `-o content_filter=spamassassin` está justo debajo del servicio `smtp` y empieza por espacios, y que el mensaje entró por el puerto 25 (el correo enviado localmente con `mail` o `sendmail` no pasa por ese servicio). **`spamd` no arranca**: consulta el motivo con `sudo journalctl -u spamd -n 50 --no-pager`. La causa más habitual es un error en `local.cf`; `sudo spamassassin --lint` lo señala. **En `X-Spam-Status` aparece `URIBL_BLOCKED`**: las listas DNS rechazan las consultas que llegan desde resolvedores públicos compartidos. Esas reglas dejan de puntuar y el filtro pierde eficacia. La solución es usar un resolvedor DNS recursivo propio en el servidor en lugar de uno público. **Correo legítimo marcado como spam**: mira qué reglas han sumado puntos en su cabecera `X-Spam-Status`. Si el remitente es de confianza, añádelo con `welcomelist_auth`; si el problema es general, entrena el mensaje como ham con `sa-learn --ham` antes de tocar `required_score`. **Postfix acumula correo en la cola con errores del servicio `spamassassin`**: revisa `sudo grep spamassassin /var/log/mail.log | tail`. Suele ser una errata en la línea `argv=` de `master.cf`; tras corregirla, ejecuta `sudo postfix check`, reinicia Postfix y reenvía la cola con `sudo postqueue -f`. ## Conclusión Has instalado SpamAssassin en Ubuntu 24.04, lo has conectado a Postfix como filtro de contenido para todo el correo entrante por SMTP, has ajustado la puntuación y las listas de remitentes, lo has comprobado con GTUBE y has entrenado el filtro bayesiano. A partir de ahora cada mensaje entrante llega con su puntuación de spam en las cabeceras. Como siguientes pasos puedes: - Configurar una regla Sieve en Dovecot que mueva los mensajes con `X-Spam-Flag: YES` a la carpeta de correo no deseado. - Instalar los complementos Razor y Pyzor, que consultan redes colaborativas de firmas de spam. - Programar un entrenamiento periódico de `sa-learn` con la carpeta de spam de tus usuarios.