sa-learn per Email füttern erweitern

facebraker

New Member
Hallo,

ich nutze schon seit einiger zeit, das Perl-Skript sa-wrapper.pl mit der Einrichtung nach dem Tutorial von huschi.
Ich bin sehr zufrieden, funktioniert ohne Probleme.

Heute morgen fiel mir eine sehr brauchbare Erweiterung des Skriptes ein.

Szenario:
Herr Meier ([email protected]) bekommt eine Email, die wird falsch vom SA als Spam eingestuft, procmail erkennt den X-Spam-Header und verschiebt die Mail an den Spam-Account.
Der Admin (ich) merkt, dass das kein Spam ist, schickt die Email als Anhang an [email protected] und wird automatisch dem Bayes als Ham gelernt.
Nun nimmt der Admin, den Anhang und leitet ihn an Herrn Meier weiter, der sich aufregt, das wieder eine Mails falsch eingestuft wurde.

Meine Idee:
Wenn ich eine falsch eingestufte Email als Anhang an [email protected] schicke, wird sie als Ham gelernt, gleichzeitig könnte doch die Email erneut versandt werden, alle Informationen sind ja in der Mail noch enthalten.
Oder man parst den Empfänger "meier" und legt sie in das Verzeichnis /[Dir zum MailDir]/Meier/MailDir/new/ ab.
So spart man sich das Anhängen und erklären ... zumal Emails an nospam@... Hams sind und nicht gelöscht werden.


Ja, eine gute Frage, warum erzählt er uns das und macht es nicht gleich?

Ich kenne mich mit Perl Null aus, ich hoffe jmd. findet die Idee genial und passt das Skript sa-wrapper.pl an ...
Eventuell ist es nur eine Kleinigkeit, paar Zeilen ...


Gruss Alex
 
Last edited by a moderator:
Der Admin (ich) merkt, dass das kein Spam ist, schickt die Email als Anhang an [email protected] und wird automatisch dem Bayes als Ham gelernt.
Nun nimmt der Admin, den Anhang und leitet ihn an Herrn Meier weiter, der sich aufregt, das wieder eine Mails falsch eingestuft wurde.
Das ist doch letztendlich nur ein Schritt, oder?
Email an nospam + Herrn Meyer. Fertig.

huschi.
 
Hallo Huschi,

das ist mehr als korrekt, aber mein Hauptaugenmerk ist, dass Herr Meier nicht merken soll, dass diese Mail im Spamordner gelandet ist.
Wenn ich die Mail angehängt an Herrn Meier schicke fliegt die ganze Sache ja auf (übertrieben gesprochen).
Und manche User (wollen) verstehen nicht, dass wenn ein Mailbody 100% aus HTML besteht, der andere Server von einer dynamischen IP aus sendet ... das mal schnell die Schwelle von 4Pkt gerissen wird (sehr selten,aber passiert).
Da hilft es auch nicht, ihm klar zu machen, das man es als HAM gelernt hat und die Domain auf die Whitelist gesetzt hat (wenn es eine Firmendomain ist) ...

Meine Idee ist es ... das die Mail eben erneut lokal zugastellt wird, (klar durch meinen manuell. Eingriff mit Verzögerung) ... aber er merkt nichts, glaube nicht das Herr Meier in die Header guckt :-)
Und wer in die Header guckt, den kann ich die Mail auch als Anhang zuschicken, denn der versteht, warum sie im Spam gelandet ist ;-)

Leider habe ich Null Ahnung von Perl, sonst hätte ich mcih mal selber ans werk gemacht, Sorry!


Gruss Alex
 
Wenn ich Herr Meier wäre hätte ich sowieso stark was dagegen, dass jemand meine Mails liest. IMHO ist das auch rechtlich nicht zulässig...
Insofern stellt sich die Frage, ob eine globale SPAM-Box überhaupt OK ist.
 
Wenn ich Herr Meier wäre hätte ich sowieso stark was dagegen, dass jemand meine Mails liest. IMHO ist das auch rechtlich nicht zulässig...
Insofern stellt sich die Frage, ob eine globale SPAM-Box überhaupt OK ist.

Hallo Admin,

