--- title: "Cómo filtrar spam con Rspamd y Postfix en Ubuntu 24.04" description: "Instala Rspamd con Redis en Ubuntu 24.04, conéctalo a Postfix como milter, firma el correo con DKIM, entrena el filtro bayesiano y crea listas blancas y negras." category: "Email Avanzado" language: es source: https://cubepath.com/es/docs/email-avanzado/filtrado-avanzado-de-spam-con-rspamd updated: 2026-09-25 --- # Cómo filtrar spam con Rspamd y Postfix en Ubuntu 24.04 Rspamd es un filtro de spam de alto rendimiento que analiza cada mensaje con cientos de reglas (SPF, DKIM, DMARC, listas DNS, un clasificador bayesiano, heurísticas de contenido) y le asigna una puntuación que decide si se entrega, se marca o se rechaza. Además puede firmar el correo saliente con DKIM, lo que permite prescindir de OpenDKIM. En este tutorial instalarás Rspamd desde su repositorio oficial en Ubuntu 24.04, lo integrarás con un servidor Postfix existente, activarás la firma DKIM y el aprendizaje bayesiano, y añadirás reglas propias. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 1 GB de RAM. - Postfix instalado y recibiendo correo para tu dominio `your_domain`. - Un usuario no root con privilegios `sudo`. - Acceso a la zona DNS de `your_domain` para publicar la clave DKIM. Si tu servidor ya usa OpenDKIM o SpamAssassin, Rspamd los sustituye. Al final del paso 4 verás cómo retirar OpenDKIM para no firmar dos veces. ## Paso 1: Instalar Redis Rspamd guarda en Redis los datos del clasificador bayesiano, el greylisting, los límites de envío y la caché de resultados. Instala el paquete de Ubuntu: ```bash sudo apt update sudo apt install redis-server ``` Por defecto Redis solo escucha en `127.0.0.1`, que es lo que necesitas. Comprueba que responde: ```bash redis-cli ping ``` ```output PONG ``` ## Paso 2: Instalar Rspamd desde el repositorio oficial Ubuntu incluye un paquete `rspamd`, pero suele ir varias versiones por detrás. El proyecto mantiene un repositorio propio con versiones estables. Instala las herramientas necesarias y añade su clave: ```bash sudo apt install ca-certificates wget gpg lsb-release sudo install -m 0755 -d /etc/apt/keyrings wget -qO- https://rspamd.com/apt-stable/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/rspamd.gpg > /dev/null ``` Añade el repositorio para tu versión de Ubuntu: ```bash echo "deb [signed-by=/etc/apt/keyrings/rspamd.gpg] https://rspamd.com/apt-stable/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rspamd.list ``` Instala Rspamd: ```bash sudo apt update sudo apt install --no-install-recommends rspamd ``` Comprueba que el servicio está en marcha y en qué puertos escucha: ```bash sudo systemctl status rspamd --no-pager sudo ss -tlnp | grep rspamd ``` ```output ● rspamd.service - rapid spam filtering system Active: active (running) since Fri 2026-09-25 10:20:13 UTC; 8s ago ... LISTEN 0 2048 127.0.0.1:11332 0.0.0.0:* users:(("rspamd",pid=4121,fd=12),...) LISTEN 0 2048 127.0.0.1:11333 0.0.0.0:* users:(("rspamd",pid=4121,fd=13),...) LISTEN 0 2048 127.0.0.1:11334 0.0.0.0:* users:(("rspamd",pid=4121,fd=14),...) ``` Cada puerto corresponde a un proceso: `11332` es el *proxy* que habla el protocolo milter con Postfix, `11333` el analizador (*normal worker*) y `11334` el *controller*, que sirve la interfaz web y recibe las órdenes de aprendizaje. ## Paso 3: Configurar Rspamd Nunca edites los ficheros de `/etc/rspamd/` directamente: se sobrescriben al actualizar. Los cambios van en `/etc/rspamd/local.d/`, cuyos ficheros se combinan con la configuración por defecto. Indica a Rspamd dónde está Redis: ```bash sudo nano /etc/rspamd/local.d/redis.conf ``` ```ini servers = "127.0.0.1:6379"; ``` Genera un hash para la contraseña de la interfaz web. El comando te pide la contraseña y muestra el hash: ```bash rspamadm pw ``` ```output Enter passphrase: $2$qq7wbm9y1t4j5g8k...$u6y9kzb3... ``` Guarda el hash en la configuración del controller: ```bash sudo nano /etc/rspamd/local.d/worker-controller.inc ``` ```ini password = "$2$qq7wbm9y1t4j5g8k...$u6y9kzb3..."; ``` Confirma que el proxy trabaja en modo milter y analiza los mensajes en el propio servidor: ```bash sudo nano /etc/rspamd/local.d/worker-proxy.inc ``` ```ini milter = yes; timeout = 120s; upstream "local" { default = yes; self_scan = yes; } ``` Ajusta los umbrales de puntuación. Con estos valores, un mensaje de 4 puntos o más se retrasa con greylisting, a partir de 6 se entrega con la cabecera de spam y a partir de 15 se rechaza: ```bash sudo nano /etc/rspamd/local.d/actions.conf ``` ```ini greylist = 4; add_header = 6; reject = 15; ``` Por último, pide a Rspamd que añada a cada mensaje cabeceras con su resultado, útiles para depurar y para que el cliente de correo filtre: ```bash sudo nano /etc/rspamd/local.d/milter_headers.conf ``` ```ini use = ["x-spamd-bar", "x-spam-level", "authentication-results"]; ``` Comprueba la sintaxis y reinicia el servicio: ```bash sudo rspamadm configtest sudo systemctl restart rspamd ``` ```output syntax OK ``` ## Paso 4: Conectar Postfix con Rspamd Postfix envía cada mensaje al proxy de Rspamd a través del protocolo milter antes de aceptarlo. Añade la configuración con `postconf`: ```bash sudo postconf -e "smtpd_milters = inet:127.0.0.1:11332" sudo postconf -e "non_smtpd_milters = inet:127.0.0.1:11332" sudo postconf -e "milter_protocol = 6" sudo postconf -e "milter_default_action = accept" ``` `smtpd_milters` cubre el correo que llega por SMTP y `non_smtpd_milters` el que se genera en el propio servidor (por ejemplo con `sendmail`). `milter_default_action = accept` hace que, si Rspamd no está disponible, Postfix siga entregando el correo sin filtrar en lugar de rechazarlo. > Nota: si ya tenías OpenDKIM u otro milter en esas líneas, sustitúyelo por Rspamd. En el paso 5 configurarás la firma DKIM en Rspamd; después desactiva OpenDKIM con `sudo systemctl disable --now opendkim`. Comprueba la configuración y recarga Postfix: ```bash sudo postconf smtpd_milters non_smtpd_milters sudo systemctl reload postfix ``` ```output smtpd_milters = inet:127.0.0.1:11332 non_smtpd_milters = inet:127.0.0.1:11332 ``` Envía un correo a una cuenta de tu servidor desde una cuenta externa y revisa sus cabeceras. Debes ver las que añade Rspamd: ```text X-Spamd-Bar: / Authentication-Results: mail.your_domain; dkim=pass header.d=gmail.com header.s=20230601 header.b=AbCdEf12; spf=pass (mail.your_domain: domain of sender@gmail.com designates 209.85.128.41 as permitted sender) smtp.mailfrom=sender@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ``` Rspamd comprueba SPF, DKIM y DMARC del correo entrante sin configuración adicional; la cabecera `Authentication-Results` muestra el resultado. ## Paso 5: Firmar el correo saliente con DKIM Rspamd firma con DKIM los mensajes que envían tus usuarios autenticados y los generados en el propio servidor. Crea el directorio de claves y genera una clave RSA de 2048 bits con el selector `mail`: ```bash sudo mkdir -p /var/lib/rspamd/dkim sudo rspamadm dkim_keygen -b 2048 -s mail -d your_domain -k /var/lib/rspamd/dkim/your_domain.mail.key | sudo tee /var/lib/rspamd/dkim/your_domain.mail.pub ``` ```output mail._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv3n..." "...IDAQAB" ) ; ``` La clave privada solo debe poder leerla el usuario `_rspamd`, con el que se ejecuta el servicio: ```bash sudo chown -R _rspamd:_rspamd /var/lib/rspamd/dkim sudo chmod 440 /var/lib/rspamd/dkim/*.key ``` Indica a Rspamd dónde buscar las claves. Las variables `$domain` y `$selector` se sustituyen para cada mensaje, así que el mismo fichero sirve para varios dominios: ```bash sudo nano /etc/rspamd/local.d/dkim_signing.conf ``` ```ini path = "/var/lib/rspamd/dkim/$domain.$selector.key"; selector = "mail"; allow_username_mismatch = true; ``` `allow_username_mismatch = true` permite firmar aunque el usuario SMTP no coincida exactamente con la dirección del remitente, algo habitual cuando los usuarios se autentican con un nombre corto. Reinicia Rspamd: ```bash sudo rspamadm configtest sudo systemctl restart rspamd ``` Publica en tu DNS un registro TXT con nombre `mail._domainkey` y como valor el contenido de las comillas de la salida anterior, unido en una sola cadena (`v=DKIM1; k=rsa; p=MIIBIjAN...IDAQAB`). Comprueba que resuelve: ```bash dig +short TXT mail._domainkey.your_domain ``` Envía un correo desde tu servidor a una cuenta de Gmail; en **Mostrar original** debe aparecer `DKIM: 'PASS' con el dominio your_domain`. ## Paso 6: Entrenar el filtro bayesiano El clasificador bayesiano aprende a distinguir spam (*spam*) de correo legítimo (*ham*) a partir de ejemplos. Rspamd no lo usa hasta que ha aprendido al menos 200 mensajes de cada tipo, así que conviene alimentarlo desde el principio. Activa el aprendizaje automático, con el que Rspamd aprende como spam los mensajes con puntuación muy alta y como ham los de puntuación muy baja: ```bash sudo nano /etc/rspamd/local.d/classifier-bayes.conf ``` ```ini backend = "redis"; autolearn = true; ``` Reinicia el servicio: ```bash sudo systemctl restart rspamd ``` Además, entrénalo con correo real. `rspamc` acepta ficheros sueltos o directorios completos, como las carpetas de un buzón Maildir. Por ejemplo, si tus usuarios mueven el spam a la carpeta `Junk`: ```bash sudo rspamc learn_spam /var/mail/vhosts/your_domain/usuario/.Junk/cur/ sudo rspamc learn_ham /var/mail/vhosts/your_domain/usuario/cur/ ``` Ajusta las rutas a la ubicación de los buzones en tu servidor. Comprueba cuántos mensajes ha aprendido: ```bash sudo rspamc stat | grep -A1 BAYES ``` ```output Statfile: BAYES_SPAM type: redis; length: 0; free blocks: 0; total blocks: 0; free: 0.00%; learned: 245; users: 1; languages: 0 Statfile: BAYES_HAM type: redis; length: 0; free blocks: 0; total blocks: 0; free: 0.00%; learned: 612; users: 1; languages: 0 ``` Si usas Dovecot, puedes automatizar este paso con su plugin `imap_sieve` para que cada mensaje que un usuario mueve a `Junk` o saca de ella se envíe a `rspamc learn_spam` o `learn_ham`. ## Paso 7: Añadir listas blancas y negras propias El módulo `multimap` permite crear reglas a partir de listas. Crea dos: una que resta puntos a los dominios de confianza y otra que suma puntos a dominios que no quieres recibir: ```bash sudo nano /etc/rspamd/local.d/multimap.conf ``` ```ini WHITELIST_SENDER_DOMAIN { type = "from"; filter = "email:domain"; map = "/etc/rspamd/local.d/whitelist_domains.map"; score = -5.0; description = "Dominio remitente de confianza"; } BLACKLIST_SENDER_DOMAIN { type = "from"; filter = "email:domain"; map = "/etc/rspamd/local.d/blacklist_domains.map"; score = 10.0; description = "Dominio remitente bloqueado"; } ``` Los ficheros de mapa contienen un dominio por línea: ```bash sudo nano /etc/rspamd/local.d/whitelist_domains.map ``` ```text partner-example.com proveedor-example.es ``` ```bash sudo nano /etc/rspamd/local.d/blacklist_domains.map ``` ```text spam-example.net ``` Rspamd vuelve a leer los mapas automáticamente cuando cambian, así que después solo tendrás que editarlos. Tras crear las reglas, valida y reinicia: ```bash sudo rspamadm configtest sudo systemctl restart rspamd ``` Las reglas funcionan sobre la dirección `From` visible, que un atacante puede falsificar. Por eso la lista blanca resta puntos en lugar de aceptar el mensaje directamente: un correo falsificado seguirá penalizado por fallar SPF, DKIM o DMARC. ## Paso 8: Revisar los resultados en la interfaz web El controller escucha solo en `127.0.0.1`, así que no está expuesto a Internet. Para abrir la interfaz web desde tu equipo, crea un túnel SSH: ```bash ssh -L 11334:127.0.0.1:11334 your_user@your_server_ip ``` Con el túnel abierto, visita `http://localhost:11334` e introduce la contraseña del paso 3. La pestaña **History** muestra la puntuación y los símbolos de cada mensaje analizado, y **Throughput** la proporción de correo por acción. Si ves falsos positivos, pulsa sobre el mensaje para saber qué reglas han sumado puntos. ## Solución de problemas **Postfix registra `connect to Milter service inet:127.0.0.1:11332: Connection refused`.** Rspamd no está en marcha, normalmente por un error de configuración. Revisa: ```bash sudo rspamadm configtest sudo journalctl -u rspamd -n 50 --no-pager ``` **Los mensajes salen sin firma DKIM.** Comprueba los permisos de la clave y que el nombre del fichero sigue el patrón `dominio.selector.key`. En `/var/log/rspamd/rspamd.log` verás el motivo, por ejemplo que no encuentra la clave o no puede leerla. **El filtro bayesiano no puntúa.** Con menos de 200 mensajes aprendidos de spam y otros 200 de ham, el clasificador no se aplica. Revisa los contadores con `rspamc stat`. **Los mensajes legítimos se retrasan varios minutos.** Es el greylisting, que actúa sobre los mensajes con puntuación dudosa. Si te molesta, sube el umbral `greylist` en `actions.conf` o desactiva el módulo con `enabled = false;` en `/etc/rspamd/local.d/greylist.conf`. ## Conclusión Tu servidor Postfix filtra ahora el correo entrante con Rspamd, verifica SPF, DKIM y DMARC, firma el saliente con DKIM y aprende de tu propio correo con el clasificador bayesiano. Como siguientes pasos, automatiza el aprendizaje desde Dovecot con `imap_sieve`, revisa el historial de la interfaz web durante las primeras semanas para afinar los umbrales y publica una política DMARC para tu dominio.