- Info: http://spamassassin.apache.org/
- Documentazione: http://spamassassin.apache.org/full/4.0.x/doc/
- Versione usata: 4.0.1
- Scarica: http://spamassassin.apache.org/downloads.cgi
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
- May 26, 2024
- SA upgraded to v. 4.0.1 - Jun 25, 2023
- TheExtractText
notes have been revised and corrected by Gabriel Torres - Dec 27, 2022
- SA upgraded to v. 4.0.0 - 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 4.0.x
Ho scritto come aggiornare alla version 4.0 in una pagina separata qui.
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 force notest install Mail::DMARC::PurePerl DBD::SQLite
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 v341.pre v342.pre v343.pre v400.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
ExtractText
- Grazie a Gabriel Torres per le correzioni a questa sezione
Il compito del plugin ExtractText
, quando abilitato, è di convertire gli allegati (incluse le immagini, per mezzo di un programma esterno OCR)
in testo semplice al fine di consentire a SpamAssassin
di applicare le sue regole al testo. Pertanto se viene ricevuto un file di tipo doc/pdf/images con testo contenente spam all'interno, SpamAssassin
sarà in grado di marcare l'email come spam in modo sicuro.
A tal fine è prima necessario installare alcuni programmi esterni nel nostro server. La configurazione da aggiungere a local.cf caricherà questi programmi per fare la scansione di ogni allegato ai messaggi ricevuti.
Installare i programmi esterni richiesti. Gli utenti Debian
faranno in questo modo;
apt-get install antiword apt-get install docx2txt apt-get install unrtf apt-get install odt2txt apt-get install tesseract-ocr apt-get install poppler-utils
Gli utenti Slackware
troveranno questi programmi su SlackBuild,
mentre poppler
è già disponibile nella distribuzione.
Aggiungere le seguenti righe al file local.cf:
ifplugin Mail::SpamAssassin::Plugin::ExtractText extracttext_external pdftotext /usr/bin/pdftotext -nopgbrk -layout -enc UTF-8 {} - extracttext_use pdftotext .pdf application/pdf # http://docx2txt.sourceforge.net extracttext_external docx2txt /usr/bin/docx2txt {} - extracttext_use docx2txt .docx application/docx extracttext_external antiword /usr/bin/antiword -t -w 0 -m UTF-8.txt {} extracttext_use antiword .doc application/(?:vnd\.?)?ms-?word.* extracttext_external unrtf /usr/bin/unrtf --nopict {} extracttext_use unrtf .doc .rtf application/rtf text/rtf extracttext_external odt2txt /usr/bin/odt2txt --encoding=UTF-8 {} extracttext_use odt2txt .odt .ott application/.*?opendocument.*text extracttext_use odt2txt .sdw .stw application/(?:x-)?soffice application/(?:x-)?starwriter extracttext_external tesseract {OMP_THREAD_LIMIT=1} /usr/bin/tesseract -c page_separator= {} - extracttext_use tesseract .jpg .png .bmp .tif .tiff image/(?:jpeg|png|x-ms-bmp|tiff) add_header all ExtractText-Flags _EXTRACTTEXTFLAGS_ #header PDF_NO_TEXT X-ExtractText-Flags =~ /\bNoText\b/ #describe PDF_NO_TEXT PDF without text #score PDF_NO_TEXT 0.2 #header DOC_NO_TEXT X-ExtractText-Flags =~ /\bNoText\b/ #describe DOC_NO_TEXT Document without text #score DOC_NO_TEXT 0.2 #header EXTRACTTEXT exists:X-ExtractText-Flags #describe EXTRACTTEXT Email processed by extracttext plugin #score EXTRACTTEXT 0.001 endif
Si possono notare alcune righe commentate, che si possono lasciare così oppure abilitare per fare test. La regola EXTRACTTEXT
serve solo per testare che il plugini sia effettivamente attivo. PDF_NO_TEXT
e DOC_NO_TEXT
saranno azionate nel caso di documenti vuoti in allegato. In tal caso si avrà un header come il seguente:
X-Spam-ExtractText-Flags: NoText
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 # SPF - perform SPF verification. # loadplugin Mail::SpamAssassin::Plugin::SPF
v400.pre
Abilitare tutti i nuovi plugin disponibili con la versione 4 di SA
loadplugin Mail::SpamAssassin::Plugin::ExtractText loadplugin Mail::SpamAssassin::Plugin::DecodeShortURLs loadplugin Mail::SpamAssassin::Plugin::DMARC
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/loacl/bin/sa-update --nogpg -v &
L'ozione -v
produrrà un avviso email nella casella postmaster.
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
A questo punto non chiudere spamd
with ctrl+C
, perchè il prossimo test fatto con spamc
avrà bisogno di connettersi a questo servizio.
Da un altro terminale, 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
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
Webmaster 19 marzo 2021 07:54 CET
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
Roberto Puzzanghera Webmaster 19 marzo 2021 08:47 CET
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