Spamerkennung mit Postfix und Spamassassin

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hier also die versprochene kleine Anleitung zum Einbau von Spamassassin in den Zustellungsprozess von Postfix

About
Dass man Spamassassin sehr gut zusammen mit dem Dovecot (POP3/IMAP) Server zum Leeren von externen Mailboxen brauchen kann, hat purzel hier im Forum schon sehr gut beschrieben (Stichworte für die Suche: purzel und dovecot und dann den Thread mit den meisten Posts ;))

Ich möchte im Folgenden den überraschend einfachen Einbau von Spamassassin in den SMTP Server vorstellen. Das Beispiel von Spamassassin kann man auch dazu verwenden um nahzu jeden Dienst an Postfix anzubinden (z.B. clamav oder ganze Content Filter Systeme)

Voraussetzungen
Ich selber habe mir schon vor längerer Zeit sendmail mittels ipkg installiert. Die grundsätzliche Voraussetzung ist also das korrekte Funkionieren von sendmail. Ich kann aber leider nicht sagen ob es mit dem Default sendmail und dessen Konfig (in der neusten FW dabei) auch funzt. Mein Beispiel setzt auf das ipkg-sendmail. Müsste aber (dies ohne Garantie) auch mit dem Default sendmail laufen.
Neben sendmail muss auch Spamassassin auf der DS installiert sein (via ipkg), zusammen mit allen benötigten Perl Modulen (sollten automatisch mitinstalliert werden)
Ein neuer Benutzer unter dessen Kennung der Filter ausgeführt wird. Achtet darauf, dass der User ein korrektes Homeverzeichnis hat (dort drin legt Spamassassin in .spamassassin seine Konfig Files ab)

How
Das Ganze ist wirklich erschreckend einfach umzusetzen ;) Es braucht ein neues File und zwei, drei Einträge in der Postfix Config (diesmal die master.cf)
Zuerst also zum Filterscript. Das ist ein kurzer Dreizeiler
Code:
#!/opt/bin/bash
/opt/bin/spamc | /opt/sbin/sendmail -i "$@"
exit $?
Wie ihr seht verwende ich hier den Sendmail von ipkg. Testet es mit dem Default sendmail und schaut obs funzt.
Speichert die Datei am besten in einem alternativen Postfix Verzeichnis, damit die Datei ein FW Update überlebt.
Diese Datei sollte World-executable sein.

Merkt euch den Dateinamen und Pfad und öffnet die master.cf Datei eures Postfix Servers. Diese Datei ist für die "Dienste" des SMTP Servers verantwortlich. Dort drin sollte am Anfang etwas wie
Code:
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
stehen.
Wichtig: Zwischen den einzelnen Optionen MUSS ein Tab stehen. Es darf kein Leerzeichen verwendet werden oder der Postfix crashed jämmerlich zu Boden.

Diesen ersten Eintrag muss man anpassen und zwar im einfachsten Fall folgendermassen
Code:
smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamfilter:dummy
JEDE "Unter"-zeile MUSS mit einem einzelnen Leerzeichen!! eingeleitet werden. Sonst geht der Postfix von einer neuen Hauptzeile aus. Ausserdem steht hier zwischen -o und dem Rest ein einzelnes Leerzeichen (und KEIN Tab)
Dann folgen in der master.cf noch etliche weitere Einträge. Weiter unten kommt ein auskommentierter Eintragzu maildrop. Unmittelbar danach muss man jetzt den oben eingesetzten Filter definieren.
Code:
spamfilter unix  -      n       n       -       -       pipe
 flags=Rq user=USER argv=/PATH/spamfilter.sh -f ${sender} -- ${recipient}
Wiederum stehen zwischen den Optionen der ersten Zeile Tabs und bei der zweiten Zeile wiederum Leerzeichen. Auch diese zweite Zeile muss eingerückt werden. (Leerzeichen)
USER ist der Name des Users den ihr angelgt habt und PATH der Pfad zu dem oben erstellen Shellscript.

Verbesserung
Obige Konfig hat einen entscheidenden Nachteil. Es wird sämtlicher Mailverkehr an der LAN Schnittstelle des Servers gefiltert. Somit werden auch Emails, die ihr von euren lokalen Clients ins Internet sendet mit Spamassassin geprüft. Das geht auf die Performance und ist echt unnötig.

