1,201 26/03/2026 07/04/2026 9 min

Come installare e configurare SpamAssassin su Debian

La posta indesiderata non sparisce da sola. Su un server Debian, SpamAssassin resta una scelta solida quando vuoi filtrare spam in modo controllabile.

Qui vediamo un percorso completo. Installazione, configurazione, aggiornamento delle regole, integrazione con Postfix e verifica finale. Useremo esempi concreti, perché la teoria da sola non basta.

Note: gli esempi sono pensati per Debian 12, ma funzionano in modo simile anche su Debian 11. I nomi dei pacchetti cambiano raramente, mentre i servizi restano gli stessi.

Prerequisiti

Prima di partire, assicurati di avere questi elementi pronti. Servono per evitare stop a metà lavoro.

  • Un server Debian aggiornato.
  • Accesso root o un utente con sudo.
  • Un MTA già presente, di solito Postfix o Exim.
  • Connessione internet per scaricare pacchetti e regole.
  • Almeno 1 GB di RAM libera, meglio 2 GB se il server gestisce molta posta.

Se il server è già in produzione, pianifica una finestra breve. SpamAssassin non richiede downtime lungo, ma l’integrazione con la posta va fatta con attenzione.

Warning: prima di toccare il flusso email, verifica come arrivano e come escono i messaggi. Un filtro inserito nel punto sbagliato può rallentare o bloccare la consegna.

Step numerati

1. Aggiorna il sistema e installa i pacchetti base

Partiamo dal minimo indispensabile. Debian deve avere indici pacchetti aggiornati e i componenti principali di SpamAssassin.

sudo apt update
sudo apt install spamassassin spamc spamd libmail-spf-perl libnet-dns-perl

# Output:

Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  spamassassin spamc spamd ...
Setting up spamassassin ...

Perché farlo così: spamassassin installa il motore e le regole base. spamd è il demone che filtra i messaggi. spamc è il client leggero che dialoga con il demone.

Se il pacchetto principale non parte, spesso manca il supporto DNS o SPF. Per questo includiamo anche le dipendenze più usate.

2. Abilita e avvia il demone spamd

Su Debian, il demone non sempre parte da solo dopo l’installazione. Conviene abilitarlo subito, così il filtro resta disponibile dopo ogni reboot.

sudo systemctl enable spamassassin
sudo systemctl start spamassassin
sudo systemctl status spamassassin --no-pager

# Output:

● spamassassin.service - Perl-based spam filter using spamd
     Active: active (running)

Il servizio si chiama spesso spamassassin, anche se il demone effettivo è spamd. Questo crea confusione nei primi controlli, ma è normale.

Note: se preferisci usare il demone direttamente, puoi configurarlo in modo più fine. Nella maggior parte dei casi, il servizio Debian è la strada più semplice.

3. Configura le opzioni principali in /etc/default/spamassassin

Qui decidi come deve comportarsi il demone. È il punto giusto per stabilire se SpamAssassin deve girare sempre, quanta memoria può usare e con quali parametri.

sudo nano /etc/default/spamassassin

Ecco una configurazione pratica per un server medio:

ENABLED=1
OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
CRON=1

# Output:

ENABLED=1
OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
CRON=1

Perché queste righe contano: ENABLED=1 attiva il servizio. --max-children 5 limita i processi figli. Su server piccoli evita saturazione. CRON=1 abilita gli aggiornamenti periodici delle regole.

Se il server riceve molte email, puoi salire a 10 o 15 processi figli. Non farlo a caso. Prima osserva CPU e RAM durante i picchi.

4. Imposta il file di configurazione globale di SpamAssassin

Il file /etc/spamassassin/local.cf è il centro della personalizzazione. Qui imposti soglie, regole locali e comportamento del filtro.

sudo nano /etc/spamassassin/local.cf

Una base utile è questa:

required_score 5.0
rewrite_header Subject [SPAM]
report_safe 1
use_bayes 1
bayes_auto_learn 1
skip_rbl_checks 0

# Output:

required_score 5.0
rewrite_header Subject [SPAM]
report_safe 1
use_bayes 1
bayes_auto_learn 1
skip_rbl_checks 0