das stimmt, aber eines kann ich nur:
a) Die User empfangen auch die Spammails, können über Ihren Client die Mails in einen separaten Ordner filtern, den sie dann selber durchschauen müssen!
Was sie sowieso nicht tun und ich sichere jeden Abend die Sch... mit, bis St.Nimmerleinstag ...
b) Alle Mails wandern in den globalen Mail-Account, ich klassifiziere sie mit procmail nach Spampunkten : >10; >10;>20 und schaue sie durch.
Bei einer False-Erkennung kriegt der Nutzer die Mail wieder.Meist bei 4>mail<5.

Das ist mit der Geschäftleitung so abgestimmt, da es sich um Geschäftsadressen handelt.
Bloß Herr Meier kaut mir jedesmal das Ohr ab, deshalb wollt eich die Sache ein bisschen automatisieren ...

Der nächste Vorteil zu 99,98% merken die User den Spam nicht.
0,01% wenn mal eine Spam-Mail durchkommt
0,01% wenn mal eine falsche Mail aussortiert wird.

Man kann die Vorteile und Nachteile aufwiegen und die Geschäftsführung urteilte das die Vorteile überwiegen ...

Ich bin der Meinung , das ist sowieso recht wackelig, da ich alle Email-Zugangsdaten habe, könnte ich sowieso alles lesen, wenn ich wollte ... da ist die kontrolle des Spams pille-palle ...

Gruss Alex
 
Hast Du im SA den Report-Modus auf 1 oder 0?
Was fehlt sind übrigens Info's über Dein System. Vorallem Distri und MTA.

PS: Der rechtliche Einwand ist zwar berechtigt, gilt aber Firmen-Intern nicht, solange diese Vorgehensweise mit den Angestellten kommuniziert ist.

huschi.
 
Hallom

Hast Du im SA den Report-Modus auf 1 oder 0?
Wenn das report_safe ist, dann ist es auf 1 gestellt

Was fehlt sind übrigens Info's über Dein System. Vorallem Distri und MTA.
Sorry, mein System ist ein Root-Server bei Server4you, ein Debian 4.0(Etch) mit Plesk 8.2.
MTA ist Qmail
Da ich keine Plesk Lizenz für Spamassassin habe, habe ich das System ein bisschen angepasst und alles auf der Shell konfiguriert.
Spamerkennung mit SA , Virenerkennung mit ClamAV.

Hoffees ist nicht zu grob gehalten.


Gruss Alex
 
Qmail ist in dem Fall von Vorteil. Hier kann man die Email tatsächlich einfach per qmail-queue wieder in das System schmuggeln.
Das Problem ist lediglich, daß häufig das einmalige Anlernen per sa-learn nicht ausreicht um dieselbe Email ein zweites Mal mit weniger Punkten durch den SA zu bringen. Vor allem weil die gelernten Tokesn i.d.R. erst in einem "Journal" gehalten werden, welches erst in (un)regelmäßigen Zeitabständen in die Bayes-DB aufgenommen wird.

Du hast selbst gesagt, welche statischen Regeln es sind, die häufig zu hoher Punktzahl und Fehlerkennung führen: HTML-Email und dynamische IP's. (Letzeres sollte eigentlich gar nicht sein, oder?)
Das Anlernen hat sowieso nur Auswirkungen auf den Punktestand des Bayes-Filter.

Du brauchst eine Injekt-Methode, die erst nach dem SA-Filter ansetzt, bzw. diesen umgeht. Z.B. mit einem eigenen MDA wie procmail, der eigens dafür genutzt wird.

huschi.
 
Qmail ist in dem Fall von Vorteil. Hier kann man die Email tatsächlich einfach per qmail-queue wieder in das System schmuggeln.

Denke ich auch , aber leider fehlt mir der Perl-Background.
Ich könnte ja in der .qmail das weiterleiten lassen an procmail, aber wie extrahiere ich aus der Email, den eigentlichen Empfänger ([email protected]), dann wäre es ja einfach, mit procmail einfach an
[email protected] weiterleiten.
Aber wie gesagt, ich muss ja vorher noch den Empfänger parsen, und da das sowieso an sa-wrapper.pl weitergegeben wird, dachte ich könnte man das in einen Abwasch machen.
Du hast selbst gesagt, welche statischen Regeln es sind, die häufig zu hoher Punktzahl und Fehlerkennung führen: HTML-Email und dynamische IP's. (Letzeres sollte eigentlich gar nicht sein, oder?)
Das Anlernen hat sowieso nur Auswirkungen auf den Punktestand des Bayes-Filter.
Ja, aber mit dem Bayes und dem HAM-anlernen erziele ich negativ punkte , die die positiven Spam-Punkte der anderen Regeln mindern?
Sind ja nur manchmal paar Zentel.