Und wieder bietet die master.cf das elegante Hilfsmittel dazu. Postfix kann auf der gleichen IP auf mehreren Ports lauschen und den Verkehr auf den untrschiedlichen Ports auch unterschiedlich behandeln. Also legt man am besten einen zweiten Eintrag für smtp auf einem nicht aus dem Inet erreichbaren Port an. Dieser Port wird dann ohne Spamassassin bedient und Clients aus dem LAN können Emails ungefiltert versenden
Code:
192.168.0.23:25      inet  n       -       n       -       -       smtpd
 -o content_filter=spamfilter:dummy
192.168.0.23:2525       inet    n       -       n       -       -       smtpd
 -o receive_override_options=no_header_body_checks
Der erste Eintrag wird um die LAN IP und öffentliche SMTP Port Nummer ergänzt. So gilt die zweite Zeile nur für den Port 25
Der zweite Eintrag lässt Postfix am nicht-öffentlichen Port lauschen (2525) und dies ohne Spamassassin Filter. Zusätzlich wird durch no_header_body_checks erreicht, dass bei den Emails auf diesem Port die in main.cf definierten SMTP Restriktionen nicht angewendet werden. Darum sollte diese Port nur im LAN zugänglich sein.
Wenn ihr also an Port 25 alle Emails mit Viagra im Betreff abschiesst und die Annahme verweigert, dann kann die gleiche Email an Port 2525 problemlos zugestellt werden.

Damit der Postfix die veränderten Config Files sofort einliest kann man als root auf der Konsole
Code:
$ postfix reload
eingeben. Der Postfix sollte das Neuladen mit einer Meldung quittieren.

Das ist also der gestern versprochene (oder angedrohte ;)) Beitrag zu Postfix und Spamassassin.
@itari :D
Ein Wiki Beitrag folgt in Kürze.

Da möchte ich dann noch ein bisschen mehr zu den Möglichkeiten von spamassassin und dessen Regelwerk dazu schreiben. V.a. die automatische Aktualisierung der Regeln mit Servern im Internet erhöht die Trefferquote auf nahezu 100% (geht aber auch heftig auf die Performance)

Gruss

tobi
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Wiki-Beitrag
Den Teil zu den Regeln im Spamassassin werde ich nachreichen

Gruss

tobi
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0

Supaman

Benutzer
Mitglied seit
26. Jan 2007
Beiträge
1.447
Punkte für Reaktionen
0
Punkte
62
zum thema spam noch einen tip: strato hat einen ganz hervorragenden spamfilter. wenn man seine mails in eine strato mailbox weiterleitet und von dort abruft, bleibt fast nichts überig, d.h. es kommen grob geschätzt pro woche so ca. 5 spams durch, bei 300+ pro tag.

das schöne daran: ich konnte bisher keine falscherkenung feststellen. den spamfilter kann man auch nirgendwo deaktiveren, von daher habe ich die vermutung das nur 100% erkannte spams gelöscht werden.
 

HarryPotter

Benutzer
Mitglied seit
24. Aug 2007
Beiträge
2.156
Punkte für Reaktionen
0
Punkte
0
Dasselbe gilt für den Schweizer Provider cyon. Spamdurchlass praktisch null.

Daher einmal mehr: würden die Provider ihre Verantwortung ernst nehmen wäre das Thema längst mehr oder weniger vom Tisch
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Mein Provider verwendet auch gute Spamfilter. Ebenfalls gmail. Nur sind sie so gut, das nix an meinen Postfix durchkommt und der damit keine wirklichen Trainingsdaten hat, um besser Spam zu finden.
Drum habe ich die Filter bei all meinen externen Accounts deaktiviert, damit soviele Spams wie möglich im Eingang landen, die ich danach auf Postfiy loslassen kann
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Übrigens bezieht sich Eure Aussage bezüglich der Filter bei den Providern auf POP/IMAP Accounts.
Nur weil der Provider Spitzenspamfilter hat, heisst das nicht, dass auch die Spamerekennung via SMTP (lokal bei Euch) etwas davon hat. Der Spamassassin braucht einfach genügend Spam, um seine Fähigkeiten zu verbessern. Lieber keinen Spamassassin als einen untrainierten Filter ohne Regeln (sonst sind false positives vorporgrammiert)
 

PeterG

Benutzer
Mitglied seit
12. Sep 2008
Beiträge
472
Punkte für Reaktionen
0
Punkte
0
zum thema spam noch einen tip: strato hat einen ganz hervorragenden spamfilter. wenn man seine mails in eine strato mailbox weiterleitet und von dort abruft, bleibt fast nichts überig, d.h. es kommen grob geschätzt pro woche so ca. 5 spams durch, bei 300+ pro tag.

