# Bug template rspamd_settings.conf — Whitelist per-user ineficaz

## El problema

Las whitelists de SpamAssassin que los usuarios configuran desde el panel de DirectAdmin (E-Mail → SpamAssassin Setup → Whitelist) **no funcionan** con rspamd. Los remitentes whitelisteados siguen llegando a la carpeta spam.

Afecta a **todas las versiones de DirectAdmin con `spamd=rspamd`** (verificado hasta DA 1.696).

## Causa raíz (doble)

El template `/usr/local/directadmin/data/templates/rspamd_settings.conf` genera bloques `_whitelist` en `/etc/rspamd/users.d/*.conf` con dos defectos:

### 1. Priority incorrecta

El bloque `_whitelist` tiene `priority = 4` hardcoded, pero el bloque `_prefs` usa `priority = medium` (= 5 en rspamd). rspamd selecciona el bloque de mayor prioridad → `_prefs` SIEMPRE gana, la whitelist NUNCA se aplica.

### 2. Falta `apply.actions`

Incluso si la prioridad fuera correcta, el bloque whitelist solo tiene `want_spam = yes` sin un bloque `apply { actions { ... } }`. rspamd sigue añadiendo cabecera `X-Spam-Status: Yes` y el filtro de dominio de Exim sigue enviando a la carpeta spam.

### Contraste con blacklist

Los bloques `_blacklist` del mismo template **sí funcionan** porque:

- Usan `priority = high` (= 10)
- Incluyen `apply { actions { ... } }`

## Cómo verificar

```bash
# Ver qué settings block aplica rspamd para un usuario
grep "settings.lua" /var/log/rspamd/rspamd.log | grep USUARIO

# Siempre mostrará "settings_id: USUARIO_prefs" — nunca "USUARIO_whitelist"
```

## Solución: template custom

### Paso 1: Crear copia custom del template

```bash
mkdir -p /usr/local/directadmin/data/templates/custom/
cp /usr/local/directadmin/data/templates/rspamd_settings.conf \
   /usr/local/directadmin/data/templates/custom/rspamd_settings.conf
```

### Paso 2: Editar la copia custom

En `/usr/local/directadmin/data/templates/custom/rspamd_settings.conf`, buscar los bloques que contienen `whitelist` y cambiar:

**Antes (roto):**

```
|*if whitelist_count>"0"|
|WHITELIST_ID| {
	priority = 4;
|CUSTOM12|
|RCPT|
|whitelist_from_list|
	want_spam = yes;
|CUSTOM13|
}
```

**Después (corregido):**

```
|*if whitelist_count>"0"|
|WHITELIST_ID| {
	priority = 6;
|CUSTOM12|
|RCPT|
|whitelist_from_list|
	want_spam = yes;
	apply {
		actions {
			"add header" = 9999;
			"rewrite subject" = null;
		}
	}
|CUSTOM13|
}
```

Hay **dos bloques** whitelist en el template (uno con `|whitelist_from_list|` y otro con listas adicionales). Aplicar el cambio a ambos.

### Paso 3: Regenerar users.d para usuarios existentes

El template custom se aplica cuando:

- Un usuario cambia sus preferencias de spam en el panel
- Se ejecuta un rebuild que afecta a users.d

Para forzar la regeneración de un usuario específico, el usuario debe ir a E-Mail → SpamAssassin Setup y guardar (aunque no cambie nada).

Para **usuarios que ya tenían whitelist activa**, hay que parchear manualmente su fichero `users.d/*.conf`:

```bash
# Ejemplo para usuario "alufasa" en kvm456
# En /etc/rspamd/users.d/alufasa.conf, buscar el bloque _whitelist y cambiar:
# priority = 4 → priority = 6
# Añadir apply.actions tras want_spam = yes
```

### Cadena de prioridades correcta

```
blacklist (high=10) > whitelist (6) > prefs (medium=5) > default
```

## Persistencia

El template custom en `data/templates/custom/` sobrevive updates de DirectAdmin. Es el mecanismo oficial de override.

## Referencia: post en el foro DA

Este bug fue reportado en el foro oficial de DirectAdmin:

[Bug: rspamd_settings.conf template — per-user whitelist never applied (priority 4 < prefs medium)](https://forum.directadmin.com/threads/bug-rspamd_settings-conf-template-per-user-whitelist-never-applied-priority-4-prefs-medium.82089/)

El bug original de blacklist (mismo template) fue reportado en 2019 y corregido. La whitelist nunca recibió el mismo fix.

## Alternativa: whitelist dinámica via email

Independientemente de este bug, existe un sistema de whitelist dinámica gestionado via email que **SÍ funciona correctamente** — usa multimap con score -100 en vez del mecanismo de settings per-user. Ver la página "Whitelist dinámica de rspamd via email en DirectAdmin" en esta misma wiki.

## Servidores con template custom desplegado

| Servidor | Fecha | Usuarios parcheados manualmente |
|----------|-------|---------------------------------|
| kvm456 | 2026-03-19 | alufasa, amenocalbus, audionica, elayudante, gestemalisal, lopeza, regfiltersl |
| srv120 | 2026-03-19 | tmar |
| srv121 | 2026-03-19 | neolystic |
| dar | 2026-03-19 | (ninguno con whitelist activa) |

## Nota sobre `want_spam = yes`

`want_spam = yes` en rspamd settings NO es una whitelist por sí solo. Solo indica que el bloque de settings se aplica también a mensajes clasificados como spam. Sin `apply.actions`, rspamd sigue marcando el correo como spam. Es una trampa sutil de la documentación de rspamd.