Whitelist dinámica de rspamd via email en Directadmin
Qué hace
Permite a cualquier usuario autenticado del servidor añadir o eliminar dominios degestionar la whitelist de rspamd enviando un email. No requiere acceso al panel ni SSH.
Enviar un email a whitelist@<cualquier-dominio-del-servidor> con ella dominio a whitelistearacción en el asunto:
| Asunto del email | Acción |
|---|---|
add ejemplo.com |
Añade el dominio completo ejemplo.com |
add user@ejemplo.com |
Añade solo esa dirección concreta — otros de @ejemplo.com siguen filtrados |
ejemplo.com |
Añade ejemplo.com (add implícito) |
| |
del ejemplo.com |
Elimina ejemplo.com de la whitelist |
|
Elimina |
remove ejemplo.com |
Igual que del (también delete, rm) |
list |
Responde con la whitelist completa actual |
El sistema responde por email confirmando cada operación: dominio añadido, eliminado, ya existente, bloqueado, o error de formato.
El email debe enviarse desde un cliente de correo autenticado (Thunderbird, Outlook, webmail). Correos no autenticados son ignorados silenciosamente.
Dominios vs direcciones
El sistema distingue entre dos tipos de whitelist:
- Dominio completo (
add ejemplo.com): todos los correos desde cualquier cuenta @ejemplo.com pasan sin penalización - Dirección concreta (
add user@ejemplo.com): solo los correos de esa cuenta pasan; el resto de @ejemplo.com sigue siendo evaluado normalmente
Esto es útil para proveedores masivos (Gmail, Outlook, Proton, etc.) donde no queremos whitelistear todo el dominio sino solo una cuenta concreta de confianza.
Restricciones de seguridad
- Solo SMTP AUTH: si el email no viene de un usuario autenticado del servidor, se descarta
- Mass providers
bloqueados:bloqueados como dominio: no se puede whitelistear gmail.com, outlook.com,yahoo.com, hotmail.com,proton.me, etc. como dominio completo — pero SÍ se puede whitelistear una dirección concreta comocontacto@proton.me - Límite: máximo 500
dominiosentradas por servidor Solo dominios:no soporta whitelistear una dirección concreta(user@domain),dominiossolo+eldireccionesdominio completocombinados)- Validación estricta: el
dominiodominio/email debe tener formato válido - Respuesta
números,informativa:puntos,elguiones)sistema responde indicando exactamente qué hizo o por qué rechazó la petición
Proveedores masivos bloqueados
gmail.com, googlemail.com, yahoo.com, yahoo.es, yahoo.fr, hotmail.com, hotmail.es, outlook.com, outlook.es, live.com, msn.com, aol.com, mail.ru, yandex.ru, yandex.com, protonmail.com, proton.me, icloud.com, me.com, mac.com, gmx.com, gmx.es, gmx.de, zoho.com, tutanota.com, tuta.com, tuta.io, fastmail.com, mail.com, email.com, web.de, freenet.de, t-online.de, libero.it, virgilio.it, laposte.net, free.fr, orange.fr, 163.com, 126.com, qq.com
Si se intenta añadir uno de estos como dominio, el sistema lo rechaza y sugiere usar la dirección completa (add usuario@proveedor.com).
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, escribedetermina entipo map file(dominio/dirección)
↓
Si dominio → /etc/rspamd/local.d/maps/whitelist_dynamic.map
·Si dirección → /etc/rspamd/local.d/maps/whitelist_dynamic_addr.map
↓
rspamd recarga automáticamente (~10 segundos)
↓
Multimap WHITELIST_FROM_DYNAMIC (dominios, score -100.0)
·Multimap correosWHITELIST_ADDR_DYNAMIC del(direcciones, dominioscore whitelisteado-100.0)
pasan↓
sinRespuesta penalizaciónpor email al usuario confirmando la operació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 |
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 |
/etc/rspamd/local.d/maps/whitelist_dynamic_addr.map |
Lista de direcciones exactas (una 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 filefiles y log:
# Map de dominios
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
# Map de direcciones
touch /etc/rspamd/local.d/maps/whitelist_dynamic_addr.map
chown root:mail /etc/rspamd/local.d/maps/whitelist_dynamic_addr.map
chmod 664 /etc/rspamd/local.d/maps/whitelist_dynamic_addr.map
# Log
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";
}
WHITELIST_ADDR_DYNAMIC {
type = "from";
filter = "email:addr";
map = "/etc/rspamd/local.d/maps/whitelist_dynamic_addr.map";
symbol = "WHITELIST_ADDR_DYNAMIC";
score = -100.0;
description = "Dynamic whitelist (address) — specific sender addresses added via email";
}
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 ellos símbolosímbolos
rspamadm configdump multimap | grep -A3 WHITELIST_FROM_DYNAMIC"WHITELIST.*DYNAMIC"
# Test de routing (debe resolver al pipe transport)
exim -bt whitelist@undominiodel.servidor
Operaciones de mantenimiento
Ver whitelist actual:
echo "=== Dominios ===" && cat /etc/rspamd/local.d/maps/whitelist_dynamic.map
echo "=== Direcciones ===" && cat /etc/rspamd/local.d/maps/whitelist_dynamic_addr.map
Ver log de operaciones:
cat /var/log/rspamd_whitelist.log
Añadir/eliminar manualmente:
# Añadir dominio
echo "dominio.com" >> /etc/rspamd/local.d/maps/whitelist_dynamic.map
# Añadir dirección
echo "user@dominio.com" >> /etc/rspamd/local.d/maps/whitelist_dynamic_addr.map
# Eliminar (dominios)
sed -i '/^dominio\.com$/d' /etc/rspamd/local.d/maps/whitelist_dynamic.map
# Eliminar (direcciones)
sed -i '/^user@dominio\.com$/d' /etc/rspamd/local.d/maps/whitelist_dynamic_addr.map
rspamd recarga el map file automáticamente en ~10 segundos.
Vaciar whitelist:
> /etc/rspamd/local.d/maps/whitelist_dynamic.map
> /etc/rspamd/local.d/maps/whitelist_dynamic_addr.map
MejorasTrampas futuras (v2)conocidas
Per-addressLockwhitelist:file:soportarNO usarniuser@example.com/var/lock//run/lock/— están montados connoexecy bash no puede abrir file descriptors ahí. El script usa el LOG file como targetexactodeflock(segundoadvisorymultimaplock,sinnofilterinterfiere=con"email:domain")appends)ComandoPermisos map files: deben serlistroot:mail 664:.responderSialseremitentecrean como root durante tests, el transport Exim (que corre comouser = mail) no podrá escribir. Verificar conls -lawhitelist actualTTL/expiración:auto-eliminar entradas tras N díasLogrotate:crear regla para/var/log/rspamd_whitelist.logetc/rspamd/local.d/maps/whitelist_dynamic*.mapNotificación:El directorio/etc/rspamd/local.d/maps/esroot:root 755:confirmarmail no puede crear ficheros nuevos ahí. El script escribe directamente alusuariomap file (queelsídominiotienefuepermisoañadido/eliminadode grupo). La operacióndelusa redirección en memoria en vez de fichero temporal- Tests manuales como root: crean lock/map/log files con ownership
root:root. Tras tests manuales, verificar y corregir permisos:chown root:mail /etc/rspamd/local.d/maps/whitelist_dynamic*.map
Aviso
Servidores desplegados
| Servidor | Fecha | Estado |
|---|---|---|
| kvm456 | 2026-03-11 | Activo, probado (v3: dominios + direcciones + respuesta email) |
| srv120 | 2026-03-11 | Activo |
| srv121 | 2026-03-11 | Activo |
| dar | 2026-03-11 | Activo |
EstaNo documentaciónaplica: ytitrit su contenido, (no implicarecibe quecorreo), funcioneamazzal en(no turecibe 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 Castriscorreo)
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.