Du brauchst eine Injekt-Methode, die erst nach dem SA-Filter ansetzt, bzw. diesen umgeht. Z.B. mit einem eigenen MDA wie procmail, der eigens dafür genutzt wird.
huschi.
Was meinst du mit Injekt-Methode, steh grad auf den Schlauch ...


Gruss Alex
 
Ja, aber mit dem Bayes und dem HAM-anlernen erziele ich negativ punkte
Ja, aber eben nicht sofort.
Ein ständiges aktualisieren der Bayes-DB würde das System zu sehr beanspruchen. Daher werden die Tokens zwischenzeitlich nur im Journal abgelegt und sind nicht sofort "gelernt".

Was meinst du mit Injekt-Methode
Inject == Einschleusen
Hier: eine Email ins System einbringen.
Die Email muß halt am bestehenden SA vorbei kommen ohne erneut geprüft zu werden.

huschi.
 
Hallo Huschi,

man hast du Arbeitszeiten *zwinker*
Ja jetzt verstehe ich, da die Mail nicht sofort gelernt wird, laufe ich gefahrt, wenn ich die Mail nochmal in die qmail-queue werfe, das sie wieder als Spam erkannt wird.
Logisch, aber soweit habe ich nicht gedacht:(

Bliebe die Möglichkeit, der Inject-Methode, oder meine Idee, die Mail direkt in das Verzeichnis zu stellen, müßte ich den Empfänger aber parsen, eventl. Groß-Kleinschreibung beachten.

HAbe bezüglich der Inject-Methode keine Idee wo ich ansetzen könnte ...

Gruss Alex
 
man hast du Arbeitszeiten *zwinker*
Wieso Arbeitszeit? Da begann meine Freizeit.

oder meine Idee, die Mail direkt in das Verzeichnis zu stellen
"Direkt" ist hier ein Problem. Aber man kann wie gesagt Procmail mit einer eigenen leeren procmailrc nutzten.

müßte ich den Empfänger aber parsen
Das dürfte das eigentliche Problem sein.
a) Kann der Empfänger evtl. im CC-Feld oder BCC-Feld stehen und dann auch noch Komma-Seperiert, und und und.
b) Vom Empfänger muß man dann auf den System-User kommen...

huschi.
 
Hallo Huschi, hallo facebraker,
ich schreib hier meinen ersten Beitrag, bitte Nachsicht, wenn ich eigentlich einen neuen Tread anlegen sollte :)
Das beschriebene Problem versuche ich auch zu lösen (Server ist Qmail, Standalone, Suse 9, procmail, SA, Clam /s.meine Frage bei huschi.net):

Wie kann ich eine mit Spamassassin "eingepackte" Spammail so in ein anderes Maildir/Box weiterleiten, dass dort die Mail wieder als "normale" Mail ankommt?

Hintergrund: Ich habe einige Weiterleitungen vom meinem Mailserver, aber T-Online blockt "anders" als Spamassassin, deshalb erzeuge ich bei potentieller Spam eine Quarantänenachricht an den Empfänger. Der ursprüngliche Empfänger kann die Mail dann aus dem Spampostfach abholen, leider als "Anhangsdatei".
SA soll aber davon nicht lernen (deshalb bitte nicht sa-wrapper), denn meist ist es eh Müll. Aber der Wunsch des Empfängers...


Super wäre, wenn ich beim anlegen der "bereinigten Mail" den dann vorhandenen Dateinamen so übergeben kann, dass man den Namen später weiter nutzen kann (könnte ich mir vorstellen das zum automatischen Abholen der Mail zu nutzen)

Ich habe mühsam ein procmailscript gebastelt, das Empfänger, Absender, Betreff auslesen kann (daraus eine Nachricht an den Empfänger erstellt) und kann die Mail auch als copy in ein temp.Datei schreiben - aber das wars auch schon. k.A wie weiter
 
