Debian server beheer

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=, relay=127.0.0.1[127.0.0.1]:10025, delay=0.14, delays=0.09/0/0$ Jun 16 09:01:21 server1 postfix/qmgr[14460]: 5787D688372: removed Jun 16 09:01:21 server1 clamsmtpd: 10001D: from=jan@test.com, to=piet@domein.nl, status=VIRUS:Eicar-Test-Signature

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