Rspamd: Configurazione Avanzata, Redis su Socket e Nginx Reverse Proxy
Se stai cercando di configurare un server di posta robusto, avrai sicuramente notato che molte guide online su Rspamd sono incomplete o danno per scontati passaggi critici.
Il risultato? Log pieni di errori Connection refused, moduli che non comunicano e un'interfaccia web esposta a rischi di sicurezza.
In questo articolo, vediamo come configurare un ambiente Rspamd blindato, performante e ottimizzato, risolvendo i problemi più comuni legati a Redis e all'addestramento anti-spam.
1. Il grande inganno di Redis: Porta TCP vs Unix Socket
Uno degli errori più comuni (cannot upload script to 127.0.0.1:6379: Connection refused) si verifica quando Rspamd cerca di connettersi al database Redis sulla porta di rete predefinita, ma il tuo server Redis è configurato per ascoltare su un Unix socket locale (molto più veloce e sicuro). Per risolvere, dobbiamo istruire Rspamd a utilizzare il socket.
Crea o modifica il file di configurazione globale di Redis per Rspamd:
nano /etc/rspamd/local.d/redis.conf
E inserisci questa direttiva:
servers = "/var/run/redis/redis.sock";
Attenzione ai permessi: Assicurati che l'utente _rspamd abbia il permesso di leggere e scrivere sul socket. Aggiungilo al gruppo Redis con: usermod -aG redis _rspamd.
2. Addestrare il Filtro Bayesiano (e risolvere i conflitti)
Per insegnare a Rspamd a riconoscere lo spam, si usa l'utility a riga di comando rspamc puntandola verso una cartella piena di email spazzatura:
sudo -u _rspamd rspamc learn_spam /percorso/della/tua/cartella/spam/*
Tuttavia, potresti notare che l'addestramento fallisce ugualmente. Questo perché il modulo classificatore ha spesso una configurazione "hardcoded" che ignora le impostazioni globali. Per forzare il classificatore Bayes a usare il nostro socket Redis, modifica il file dedicato:
nano /etc/rspamd/local.d/classifier-bayes.conf
servers = "/var/run/redis/redis.sock";
3. Attivare i Moduli Avanzati: Neural, History e Greylist
Una volta sistemate le fondamenta, è il momento di accendere il "carro armato". Rspamd ha moduli potenti che spesso restano disattivati o in errore a causa di configurazioni Redis errate. Configurali creando i rispettivi file in /etc/rspamd/local.d/, assicurandoti che puntino tutti al socket.
History (history_redis.conf)
servers = "/var/run/redis/redis.sock";
nrows = 2000;
key_prefix = "rs_history";
compress = true;
Neural (neural.conf)
servers = "/var/run/redis/redis.sock";
rules {
"default" {
train {
max_trains = 1000;
max_usages = 10;
max_iterations = 25;
learning_spawned = true;
}
symbol_spam = "NEURAL_SPAM";
symbol_ham = "NEURAL_HAM";
ann_expire = 100d;
}
}
Greylist (greylist.conf)
servers = "/var/run/redis/redis.sock";
enabled = true;
timeout = 1min;
expire = 30d;
unseen_expire = 1d;
4. Blindare la WebUI con Nginx (Reverse Proxy)
Non esporre MAI la porta 11334 di Rspamd direttamente su Internet. La pratica corretta prevede di far ascoltare Rspamd solo in locale e usare Nginx per gestire il traffico esterno e il certificato SSL.
Prima, pulisci la configurazione del controller (/etc/rspamd/local.d/worker-controller.inc) rimuovendo eventuali direttive destinate al Milter e impostando la password:
bind_socket = "127.0.0.1:11334";
password = "$2$tuo_hash_generato_con_rspamadm_pw";
secure_ip = "127.0.0.1";
secure_ip = "::1";
Infine, crea il server block su Nginx per fungere da reverse proxy:
server {
listen 4443 ssl http2;
server_name mcp.tuodominio.com;
ssl_certificate /etc/letsencrypt/live/mcp.tuodominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mcp.tuodominio.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:11334/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300;
}
}
Riavvia Rspamd (systemctl restart rspamd) e Nginx. Ora hai un sistema di filtraggio antispam di livello enterprise, con un'interfaccia sicura e un database Redis che elabora i dati alla massima velocità tramite socket.