Dieses kleine Skript führe ich gelegentlich aus, um neue Betreff Filterregeln in Postfix hinzuzufügen, um es nicht manuell machen zu müssen.
Vorweg, ich benutze das Maildir Format. Das bedeutet, jedes Mail wird als einzelne Datei am Server abgelegt.
Das Skript sucht zuerst nach dem Begriff „*SPAM“ im Betreff.
Das sind die Mails die von Spamassassin (Amavis) schon als SPAM markiert wurden.
Diese kommen oft immer wieder oder auch mehrmals pro Tag und damit sie gar nicht erst angenommen werden, möchte ich diese schon in Postfix filtern.
Das sed Kommando ändert das t: von „Subject:“ in t~ um, damit das anschließende awk die ~ als Trennzeichen nutzen kann und es setzt ein \ (Backslash) for bestimmte Sonderzeichen, die Postfix sonst anders interpretieren würde.
Der Grund ist, das in Betreffs der Doppelpunkt öfter verwendet werden als die Welle und ich möglichst den ganzen Betreff in die header_checks Datei eintragen möchte.
Das cut entfernt das ***SPAM*** aus dem Betreff.
Die grep -vw Einträge nehmen Betreff Texte aus, die man nicht filtern möchte.
Das grep -ev entfernt leere Zeilen.
Und das sort -u entfernt Duplikate.
Es prüft auch vorher, ob der Eintrag, den es eintragen soll, schon vorhanden ist (RC=.. if $?)
#!/bin/bash
grep -r "\*SPAM" /var/mail/vmail/domain.org/username/.Junk/* | sed -e 's/t\:/t\~/g; s/\?/\\\?/g; s/\ß/\\\ß/g; s/\!/\\\!/g; s/\$/\\\$/g; s/\%/\\\%/g; s/\//\\\//g; s/\&/\\\&/g;' -e 's/\./\\\./g;' -e 's/\=/\\\=/g;' -e 's/\"/\\\"/g;' -e 's/\-/\\\-/g;' -e 's/\#/\\\#/g;' -e 's/[(]/\\[(]/g;' -e 's/[)]/\\[)]/g;' -e 's/[{]/\\[{}/g;' -e 's/[}]/\\[}]/g;' -e 's/[[]/\\[[]/g;' -e 's/[[]/\\[]]/g;' -e 's/\*/\\\*/g;' | awk -F~ '{print $2}' | cut -c19- | grep -vw Re | grep -vw AW | grep -vw "Guten Morgen" | grep -ve '^$' | sort -u > /tmp/headerjunk
while read a; do RC=$(grep -Fw "/^Subject:.*$a.*/ REJECT SPAM Rule $a" /etc/postfix/header_checks); if [ $? != 0 ]; then echo /^Subject:.*$a.*/ REJECT SPAM Rule $a >> /etc/postfix/header_checks; fi; done < /tmp/headerjunk
rm /tmp/headerjunk
postfix reload
In das header_checks File kommt dann ein Eintrag, der zum Beispiel so aussieht:
/^Subject:.*Our Prices.*/ REJECT SPAM Rule Our Prices
Der Absender bekommt damit eine Antwort das seine Mail abgelehnt wurde mit dem Text „SPAM Rule Our Prices“.
Wenn es sich dabei um keine SPAM handelt, kann der Sender den Betreff ändern oder sie kontaktieren und sie können den Eintrag aus der header_checks entfernen.
Oder den Absender in eine Whitelist eintragen.
Man muss nicht den Junk Ordner dafür hernehmen.
Sie können auch einen eigenen Ordner für Mails dessen Betreff sie filtern möchten anlegen, diese Mails dort ablegen und das Skript darauf laufen lassen.
{jcomments on}