Saját milter hogyan

Sziasztok!

Írtam egy saját milter-t postfix-hoz, mert nagyon untam a magyar "hírleveleket", és a szemétládák úgy küldik el hogy a bayesian se segít rajta. Egész jól sikerült, de van vele egy gond. Python-ban van, és a pymilter nevű csomagot használja. Namost ez a csomag bugos, és ha berakom a programot a háttérbe akkor másnapra lesz belőle egy szép python.core állomány. Ami közben meg be akar jönni levél az visszapattan.

Szóval a pymilter helyett kellene valami más. Mondjuk egy olyan program, ami képes arra hogy kimentse a levél tartalmát, lefuttasson rá egy script-et és a visszatérési érték alapján reject vagy accept.

Tud valaki ilyesmit?

Hozzászólások

Amúgy már néztem a milter-regex csomagot, de sajnos az nekem nem jó. A szűrés nem egy egyszerű reguláris kifejezést néz, annál azért bonyolultabb.

Ugyan én még csak kapargatom a témát, de szerintem min. ez a 2 lehetőséged van:

Csinálsz egy egyszerű check_policy_service -t, ami megkapja a levelet egy csomó fejléc adattal (feladó, címzett, levél méret, címzettek száma, feladó IP, stb..) ami meghívja paraméterezve a te varázs scripteted. Annak visszatérési értéke szerint pedig a check_policy_service visszaad a postfixnak egy dunno -t, jelezve a postfixnek, hogy részéről OK, további döntést a postix hozzon. Vagy visszaad egy elutasítást, amire postfix is visszautasítja a levelet.

Másik lehetőség: master.cf-ben csinálsz content_filtert ami hasonlóan átadja a scriptednek az infókat, de ha ott OK vagy nem OK a kimenet, akkor már nincs további döntés. A levél lekezelésre kerül. (ebben javítsatok ki, ha tévedek, ez a része kicsit még homály).

Illetve az egész bugos python libet elfelejtheted. Megírod rendesen check_policy_service alá. A neten vannak rá példák amiből lehet építkezni.
Ha kész és publikus, engem érdekelne. Akár közösen összedobni. 0-ról még nem, de 2 netes check_policy_service -t már csináltam egyedire szabva, közepesen belenyúlva.

Úgy tudom hogy a policy_service csak a header-eket kapja meg, a body-t nem. Ezért ez nekem nem használható. (A szűréshez szükség van a body-ra is, abban vannak olyan szándékosan "elgépelt" leiratkozó linkek amiket föl lehet ismerni).

A content_filter akár jó is lehetne, de az már after-queue. Tehát az már csak akkor fut le amikor az MTA befogadta a levelet. Én nem szeretném befogadni a levelet. Ha az MTA azt jelzi vissza spammernek hogy a levél nem kézbesíthető, akkor lehet hogy többet nem is fog próbálkozni. Ezért jó a before-queue, de azt content_filter -rel nem lehet megcsinálni, csakis milter-rel. Persze ha nincs más megoldás akkor jöhet az after-queue.

before queue AKA "milter": http://www.postfix.org/MILTER_README.html
after queue AKA "filter": http://www.postfix.org/FILTER_README.html

Hát persze hogy nem, de a reject-nek nem is ez az értelme! Hanem az, hogy a néhány false positive esetben a FELADÓ értesüljön róla hogy nem érkezett meg a levele. Egyébként tényleg rosszul fogalmaztam, nem azt akartam írni hogy a spammer értesül róla, hanem hogy a feladó. Aki 99%-ban spammer. :-)

Az after-queue esetben a következő lehetőségek vannak:

* simán törlöd a levelet (ezt hívják discard-nak) - de akkor se a feladó se a címzett soha nem tudja meg hogy elveszett a levél, és ha egy false positive volt akkor ez nagy baj.
* kézbesíted a levelet, de hozzáírsz egy header-t vagy beleírod a subject-be hogy spam - ez majdnem olyan rossz, mert egy idő után a címzett az ilyeneket átirányítja egy spam mappába, és kb. ugyan az az eredménye mintha meg se kapta volna (vagyis rosszabb mert még a helyet is foglalja)

A before-queue estében visszautasítod azokat amik 99% spam-ek, és az az 1% akit tényleg érdekel hogy nem érkezett meg a levele, az értesül róla, és tesz ellene (ha akar). Ezt after-queue -ban nem tudod megtenni. Ezért kell a filter helyett a milter.

