Spam direkt auf dem vServer filtern

  • Hallo zusammen,


    ich habe jetzt mal gezielt nach Lösugen gesucht um direkt schon auf dem Server meine Mails nach Spam filtern zu lassen, allerdings... habe ich bis auf Spamassassin und DSpam herzlich wenig entdeckt.
    Spamassassin scheint aber einen doch recht hohen Speicherverbrauch zu haben (oder täuscht das, und das war nur weil out of the box - apt-get install?) und das schreckt mich schon fast ein wenig ab (obwohl ich eh über eine Migration zum größeren vServer nachdenke und das dann das kleinere übel wäre)).
    Was ich mich jetzt frage und was ich nicht so recht verstehe: Kann man Spamassassin einfach konfigurieren? Gibts da dann so ne Art Weboberfläche, oder werden die Mails am Ende gar nicht "weggespeichert", sondern nur in der Betreffzeile markiert?


    Ein verwirrter Benny

  • Hallo Benny,
    SpamAssassin ist ziemlich mächtig, braucht aber auch so einiges an Ressourcen.


    Ich habe meinen Postfix um policyd-weight erweitert, und bin soweit ganz zufrieden damit.
    PolicyD-Weight schaltet sich direkt in die SMTP-Kommunikation von Postfix ein, d.h. die Mail wird bereits überprüft und gegebenenfalls abgelehnt bevor diese angenommen und in die lokale Queue gestellt wird. Des Weiteren ist PolicyD-Weight äußerst schlank im Vergleich zu Tools wie SpamAssassin.


    Ich verwende hier folgende Konfiguration:


    /etc/policyd-weight.conf:


    /etc/postfix/main.cf:

  • Guten Morgen David,


    das ganze sieht ja interessant aus. Die IP "10.0.0.1" ersetze ich mit meiner?


    Zumindest habe ich das getan, aber ich bekomme in "/var/mail/mail.log" immer noch folgenden Fehler:


    Code
    Apr  6 11:06:13 root postfix/smtpd[13476]: warning: connect to 10.0.0.1:12525: Connection timed out
    Apr  6 11:06:13 root postfix/smtpd[13476]: warning: problem talking to server 10.0.0.1:12525: Connection timed out


    Allerdings sollte es wohl wirklich auf 10.0.0.1 laufen, wieder zurückgeändert bekomme ich bem starten von policy-weight diesen Fehler:

    Code
    Starting policyd-weight: master: bind 12525: IO::Socket::INET: Die angeforderte Adresse kann nicht zugewiesen werden Die angeforderte Adresse kann nicht zugewiesen werden at /usr/sbin/policyd-weight line 838.


    Hat jemand ne Idee? Finde den Ansatz des Tools gut, wüsste aber gerne mal wieviel Spam da wirklich durchkommt, aber dazu müsst ichs wohl zum laufen bekommen *ggg*



    EDIT: in der main.cf stand wohl auch die falsche IP, jetzt scheint es zu gehen:)

  • Hallo,
    kurz zur IP: Du kannst diese einfach durch die öffentliche IP deines vServer ersetzen, ja (in der policyd-weight.conf und main.cf). Aber dann ist der Policy-Daemon aus dem Internet erreichbar, was ich für keine gute Idee halte. Normalerweise würde man den Daemon an das Loopback-Device (127.0.0.1) binden. Da es bei den Netcup-vServern technisch bedingt aber kein lo-Dev gibt, habe ich mir vom Netcup-Support ein Ethernet-Alias mit einer privaten IP (10.0.0.1) erstellen lassen. Hierauf kann ich nun ohne schlechtes Gewissen meine lokalen Dienste binden lassen, da das 10er-Subnetz nicht ins Internet geroutet wird.


    Ansonsten kannst du in den Logs relativ einfach kontrollieren, ob der PolicyD-Weight korrekt arbeitet.


    grep policyd-weight /var/log/mail.log


    Da sollten dann Zeilen wie
    "decided action=550 Your MTA is listed in too many DNSBLs"
    oder
    "decided action=550 Mail appeared to be SPAM or forged."
    oder auch
    "decided action=PREPEND X-policyd-weight: ... rate: -7"
    zu sehen sein.


    Eine kleine Statistik deines PolicyD-Weight kannst du dir mit folgenden drei Befehlen basteln:


    Code
    grep -c 'Your MTA is listed in too many DNSBLs' /var/log/mail.log
    grep -c 'Mail appeared to be SPAM or forged' /var/log/mail.log
    grep -c 'decided action=PREPEND X-policyd-weight' /var/log/mail.log


    Die erste Zahl gibt dir an, wie viele Mails auf Grund von RBL-DNS geblockt wurden.
    Die zweite Zahl sind die Mails, die wegen einer zu hohen Spam-Score abgelehnt wurden.
    Und die dritte Zahl sind alle akzeptierten Mails.
    Achja, und nicht wundern, wenn die Summe der ersten beiden Zahlen deutlich größer sein sollte als die dritte; bei mir liegt das Verhältnis Spam:Ham bei 9:1.

  • Huhu,
    das mit der 10.0.0.1 ist ne gute Idee... Darüber sollte ich auch n ochmal nachdenken. Dachte mir schon, dass das der Grund dafür ist und habe mir überlegt dort einfach "localhost" reinzuschreiben, bis mir auffiel dass die 127.0.0.1 nicht da ist und localhost meine öffentlich IP kennzeichnet *ggg*


    Meine Spamstatistik ist übrigens sehr nett *ggg*
    138
    96
    12


    Das kommt auch ungefähr mit meinem Befinden gleich. Werde es nochmal 2-3 Tage so testen und dann schauen. Theoretisch sollte sich noch mehr Spam dadurch blocken lassen, dass man Spamassassin parallel laufen lässt, richtig? Wobei... Kann man dann sicherstellen, dass Spamassassin nach policyd-weight läuft?


    Mal schauen, aber ich glaube das filtert schon fast alles (bis auf Newsletter) raus.


    Weisst du zufällig, ob der "Versender" einer abgewiesenen Mail eine Nachricht darüber bekommt?


    Gruß,
    Benny

  • Tach,


    Zitat

    Theoretisch sollte sich noch mehr Spam dadurch blocken lassen, dass man Spamassassin parallel laufen lässt, richtig? Wobei... Kann man dann sicherstellen, dass Spamassassin nach policyd-weight läuft?


    SpamAssassin macht nur dann Sinn, wenn in den Mails Spam zu finden ist, die durch den PolicyD-Weight durchlaufen, und anschließend in deinem Postfach landen.


    Ich verwende hierfür nicht direkt den SpamAssassin, sondern AmavisD-new. Amavis ist ein Daemon wie PolicyD-Weight auch, der den Mail-Inhalt (PolicyD-Weight sieht den Inhalt noch nicht) durch diverse Filter jagt, nachdem die Mail bereits lokal angenommen wurde. So kann Amavis die Mail z.B. durch den SpamAssassin laufen lassen und mit ClamAV nach Viren checken, wobei letzteres bei mir nicht wirklich was gebracht hat. Der Amavis-Daemon bringt hierbei seine eigenen SpamAssassin-Routinen mit, d.h. es muss kein weiter SpamD o.ä. installiert/gestartet werden.
    Wenn nun der PolicyD-Weight eine Mail ablehnt, dann kommt diese erst gar nicht in die lokale Mail-Queue, d.h. Amavis/SpamAssassin bekommt diese auch gar nicht zu sehen.


    Wenn der AmavisD-new korrekt läuft, braucht's folgende Zeile in der main.cf:

    Code
    content_filter = amavis:[10.0.0.1]:10024


    Und dann noch in der master.cf folgendes anhängen:


    Spätestens hierfür würde ich aber unbedingt eine nicht-öffentliche IP-Adresse verwenden. Nicht das noch jemand auf die Idee kommt, seine Mails über deinen Amavis zu checken. :)


    Zitat

    Weisst du zufällig, ob der "Versender" einer abgewiesenen Mail eine Nachricht darüber bekommt?


    Das ganze läuft so ab: Irgendein SMTP-Client will die Mail bei dir abliefern. Dies wird aber idR. nie eine natürliche Person mit dem Thunderbird sein, sondern der SMTP-Server eines ISPs (z.B. GMX). Eine SMTP-Verbindung sieht so aus:


    1.) Begrüßung mittels EHLO
    2.) MAIL FROM:Absender
    3.) RCPT TO:Empfänger
    4.) DATA
    5.) Übermittlung der eigentlichen Mail.


    Der PolicyD-Weight ist nun bei Punkt 3 dazwischen geschaltet, d.h. wenn dieser die Mail ablehnt, dann geschieht dies, bevor der Mail-Inhalt überhaupt übertragen wird. Der Rechner, der die Mail einliefert, weiß also, dass die Mail nicht zugestellt wurde und wird dies dem ursprünglichen Empfänger mitteilen.


    Anders sieht es nun bei SpamAssassin aus. Dieser Content-Filter wertet die E-Mail erst aus, nachdem diese vollständig übertragen wurde. Für den einliefernden Mail-Client ist die Mail-Übertragung mit dem Übersenden des Mail-Inhalts erledigt. Was danach mit der Mail passiert, also ob diese z.B. von einem SpamAssassin als Spam markiert wird, davon weiß der Mail-Client nichts.


    Daher niemals den Amavis/SpamAssassin Mails direkt löschen lassen.


    Der PolicyD-Weight meldet das Ablehnen der Mail aber an den einliefernden Mail-Client, d.h. der Absender wird darüber auch informiert.


    PS:

    Zitat

    Mal schauen, aber ich glaube das filtert schon fast alles (bis auf Newsletter) raus.


    Newsletter sind auch kein Spam im klassischen Sinne. ;)


    PPS: Meine aktuelle Statistik von heute:
    RBL rejected: 168
    Spam rejected: 52
    Ham accepted: 16
    Von 236 Mails sind also nur 16 erwünscht, macht einen Spam-Anteil von über 93 Prozent. :(

  • Ja, das Newsletter kein Spam sind ist mir schon fast klar *ggg*


    Eine Frage hätte ich noch zu dem netten PolicyD-Weight:


    Angenommen ich leite Mails von andern Postfächern, bspw. GMX, weiter auf das Postfach auf meinem "Server". Kommen die dann alle durch? Könnte ja sein, da ist auch Spam dabei, den hätte ich dann natürlich auch gerne raus ;)


    Bis jetzt funzt der Spamfilter auf meiner alten Domainmailadresse hervorragend, noch keine Spammail durchgekommen seid er aktiv ist (ob eine Mail fälschlicherweise zurückgewiesen wurde kann ich aber nicht sagen, sollte aber nicht so schlimm sein, wenn man "ne" Nachricht bekommt).


    AmavisD-new schau ich mir die Tage mal an, wenn ich entschieden habe, ob die Spamfilterung so schon ausreicht.


    Darf ich hier gerade noch ne Frage anhängen (hat eigentlich wenig mit "Spam" an sich zu tun - sind eignetlich sogar 2):


    Die Mails müssen ja auch irgendwo lokal auf dem Server liegen, richtig? Wo liegen die denn? Da köntne man sie ja immer schön "wegsichern" (wenn man eh nur sinnvolle aufhebt).


    Und kann man so ne Art "Filterung" der Mails, wie in eMailprogrammen üblich, auch schon serverseitig machen? So dass z.B. alle Mails die "Benny" in Betreff haben in einen Ordner "privat" abgelegt würden? Das wäre auch genial *ggg*


    Schönen Abend noch!
    Benny

  • n'Abend,
    was die Weiterleitung z.B. von GMX-Mails angeht, so wirst du mit PolicyD-Weight keinerlei Erfolg haben. Denn die Kennzeichen einer Spam-Mail würden sich in diesem Fall ja ausschließlich im Inhalt der Mail befinden, und den sieht PolicyD-Weight nicht. Dieser beurteilt nur die SMTP-Kommunikation mit dem Mail-Clienten, hier also mit dem SMTP-Server von GMX. Und dieser verhält sich natürlich absolut standardkonform und ist auch in keiner RBL geblacklistet, daher werden alle GMX-Mails durchgehen.


    Du müsstest in dem Fall also die Mails bei GMX bereits nach Spam-Filtern. Aber selbst der Filter in der Freemail-Variante funktioniert bei mir recht gut, kann mich nicht beschweren.


    SpamAssassin könnte übrigens dann auch bei den GMX-Mails noch etwas herausholen, da dieser eben den Inhalt der Mail auf Spam-Auffälligkeiten hin untersucht.


    Ansonsten: Wer braucht GMX&Co: eigene Domain, eigener Mail-Server, eigene Spam-Filter und gut ist. :)
    Und wenn nachname.tld noch frei ist, vorname@nachname.tld kommt immer gut. ;)


    Zitat

    Die Mails müssen ja auch irgendwo lokal auf dem Server liegen, richtig? Wo liegen die denn? Da köntne man sie ja immer schön "wegsichern" (wenn man eh nur sinnvolle aufhebt).


    Kannst du tun. Wo du Mails aber liegen, lässt sich pauschal nicht sagen. Ich lasse meine in einem Maildir innerhalb meines Home-Directorys ablegen.


    main.cf:

    Code
    home_mailbox = Maildir/


    Zitat

    Und kann man so ne Art "Filterung" der Mails, wie in eMailprogrammen üblich, auch schon serverseitig machen? So dass z.B. alle Mails die "Benny" in Betreff haben in einen Ordner "privat" abgelegt würden?


    Geht selbstverständlich auch. Für Maildir fällt mir spontan einfach procmail ein.


    Dazu im Home-Directory eine Datei ".forward" mit folgendem Inhalt anlegen:

    Code
    | /usr/bin/procmail


    Interessant ist nun die Datei ".procmailrc" in deinem Home-Directory. Hier mal ein Beispiel, wie diese bei mir aussieht:



    Was macht das Ganze? Mails, die von SpamAssassin als Spam eingestuft werden, in den Junk-Ordner verschieben, GMX-Werbung in den Papierkorb, und eBay bzw. Firmenmails in die entsprechenden Unterordner. Lässt sich individuell anpassen und läuft wie geschmiert. ;)

  • Huhu,
    das führe ich mir morgen nochmal genauer zu Gemüte, sieht aber gut aus.


    Das Problem ist,dass ich eine längere Zeit schon alle meine "domain"-mails auf ein gmail-konto weitergeleitet habe, da aber doch einiges (nicht soviel) an Spam durchkommt.
    Aber du hast recht, ich werde einfach eine Weiterleitung einrichten und statt SpamAssassin geht ja wohl auch "AmavisD-new" :) Aber ich denke ich schau mir dann auch mal an wie man noch ClamAV mit einbaut.


    Die Config-Datei hab ich noch nicht (von procmail) so ganz verstanden, aber... Das wird sicher noch (ich komme leider nicht so aus dem Unix/Linux-Umfeld, und diese ganzen ^\*-Gedöns-Dinger sind nicht soooo einfach zu verstehen *ggg*). Ich seh das aber richtig, das Procmail dann speziell auf einen "eMailuser" einzurichten ist? Ich würde die Mails nämlich schonmal vorweg nach dem "An"-Filtern wollen :))


    schönen Abend, ich geh zum Tango :)
    Benny

  • n'Abend,
    achja, die guten alten RegExps (reguläre Ausdrücke). :)
    Dazu gibt's aber per Google&Co. gaanz viel Info-Material. Und ansonsten lässt sich das auch quasi per Reverse Engineering aufbröseln, wenn man sich den Text von mir anschaut, was diese Regeln machen. Und zu guter letzt gibt's auch jede Menge Procmail-Howtos im Netz zu finden.


    Ansonsten hat jeder Benutzer, der ein Mail-Konto hat, braucht seine eigene procmailrc-Datei. Filtern kannst du aber sowohl nach An (To), Von (From), und auch nach jedem beliebigen anderen Feld im Mail-Header.


    In meinem Fall habe ich einen (Mail-)Benutzer pro "real existierender Person". Soll heißen ich habe nur ein einziges Mail-Konto, aber mit verschiedenen Unterordnern. Mails an mich mit verschiedenen (To-)Adressen lasse ich über die Procmail-Regeln in die entsprechenden Ordner schieben.


    Aber wie gesagt, dazu (Procmail) solltest du auch reichlich Infos und Howtos im Internet finden.


    Dann melde ich mich hiermit für heute auch mal ab, damit das mit dem "schönen Abend" auch tatsächlich noch was wird. :)

  • Okay, es sind RegExps :)
    Danke für den Tipp.


    Bin jetzt auch wirklich weg, habe allerdings nicht gefunden wo in meiner main.cf das Maildir stünde, also gibts wohl "keins".
    Wenn ich da ein Verzeichnis einstelle. Wird dann pro Mailkonto ein Unterverzeichnis gemacht? Um ehrlich zu sein wimmelt es bei mir nur von Mailkonten (naja.. vllt 20), da einige Mitglieder meiner community ein "community"-eigenes Konto wollten.


    Tschüss und danke und weg:)
    ! versprochen!!

  • Hallo,
    ein letzter Nachschlag für heute noch.


    Also ich verwende bei mir Maildir-Verzeichnisse für meine Mails. Abrufen tue ich die dann mit dem Courier POP3 bzw. IMAP4 Daemon.


    Wenn du bei dir gar keinen Maildir-Eintrag hast, werden deine Mails wahrscheinlich im MBox-Format abgespeichert. Ob sich damit Procmail auch benutzen lässt weiß ich nicht.


    Ansonsten ist die normale Prozedur bei mir so:
    Neuen (Mail-)Benutzer anlegen, mit "maildirmake" das Maildir-Verzeichnis im Home-Directory des neuen Users anlegen, und mit "chown" den Eigentümer zuweisen.
    Anschließend eben Procmail einrichten.


    So hat dann jeder User sein eigenes Maildir-Verzeichnis, seine eigenen Unterordner und auch seine eigenen Procmail-Filter.


    Natürlich gibt es hierfür auch etliche andere Ansätze, z.B. virtuelle Mailkonten, so dass du nicht für jeden Mail-User einen eigenen Unix-User anlegen musst, uvm.. Ich hab mich eben einfach für diesen Weg entschieden.


    Ansonsten einfach bisschen Googeln nach Postfix Howtos.

  • Hallo David,


    ich habe "rausgefunden" wie es bei mir ist. Ich scheine "virtuelle" Postfächer zu haben.
    Zumindest gibt es für jede Mailadresse (z.B. b@chmann.info) einen eigenen Ordner in dem die Mails dann gespeichert werden.
    Das ist ein anderer Ansatz als bei dir, richtig? Mit "Home"-Verzeichnis meintest du auch das jeweilige Homeverzeichnis des Unix-Users dem ein Mailkonto zugeordnet war? (ich frage wegen der .forward- und .procmailrc-Files)
    Ich schau mich nochmal um, wünsch nen guten Start in die Woche!



    //EDIT
    Alles was ich bisher gefunden habe war immer für "Maildir" :(
    Um procmail zu starten adde ich das zur postfix/main.cf

    Code
    "mailbox_command = /usr/bin/procmail -f- -a "$USER"

    ist das richtig?


    Falls ja: Wo habe ich denn dann die ".procmailrc" abzulegen? Im Homeverzeichnis von "vmail" (so heißt der Benutzer dem meine ganzen Mailkonten/-verzeichnisse gehören). Wenn das so wäre, dann kann ich allerdings wirklich nur mit nach ".To"-Filtern, da ich ja sonst Mails aus allen möglichen Mailkonten verschieben könnte/würde.
    Irgendwie steh ich entweder aufm Schlauch oder es ist nicht dazu gedacht.

  • Hallo Benny,

    Zitat

    Das ist ein anderer Ansatz als bei dir, richtig? Mit "Home"-Verzeichnis meintest du auch das jeweilige Homeverzeichnis des Unix-Users dem ein Mailkonto zugeordnet war? (ich frage wegen der .forward- und .procmailrc-Files)


    Das hast du korrekt erkannt. Ich habe keine virtuellen Mail-Konten, sondern für jedes Mail-Konto einen eigenen Unix-User inkl. Home-Dir. Und darin liegt dann meine procmailrc.


    In sofern muss ich an dieser Stelle nun endgültig passen, mit virtuellen Mailkonten habe ich mich noch nicht beschäftigt. Diese Abschnitte habe ich in den jeweiligen Howtos einfach übersprungen.


    Aber es sollte sicherlich auch die Möglichkeit geben, Procmail in virtuelle Mailkonten einzubetten. Was das "Wie" angeht, bin ich nun aber überfragt.


    Dann dir auch noch viel Spass mit dieser neuen Woche, vielleicht findest du ja irgendwo im Netz noch eine passende Howto.
    BTW: Nur noch eine Abiturs-Klausur in Sicht, juhu. :D

  • David, oder auch wer anderes, egal:


    Ich find den Ansatz mit den virtuellen Mailadressen insoweit gut,dass ich nicht für jeden User einen Unixaccount brauche, aber... Ist es möglich zweigleisig zu fahren? Hat da wer Erfahrung mit?


    Dann würde ich einfach für "meine" Adresse nen User anlegen und dann hätte sich das:)


    Grüße,
    Benny

  • Ich fühl mich gerade ganz alt.
    Ich teste das mit den procmail-Settings dann mal, ich denke das muss ich nur schachteln, aber ich denke mit den "Spam"-Mails könnte ich ein Problem bekommen - wobei ich eh noch testen wollte, ob er schon weiß welche Mail in welchen "eMailfolder" gehört - ich halt euch mal aufm Laufenden!

  • Servus,
    habe gerade mal amavisd-new installliert. Und nach deinen Hinweisen eingerichtet, David.


    Bekomme aber folgendne Fehler für jede Mail in der mail.log

    Code
    Apr  8 13:36:24 root amavis[4369]: (!) DENIED ACCESS from IP 78.47.55.7, policy bank ''


    Ich habe noch meine IP drinnenstehen, aber ich hab zuhause nur eingeschränkten PC Zugriff atm und da wollte ich hier eben erstmal testen. Neue IP sollte bald da sein, dann wird das geändert.
    Blöderweise werden die Mails so auch nicht zugestellt, so dass ich das wieder auskommentiert habe. aber hast du ne Idee was das zu bedeuten hat?


    Was mir noch aufgefallen ist - ich weiß nicht, ob das an meinem System hängt oder generell so ist - bei einem "apt-get install amavisd-new" hätte ich erwartet irgendwo auch ne ".conf"-Datei zu bekommen, bekomm ich aber net. Ist mir bei anderen Tools auch schon aufgefallen. Muss ich da noch was beachten? Oder ist apt-get install am ende sogar falsch oder habnen soviele Tools einfach keine config? *am kopf kratz*

  • Hi Benny,


    auf dem Mailserver von meinem Kollegen verwende ich zufällig auch amavis.


    Die Configdateien liegen hier:


    /etc/amavis/conf.d


    In dem Ordner sind mehrere vorhanden, einfach mal durchgucken; hoffe, das hilft dir.


    Gruß,


    Stefan