Cosa fanno davvero: la soglia a 5.0 è un buon compromesso iniziale. rewrite_header Subject [SPAM] marca l’oggetto. use_bayes attiva il classificatore bayesiano. bayes_auto_learn aiuta a migliorare col tempo.

Warning: non abbassare troppo la soglia al primo giorno. Un valore come 3.0 può generare falsi positivi e creare caos nelle caselle utenti.

Se vuoi essere più prudente, puoi iniziare con 6.0 e poi scendere dopo una settimana di osservazione. È una scelta più conservativa per ambienti aziendali.

5. Aggiorna le regole con sa-update

SpamAssassin vive di regole. Senza aggiornamenti, il filtro invecchia presto. Le campagne spam cambiano linguaggio e tecniche molto rapidamente.

sudo sa-update

# Output:

channel spamassassin.apache.org: updated successfully

Se vuoi automatizzare il refresh, verifica che il cron sia attivo. In Debian lo gestisce spesso il pacchetto stesso, ma vale la pena controllare.

sudo systemctl status cron --no-pager
sudo grep -R "sa-update" /etc/cron* /etc/cron.d 2>/dev/null

# Output:

Active: active (running)
/etc/cron.daily/spamassassin: sa-update

Note: gli aggiornamenti delle regole sono normalmente gestibili da terminale. Non c’è un pannello grafico standard di Debian per questa parte.

6. Integra SpamAssassin con Postfix tramite spamc

Qui rendi utile il lavoro fatto finora. Senza integrazione con il mail server, SpamAssassin resta un controllo separato e poco pratico.

La via più comune con Postfix è usare spamc dentro un content filter o tramite master.cf. In molti ambienti si preferisce un filtro dedicato, perché è chiaro e semplice da monitorare.

Apri /etc/postfix/master.cf e aggiungi un servizio dedicato:

sudo nano /etc/postfix/master.cf
spamassassin unix -     n       n       -       -       pipe
  user=spamd argv=/usr/bin/spamc -f -e
  /usr/sbin/sendmail -oi -f ${sender} ${recipient}

# Output:

spamassassin unix -     n       n       -       -       pipe
  user=spamd argv=/usr/bin/spamc -f -e
  /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Ora collega il servizio al transport map o al flusso scelto. In molti casi si usa un content filter in main.cf:

sudo postconf -e 'content_filter=spamassassin'
sudo systemctl restart postfix

# Output:

postfix/postfix-script: refreshing the Postfix mail system

Perché questa parte è delicata: il punto di aggancio determina se la mail passa prima o dopo altri controlli. Se usi antivirus, DKIM o policy antispam aggiuntive, definisci la catena con precisione.

Warning: se configuri male il loop del filtro, la posta può rientrare nel sistema all’infinito. Controlla sempre che il messaggio non venga reinstradato sullo stesso filtro.

7. Personalizza regole locali e whitelist

Ogni dominio ha traffico diverso. Un e-commerce riceve conferme ordine, notifiche pagamento e mail transazionali. Un ufficio legale ha firme e allegati molto diversi. Le regole devono riflettere questo contesto.

Puoi inserire whitelist e threshold specifici in local.cf oppure in file separati inclusi da SpamAssassin. Ecco un esempio semplice e utile:

whitelist_from postmaster@tuodominio.it
whitelist_from_ac *@partner-affidabile.it
blacklist_from *@dominio-spam.example
score VIAGRA 6.5
score HTML_MESSAGE 0.5

# Output:

whitelist_from postmaster@tuodominio.it
whitelist_from_ac *@partner-affidabile.it
blacklist_from *@dominio-spam.example
score VIAGRA 6.5
score HTML_MESSAGE 0.5

Non esagerare con le whitelist. Una whitelist troppo ampia annulla il vantaggio del filtro. Meglio pochi mittenti fidati e verificati.

Se hai un reparto supporto o un CRM, crea una lista separata per i mittenti interni. Così distingui le mail operative dalle newsletter esterne.

8. Addestra Bayes con messaggi reali

Bayes funziona bene solo se gli dai esempi coerenti. Non basta attivarlo. Serve addestrarlo con spam e ham, cioè posta buona.

sa-learn --spam /var/mail/spam/
sa-learn --ham /var/mail/ham/

# Output:

