Mail filteren: Spamassasin, ClamAV en Procmail
In dit hoofdstuk breiden we de mail uit met spamfilteren, viruscontrole en procmail. Procmail stelt je in staat zelf uitgebreid te filteren en te forwarden volgens je eigen regels.SpamAssassin installeren
We beginnen met de installatie van Spamassassin:
apt-get install spamassassin
Vervolgens maken we voor Spamassassin en eigen groep, gebruiker en map aan:
groupadd -g 5001 spamd useradd -u 5001 -g spamd -s /usr/sbin/nologin -d /var/lib/spamassassin spamd mkdir /var/lib/spamassassin chown spamd:spamd /var/lib/spamassassin
Vervolgens gaan we de configuratie van Spamassassin aanpassen:
cp /etc/default/spamassassin /etc/default/spamassassin.backup1 nano /etc/default/spamassassin
Zoek in de configuratie de volgende twee regels op en pas die aan:
ENABLED=1 CRON=1
De volgende regels moeten aan de configuratie toegevoegd worden:
SAHOME="/var/lib/spamassassin/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SAHOME} -s /var/log/spamd.log" PIDFILE="${SAHOME}spamd.pid"
Nu moeten we /etc/spamassassin/local.cf bewerken
cp /etc/spamassassin/local.cf /etc/spamassassin/local.cf.backup1 nano /etc/spamassassin/local.cf
Pas de volgende regels aan of voeg ze toe indien nodig:
rewrite_header Subject ---SPAM--- report_safe 1 use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1
Door bovenstaande veranderingen wordt het onderwerp van de e-mail aangepast en wordt e-mail met spam als tekst-attachment toegevoegd.
SpamAssassin whitelist
Spamassassin kan werken met een whitelist en blacklist. Ik vind het handiger om deze niet in local.cf te zetten maar een include te gebruiken. Bewerk local.cf:
cp /etc/spamassassin/local.cf /etc/spamassassin/local.cf.backup2 nano /etc/spamassassin/local.cf
Voeg de volgende twee regels aan het eind toe:
include white.list include black.list
Vervolgens bewerk je while.list:
nano /etc/spamassassin/white.list
En voeg daar op de volgende manier adressen toe:
whitelist_from pietje@gmail.com
Zet ieder adres op een aparte regel en begin iedere regel met whitelist_from
. Zie deze link voor meer opties voor je whitelist.
Je kunt op dezelfde manier ook een blacklist maken maar waarom zou je? Als je spam ontvangt waarvan je de afzenders kent kun je die beter via procmail gelijk weggooien.
ClamAV installeren
Om te beginnen installeren we de tools die clamav nodig heeft om met postfix te kunnen praten:
apt-get install clamsmtp clamav-freshclam
Vervolgens gaan we de configuratie aanpassen:
cp /etc/clamsmtpd.conf /etc/clamsmtpd.conf.backup1 nano /etc/clamsmtpd.conf
Pas de volgende twee regels aan:
OutAddress: 10026 Listen: 127.0.0.1:10025
Procmail installeren
Procmail is een tool waarmee je zelf regels kunt maken om mail door te sturen, te filteren en zelfs aan te passen. Installatie:
apt-get install procmail
We moeten een configuratiebestand voor procmail maken:
nano /etc/procmailrc
Plaats in dat bestand de volgende regels:
DROPPRIVS=YES ORGMAIL=$HOME/Maildir MAILDIR=$ORGMAIL DEFAULT=${HOME}/Maildir/new LOGFILE=${HOME}/logs/procmail.log
Elke gebruiker kan straks een eigen .procmailrc bestand aanmaken. Met procmail zijn er oneindig veel meer mogelijkheden maar deze minimale procmailrc zorgt er voor dat de mail afgeleverd wordt in de Maildir van de gebruiker en er een logbestand gemaakt wordt in /home/gebruiker/logs.
Postfix configuratie aanpassen
Tenslotte moeten we er voor zorgen dat postfix goed samenwerkt met spamassassin, clamav en procmail. Bewerk /etc/postfix/main.cf
cp /etc/postfix/main.cf /etc/postfix/main.cf.backup2 nano /etc/postfix/main.cf
Voeg de volgende twee regels toe aan het eind:
content_filter = scan:127.0.0.1:10025 receive_override_options = no_address_mappings
Eerder hebben we clamav geconfigureerd om te luisteren op poort 10025. voeg nu de volgende regel toe om postfix te verplichten de mail via procmail te bezorgen:
mailbox_command = procmail -a "$EXTENSION"
Sla main.cf op met control+o en sluit nano af met control+x. Nu gaan we /etc/postfix/master.cf bewerken:
cp /etc/postfix/master.cf /etc/postfix/master.cf.backup2 nano /etc/postfix/master.cf
Verander de regel "smpt inet" in:
smtp inet n - - - - smtpd -o content_filter=spamassassin
Let op, en dit is belangrijk, voor de -o moet witruimte staan, dus tenminste één spatie of een tab. Anders werkt het niet. Ga naar het einde van master.cf en voeg de volgende regels toe:
scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes 127.0.0.1:10026 inet n - n - 16 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o smtpd_authorized_xforward_hosts=127.0.0.0/8 spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Herstarten
Nu gaan we alles herstarten:
/etc/init.d/clamav-daemon start /etc/init.d/spamassassin restart /etc/init.d/clamsmtp restart /etc/init.d/postfix restart
Spamfilter testen
Je kunt je spamassisin testen door jezelf een mail te sturen met daarin:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Als alles goed werkt krijg je een mail met daarin een mededeling "Spam detection software has identified this incoming email as possible spam" of iets van dien aard. In /var/log/spamd.log zie je dit staan:
Sun Jun 16 08:44:13 2013 [16448] info: spamd: connection from localhost [127.0.0.1] at port 50522 Sun Jun 16 08:44:13 2013 [16448] info: spamd: processing message <8EF63102-BAF4-4681-88AB-2F43AF4E6FBF@domein.nl> for spamd:5001 Sun Jun 16 08:44:13 2013 [16448] info: spamd: identified spam (1001.3/5.0) for spamd:5001 in 0.2 seconds, 1056 bytes. Sun Jun 16 08:44:13 2013 [16448] info: spamd: result: Y 1001 - GTUBE,RDNS_NONE scantime=0.2,size=1056,user=spamd,uid=5001,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=50522,mid=<8EF63102-BAF4-4681-88AB-2F43AF4E6FBF@3514.nl>,autolearn=no Sun Jun 16 08:44:13 2013 [16447] info: prefork: child states: II
Virusfilter testen
Als je anti-virussoftware hebt op de computer waarop je deze test gaat doen zullen de viruswaarschuwingen je om de oren vliegen zodra je het genoemde bestand binnen haalt.
Download een bestand met een test-virus: http://eicar.org/download/eicar_com.zip. Mail dit bestand aan een adres op je server en bekijk in mail.log of het herkend wordt.
Als je de server ook gebruikt voor uitgaande mail kun je ook een mail versturen. ClamAV zou die ook moeten herkennen. In /var/log/mail.log moet je dan regels zoals deze zien:
Jun 16 09:01:21 server1 postfix/smtp[16830]: 5787D688372: to=
Spam in een spammailbox dumpen
In de meeste gevallen is het handig spam in een aparte mailbox te stoppen zodat het je inbox niet vervuild. Maak om te beginnen de map aan, bijvoorbeeld met de naam .spam:
mkdir /home/[gebruiker]/Maildir/.spam chown [gebruiker]:[gebruiker] /home/[gebruiker]/Maildir/.spam
Vervolgens maak je voor deze gebruiker een .procmailrc bestand aan (of bewerk het als het al bestaat):
nano /home/[gebruiker]/.procmailrc
Voeg bovenaan het bestand de volgende regels toe:
:0 * ^Subject.*(---SPAM---) /home/jan/Maildir/.spam/new
Sla .procmailrc op. Nu wordt alle mail met ---SPAM--- in het onderwerp geplaatst in de /.spam map.
Spam automatisch opruimen
Ik laat dus al mijn spam in een aparte mailbox binnen komen. Op die manier kan ik terug zoeken als ik zo'n telefoontje krijg 'heb je mijn mail niet gezien'. Omdat die spambox ook heel snel heel vol wordt gebruik ik Dovecot en CRON om iedere nacht die mailbox op te schonen:
doveadm expunge -u spambox mailbox INBOX sentbefore 4w
Bovenstaande opdracht gooit alle mail die langer dan 4 weken geleden verzonden is weg. "-u spambox' betekent dat de mailbox van de gebruiker spambox opgeschoond wordt