Freitag, 29. Januar 2010
Kleine Spamassassin Rule gegen Pillenlinks im Mailheader
Lustig, zur Zeit läuft eine Spamwelle, bei der die Pillenlinks (Viagra, Cialis...) im "From" des Mailheaders untergebracht werden. Der Textteil der Mails ist dann nur sinnfreie Buchstabensuppe.
Da war ja mal wieder jemand kreativ.
Im Allgemeinen werden die Mails von Spamassassin gut aussortiert. Falls das doch nicht der Fall wäre, hilft folgende Rule in der local.cf:
Da war ja mal wieder jemand kreativ.
Im Allgemeinen werden die Mails von Spamassassin gut aussortiert. Falls das doch nicht der Fall wäre, hilft folgende Rule in der local.cf:
header MINIVIAG From =~ /(Viagra|Levitra|Cialis) .*www\.[a-z0-9]{4,8}\.(com|net|org)/i
describe MINIVIAG Viagra link im from
score MINIVIAG 2.0
Update: Da bessere ich gleich noch mal nach.
describe MINIVIAG Viagra link im from
score MINIVIAG 2.0
header MINIVIAG From =~ /(Viagra|Levitra|Cialis|Tamiflu) .*www\.[a-z0-9-]{4,8}\.(com|net|org)/i
describe MINIVIAG Pillenlink im from
score MINIVIAG 2.0
describe MINIVIAG Pillenlink im from
score MINIVIAG 2.0
Mittwoch, 6. Januar 2010
Mailheader decodieren mit Hilfe von perl
Spamfilter können auf Wunsch die aussortierten Mails am Server speichern. An sich sieht man es den Mails schon am Betreff an, ob sie tatsächlich spam oder doch ham (und in diesem Fall eventuell ein false positive) sind.
Allerdings müssen non-ascii Teile des Mailheaders passend encodiert sein, was das Lesen teilweise unmöglich macht.
Ein paar Beispiele:
=?iso-8859-1?Q?Hall=F6chen?=
=?UTF-8?Q?Hall=C3=B6chen?=
=?UTF-8?B?SGFsbMO2Y2hlbg==?=
=?iso-2022-jp?B?GyRCOiNHLyRiSSwkOiRkJGo/ayQyJGsbKEIhIRskQkcvS3ZBMCRO?=
=?GB2312?B?0rvSubzkyMM1MDDN8sjLudjXosT6svrGt7XEzfjC59Oq?=
Da sind diverse encodings, mal in quoted printable, mal in base64. Allen gemeinsam ist die schwere Lesbarkeit.
Mailheader oder Teile davon kann man am einfachsten mit perl decodieren:
Aber auch ganze Unterordner voller Spammails können durchsucht werden:
Nicht encodierte Teile sind übrigens gar kein Problem.
Allerdings müssen non-ascii Teile des Mailheaders passend encodiert sein, was das Lesen teilweise unmöglich macht.
Ein paar Beispiele:
=?iso-8859-1?Q?Hall=F6chen?=
=?UTF-8?Q?Hall=C3=B6chen?=
=?UTF-8?B?SGFsbMO2Y2hlbg==?=
=?iso-2022-jp?B?GyRCOiNHLyRiSSwkOiRkJGo/ayQyJGsbKEIhIRskQkcvS3ZBMCRO?=
=?GB2312?B?0rvSubzkyMM1MDDN8sjLudjXosT6svrGt7XEzfjC59Oq?=
Da sind diverse encodings, mal in quoted printable, mal in base64. Allen gemeinsam ist die schwere Lesbarkeit.
Mailheader oder Teile davon kann man am einfachsten mit perl decodieren:
echo '=?UTF-8?B?SGFsbMO2Y2hlbg==?=' | perl -MEncode -ne 'print encode("utf8",decode("MIME-Header",$_))'
Obiges Beispiel decodiert nicht einfach nur den Header, sondern encodiert auch gleich in UTF-8 (default wäre iso).Aber auch ganze Unterordner voller Spammails können durchsucht werden:
ls -1t | head -20 | xargs grep '^Subject: =?' | perl -MEncode -ne 'print encode("utf8",decode("MIME-Header",$_))'
Dieses Beispiel durchsucht die neuesten 20 Mails im Ordner nach encodierten Subjects und gibt diese decodiert als UTF-8 aus.Nicht encodierte Teile sind übrigens gar kein Problem.
Donnerstag, 31. Dezember 2009
Diverse Maildienste auf der Kommandozeile testen
Vertrauen ist gut, Kontrolle ist besser. Hier folgt eine Sammlung von Kommandozeilentests für diverse Maildienste (smtp, pop, imap...)
Wir gehen davon aus, dass der Mailserver erfolgreich installiert ist, in diesem Fall sei das Postfix mit Postgrey und Amavis, das Zertifikat wurde erstellt, die erforderlichen Dienste laufen und die gewünschten Ports sind in der Firewall geöffnet. Die Dienste imap, imaps, pop3 und pop3s werden von Dovecot zur Verfügung gestellt.
Als Beispieldomain verwende ich dein.mailserver.net, als Beispiel-IP 1.2.3.4, der Beispieluser (brauchen wir zum Testen der Dienste mit Login) heißt userlein und er hat das Passwort "geheim".
Um es übersichtlicher zu machen, sind die einzugebenden Befehle grün, die Antworten des Servers, auf die es besonders ankommt sind blau.
Nun aber zu den Praxisbeipielen:
Wir gehen davon aus, dass der Mailserver erfolgreich installiert ist, in diesem Fall sei das Postfix mit Postgrey und Amavis, das Zertifikat wurde erstellt, die erforderlichen Dienste laufen und die gewünschten Ports sind in der Firewall geöffnet. Die Dienste imap, imaps, pop3 und pop3s werden von Dovecot zur Verfügung gestellt.
Als Beispieldomain verwende ich dein.mailserver.net, als Beispiel-IP 1.2.3.4, der Beispieluser (brauchen wir zum Testen der Dienste mit Login) heißt userlein und er hat das Passwort "geheim".
Um es übersichtlicher zu machen, sind die einzugebenden Befehle grün, die Antworten des Servers, auf die es besonders ankommt sind blau.
Nun aber zu den Praxisbeipielen:
"Diverse Maildienste auf der Kommandozeile testen" vollständig lesen
Amavis, sa-learn und awl
Gelegentlich flutscht auch mal ein Spammail durch den Amavis-Filter und landet damit ungewollt in der Autowhitelist, bzw. wird von Bayes fälschlicherweise als sauber erkannt.
Mit zwei Kommandos kann das richtig gestellt werden.
Amavis läuft als unprivilegierter User (in diesem Fall als vscan), damit sa-learn und spamassassin für den richtigen Filter funktionieren, rufen wir die Kommandos mit sudo auf (als root):
Das kann natürlich auch gleich getestet werden:
Mit zwei Kommandos kann das richtig gestellt werden.
Amavis läuft als unprivilegierter User (in diesem Fall als vscan), damit sa-learn und spamassassin für den richtigen Filter funktionieren, rufen wir die Kommandos mit sudo auf (als root):
sudo -u vscan spamassassin --remove-addr-from-whitelist spammer@doofe-domain.net
...entfernt die Email Adresse aus der Whitelist.
sudo -u vscan sa-learn --spam spammail.eml
...trainiert Bayes auf das vormals durchgeflutschte Mail (hier spammail.eml).Das kann natürlich auch gleich getestet werden:
sudo -u vscan spamassassin -L -D < spammail.eml
Siehe da, Bayes vergibt jetzt 3.5 Punkte, AWL ist völlig verschwunden.Sonntag, 20. Dezember 2009
Floats vergleichen in der Bash
Die Bash (test) kann an sich nur Ganzzahlen vergleichen, übergibt man eine Fließkommazahl, führt das zu einem Fehler.
So richtig Sinn macht das klarerweise erst mit Variablen:
if [ 12.3 -gt 12 ]; then echo '>'; fi
bash: [: 12.3: integer expression expected
Möchte man doch schnell mal zwei floats vergleichen, geht das ganz einfach mit bc. Zuerst interaktiv:
bash: [: 12.3: integer expression expected
xela@linux:~> bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. if (10.123 > 10.1119) 1 else 0 1 quitUm diese Art Test in einem Skript verwenden zu können, nehmen wir "echo" zum Übergeben an bc:
if [ $(echo "if (19 >= 19.00000) 1 else 0" | bc) -eq 1 ] ; then echo größergleich; else echo kleiner; fi
Wichtig dabei ist das "else 0", damit auf alle Fälle ein Integer (Ganzzahl) zurückgegeben wird, den test (also [ ) dann vergleichen kann.So richtig Sinn macht das klarerweise erst mit Variablen:
a='3.333'; b='3.2176'; if [ $(echo "if (${a} > ${b}) 1 else 0" | bc) -eq 1 ] ; then echo größer; else echo kleiner; fi
Mittwoch, 26. August 2009
ffmpeg Schrifteffekt mit vhook imlib2.so
FFMPEG bietet ein paar dürftig dokumentierte Effekte, sogenannte vhooks. Einer davon ist imlib2.so. Zwar sind die vhooks zu nicht viel nütze, werden auch gar nicht mehr weiter entwickelt und sind in der Anwendung gräßlich kompliziert. Einen lustigen Effekt möchte ich euch aber nicht vorenthalten: eine Schrift, die etwas zeitverzögert übers Bild huscht und dabei langsam transparent wird.
Zuvor muss in der Shell noch die Variable FONTPATH gesetzt und exportiert werden, falls sie nicht gesetzt ist:
Jetzt aber im Detail:
ffmpeg -i input.flv -vhook '/usr/lib/vhook/imlib2.so -c white -x 250 -y H+(-1.8*N+80) -t Hallo! -A max(0,255-exp(N/16))' -sameq -acodec copy output.flv
Ja, das ist eine mords Codewurst.Zuvor muss in der Shell noch die Variable FONTPATH gesetzt und exportiert werden, falls sie nicht gesetzt ist:
FONTPATH="/usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/fonts/"
export FONTPATH
Sonst findet ffmpeg die Schriften nicht. Obiger Ordner ist nur ein Beispiel, dort liegt bei mir zufällig die Schrift, die ffmpeg per default verwendet. Zwar kann das noch mit -f gesetzt werden, aber der Befehl ist auch so schon lang genug.export FONTPATH
Jetzt aber im Detail:
"ffmpeg Schrifteffekt mit vhook imlib2.so" vollständig lesen
Freitag, 21. August 2009
Spamassassin Anti-Bilderspam 3
Eine weitere Regel, die auf den momentan kursierenden Bilderspam (wieder die blauen Pillchen) zutrifft.
Das kann z.B. als Datei susp_jpg.cf im selben Ordner wie local.cf abgelegt werden.
Die Rule trifft zu, wenn
1) die Email von einer dynamischen IP stammt
2) ein einzelnes JPEG angehängt ist
3) das Bild in den Dimensionen zwischen 230 und 440 Pixel (Breite und/oder Höhe) liegt
4) der Anhang inline ist
RDNS_DYNAMIC und __JPEG_ATTACH_1 werden nicht hier definiert, sondern kommen schon mit Spamassassin mit.
Für so ein verdächtiges JPEG gibt es dann 2,2 Punkte dazu.
Eine etwas speziellere Variante:
Das kann z.B. als Datei susp_jpg.cf im selben Ordner wie local.cf abgelegt werden.
# Contains jpeg 230-440 (high) x 230-440 (wide)...
body __DC_JPEG_230_440 eval:image_size_range('jpeg', 230, 230, 440, 440)
mimeheader __INLINE_ATT Content-Disposition =~ /inline;/
meta SUSP_JPG (RDNS_DYNAMIC && __JPEG_ATTACH_1 && __DC_JPEG_230_440 && __INLINE_ATT)
describe SUSP_JPG Contains supect sized single jpeg and comes from dynamic ip
score SUSP_JPG 2.2
body __DC_JPEG_230_440 eval:image_size_range('jpeg', 230, 230, 440, 440)
mimeheader __INLINE_ATT Content-Disposition =~ /inline;/
meta SUSP_JPG (RDNS_DYNAMIC && __JPEG_ATTACH_1 && __DC_JPEG_230_440 && __INLINE_ATT)
describe SUSP_JPG Contains supect sized single jpeg and comes from dynamic ip
score SUSP_JPG 2.2
Die Rule trifft zu, wenn
1) die Email von einer dynamischen IP stammt
2) ein einzelnes JPEG angehängt ist
3) das Bild in den Dimensionen zwischen 230 und 440 Pixel (Breite und/oder Höhe) liegt
4) der Anhang inline ist
RDNS_DYNAMIC und __JPEG_ATTACH_1 werden nicht hier definiert, sondern kommen schon mit Spamassassin mit.
Für so ein verdächtiges JPEG gibt es dann 2,2 Punkte dazu.
Eine etwas speziellere Variante:
# Contains jpeg 230-400 (high) x 230-400 (wide)
body __DC_JPEG_230_400 eval:image_size_range('jpeg', 230, 230, 400, 400)
mimeheader __INLINE_ATT Content-Disposition =~ /inline;/
meta SUSP_JPG ((RDNS_DYNAMIC || RDNS_NONE || RCVD_IN_PBL) && __JPEG_ATTACH_1 && __DC_JPEG_230_400 && __INLINE_ATT && !HTML_MESSAGE)
describe SUSP_JPG Contains supect sized single jpeg, comes from fishy ip, is not HTML
score SUSP_JPG 2.5
body __DC_JPEG_230_400 eval:image_size_range('jpeg', 230, 230, 400, 400)
mimeheader __INLINE_ATT Content-Disposition =~ /inline;/
meta SUSP_JPG ((RDNS_DYNAMIC || RDNS_NONE || RCVD_IN_PBL) && __JPEG_ATTACH_1 && __DC_JPEG_230_400 && __INLINE_ATT && !HTML_MESSAGE)
describe SUSP_JPG Contains supect sized single jpeg, comes from fishy ip, is not HTML
score SUSP_JPG 2.5
« vorherige Seite
(Seite 5 von 11, insgesamt 74 Einträge)
» nächste Seite