Hallo Merlin,

leider habe ich keine Idee zu deinem Problem, aber an der Lösung wäre ich auch interessiert, da könnte ich mir ein Skript bauen, das mir Handarbeit abnimmt.

Aber ich bin an deinen procmail-Skript interessiert ... kannst du es mal posten, wenn es dir ncihts ausmacht?

Danke

Gruss Alex
 
Hallo Alex,
ne, macht nix aus. Ich kopier das mal hier einfach rein. Da ich kein Programmierer bin, nicht wundern, das Script funktioniert trotzdem :)
Im TMPFILE1 steht der Inhalt der Info an den User (3 Zeilen). Das mit dem
head -3 $TMPFILE1
musste ich so machen, weil es sonst nicht funktioniert. Bei meinem Virusscannerscript wird das TMPFILE mit der Mail "gefüllt" Diese TMPFILE könnte man später vielleicht weiter auswerten.

procmailpt für Quarantäneinfo:
Code:
SHELL=/bin/sh
#PATH=$HOME/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
CLAMSCAN=/usr/local/bin/clamdscan
MAILDIR=$HOME
VIRUSTARGET=$MAILDIR/users/virus/ # or what you like
TARGET=$MAILDIR/users/spam/ # or what you like
#LOGFILE=mylog.log  # only for test!
#VERBOSE="on"      # only for test!

# Test auf Level (einfach nur die DOTs statt \*)
# alles über dem spamlevel wird gelöscht

:0 H
* ^X-Spam-Level: ..........
{
  EXITCODE=99
  :0:
  /dev/null
}

# Subjekt, (das was SA einfügt) oder auch per DOTs
# x-loop, damit keine Schleife entsteht
# Sender, Subjekt und Empfänger auslesen 
# vom Subjekt die Spammarkierung entfernen (**-**SPAM**-**)
# da bei mir vmailmgr, muss ich Domainuser bei RECI "abziehen"
 
:0
* ^Subject: .....SPAM.*
* !^X-Loop: irgendwas@mailserver
{
    TMPFILE1=/var/mail/head
    SEND=`formail -xFrom:|sed -e 's/^[ ]*//g'`
    SUBJ=`formail -xSubject:|sed -e 's/^[ ]\*\*.\*\*SPAM\*\*.\*\*//g'`
    RECI=`formail -xDelivered-To:|sed -e 's/^[ ]vdomainuser-//g'`

#   move mail to spamfolder and to tmp, kill and send info to user

    :0cw:
    $TARGET

    :0
    {
    EXITCODE=99
    :0 ah
    | (formail -rA "X-Loop: irgendwas@mailserver" \
    -I "Precedence: warn" \
    -I "To: $RECI" \
    -I "From: [email][email protected][/email]" \
    -I "Subject: Mail in Quarantaene" ; \
    echo "Eine Mail an Sie von: $SEND" ; \
    echo "mit dem Betreff: $SUBJ" ; \
    echo "wurde nicht zugestellt, da Junkfaktor > 5 !" ; \
    head -3 $TMPFILE1) \
    | /usr/sbin/sendmail -oi -t -f'[email protected]';
    :0w:
    /dev/null
}
}

# Bearbeitung benden, wenn vdeliver (bei .qmail-default) dann noch:

:0 H
*
{
  EXITCODE=$?
  :0:
  /dev/null
}[/I]
##########
.qmail-default
[I]
|/var/qmail/bin/preline /usr/bin/procmail -m ./procquar
|/usr/bin/vdeliver
-> wenn .qmail-User, dann ohne vdeliver!

Auszug aus procmailscript für Virenscanner (hab ich mal irgendwo gesehen und auch ins wiki procmail geschrieben):

Code:
    TMPFILE=tmp.$$
    SEND=`formail -xFrom:|sed -e 's/^[ ]*//g'`
    ...
    VIRUS=`formail -xX-Virus:|sed -e 's/^[ ]YES//g'`

    :0cw:
    $VIRUSTARGET

    :0 awc:
    $TMPFILE
    ...
    echo "Die ersten 50 Zeilen der originalen Mail folgen..." ; \
    head -50 ./$TMPFILE) \
    | /usr/sbin/sendmail -oi -t -f'xyz@meine Domain.de'; \
    rm -f $TMPFILE