Das kann ich leider nicht bestätigen; gerade in letzter Zeit (paar Monate) kommt wieder verstärkt Spam an (ca. 5 Spam/Tag bei nur ca. 20-30 Mails gesamt im fraglichen Strato-Postfach), wobei es sich durchweg um - für Menschen - offensichtlichen Spam handelt, regelmäßig schon am Betreff erkennbar.

das schöne daran: ich konnte bisher keine falscherkenung feststellen. den spamfilter kann man auch nirgendwo deaktiveren, von daher habe ich die vermutung das nur 100% erkannte spams gelöscht werden.

Stimmt; davon habe ich auch nichts bemerkt. Allerdings wäre es auch ein Hammer und u. U. auch strafrechtlich von Belang, wenn ein Provider Mail löschen würde ohne Einverständnis und Einstellmöglichkeit, die nicht ohne jeden denkbaren Zweifel mißbräuchlich ist.

Gruß
Peter
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
afaik darf ein Provider nur virenverseuchte Email ungefragt löschen. Spam oder Spamverdächtiges darf nicht einfach so gelöscht werden (viele Provider bieten hier spezielle Spamordner). Einzig darf der Provider beim SMTP Empfang direkt eine Email verweigern, sobald er sie jedoch aktzeptiert hat, darf er sie afaik nicht einfach so aus dem Zustellungsprozess löschen.
 

knox

Benutzer
Mitglied seit
31. Mrz 2007
Beiträge
478
Punkte für Reaktionen
0
Punkte
0
Würde mich gerne nun näher dem Thema Spamassassin widmen und installieren - nutze aber die Mailstation ohne getmail funktion...

... ist dieses Voraussetzung oder kann Spamassassin direkt auf die Mailstation installiert werden?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Du kannst natürlich spamassassin auch ohne getmail installieren. getmail ist keine Voraussetzung für spamassassin. Der Einbau ohne getmail ist relativ einfach und du kannst dich mal an http://www.synology-wiki.de/index.php/Postfix_und_Spamassassin halten.
Es werden jedoch Probleme bei spamassassin und den Perl Versionen auf gewissen Diskstations gemeldet. Bei meiner DS107+ kriege ich spamassassin wegen Fehlermeldungen nicht gestartet, auf meiner DS408 hingegen funzt es sehr zuverlässig.
 

knox

Benutzer
Mitglied seit
31. Mrz 2007
Beiträge
478
Punkte für Reaktionen
0
Punkte
0
Klasse, danke dir für die Infos!
 

knox

Benutzer
Mitglied seit
31. Mrz 2007
Beiträge
478
Punkte für Reaktionen
0
Punkte
0
How
Das Ganze ist wirklich erschreckend einfach umzusetzen ;) Es braucht ein neues File und zwei, drei Einträge in der Postfix Config (diesmal die master.cf)
Zuerst also zum Filterscript. Das ist ein kurzer Dreizeiler
Code:
#!/opt/bin/bash
/opt/bin/spamc | /opt/sbin/sendmail -i "$@"
exit $?
Wie ihr seht verwende ich hier den Sendmail von ipkg. Testet es mit dem Default sendmail und schaut obs funzt.
Speichert die Datei am besten in einem alternativen Postfix Verzeichnis, damit die Datei ein FW Update überlebt.
Diese Datei sollte World-executable sein.

Sorry, das ich hier nun anfange nacheinander Fragen zu stellen, aber denke auch für Andere sind die Fragen recht interessant...

daher:

Wenn hier geschrieben wird "es wird ein kurzer 3Zeiler" erzeugt... dann stellt sich mir die Frage: Wohin? Und wie sollte die Datei lauten - oder hab ich das falsch verstanden und es muss in die Master.cf?

Danke!
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Der Name und der Speicherort der Datei ist vollkommen Wurst. Du trägst den Pfad zur Datei ja in master.cf ein. Wichtig ist nur, dass der User unter dem der Filter läuft diese Datei auch lesen darf. Letzendlich ist es egal wo sie liegt.

Gruss

tobi
 

knox

Benutzer
Mitglied seit
31. Mrz 2007
Beiträge
478
Punkte für Reaktionen
0
Punkte
0
Hi Tobi

demnach muss ich die Datei mit chmod noch anpassen? Wenn ja, mit welcher Berechtigung? 777 ist ja übertrieben oder?

