Wenn man schon längere Zeit einen eigenen Mailserver betreibt und schon die ein oder andere Spam-Mail eingetroffen ist, kommt schnell der Wunsch auf, Spam E-Mails zu erkennen und zu löschen oder in Quarantäne zu verschieben. Was die großen E-Mail Hoster können, kann auch im kleinen gemacht werden. Die Technik ist dieselbe.
Benötigt werden dazu folgende Komponenten: Ein Filtersystem, durch das die E-Mails „geschleift“ werden (Amavis), eine Spamerkennung (Spamassassin) und ggf. ein Filtersystem, das die als Spam erkannten E-Mails in einen anderen IMAP Ordner verschiebt (Sieve).
Spamassassin installieren:
Zuerst wird die Spamerkennung an sich – Spamassassin – installiert. Dazu kommen noch zwei andere Pakete, die die Erkennung verbessern.
sudo -s apt-get install spamassassin razor pyzor
Spamassassin muss noch aktiviert werden. Das geschieht, indem die Datei /etc/default/spamassassin
ENABLED=1
gesetzt wird. Außerdem sollen die automatischen Spamassassin Updates aktiviert werden, sodass die Spamerkennung immer auf dem aktuellen Stand ist: (am Ende der Datei:)
CRON=1
Nach diesen Änderungen muss spamassassin neu gestartet werden:
service spamassassin restart
Amavis installieren
Amavis ist die eigentliche Filterkomponente. Sie nimmt sich Spamassassin zu Hilfe und markiert Spam E-Mails auf Wunsch oder löscht sie direkt. Postfix wird die eintreffenden Mails später durch Amavis schleifen.
Auch Amavis muss zunächst installiert werden:
apt-get install amavisd-new
Amavis Spamverhalten einstellen
Damit Amavis Spammails behandelt, müssen die Spam Checks aktiviert werden. Bearbeitet die Datei /etc/amavis/conf.d/15-content_filter_mode und entfernt die Kommentarzeichen vor folgenden Zeilen sodass dort steht:
@bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Amavis soll Spam E-Mails mit „***SPAM***“ im Betreff Kennzeichnen und zusätzlich einen „X-Spam-Flag“ Header in den E-Mail Queltext schreiben, sodass Mailclients (oder später der Sieve Filter) erkennen können, dass es sich um eine als Spam klassifizierte E-Mail handelt. E-Mails, die ein Spamlevel > 20 erreichen, werden sofort gelöscht.
Dazu wird die Datei /etc/amavis/conf.d/20-debian_defaults wie folgt geändert:
$sa_spam_subject_tag = '***SPAM*** '; $sa_tag_level_deflt = undef; $sa_tag2_level_deflt = 5; $sa_kill_level_deflt = 20; $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
Nach den beiden Konfigurationsänderungen wird Amavis neu gestartet:
service amavis restart
Amavis in Postfix integrieren
Postfix muss nun so eingestellt werden, dass eintreffende E-Mails durch den Amavis Filter geschickt werden, sodass sie von Spamassassin kontrolliert werden können.
In die Datei /etc/postfix/main.cf wird folgende Zeile eingefügt:
content_filter=smtp-amavis:[127.0.0.1]:10024
Die Service Konfigurationsdatei /etc/postfix/master.cf wird unten um folgende Zeilen erweitert:
smtp-amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Außerdem werden direkt unter der Zeile für den Dienst „pickup“ (weiter oben) diese beiden Zeilen eingefügt:
-o content_filter= -o receive_override_options=no_header_body_checks
Wer in seiner Postfix Konfiguration main.cf die TLS Security Levels für smtp und smtpd auf eine andere Einstellung als „none“ gestellt hat (Siehe auch: E-Mail Transport verschlüsseln), muss jeweils noch eine Zeile zu jedem neuen Dienst anfügen:
smtp-amavis unix - - - - 2 smtp [...] -o smtp_tls_security_level=none
und
127.0.0.1:10025 inet n - - - - smtpd [...] -o smtpd_tls_security_level=none
Postfix wird neu gestartet, um die Änderungen zu übernehmen:
service postfix restart
Amavis auf Erreichbarkeit überprüfen
Nun kann kurz getestet werden, ob Amavis erreichbar ist. Außerdem ist es sinnvoll, an dieser Stelle die E-Mail Logdateien nach Fehlern und Warnungen abzusuchen.
telnet localhost 10024
Wenn die Ausgabe
220 [127.0.0.1] ESMTP amavisd-new service ready
lautet, ist alles okay. Der Telnet Client kann über die Eingabe von
"quit"
wieder beendet werden.
Spamerkennung testen
Nun soll die Spamerkennung als ganzes getestet werden. Dazu wird eine E-Mail mit einem beliebigen Betreff an ein E-Mail Konto auf dem Server geschickt. Wichtig ist nur, dass der Nachrichtentest die folgende Zeile enthält:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Wenn diese Mail nicht im Posteingang des Zielkontos erscheint, funktioniert der Spamfilter korrekt. Bei dem Code handelt es sich um eine Zeichenkette, die zum Testen von Spamassassin geeignet ist. Wenn eine E-Mail diesen Code enthält, wird sie sofort als Spam klassifiziert und sofort gelöscht. Sie wird gelöscht, weil sie grundsätzlich das höchste Spam-Level erreicht (also zu 100% Spam ist). Mails, die Spamlevel 20 nicht erreichen, werden nur mit „***SPAM***“ markiert, gelangen aber trotzdem in die Inbox. (siehe dazu Einstellungen zum Avamis Spamverhalten).
Spam E-Mails mit Sieve in Spam Ordner verschieben
Es ist zwar gut, dass Spammails jetzt direkt gelöscht oder im Zweifel mit „***SPAM***“ markiert werden, besser wäre es aber, wenn sie in einen speziellen Spam IMAP Ordner verschoben würden. Der Filter soll E-Mails, die zwischen den Spam-Levels 5 und 20 liegen, in einem speziellen Spam-Ordner ablegen. E-Mails, die ziemlich sicher Spam sind (über Level 20) werden weiterhin direkt gelöscht.
Wie ich in einem anderen Beitrag zu Sieve schon gezeigt habe, können E-Mails nach verschiedenen Kriterien in spezielle Ordner einsortiert werden. Das machen wir uns hier zunutze: Spammails werden von Amavis ja mit „***SPAM***“ im Betreff gekennzeichnet und erhalten zusätzlich noch einen „X-Spam-Flag“ Eintrag im E-Mail Header. Sieve muss nun überprüfen, ob eine Spam Flag in einer E-Mail existiert. Wenn das der Fall ist, wird die E-Mail in den Spam-Ordner verschoben.
Folgendes wird hier vorausgesetzt:
- Es gibt bereits „Spam“ Ordner für alle IMAP-Konten (=> Beitrag: Default Ordner für E-Mail Postfächer automatisch anlegen)
- Sieve wurde installiert (=> Beitrag: Sieve Mailfilter installieren)
In der Datei /etc/dovecot/dovecot.conf wird ein Sieve „before“ Filter eingerichtet, der immer vor allen anderen Filtern ausgeführt wird. Er soll Spammails erkennen:
sieve_before = /var/vmail/sieve/spam-global.sieve
Die „spam-global.sieve“ Filterdatei wird nun erstellt und mit folgendem Inhalt gefüllt:
require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "Spam"; }
Abspeichern, das war’s auch schon. :)
Jetzt noch Dovecot neu starten:
service dovecot restart
… und Spammails sollten nun in den Spam-Ordner verschoben werden. Um das zu testen, kann man ja eine bereits erhaltene Spammail an sich selbst schicken. Wenn nichts ankommt, wurde die Mail vermutlich „sicher“ als Spam erkennt (Über Level 20) und direkt gelöscht. Sucht euch also keine zu harten Kaliber aus ;)
Weiterführende Beiträge:
- Mailserver Virenschutz mit ClamAV und Amavis einrichten
- Spamassassin Erkennungsrate verbessern
Quellen: https://help.ubuntu.com/community/PostfixAmavisNew
Hallo Thomas,
danke für Deine super Anleitungen!
Hier ein kleiner Fehler: „Dazu wird die Datei /etc/amavis/conf.d/20-debian-defaults wie folgt geändert:“
Ist zwar nur eine Lappalie aber dennoch gehört da ein Unterstrich hin. —–^
(20-debian_defaults)
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Stimmt, danke für dein Hinweis! :)
LG Thomas
Hallo Thomas,
vielen Dank für deine Anleitungen! Echt spitze, einfach verständlich, präzise, alles erklärt und zuverlässig!
Habe schon ein paar Mailsysteme in den letzten Jahren unter Linux aufgesetzt – das ging aber noch nie so schnell wie mit deinen Anleitungen. Spitze :)
Eine Kleinigkeit hat bei mir nicht funktioniert; nach der Integration von Spamassassin in Amavis wie oben beschrieben hat Spamassassin keinerlei Mails markiert (weder Subject noch X-Spam Headers), obwohl laut mail.log bestimmte Mails mit Hits > sa_tag2_level_deflt dabei waren.
Schlussendlich musste ich unten in /etc/amavis/conf.d/20-debian_defaults noch diese Zeile anfügen und amavis neu starten, jetzt funktionierts
@local_domains_acl = (‚.‘);
Viele Grüsse
Michael
Erstmal danke an Thomas für die Anleitung.
Ich hatte das selbe Problem und die Lösung hat funktioniert. Auch danke dafür.
VG
http://www.robidu.de/
Hallo!
Diese Anleitung ist schon mal nicht schlecht (habe soeben Spamassassin in Postfix eingeklinkt), allerdings treibt mich eine Sache noch um: Aus irgendeinem Grund weigert sich Spamassassin standhaft, die Mail mit dem Teststring (siehe „Spamerkennung testen“) ins Nirwana zu schicken, und stattdessen läuft sie bei mir im Posteingang auf.
Irgendeine Idee, was hier schiefläuft? Ich habe /etc/amavisd.conf an die unter „Amavis Spamverhalten einstellen“ genannten Werte angepaßt, doch es passiert nichts in dieser Hinsicht (die von Spamassassin einzufügenden Header werden anstandslos eingefügt). Was mich u. a. verwundert hat ist die Tatsache, daß die einzelnen Schwellwerte mit einer Nachkommastelle angegeben waren ($sa_tag_level_deflt = 2.0; $sa_tag2_level_deflt = 6.2; $sa_kill_level_deflt = 6.9; waren die Standardvorgaben) anstatt als Ganzzahlen…
Hallo,
mit:
„Wer in seiner Postfix Konfiguration main.cf die TLS Security Levels für smtp und smtpd auf eine andere Einstellung als „none” gestellt hat (Siehe auch: E-Mail Transport verschlüsseln), muss jeweils noch eine Zeile zu jedem neuen Dienst anfügen:“ ,
meinst du die Installation nach dieser Anleitung?:
https://legacy.thomas-leister.de/internet/erweiterte-postfix-ssltls-konfiguration-verschluesselte-server-server-verbindungen/
Oder ist da noch etwas anderes gemeint?
Danke und viele Grüße
Frank
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Ja, damit ist die verlinkte Anleitung gemeint.
LG Thomas
Ok.. Danke
Hallo Thomas,
Spitzenanleitung, Danke!
Einen Spamfilter auf dem Server in weniger als 5 Minuten installiert, genial!
Hi Thomas,
super Anleitungen in Deinem Blog!
Ich habe postfix, dovecot, roundcube, spamassassin, amavis, … nach Deinen Anleitungen installiert.
Funktioniert alles, bis auf amavis/spamassassin.
Die Mails werden einfach nicht gescannt, weder in den Mail Headern noch in /var/log/mail.log findet sich irgend ein Hinweis, dass amavis etwas machen würde.
Ich habe inzwischen 10 mal gecheckt, dass alles korrekt konfiguriert ist und sehr viel im Internet gesucht und rumprobiert, ohne Erfolg.
Kann es sein, dass das daran liegt, dass ich „lokal“ teste?
Ich schicke die Mails mittels roundcube bzw. mailx, also ist alles „lokal“, es gibt keine remote connection zum smtp.
Nach meinem Verständnis sollte das keinen Unterschied machen, ist aber das einzige, was ich mir noch vorstellen kann.
Viele Grüße, Anton
Ok, ich habe das Problem gelöst!
War dann doch wie vermutet.
smtp ist beim lokalen Testen mit Roundcube niemals involviert.
Ich habe zum Testen nun folgendes gemacht in der master.cf geändert:
pickup unix n – – 60 1 pickup
-o content_filter=smtp-amavis:[127.0.0.1]:10024
-o receive_override_options=no_header_body_checks
Somit verwendet „pickup“ auch den amavis als content filter und schon sehe ich die Header in meiner Testmail:
X-Spam-Flag: NO
X-Spam-Score: -0.001
X-Spam-Level:
X-Spam-Status: No, score=-0.001 tagged_above=-9999 required=5
tests=[NO_RELAYS=-0.001] autolearn=ham autolearn_force=no
Ist es nicht eventuell sinnvoll, das generell unter „pickup“ einzutragen?
Ansonsten könntest Du das vielleicht in den Beitrag aufnehmen, damit auch andere User so „lokal“ testen können!?
Viele Grüße, Anton
http://tutorialfactory.org
Hallo Thomas,
wäre es eventuell noch möglich, dass du noch ein Tutorial dazu erstellst, wie man das ganze auch auf die ausgehenden Mails anwendet (Viruscheck und Spam), und die Operation abbricht, sodass die Mail garnicht erst versendet wird?
LG
Daniel
Hallo Thomas,
vielen Dank für das tolle Tutorial. Ich habe alle beschriebenen Schritte so durchgeführt. Leider erhalte ich beim Start des spamassassin folgende Warnung:
Restarting SpamAssassin Mail Filter Daemon: Mar 20 16:55:47.311 [13368] warn: logger: failed to add syslog method: logger: syslog initialization failed
spamd.
Was kann ich dagegen tun?
Viele Grüße,
Daniela.
http://misterunknown.de
Hallo Thomas,
wenn amavis den Betreff einer Mail ändern soll, wenn es sich um Spam handelt, muss noch folgende Option gesetzt werden. Bei Debian ist die per default aus (bzw. nicht vorhanden):
$sa_spam_modifies_subj = 1;
Cheers,
Marco
Hallo Thomas,
eine Super Anleitung bekpmme allerdings bei dem Restart von Spamassassin folgende Fehlermeldung:
Restarting SpamAssassin Mail Filter Daemon: No /usr/bin/perl found running; none killed.
server socket setup failed, retry 1: spamd: could not create IO::Socket::INET6 socket on [::1]:783: Cannot assign requested address
server socket setup failed, retry 2: spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
server socket setup failed, retry 3: spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
server socket setup failed, retry 4: spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
server socket setup failed, retry 5: spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
server socket setup failed, retry 6: spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
server socket setup failed, retry 7: spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
server socket setup failed, retry 8: spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
server socket setup failed, retry 9: spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
spamd: could not create IO::Socket::INET6 socket on [127.0.0.1]:783: Address already in use
Nachdem das mein erste Mailserver ist weis ich hier nicht mehr weiter.
Kanns Du mir hier weiterhelfen.
Gruß,
Rüdiger
Hi Thomas,
darf ich dich kurz etwas fragen zur Installation von Spamassassin gemäss deiner Anleitung auf https://legacy.thomas-leister.de/open-source/linux/ubuntu/postfix-amavis-spamfilter-spamassassin-sieve/
Du schreibst:
Außerdem werden direkt unter der Zeile für den Dienst „pickup“ (weiter oben) diese beiden Zeilen eingefügt:
-o content_filter=
-o receive_override_options=no_header_body_checks
In master.cf gibt es zwar “pickup”, aber direkt darunter erscheint mir diese Syntax zumindest “optisch” nicht richtig. Und … auch beim Restarten meldet der Dienst einen Fehler an der Stelle.
Hallo Thomas erstmal Super erklärt doch ich habe auch Probleme mit dem Eintrag unter Pickup.
Trage ich es so ein:
kommt eine Fehlermeldung in der Zeile 25
Deine Version:
-o content_filter=
-o receive_override_options=no_header_body_checks
Auch bei dieser Version kommt die Fehlermeldung ab Zeile 25:
#628 inet n – – – – qmqpd
pickup fifo n – – 60 1 pickup
-o content_filter=smtp-amavis:[127.0.0.1]:10024
-o receive_override_options=no_header_body_checks
Kannst du da Bitte helfen??
Danke auch vom Thomas
http://swpro.de
Hallo Thomas,
Vielen Dank für diese tolle Anleitung!
Bei mir gab es einen Fehler bei der Installation von amavisd-new. Dieser Fehler ist aber bekannt.
Die Lösung bei mir: Der Ordner /var/lib/amavis musste erstellt werden. Danach hat die Installation von amavisd-new geklappt.
Grüße
Kevin
Hallo,
erstmal danke für die Anleitung-.
nun hab ich die konfigurationen bis Spamerkennung Testen durchgefürt.
nun werden keine mails mehr weitergeleitet sondern bleiben in der Mail Queue liegen mit dem hinweis: „“ lost connection with 127.0.0.1[127.0.0.1] while receiving the initial server greeting “
versende ichmails bleiben diese auch dort in der Mail Queue liegen.
kann es sein das dort ein fehler sich eingeschlichen hat ? und wenn ja jemand eine idee welcher ?
schuld für das nicht empfangen und senden können ist dieser eintrag:
content_filter=smtp-amavis:[127.0.0.1]:10024
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Der Witz an der Sache ist, dass ohne den Eintrag auch keine E-Mails mehr an Amavis gehen und so am Spamfilter vorbeigeschleust werden ;) Vermutlich arbeitet dein Amavis nicht korrekt und nimmt keine E-Mails an, deshalb kommt es bei dir zu dem zuvor beschriebenen Fehler
LG Thomas
Ich habe allerdings genau das gleiche Problem. Der Test mit der email und em garantierten spam ist ja super, aber wenn man 10 Minuten später feststellt, dass gar keine email mehr ankommen… besser wäre in der Anleitung vorzuschlagen sowohl eine nicht als spam eingestufte mail als auch eine als spam eingestufte mail zu testen.
Mein amavis läuft telnet auf localhost 10024 geht:
http://ros-it.ch
Hallo Thomas!
Vielen Dank! Es ist immer wieder eine Freude bei dir zu lesen!
Funktioniert bei mir einwandfrei.
Lg Manu
Hallo,
ich konnte das bereits erfolgreich bei mir integrieren.
Es scannt die Mails auch und mit die Testmail (XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X) kommt auch gar nicht an – im Log steht auch drin das sie blockiert ist.
Habe nur ein Problem, ich hätte gerne, dass ich bei solchen Mails benachrichtigt werde.
Habe einiges probiert, bekomme es aber irgendwie nicht hin :(
Gibt es auch eine Möglichkeit, eine Testmail zu versehen um zu sehen, ob ***SPAM*** im Betreff drin steht?
LG.
So wie ich es verstanden habe sollte es ausreichen in der Datei
/etc/amavis/conf.d/20-debian_defaults
die entsprechende Zeil auszukommentieren:
$sa_spam_subject_tag = ‚***SPAM*** ‚;
$sa_tag_level_deflt = undef;
$sa_tag2_level_deflt = 5;
# $sa_kill_level_deflt = 20;
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
Damit wird keine mail mehr gelöscht.
Vielen Dank für das tolle Tutorial!
Nach dem Aufsetzen hat sofort alles funktioniert.
Leider im nachhinein dann doch nicht alles: Mails an meine erste Domain werden als ***SPAM*** markiert und verschoben. Mails an danach eingerichtete Domains leider nicht – diese landen unmarkiert im Posteingang.
Muss ich weitere Domains irgendwo eintragen?
/var/log/mail.log liefert Folgendes:
Feb 21 03:38:14 web01 amavis[3673]: (03673-02) Passed SPAMMY {RelayedOpenRelay}, [209.85.xxx.xxx]:33681 [209.85.xxx.xx] -> , Queue-ID: 6792F12042F, Message-ID: , mail_id: nHMCbZ-6iwb3, Hits: 999.901, size: 2727, queued_as: 6231E1204C1, dkim_sd=20120113:googlemail.com, 5741 ms
Hits: 999.901 besagt doch, dass die Mail erkannt wurde, oder?
Vielen Dank im Voraus!
Stefan
Tagelang suche ich rum und kaum schreibe ich hier etwas, finde ich es selbst heraus…
In /etc/amavis/conf.d/50-user müssen ja alle Domains eingetragen werden und nicht nur .$mydomain:
@local_domains_acl = ( „.$mydomain“, „nextdomain.de“ );
Hi,
erstmal danke für das gute Tutorial, allerdings kann sich mein Thunderbird nun nicht mehr zum Server verbinden.
Woran kann das liegen?
Grüße
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Kommt darauf an, ob IMAP oder Submission/SMTP nicht mehr funktioniert. Vermutlich hast du dich in der Konfiguration vertippt. Schau dir dazu am besten die Logs an.
https://www.hornetsecurity.com/de/services/spamfilter-email
Danke für die tolle Anleitung
nach dem Test mit „XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X“
empfängt mein Server keine Mails mehr von außerhalb der Domain. Der Serverprovier meint, dass der Port 25 nicht mehr offen ist. Ich bin 100% ratlos
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Dass Port 25 nicht mehr offen ist, nachdem du mit dem Test-String getestet hast, dürfte meines Erachtens nicht zusammenhängen. Es sei denn, der Test hat Postfix aus irgendwelchen Mysteriösen Gründen zum Absturz gebracht. Wie immer in solchen Fällen, hilft ein Blick ins Log. Dafür ist es ja da ;)
LG Thomas