Soweit erstmal auf die Schnelle. Hoffe es hilft.
cu
Jürgen

MOD: Bitte entsprechende Code-Tags verwenden! Danke!
 
Last edited by a moderator:
SEND=`formail -xFrom:|sed -e 's/^[ ]*//g'`
SUBJ=`formail -xSubject:|sed -e 's/^[ ]\*\*.\*\*SPAM\*\*.\*\*//g'`
RECI=`formail -xDelivered-To:|sed -e 's/^[ ]vdomainuser-//g'`
Nur so nebenbei: Das ist ein Performance-Fresser.
Solche aufwendigen Dinge sollte man schon in ein eigenen Script (Perl, Python oder PHP) auslagern.
Aber Du bist ja kein Programmierer, sagst Du. Wobei, wenn ich mir das so ansehe, scheinst Du nicht allzuweit weg davon zu sein.

huschi.
 
Hallo Huschi,
Danke - alles nur gegooglet :)
Wie gesagt, bin kein Programmierer (früher mal ein bissle BASIC) und wüsste nicht, wie ich das in ein extra Script legen kann. Da diese "Performance-Fresser" ganz selten zu Anwendung kommen kann ich damit aber leben (weil: ist nur bei Virentreffern und Mailweiterleitung genutzt (ca. 1x Stunde) alles andere von den 10k smtp/Stunde wird vorher geblockt)).
Möchte aber nochmal auf die ursprüngliche Frage zurückkommen für die ich noch keine Lösung habe :o
Also: wie kann man eine von SA "angehängte" Mail wieder "bereinigt" in ein Postfach weiterleiten, ohne das SA davon lernt? Bitte INPUT
cu
Jürgen
 
Aufgrund Deiner Programmier-Erfahrung würde ich sagen:
Den Wrapper umbasteln und die extrahierte Mail per eigenem Aufruf von Procmail ohne (oder mit spezieller procmailrc) in den Account ablegen lassen.

huschi.
 
Hallo Huschi,
was für´n Stress für ´nen alten Trapper:)
Ich bin schon ein Stück weiter. Procmail schickt die "verseuchte" Mail an den modifizierten Wrapper. Habe einfach bei DEBUG die Ausgabe unter das Spamverzeichnis verbogen und SA entfernt und den Dateinamen dabei mit "Zeitstempel" aus time() versehen. Jetzt müßte ich noch die Daten für Sender, Bertreff und Empfänger extrahieren, damit ich dem ursprünglichen Empfänger eine Quarantänenachricht senden kann und auf dessen Antwort dann die Quarantänemail zustelle...
Was wäre besser: die Daten (Sender,Subject etc) aus dem Stream lesen (bitte Input) oder die abgelegte Mail "greppen"?
Die Erzeugung der Quarantänemail soll der Wrapper machen, da ich sonst den Dateinamen nicht mit übergeben kann.

Hier noch der Ausszug aus procmail (der spamwrap-pfad wird noch geändert):
Code:
:0 H
* ^Subject: ..-..SPAM..-.*
{
    TMPFILE=tmp.$$

    :0wc:
    $TMPFILE

    :0
    {
    EXITCODE=99
    :0w
    | /var/mail/meine_domain/spamwrap.pl && rm -f $TMPFILE
    :0w
    /dev/null
    }
}

die extrahierte Mail per eigenem Aufruf von Procmail ohne (oder mit spezieller procmailrc) in den Account ablegen lassen.
denke mal, das brauche ich später für die Zustellung der Mail auf Anforderung ...

cu
Jürgen
 
Last edited by a moderator:
Was wäre besser: die Daten (Sender,Subject etc) aus dem Stream lesen (bitte Input) oder die abgelegte Mail "greppen"?
Ich bin ein Fan davon alles in einem zu machen und würde daher auf die Perl MailTools zurück greifen.

Auf der anderen Seite kann man davon ausgehen, daß es eine reguläre Email ist. D.h. man kann relativ leicht einen Grep/RegEx über die ersten Zeilen laufen lassen. Probleme machen dabei nur noch die unterschiedlichen Möglichkeiten der Absender/Empfänger-Adressen.

huschi.
 
Back
Top