Installazione e configurazione di Spamassassin

25 marzo 2021 Roberto Puzzanghera2 commenti

SpamAssassin is a mature, widely-deployed open source project that serves as a mail filter to identify Spam. SpamAssassin uses a variety of mechanisms including header and text analysis, Bayesian filtering, DNS blocklists, and collaborative filtering databases. SpamAssassin runs on a server, and filters spam before it reaches your mailbox.

Changelog

  • 14 luglio 2021
    - aggiunto il setup di DCC (nella prossima pagina)
    - spostata la configurazione di Razor, Pyzor e Spamcop a una pagina separata

Aggiornamento di spamassassin alla versione 3.4.x

Ecco come procedere:

qmailctl stop
spamdctl stop
perl -MCPAN -e shell
cpan> o conf prerequisites_policy ask
cpan> force notest install Geo::IP IO::Socket::IP Net::Patricia NetAddr::IP
cpan> force notest install Mail::SpamAssassin Mail::SpamAssassin::Plugin::Razor2 BSD::Resource
cpan> quit
sa-update

Inoltre è necessario apportare la seguente modifica alla tabella txrep, poichè la colonna count è stata rinominata (grazie a Tony Fung):

ALTER TABLE `txrep` CHANGE `count` `msgcount` INT(11) NOT NULL DEFAULT '0';

Ricordarsi di far ripartire i server

spamdctl start
qmailctl start

Installazione

Creare l'utente e il gruppo spamd, preparare le cartelle:

mkdir -p /etc/mail/spamassassin /home/spamd

groupadd spamd
useradd -g spamd -d /home/spamd spamd
chown -R spamd:spamd /home/spamd

Installare spamassassin via Cpan

perl -MCPAN -e shell
o conf prerequisites_policy ask
install Mail::SpamAssassin
quit

Note di installazione per gli utenti Slackware

  • REQUIRED module missing: HTML::Parser
  • REQUIRED module missing: Net::DNS
  • REQUIRED module missing: NetAddr::IP
  • REQUIRED module missing: BSD::Resource
  • optional module missing: Digest::SHA1
  • optional module missing: Mail::SPF
  • optional module missing: Razor2
  • optional module missing: IO::Socket::INET6
  • optional module missing: IO::Socket::SSL
  • optional module missing: Mail::DKIM
  • optional module missing: LWP::UserAgent
  • optional module missing: HTTP::Date
  • optional module missing: Encode::Detect
  • optional module missing: Geo::IP
  • optional module missing: IO::Socket::IP
  • optional module missing: Net::Patricia

Questi moduli mancano e devono essere installati con CPAN. Alcuni di essi hanno a loro volta delle dipendenze...

Alla fine questi sono i moduli che ho installato, nel seguente ordine (rispondere yes se vengono trovate delle dipendenze, installare il tutto in questo ordine)

perl -MCPAN -e shell
o conf prerequisites_policy ask

force notest install Socket6 IO::Socket IO::Socket::INET6 LWP install MD5 CPAN::DistnameInfo Mail::DKIM

Installare i prerequisiti di Net::DNS:

force notest install Test::More MIME::Base64 Digest::MD5 Digest::HMAC_MD5 Net::IP

Continuare installando (sempre da CPAN):

force notest install Net::Ping Net::DNS Time::HiRes Digest::SHA1 Getopt::Long Digest::Nilsimsa URI::Escape HTML::Parser HTTP::Date IO::Zlib Archive::Tar Mail::SPF
force notest install Mail::SPF::Query Net::Ident IO::Socket::SSL Mail::DomainKeys Mail::DKIM LWP::UserAgent HTTP::Date Encode::Detect BSD::Resource
force notest install Storable DB_File Net::SMTP IP::Country::Fast BerkeleyDB
force notest install Geo::IP IO::Socket::IP Net::Patricia

Infine, se tutto è ok installare i moduli spamassassin e Razor2 da CPAN

force notest install Mail::SpamAssassin Mail::SpamAssassin::Plugin::Razor2

Ho dovuto dare un "force" all'installzione.. comunque funziona.

Abbiamo installato il pacchetto perl Razor2 che vedremo nella pagina successiva.

Configurazione

I file di configurazione sono in /etc/mail/spamassassin

# cd /etc/mail/spamassassin
# ls
init.pre  local.cf  v310.pre  v312.pre  v320.pre  v330.pre

local.cf

# Add *****SPAM***** to the Subject header of spam e-mails
# rewrite_header Subject *****SPAM*****
# put here your subnet
trusted_networks 10.0.0.
# Set the threshold at which a message is considered spam (default: 5.0)
required_score 5.0
use_bayes 1
bayes_auto_learn 1
use_txrep 1
txrep_factory Mail::SpamAssassin::SQLBasedAddrList

init.pre

# RelayCountry - add metadata for Bayes learning, marking the countries
# a message was relayed through
#
# Note: This requires the IP::Country::Fast Perl module
#
loadplugin Mail::SpamAssassin::Plugin::RelayCountry

# URIDNSBL - look up URLs found in the message against several DNS
# blocklists.
#
loadplugin Mail::SpamAssassin::Plugin::URIDNSBL

# Hashcash - perform hashcash verification.
#
loadplugin Mail::SpamAssassin::Plugin::Hashcash

# SPF - perform SPF verification.
#
loadplugin Mail::SpamAssassin::Plugin::SPF