Learned tokens from 120 spam messages
Learned tokens from 95 ham messages

Se hai una casella dedicata, puoi esportare messaggi in formato mbox e passarli a sa-learn. Questo migliora il punteggio nel tempo e riduce gli errori ripetuti.

Note: l’addestramento è un’operazione da riga di comando. Non esiste un flusso standard via interfaccia web su Debian puro.

9. Regola i permessi e il path dei dati Bayes

Se il demone non scrive correttamente i dati, Bayes non impara nulla. È un errore frequente dopo le prime modifiche.

sudo chown -R spamd:spamd /var/lib/spamassassin
sudo chmod -R 750 /var/lib/spamassassin

# Output:

drwxr-x---  spamd spamd /var/lib/spamassassin

In alcune installazioni il gruppo può essere debian-spamd. Verifica sempre l’utente reale del servizio con systemctl cat spamassassin o con ps.

Se i permessi sono errati, il sintomo tipico è un Bayes che non salva statistiche. Il filtro continua a funzionare, ma perde memoria storica.

10. Riavvia e testa con un messaggio EICAR-like o con GTUBE

La verifica vera si fa con un test standard. SpamAssassin supporta la stringa GTUBE, che simula uno spam noto senza rischi reali.

cat <<'EOF' | spamassassin
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
EOF

# Output:

X-Spam-Flag: YES
X-Spam-Status: Yes, score=1000.0 required=5.0 tests=GTUBE

Questo ti conferma che il motore analizza correttamente il contenuto. Il punteggio enorme è voluto. GTUBE serve proprio a validare il flusso.

Se usi Postfix, manda un messaggio di prova a una casella interna e controlla gli header. Cerca X-Spam-Status, X-Spam-Flag e l’eventuale prefisso nell’oggetto.

Verifica finale

Una configurazione sana non si misura solo con un comando riuscito. Devi verificare servizio, aggiornamenti, log e comportamento reale sulla posta in arrivo.

  • Il servizio spamassassin è attivo.
  • sa-update completa senza errori.
  • I messaggi GTUBE vengono marcati come spam.
  • Le mail buone non finiscono nella quarantena.
  • I log di Postfix mostrano il passaggio nel filtro senza loop.

Controlla anche i log. Su Debian, i messaggi utili finiscono spesso in /var/log/mail.log.

sudo tail -n 50 /var/log/mail.log

# Output:

postfix/smtpd[1234]: connect from ...
spamd[2345]: clean message (2.1/5.0) for user
postfix/qmgr[1234]: ...

Se vedi punteggi realistici, il filtro sta lavorando. Se tutto resta a zero, il messaggio potrebbe non passare dal demone giusto.

Troubleshooting

Errore 1: "spamd[1234]: bayes: unable to open database file for reading"

Causa: i file Bayes non sono leggibili dal processo spamd, spesso per ownership sbagliata.

Fix:

sudo chown -R spamd:spamd /var/lib/spamassassin
sudo systemctl restart spamassassin

# Output:

Active: active (running)

Errore 2: "spamd[1234]: info: setuid to spamd failed"

Causa: il servizio prova a cambiare utente ma il sistema non trova l’account previsto o la configurazione è incoerente.

Fix:

getent passwd spamd
sudo systemctl cat spamassassin
sudo systemctl restart spamassassin

# Output:

spamd:x:...:/var/lib/spamassassin:/usr/sbin/nologin

Errore 3: "sa-update: channel ... unavailable"

Causa: il server non raggiunge il canale di aggiornamento o il DNS non risolve correttamente.

Fix:

sudo apt install ca-certificates
sudo timedatectl set-ntp true
sudo sa-update --verbose

# Output:

channel spamassassin.apache.org: updated successfully

Warning: se il problema resta, verifica firewall, proxy e risoluzione DNS. Un semplice blocco in uscita verso l’esterno può fermare gli aggiornamenti.

Conclusione

SpamAssassin su Debian funziona bene quando lo tratti come un pezzo della catena mail, non come un componente isolato. Installazione, update e tuning devono stare insieme.

Il prossimo passo concreto è osservare i log per una settimana e ritoccare required_score in base ai falsi positivi. Poi aggiungi regole locali per i mittenti davvero importanti, senza allargare troppo le whitelist.