Login
Newsletter
Werbung

So, 24. Mai 2009, 00:00

Mailserver auf Debian mit IMAP, Smarthost und Filter

Spam tilgen mit Spamassassin

Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich als Filter das Programm Spamassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht, und sollte er der Meinung sein, dass es sich um Spam handelt, die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der Benutzer hat dann die Möglichkeit, den Ordner weiterhin auf »Falsche Treffer« zu untersuchen, und löscht einfach den Rest heraus. Hier sind zumindest die Mails vorsortiert, und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einem generellen Löschvorgang zum Opfer fallen.

Zuerst installieren wir Spamassassin:

apt-get install spamassassin

Dies liefert uns noch weitere zahlreiche Pakete hauptsächlich aus dem Bereich Perl. Wenn die Pakete installiert sind, dann bauen wir erst einmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden kann. Wir editieren zuerst die Datei /etc/spamassassin/local.cf. Bei folgenden Zeilen entfernen wir das #, um sie zu aktivieren:

rewrite_header Subject *****SPAM*****
required_score 5.0
use_bayes 1
bayes_auto_learn 1
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status

Unter die drei bayes_ignore-Zeilen schreiben wir noch folgende Zeile:

bayes_ignore_header X-getmail-filter-classifier

Das verhindert, dass Header-Erweiterungen von Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.

Jetzt editieren wir die Datei /etc/deafault/spamassassin. Dort ist der Eintrag ENABLED=0 auf ENABLED=1 zu ändern. Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser nach der Installation nicht angefahren wird, können wir den Spamfilter auch manuell scharf machen, ohne erst dafür unseren Server neu zu starten:

/etc/init.d/spamassassin start

Damit das alles über Getmail läuft, fügen wir der Getmail-Konfiguration unter .getmail folgende Filterregel hinzu:

[filter]
type = Filter_external
path = /usr/bin/spamc

Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der Datei ~/.procmailrc ein:

:0
* ^Subject:.******SPAM*****
.Junk/

Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk-Ordner schieben.

Hinweis: Da Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject-Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Man ändert dies in der Datei /etc/spamassassin/local.cf und in .procmailrc. Danach natürlich den Spamassassin neu starten:

/etc/init.d/spamassassin restart

Woran sieht man nun, ob der Spamfilter läuft? Hierzu schickt man sich einfach eine Testmail. Als Betreff nimmt man die entsprechende Änderung, die Spamassassin einfügen würde, wenn Spam erkannt würde (also beispielsweise +++++SPAM+++++). Das zeigt uns, ob Procmail wie gewünscht filtert und die Mail in den Junk-Ordner verschiebt. Wenn die Mail dann im Junk-Ordner liegt, sehen Sie sich den Quelltext an. Im Header der Mail sollte etwa Folgendes stehen:

X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver
X-Spam-Level: *
X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no
 version=3.2.5

Hier sieht man, dass Spamassassin aktiv war und seinen Score (1.5) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Man kann jetzt abwarten, ob diese Konfiguration auf Dauer genügt, oder ob man noch ein paar Goodies einbauen will.

Skript-Erweiterungen

An dieser Stelle will ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.

Openprotects Spamassassin Updates einbauen

Um immer auf dem Laufenden zu bleiben, empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen. Stellen Sie zunächst sicher, dass die TCP-Ports 8090 und 11371 für ausgehende Pakete offen sind. Dann folgende Befehle ausführen (bitte vorher hier prüfen, ob die öffentlichen Schlüssel noch aktuell sind):

gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10
gpg --armor -o pub.gpg --export BDE9DC10
sa-update --import pub.gpg

Um nun regelmäßig das Update durchzuführen, kann man ein Skript anlegen. Dieses schickt dann auch jeweils eine E-Mail, wenn alles geklappt hat.

Einfach unter /usr/local/bin das Skript spamupdater mit folgendem Inhalt anlegen:

#!/bin/sh
# alte Logdatei loeschen
rm /var/log/spamupdate.log
# Updates herunterladen.
sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 \
--channel saupdates.openprotect.com --channel updates.spamassassin.org
# Spamassasin-Dienst neu starten
/etc/init.d/spamassassin restart >> /var/log/spamupdate.log
# Uhrzeit eintragen
echo "" >> /var/log/spamupdate.log
date >> /var/log/spamupdate.log
# Statusmail versenden
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] \
Spamupdate" name@adresse < /var/log/spamupdate.log

Das Skript muss ausführbar gemacht werden:

chmod +x /usr/local/bin/spamupdater

Das Skript soll von Cron aufgerufen werden, dazu ändern wir die Crontab von root:

crontab -e

Wir fügen folgende Zeile hinzu:

1 5 * * * /usr/local/bin/spamupdater > /dev/null

Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt. Wer nur im Fehlerfall eine Mail erhalten will, lässt den Aufruf von mail in der letzten Zeile des Skripts weg.

Mails mit speziellen Anhängen filtern

Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man, um die Aufmerksamkeit ein wenig zu heben, solche Mails gleich von Haus aus in einen speziellen Ordner (z.B. dangerous) verschieben. Der Benutzer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für .procmailrc würde so aussehen:

:0 B:
*
name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*)
.dangerous/

Dies lässt sich natürlich noch erweitern. Die Regel sollte recht weit nach oben unter der Spamregel stehen.

Gargis Schlusswort

Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann, ist klar. Aber ein Gerüst für einen funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen, wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne vollständigen Domänen-Namen im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen, als Sie Spam aussprechen können. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!

Referenzen

Dieses Tutorial ist auf Gargi.org erschienen. Aktualisierungen erscheinen zuerst dort. Veröffentlichung mit freundlicher Genehmigung des Autors.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung