Spam- und Virenfilter für Postfix einrichten

veröffentlicht am 20. Juli 2010

Vor einiger Zeit habe ich euch bereits gezeigt, wie man einen E-Mail-Server auf Basis von Postfix und Dovecot aufsetzen kann. Dieses Setup erweitere ich heute um einen Spam- und Virenfilter. Voraussetzung für diese Anleitung sind ein funktionierender Postfix-Server und natürlich ein paar Linux-Kenntnisse. Getestet habe ich diese Anleitung auf meinem vServer von netcup, auf dem ein Ubuntu 9.04 läuft.

Pakete installieren

Die folgenden Pakete müssen installiert werden:

  • amavisd-new (ermöglicht Interaktion zwischen Postfix und den Filtern)
  • clamav-daemon (Virenfilter)
  • spamassassin (Spamfilter)
  • razor (Spam-Datenbank)
  • pyzor (weitere Spam-Datenbank)

Die Pakete werden wie folgt installiert:

aptitude install amavisd-new clamav-daemon spamassassin razor pyzor

ClamAV einrichten

Bei ClamAV ist nicht viel zu machen, wir müssen lediglich den Benutzer clamav zur Gruppe amavis hinzufügen, damit die Dienste miteinander kommunizieren können:

adduser clamav amavis

Danach muss ClamAV neugestartet werden:

/etc/init.d/clamav-daemon restart

Spamassasin einrichten

Richten wir nun den Spamfilter ein. Dazu öffnest du zunächst die Datei /etc/default/spamassassin und passt dort folgende Werte an:

ENABLED=1
CRON=1

Danach starten wir SpamAssasin:

/etc/init.d/spamassassin start

Amavis einrichten

Zunächst müssen die Rautezeichen vor den folgenden Zeilen der Datei /etc/amavis/conf.d/15-content_filter_mode entfernt werden:

@bypass_virus_checks_maps = (\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Danach setzen wir den richtigen Hostname in der Datei /etc/amavis/conf.d/50-user. In meinem Fall wird folgendes dort eingetragen:

$myhostname = "techspread.de";

Damit SPAM nicht sofort gelöscht, sondern nur mit ***SPAM*** markiert wird, muss noch folgende Zeile eingefügt werden. Trage hier alle Domains (durch Komma getrennt) ein, bei denen E-Mails markiert werden sollen:

@local_domains_acl = ( "localhost", "techspread.de" );

Außerdem müssen die Filtereinstellungen in der Datei /etc/amavis/conf.d/20-debian_defaults angepasst werden:

$sa_tag_level_deflt = undef; # X-SPAM-Header werden immer hinzugefügt
$sa_tag2_level_deflt = 5;    # Ab welchem SPAM-Wert E-Mails mit ***SPAM*** markiert werden
$sa_kill_level_deflt = 20;   # AB welchem SPAM-Wert E-Mails sofort gelöscht werden

Nun folgt der obligatorische Neustart von Amavis:

/etc/init.d/amavis restart

Postfix einrichten

Nun müssen wir nurnoch Postfix mitteilen, dass er alle E-Mails auf Spam und Viren prüfen soll. Dazu öffnest du zunächst die Datei /etc/postfix/main.cf und fügst folgende Zeile an das Ende der Datei ein:

content_filter=smtp-amavis:[127.0.0.1]:10024

Danach öffnest du die Datei /etc/postfix/master.cf und fügst folgende Zeilen direkt nach dem Dienst pickup (steht direkt am Anfang einer Zeile) ein:

  -o content_filter=
  -o receive_override_options=no_header_body_checks

Zuletzt fügen wir die diese Zeilen an das Ende der Datei ein:

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

Und natürlich muss Postfix nochmal neugestartet werden:

/etc/init.d/postfix restart

Filter testen

Um die Filter zu testen, kann man sich Testmails von byteplant zuschicken lassen. Des Weiteren kann man den GTUBE-Test auf seinen Server loslassen.

Kommentare

Hey Patrick, keine schlechte Anleitung. Bin grad mal am Testen ob das funktioniert ;-)

nen kleinen Fehler scheint es noch zu geben. Momentan nimmt meine Server überhaupt keine Mails an und in der mail.err steht:

fatal: /etc/postfix/master.cf: line 24: bad transport type: content_filter=

hab das einfach mal sinngemäß durch ein „-o content_filter=smtp-amavis:[127.0.0.1]:10024“ ersetzt.

Nu scheint das Teil zu laufen, ob er Spam auch richtig filtert, werd ich später mal testen ;-)

Kommentar #1 von Stefan am 10. August 2010


Hallo,.

Also die Content-Filter geschichte läuft eigentlich echt gut und Ich habe damit auch lange keine Probleme gehabt…

Gelöschter Spam ist wirklich Spam (Ich lass mich da aktuell noch gesondert drüber Informieren :P) und Virus-Behaftete Mails sind auch entweder Virus Mails (oder wie eben nen nicht genehmigter Anhang)…

Dabei ist mir allerdings sauer aufgestoßen, dass die Quarantäne sich echt mies administrieren lässt (ja ne Mail nachträglich genehmigen is einfach!).

Kennt jmd ein gutes FrontEnd, eine gute Möglichkeit um Mails aus der Quarantäne zu löschen, anzusehen?

Richtig cool wär natürlich die ganze Konfig auf SQL und PHP Basis als WebFrontend zu gestalten :D

Aber Ich schweife vom Thema ab… => Quarantäne Säubern

Kommentar #2 von Tobias am 04. April 2011


Installier dir doch zuhause eine Astaro Firewall, die hat eine sehr schöne Administration für diesen Zweck :D

Kommentar #3 von Patrick am 04. April 2011


Ich such aber eine Lösung für mein Problem und keine alternative Lösung :)

Wozu ne ganze Firewall aufm Server installieren, die dann nur als Content-Filter arbeitet?

Kommentar #4 von Tobias am 04. April 2011


Was lässt sich denn genau „schlecht“ administrieren? Lass die E-Mails doch einfach mit ***SPAM*** markieren und richte dir eine Regel in deinem Client ein…

Kommentar #5 von Patrick am 04. April 2011


Paddy…
Ich suche kein Workaround sondern Ich möchte doch nur wissen wie man einzelne Mails aus der Quarantäne löschen kann :)

Das ist nun kein dringendes Problem, aber in einem größeren Umfeld kann son eine Quarantäne ja nicht ein leben lang anwachsen :D

Kommentar #6 von Tobias am 04. April 2011


@Tobi: http://sourceforge.net/projects/mailzu/

Kommentar #7 von Patrick am 04. April 2011


Hallo!
Ich bin unter Ubuntu Natty 11.04 wie hier beschrieben vorgegangen, jedoch hab ich folgendes Problem:

– interne Mails also von meinem Server zu meinem Server funktionieren problemlos.
– kommt eine Mail von draußen, steht folgendes im Log-File mail.log:

Kommentar #8 von streilu am 06. Mai 2011


May 6 14:02:06 streilucom postfix/smtpd[8493]: warning: connect to private/policy-spf: Connection refused
May 6 14:02:06 streilucom postfix/smtpd[8493]: warning: problem talking to server private/policy-spf: Connection refused

Kommentar #9 von streilu am 06. Mai 2011


@streilu: Kann es sein, dass dein Amavis oder Postfix nicht (neu-)gestartet wurden? Ansonsten kenne ich die Fehlermeldung auch nicht, sorry…

Kommentar #10 von Patrick am 07. Mai 2011


Ehm auch hier wollte ich eben den Link oben im Thread nutzen, der auf die E-Mail-Einrichtung verlinkt und der Link passt nicht. Auch ein Tipp ;)

Kommentar #11 von DerSchmauder am 19. September 2014


Hinterlasse einen Kommentar