- 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 - 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. Questa è l'installazione base, che però non si porta dietro tutti i moduli che poi ci potranno servire:
perl -MCPAN -e shell o conf prerequisites_policy ask install Mail::SpamAssassin quit
Questa è l'installazione che faccio di solito, comprensiva di tutti i moduli aggiuntivi necessari (l'ordine è importante):
perl -MCPAN -e shell o conf prerequisites_policy ask notest install Socket6 IO::Socket IO::Socket::INET6 LWP install MD5 CPAN::DistnameInfo Mail::DKIM notest install Test::More MIME::Base64 Digest::MD5 Digest::HMAC_MD5 Net::IP 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 notest install Mail::SPF::Query Net::Ident IO::Socket::SSL Mail::DomainKeys Mail::DKIM LWP::UserAgent HTTP::Date Encode::Detect BSD::Resource notest install Storable DB_File Net::SMTP IP::Country::Fast BerkeleyDB Class::Method::Modifiers notest install Geo::IP IO::Socket::IP Net::Patricia notest install Mail::DMARC::PurePerl MIME::QuotedPrint Compress::Raw::Zlib DBD::SQLite notest install DVEEDEN/DBD-mysql-4.052.tar.gz DBI
Abbiamo installato la versione 4.052 del modulo DBD::mysql
perchè il supporto per MariaDB
e per MySQL
> 8 è cessato. Il modulo DBD::MariaDB
non è ancora compatibile cone le applicazione idi spamassassin, ma speriamo che lo diventi in un prossimo futuro.
Installare spamassassin
:
notest install Mail::SpamAssassin Mail::SpamAssassin::Plugin::Razor2 Mail::SpamAssassin::BayesStore::MySQL
Ho dovuto dare un "notest" all'installzione per via di alcuni errori.
Abbiamo installato in anticipo anche i plugin Razor2
e quelli relativi a MySQL
che ci serviranno dopo.
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
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:
cat > /etc/mail/spamassassin/70-extracttext.cf << EOF # extracttext 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 EOF
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
cat >> /etc/cron.d/qmail << EOF # spamassassin update 30 3 * * * /usr/local/bin/sa-update --nogpg -v & EOF
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
Nello script scaricato è necessario inserire nella variabile IP gli indirizzi a cui è concesso inviare richieste al server e controllare il path di spamd
.
#!/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 # Comma separated values of the IPs that are allowed to query spamd IP=127.0.0.1,::1,1.2.3.4,10.0.0.0/24 DAEMON=/usr/local/bin/spamd NAME=spamd SNAME=spamdctl DESC="SpamAssassin Mail Filter Daemon" PIDFILE="/var/run/$NAME.pid" PNAME="spamd" LISTEN_IP=0.0.0.0 # comment out to disable debug DEBUG="-D" # comment out to disable sql user prefs. User with -x # USER_PREFS="-q" DOPTIONS="${DEBUG} ${USER_PREFS} -x -u spamd -A ${IP} -i ${LISTEN_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