Whitelist dinámica de rspamd via email en Directadmin
Qué hace
Permite a cualquier usuario autenticado del servidor añadir o eliminar dominios de la whitelist de rspamd enviando un email. No requiere acceso al panel ni SSH.
Enviar un email a whitelist@<cualquier-dominio-del-servidor> con el dominio a whitelistear en el asunto:
| Asunto del email | Acción |
|---|---|
add ejemplo.com |
Añade ejemplo.com a la whitelist |
ejemplo.com |
Añade ejemplo.com (add implícito) |
newsletter@ejemplo.com |
Extrae y añade ejemplo.com |
del ejemplo.com |
Elimina ejemplo.com de la whitelist |
remove ejemplo.com |
Elimina ejemplo.com de la whitelist |
El email debe enviarse desde un cliente de correo autenticado (Thunderbird, Outlook, webmail). Correos no autenticados son ignorados silenciosamente.
Restricciones de seguridad
- Solo SMTP AUTH: si el email no viene de un usuario autenticado del servidor, se descarta
- Mass providers bloqueados: no se puede whitelistear gmail.com, outlook.com, yahoo.com, hotmail.com, etc.
- Límite: máximo 500 dominios por servidor
- Solo dominios: no soporta whitelistear una dirección concreta (user@domain), solo el dominio completo
- Validación estricta: el dominio debe tener formato válido (letras, números, puntos, guiones)
Cómo funciona internamente
Email autenticado → whitelist@dominio.com
↓
Exim router (whitelist_pipe_router)
· condición: $authenticated_id no vacío
· domains = +local_domains (solo dominios hospedados)
↓
Exim transport → pipe a /usr/local/bin/rspamd_whitelist.sh
· pasa AUTH_USER via variable de entorno
↓
Script: parsea Subject, valida, escribe en map file
↓
/etc/rspamd/local.d/maps/whitelist_dynamic.map
· rspamd recarga automáticamente (~10 segundos)
↓
Multimap WHITELIST_FROM_DYNAMIC (score -100.0)
· correos del dominio whitelisteado pasan sin penalización
Ficheros involucrados
| Fichero | Propósito | Persistencia |
|---|---|---|
/usr/local/bin/rspamd_whitelist.sh |
Script principal | Manual (no gestionado por DA) |
/etc/exim.routers.pre.conf |
Router Exim custom | Sobrevive rewrite_confs (include en template DA) |
/etc/exim.transports.pre.conf |
Transport Exim custom | Sobrevive rewrite_confs (include en template DA) |
/etc/rspamd/local.d/multimap.conf |
Definición del símbolo WHITELIST_FROM_DYNAMIC | local.d/ = override oficial de rspamd |
/etc/rspamd/local.d/maps/whitelist_dynamic.map |
Lista de dominios (uno por línea) | Fichero de datos, no config |
/var/log/rspamd_whitelist.log |
Log de operaciones | Fichero de log |
Persistencia ante rebuilds de DA
Los ficheros .pre.conf son puntos de extensión del template de Exim en DirectAdmin. El template fuente (custombuild/configure/exim/exim.conf) contiene:
.include_if_exists /etc/exim.routers.pre.conf # línea 519
.include_if_exists /etc/exim.transports.pre.conf # línea 773
Estas directivas .include_if_exists están en el template, no solo en el fichero generado. Esto significa que:
build rewrite_confsregenera/etc/exim.confpero no toca los.pre.confbuild exim_confidembuild exim(rebuild completo del binario) idem
Los ficheros .pre.conf son del usuario, no de DA. Son el único mecanismo ligero para añadir routers y transports custom sin mantener una copia completa de exim.conf.
Para rspamd, local.d/ es el mecanismo oficial de override. DA no gestiona estos ficheros.
Instalación en un servidor nuevo
Prerequisitos
- DirectAdmin con Exim y rspamd
- rspamd con multimap configurado (al menos
local.d/multimap.confexistente)
Pasos
1. Script:
# Subir rspamd_whitelist.sh al servidor
scp rspamd_whitelist.sh root@servidor:/usr/local/bin/
chmod +x /usr/local/bin/rspamd_whitelist.sh
2. Map file y log:
touch /etc/rspamd/local.d/maps/whitelist_dynamic.map
chown root:mail /etc/rspamd/local.d/maps/whitelist_dynamic.map
chmod 664 /etc/rspamd/local.d/maps/whitelist_dynamic.map
touch /var/log/rspamd_whitelist.log
chown mail:mail /var/log/rspamd_whitelist.log
chmod 644 /var/log/rspamd_whitelist.log
3. Exim router (prepend a /etc/exim.routers.pre.conf — ANTES de cualquier otro router):
# Dynamic whitelist via email
whitelist_pipe_router:
driver = accept
local_parts = whitelist
domains = +local_domains
condition = ${if !eq{$authenticated_id}{}}
transport = whitelist_pipe_transport
4. Exim transport (crear o añadir a /etc/exim.transports.pre.conf):
# Dynamic whitelist pipe transport
whitelist_pipe_transport:
driver = pipe
command = /usr/local/bin/rspamd_whitelist.sh
user = mail
environment = AUTH_USER=$authenticated_id
5. rspamd multimap (añadir a /etc/rspamd/local.d/multimap.conf):
WHITELIST_FROM_DYNAMIC {
type = "from";
filter = "email:domain";
map = "/etc/rspamd/local.d/maps/whitelist_dynamic.map";
symbol = "WHITELIST_FROM_DYNAMIC";
score = -100.0;
description = "Dynamic whitelist — added via email by authenticated users";
}
6. Verificar y reiniciar:
exim -bV # Syntax check Exim
rspamadm configtest # Syntax check rspamd
systemctl restart exim
systemctl restart rspamd
systemctl is-active exim rspamd
Verificación
# Comprobar que el router es el primero
exim -bP router_list | head -5
# Comprobar que rspamd carga el símbolo
rspamadm configdump multimap | grep -A3 WHITELIST_FROM_DYNAMIC
# Test de routing (debe resolver al pipe transport)
exim -bt whitelist@undominiodel.servidor
Operaciones de mantenimiento
Ver whitelist actual:
cat /etc/rspamd/local.d/maps/whitelist_dynamic.map
Ver log de operaciones:
cat /var/log/rspamd_whitelist.log
Añadir/eliminar manualmente:
# Añadir
echo "dominio.com" >> /etc/rspamd/local.d/maps/whitelist_dynamic.map
# Eliminar
sed -i '/^dominio\.com$/d' /etc/rspamd/local.d/maps/whitelist_dynamic.map
rspamd recarga el map file automáticamente en ~10 segundos.
Vaciar whitelist:
> /etc/rspamd/local.d/maps/whitelist_dynamic.map
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.