vagy átirányítod a levelet egy "központi" spam folder-be, ezt szemmel időnként átfutod, ami false positive azt továbbítod a címzettnek, és valahogy próbálsz rá whitelist-et alkoti. Ami pedig tényleg spam ott tiltod az ip-t (vagy tartományt, domain-t, whatever), aztán kultúráltan tiltod.

Illetve van hazai félpublikus RBL is magyar spammer-ekre, ennek is érdemes lehet utánakérdezni...

Igen, persze lehet spam folderbe iránytani, de az korántsem olyan jó megoldás. Ha a feladó értesül róla hogy nem ért célba a levél, az nagyságrendekkel jobb. Akkor a címzett válláról levesszük a szemrevételezéses spam szűrés terhét, és átrakjuk a feladó vállára. Mivel a feladó 99%-ban spammer, ezért a problémák 99%-a automatikusan megoldódik gépi úton. A maradék 1% false pozitívról meg a feladó értesítést kap (de csak arról az 1%-ról), és ha érdekli hogy célba érjen a levele akkor intézkedik. Szóval ha 100 levélből 1 false pozitív, akkor a milter-es megoldással egyetlen egy "undelivered" üzenet képződik, amit a feladó kezel. A spam folder-be mozgatásnál meg képződik 100 levél amit végig kell olvasni egy EMBERNEK.

Ez a magyar félpublikus lista érdekel! :-)

A félpublikus lista alatti link janoszen egyik post-jára mutat, vedd fel Vele privátban a kapcsolatot.

Az a napi 100-200 levél szerintem nem mennyiség, a spam-ek 99%-áról kb. 3 másodperc megállapítani hogy spam-e, törléssel együtt. Kicsit tovább tart ha a header-t megnézed és a spammer IP-t tiltod tűzfalon vagy postfix-ből check_client_access-szel.

Az a baj, hogy a spammerek is rajottek, hogy mi a helyzet, es elkezdenek legitim VPS-eket berelni plusz domaineket vasarolni az uzemleikhez. Eppen ezert blacklistazom en a domaineket a kuldo IP-k helyett. (Az utobbi csak akkor kerul listazasra, ha egy-egy VPS szolgaltato keptelen megoldani a halozatabol szarmazo spam aradatot.)

--
Pásztor János
Sole Proprietor @ Opsbears
Development Lead @ IXOLIT
Refaktor Magazin

Ha ilyen durva szűrés mellett (ami EGÉSZEN BIZTOSAN csomó fals pozitív találatot is hoz, már csak a reverse hostname check miatt is: sok a balfasz sysop) is bejön napi 200 spam, akkor szerintem vegyetek fel egy diákmunkást, aki átválogatja reggel meg napközben a bejövő emaileket. Sokszor már a subject alapján is eldönthető a mizu. :P

Ha 20k-ből 200 spam, akkor az nagyon jó arány, az mehet a user-nek :)

Amúgy ez alapján szerintem pont jól ülök a lovon: "Igen, persze lehet spam folderbe iránytani, de az korántsem olyan jó megoldás. ... A spam folder-be mozgatásnál meg képződik 100 levél amit végig kell olvasni egy EMBERNEK."

:-)

Ha véletlenül bejön magyar spam, akkor azt tudom jelenteni erre a listára? Van erre hivatalos mód?

(Ha nem szeretnéd az sem baj, csak segíteni szeretnék.)

Van javaslatod arra, hogy angol spam ellen mit használjak? Jelenleg ezeket használom reject_rbl_client -tel: sbl.spamhaus.org dnsbl.sorbs.net

Ezen felül van spamassassin és pyzor. Angol nyelvűek még mindig túl sokan jönnek be.

Egyelore nincs jelentesi lehetoseg, van 2-3 ember akit szemelyesen ismerek es besegit, es van jopar spamtrap cimem. Ha kulsoktol fogadnek el peldakat, akkor mindenfele adatkezelesi hulyeseg jonne szembe.

Egyebkent ha Postfixet hasznalsz, akkor csak a lista felet tudod defaultbol hasznalni, van egy URIBL is, ami sokkal tobb mindent tartalmaz, de az tudtommal csak policy daemonnal kotheto be.

--
Pásztor János
Sole Proprietor @ Opsbears
Development Lead @ IXOLIT
Refaktor Magazin

Subscribe, egyre undorítóbb, ahogy csinálják.

Sima C-ben írtam milter-t más célból. Elég primkó, de szépen megy, nem crash-el. Eltartott egy ideig, amíg sikerül kigyomlálni. Habár csak a levél fejléc mezőjét nézi, a csomó féle encoding miatt az sem egyszerű...

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."