====== spamass-milter ======
Come impostare un filtro SpamAssassin sulla posta in arrivo, con Postfix.
La posta viene filtrata sia quando è destinata agli utenti locali, sia quando ne viene fatto il relay. Nel primo caso vengono usate le preferenze Spamassassin dell'utente, nel secondo caso invece quelle dell'utente **nobody** oppure **spamass-milter** (non si è capito bene come mai: due comportamenti diversi su due server diversi).
===== Installazione e configurazione =====
Su una **Debian 10 Buster**, installare il pacchetto **spamass-milter**.
Quando il demone **spamass-milter** è in esecuzione crea il socket **/var/spool/postfix/spamass/spamass.sock** che è raggiungibile da Postfix anche nel suo chroot.
La configurazione predefinita è in **/etc/default/spamass-milter**:
OPTIONS="-u spamass-milter -i 127.0.0.1"
L'opzione **-i** indica di ignorare i messaggi da localhost (127.0.0.1). L'opzione **-u** viene invece usata solo per i messaggi con destinatari multipli; quando c'è **un solo destinatario** il milter ricava il **nome utente da passare a spamc** dalla //local-part// del destinatario (cioè la parte che **precede** il simbolo **@**), se il messaggio ha **destinatari multipli** viene invece passato l'utente indicato da questa opzione.
**ATTENZIONE**: Questa configurazione va bene per i **messaggi in arrivo destinati ad utenti locali**, infatti consente di far girare **spamc** a nome dell'utente finale ed utilizzare le sue **preferenze** contenute in **$HOME/.spamassassin/**. La stessa configurazione **non va bene per il relay** di messaggi, in quel caso infatti **non ha senso estrarre la local-part del destinatario**, che certamente non è un utente locale!
===== Configurazione system-wide =====
Se si desidera **filtrare con il milter i messaggi in uscita** è pertanto necessario chiamare **spamc** passando un generico utente di sistema, le preferenze impostate per quell'utente non saranno pertanto per-user, ma **system-wide**.
In tal caso configurare il demone mettendo in **/etc/default/spamass-milter**:
#OPTIONS="-d func,misc -i 127.0.0.1 -r -1"
OPTIONS="-i 127.0.0.1 -r -1"
Per rileggere la configurazione è necessario un **systemctl restart spamass-milter.service**.
L'opzione **''-d''** attiva alcuni parametri di debug che si possono togliere una volta in produzione, l'opzione **''-r''** associata al valore **''-1''** respingere il messaggio se la scansione di SpamAssassin dà esito positivo (il messaggio è SPAM), pertanto verranno applicate le impostazioni personali dell'utente a nome di cui viene invocato spamc. Altrimenti con il parametro **''-r''** si può indicare il punteggio SPAM da usare come soglia di caso positivo.
Il milter gira a nome dell'utente **spamass-milter**, la sua home directory è **/var/lib/spamass-milter/**. È necessario creare questa directory perché spamass-milter possa scrivere le proprie preferenze:
mkdir /var/lib/spamass-milter
chown spamass-milter:spamass-milter /var/lib/spamass-milter
chmod 750 /var/lib/spamass-milter
Alla prima esecuzione del filtro viene creato il file con le preferenze **/var/lib/spamass-milter/.spamassassin/user_prefs**, è possibile poi ad esempio aggiungere:
required_score 12.0
===== Configurazione Postfix =====
Per aggiungere il filtro milter è sufficiente mettere in **''/etc/postfix/main.cf''**:
# Mail filter: spamass-milter
smtpd_milters = unix:spamass/spamass.sock
Ovviamente con la regola generica **smtpd_milters** il filtro sarà **applicato a tutti i messaggi** (in entrata e in uscita).
Nel nostro caso invece vogliamo applicare il filtro **solo sui messaggi in uscita**, per evitare di fare SPAM relay a qualche utente che ha avuto l'account hackerato. I messaggi in arrivo invece sono filtrati a valle, con un filtro utente invocato dal Local Delivery Agent (**dovecot-lda**, **procmail** o **maildrop**, per citarne tre).
Ecco come applicare il filtro solo per gli utenti autenticati che accedono al servizio submission sulla porta 587. In **master.cf** si aggiunge il parametro **''-o smtpd_milters''** al servizio **submission**:
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_milters=$mua_milters
-o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_relay_restrictions=$mua_relay_restrictions
in **main.cf** si definisce il **$mua_milters**:
# Restriction applied as smtpd_milters over SUMBISSION/587.
mua_milters = unix:spamass/spamass.sock