Installazione e configurazione di Spamassassin

15 luglio 2020 Roberto Puzzanghera0 commenti

AGGIORNAMENTO del 15 luglio: aggiunte le note di installazione di Razor2, Pyzor e Spamcop (grazie e Gabriel Torres per il prezioso contributo).


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.

Aggiornamento di spamassassin alla versione 3.4.3 e 3.4.4

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

Abilitare tutti i nuovi plugin dal file /etc/mail/spamassassin/v343.pre.

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

Razor2

Razor di Vipul è una rete distribuita, collaborativa, di rilevamento e filtraggio dello spam. Attraverso il contributo degli utenti, Razor crea un catalogo in costante aggiornamento di spam che viene consultato dai filtri antispam dei client di posta elettronica. Il rilevamento viene effettuato con firme statistiche e randomizzate che individuano in modo efficiente il contenuto di spam mutante. L'input dell'utente viene convalidato attraverso una valutazione della reputazione basata sul consenso sul report e la revoca delle asserzioni che a loro volta vengono utilizzate per calcolare i valori di fiducia associati alle singole firme.

Scaricare e installare razor-agent-sdk e razor-agent:

cd /usr/local/src
wget https://downloads.sourceforge.net/project/razor/razor-agents-sdk/2.07/razor-agents-sdk-2.07.tar.bz2 
wget https://downloads.sourceforge.net/project/razor/razor-agents/2.85/razor-agents-2.85.tar.bz2

tar xjf razor-agents-sdk-2.07.tar.bz2
cd razor-agents-sdk-2.07
chown -R root:root .
perl Makefile.PL
make
make install

cd ..
tar xjf razor-agents-2.85.tar.bz2
cd razor-agents-2.85
chown -R root:root .
perl Makefile.PL
make
make install

Razor2 richiede che gli utenti che inviano i report siano registrati. Questo, come detto sopra, consente di assegnare attraverso il tempo una reputazione ai reporters, di modo che i loro report e le loro revoche abbiano un certo peso in accordo con il valore della loro reputazione.

Registrarsi e creare la cartella di configurazione:

mkdir -p /etc/mail/spamassassin/.razor
razor-admin -home=/etc/mail/spamassassin/.razor -register
razor-admin -home=/etc/mail/spamassassin/.razor -create
razor-admin -home=/etc/mail/spamassassin/.razor -discover

Settare i permessi

chmod 640 /etc/mail/spamassassin/.razor/identity-*
chmod 644 /etc/mail/spamassassin/.razor/razor-agent.log

Dire a Razor2 dove esso è installato aggiungendo la linea seguente al file /etc/mail/spamassassin/.razor/razor-agent.conf

razorhome = /etc/mail/spamassassin/.razor/

Abiliteremo Razor2 non appena spamassassin sarà installato.

Pyzor

Pyzor è una rete collaborativa per il rilevamento e il blocco spam attraverso il digent (riassunti) dei messaggi. Usando un client Pyzor, viene generato un breve riassunto del messaggio, che si presume identifichi in modo univo il messaggio stesso.

E' possibile installare Pyzor via pip o pip3

pip3 install pyzor

oppure, in alternativa, si possono scaricare e installare i sorgenti al solito modo

cd /usr/local/src
wget https://files.pythonhosted.org/packages/75/9d/e38a18d8c932f397537cda0d03a606314611fe1ebd8b24ed8fdd4df23191/pyzor-1.0.0.tar.gz
tar xzf pyzor-1.0.0.tar.gz
cd pyzor-1.0.0
chown -R root:root .
python setup.py build 
python setup.py install

Creare la cartella pyzor:

mkdir -p /etc/mail/spamassassin/.pyzor
chown spamd:spamd /etc/mail/spamassassin/.pyzor

Abiliteremo pyzor tra poco.

Spamcop

Spamcop è una nota blocking list che funziona anche come un sistema di segnalazione inviando informazioni di allerta ai provider internet responsabili di ospitare i servizi utilizzati dallo spammer (siti web e siti che possono inviare messaggi di posta). SpamCop utilizza le segnalazioni anche per generare la blocking list, che è libera..

Registrare un account qui. Nota: il filtro captcha non funziona sul mio browser chromium; tuttavia sono riuscito sono riuscito a vedere il filtro utilizzando firefox. Alla fine della procedura di registrazione si otterrà un indirizzo e-mail unico (del tipo submit.xxxxxxxxxxxxxxxxxxx@spam.spamcop.net) ch si dovrà passare a spamassassin affinchè il programma invii le segnalazioni a spamcop. Vedremo come fare la configurazione tra poco.

Spamassassin

Infine 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.

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

v310.pre

Abilitare Razor2, Pyzor e Spamcop

# Pyzor - perform Pyzor message checks. 
# 
loadplugin Mail::SpamAssassin::Plugin::Pyzor 

# Razor2 - perform Razor2 message checks. 
# 
loadplugin Mail::SpamAssassin::Plugin::Razor2 

# SpamCop - perform SpamCop message reporting 
# 
loadplugin Mail::SpamAssassin::Plugin::SpamCop

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

Per testare il funzionamento del sistema di "addestramento" (learning) salvare un messaggio spam in formato non elaborato (raw per intenderci) nel file spam.txt e lanciare sa-learn in questo modo (supponendo che postmaster@yourdomain.tld sia l'indirizzo email del destinatario)

sa-learn --debug --spam --username=postmaster@yourdomain.tld spam.txt

Per testare che le segnalazioni ai vari Razor, Pyzor e Spamcop funzionino invece utilizzare spamassassin con l'opzione --report in questo modo:

spamassassin --debug --nocreate-prefs --report < spam.txt

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. E' necessario sostituire l'IP del tuo firewall e metterlo in /usr/local/bin/spamdctl o /etc/rc.d/rc.spamd e renderlo eseguibile. Controllare che il path dove è stato installato spamd coincida con quello indicato nello script seguente.

#!/bin/sh

# 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

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,[firewall-IP] -s /var/log/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:

/var/log/spamd.log {
rotate 5
daily
missingok
notifempty
delaycompress
postrotate
   /usr/local/bin/spamdctl restart
endscript
}

Aggiungi un commento