====== 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