Test

Lanciare questo test di debug dalla linea di comando. Se non si ottengono errori tutto è pronto per lanciare il daemone.

sudo -u spamd -H spamassassin -D --lint

Controllare che l'intestazione sia correttamente inserita:

echo -e "From: myself@mymailserver.net\nTo:myfriend@domain.net\nSubject: test\n\n" | spamc

Received: from localhost by qmail.mymailserver.net
 with SpamAssassin (version 3.3.1);
 Tue, 30 Nov 2010 23:18:37 +0100
From: myself@mymailserver.net
To: myfriend@domain.net
Subject: test
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-04-18) on qmail.mymailserver.net
X-Spam-Flag: YES
X-Spam-Level: *****
X-Spam-Status: Yes, score=5.4 required=5.0 tests=BAYES_99,FREEMAIL_FROM,
 MISSING_DATE,MISSING_MID,NO_RECEIVED,NO_RELAYS,TVD_SPACE_RATIO,
 T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.3.1

sa-update

sa-update aggiorna le regole (richiede gpg 1.4). Prima di avviare spamassassin per la prima volta è necessario scaricare le regole:

sa-update

Aggiungere poi al crontab questa riga per aggiornare le regole quotidianamente

# spamassassin update
30 3 * * * /usr/bin/sa-update --nogpg -v &

L'ozione -v produrrà un avviso email nella casella postmaster.

Avvio di spamassassin

Scaricare lo startup script:

cd /usr/local/bin
wget https://notes.sagredo.eu/files/qmail/spamdctl
chmod +x spamdctl

E' necessario sostituire l'IP del firewall (l'IP del server come visto dalla rete Internet) e controllare che il path dove è stato installato spamd coincida con quello indicato nello script seguente.

#!/bin/bash

# Spamd init script
#
# August, 2th 2003
# Martin Ostlund, nomicon
# Modified slightly by Troy Belding for Qmailrocks - February 23, 2004
#
# Modified by Roberto Puzzanghera - September 02, 2014
# November 17, 2020: moved log file to /var/log/spamassassin/spamd.log

# The IP of your server as seen from the internet
IP=<firewall-IP>

DAEMON=/usr/local/bin/spamd
NAME=spamd
SNAME=spamdctl
DESC="SpamAssassin Mail Filter Daemon"
PIDFILE="/var/run/$NAME.pid"
PNAME="spamd"

DOPTIONS="-x -u spamd -A 127.0.0.1,::1,${IP} -s /var/log/spamassassin/spamd.log -H /home/spamd -d --pidfile=$PIDFILE"

KILL="/bin/kill"
KILLALL="/bin/killall"
# Defaults - don''t touch, edit /etc/mail/spamassassin/local.cf
ENABLED=0
OPTIONS=""

set -e

case "$1" in
start)
echo -n "Starting $DESC: "
$DAEMON $OPTIONS $DOPTIONS

echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
$KILL -9 `cat $PIDFILE`
/bin/rm $PIDFILE
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
$0 stop
$0 start

echo "$NAME."
;;
*)
ME=/usr/local/bin/$SNAME
echo "Usage: $ME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0

Controlliamo che spamd sia in esecuzione:

# spamdctl start
# ps axfu|grep spamd
root      1859  0.1  3.4 139360 61044 ?        Ss   19:00   0:01 /usr/bin/spamd -x -u spamd -A 127.0.0.1,[firewall-IP] -H /home/spamd -d --pidfile=/var/run/spamd.pid
spamd     1860  0.0  3.2 139360 58984 ?        S    19:00   0:00  \_ spamd child
spamd     1861  0.0  3.2 139360 58984 ?        S    19:00   0:00  \_ spamd child

Digitare spamd -c per vedere come deve essere usato spamd. Vedere anche http://spamassassin.apache.org/full/3.4.x/doc/spamd.html

Avviare spamassassin al boot

Per far sì che spamassassin sia avviato al boot inserire lo startup script nel proprio rc.local:

/usr/local/bin/spamdctl start &

logrotate

Creare un file /etc/logrotate.d/spamd come questo (slackware) per ruotare i log di spamd:

cat > /etc/logrotate.d/spamassassin/spamd /var/log/spamassassin/razor-agent.log << __EOF__
/var/log/spamd.log {
su root apache
rotate 5
daily
missingok
notifempty
delaycompress
postrotate
   [ -f '/var/run/spamd.pid' ] && (kill -HUP `cat /var/run/spamd.pid`) || exit 0
endscript
}
__EOF__

Commenti

Chiarimento configurazione

Buongirono Roberto,

un chiarimento sulla configurazione di SA, all'inizio della pagina scrivi "Abilitare tutti i nuovi plugin dal file /etc/mail/spamassassin/v343.pre."

Nella lista dei files da modificare fai riferimento a v310.pre.

Grazie dell'attenzione

Gabriele

Rispondi | Permalink

Chiarimento configurazione

Ciao Gabriele,

in effetti quella frase su v343.pre è fuorviante (ora la levo). Come sai in questi file ci sono i plugin aggiunti nella rispettiva versione. Io cito solo v310.pre perchè contiene spamcop, razor, pyzor, che menziono esplicitamente nella guida. Negli altri file ci sono plugin addizionali che ognuno può decidere o meno di mettere dentro. 

Rispondi | Permalink