Und gleich noch die nächste Frage:

Wenn ich die spamfilter.sh testweise ausführen will, dann hängt die sich auf, bzw. es geschieht nichts...

Werde aber das Gefühl nicht los, das ich den lächerlichen Fehler mit dem " | " im Text gemacht habe, denn ich habe

#!/opt/bin/bash
/opt/bin/spamc | /opt/sbin/sendmail -i "$@"
exit $?

genau so erzeugt, aber den durchgehenden | kann ich ja nur als geteilten "|" in der vi Oberfläche generieren... ist das einfach nur ein anderes aussehen oder warum erscheint einfach nix?
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
genau so erzeugt, aber den durchgehenden | kann ich ja nur als geteilten "|" in der vi Oberfläche generieren... ist das einfach nur ein anderes aussehen oder warum erscheint einfach nix?
Meinst du ¦ anstelle von |?
Das geht nicht gut. Normalerweise ist die Pipe (|) mit AltGr+7 zu erreichen. Gerade bei Linux ist es aber meist AltGr+1
Auf jeden Fall muss es ein durchgehender Strich sein, um als Pipe durchzugehen. Die Rechte mit 777 sind viel zu viel! Bestenfalls der User unter dem der Filter ausgeführt wird sollte Schreibrechte haben, der Rest sollte mit dieser Datei gar nichts machen dürfen. Eigentlich müsste der User unter dem der Filter läuft auch nur mit Lese-Ausführrechten auskommen.
 

knox

Benutzer
Mitglied seit
31. Mrz 2007
Beiträge
478
Punkte für Reaktionen
0
Punkte
0
Meinst du ¦ anstelle von |?
Das geht nicht gut. Normalerweise ist die Pipe (|) mit AltGr+7 zu erreichen. Gerade bei Linux ist es aber meist AltGr+1
Auf jeden Fall muss es ein durchgehender Strich sein, um als Pipe durchzugehen. Die Rechte mit 777 sind viel zu viel! Bestenfalls der User unter dem der Filter ausgeführt wird sollte Schreibrechte haben, der Rest sollte mit dieser Datei gar nichts machen dürfen. Eigentlich müsste der User unter dem der Filter läuft auch nur mit Lese-Ausführrechten auskommen.

Ich habs geahnt ;) Mit sicherlich ne lächerliche Frage für Linux Kenner, aber mir wars unbekannt...

cool wirds nun für mich, da ich an nem Laptop arbeite und mir ne andere Lösung einfallen lassen muss... denn "Pipe" | gibts unter diesem Layout nicht ;( ... wie cool!

-> Ergänzung: Ich scheitere tatsächlich am Pipe! Will ich AltGr + < klicken, so kommt das falsche Zeichen. Das | geht zwar hier im Forum unter der besagten Taste, aber nicht via Telnet auf der DS...

und nu? Idee?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich habs geahnt ;) Mit sicherlich ne lächerliche Frage für Linux Kenner, aber mir wars unbekannt...

cool wirds nun für mich, da ich an nem Laptop arbeite und mir ne andere Lösung einfallen lassen muss... denn "Pipe" | gibts unter diesem Layout nicht ;( ... wie cool!
Pipe ist garantiert auch bei deinem Laptop vorhanden. Denn dabei handelt es sich um ein ASCII Zeichen und normalerweise hat jede Tastatur alle "anzeigbaren" ASCII Zeichen vorhanden
 

knox

Benutzer
Mitglied seit
31. Mrz 2007
Beiträge
478
Punkte für Reaktionen
0
Punkte
0
Nicht lachen, aber diese Taste wird weder als Symbol aufm Laptop angezeigt, noch ist mir eine Kombination bekannt, wie ich "Pipe" nutzen könnte...

Es ist aber auffällig, das hier im Forum das | richtig dargestellt wird, aber dieses als "Unterteilter Strich" auf meinem Keyboard abgebildet wird und genau so dann auch (leider) im Telnet eingetragen....
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Der senkrechte Strich | auf der Tastatur wo auch das < und > Zeichen drauf ist, ist das Pipe-Zeichen. Ob das mal durchbrochen oder ganz durchgehen angezeigt wird, ist abhängig vom verwendeten Zeichensatz.

Man kann auf der Kommandozeile das auch immer schnell testen, wenn man sich nicht ganz sicher fühlt:

Rich (BBCode):
ls -l / | wc -l

Itari
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat