Exim howto part 3 - Spam szűrés

 ( janoszen | 2009. szeptember 27., vasárnap - 21:23 )

Mint az előző részben utaltam rá, egy MX önmagában nem elég. Van néhány dolog, amit el kell követnünk annak érdekében, hogy ne duguljon be a szerverünk a spamtől.

A blogbejegyzés elköltözött. Olvass többet a blogomon.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

következő alkalommal gyártunk egy csinos autentikált levelezőszervert. Stay tuned.

Na ne siessunk ennyire elore. Hogyan lehet ravenni az eximet arra, hogy masfele content-filterrel beszeljen ugy, mint az SA-val?

A kliens (=exim*) kuld egy ilyet: PROCESS SPAMC/1.4..User: spamc..Content-length: 1119.... (aztan jon a level maga, header+body).

Az SA visszaadja, hogy pl: SPAMD/1.1 0 EX_OK..Content-length: 3751..Spam: True ; 7.0 / 5.0.... (aztan a modositott level).

De ha nekem masfele termekem van, akkor mit adjon vissza az eximnek ez a termek, hogy az exim ertse a valaszt? Emulalja az SA-t? Egyaltalan: mit kuld neki az exim?

*: ize, postfix-szel osszelove a spamc-t legalabbis ezt adta

SPAMtelenul - POP3 spamszuro szolgaltatas

Az Eximbe bele tudsz forgatni spamc-t, ami a fenti protokollt beszéli. Ezt támogatja. Ha más spamszűrő megoldásra vágysz, akkor írd meg a nevét és meglesem, hogy lehet működésre bírni.

Köszönöm a harmadik részt. Ismét gyűlik a fény. :)
SJ hozzászólására a megoldásod, meglátásod érdekelne, mert szinte mindenütt Exim+SA a "divat".

Az SA jó dolog, de koránt sem tökéletes. A Dovecotba integrálható Dspamról is jókat olvasni pl.

Én azon a véleményen vagyok, hogy a lehető leghamarabb dobjam ki a SPAM-et a rendszeremből. Ha a Dovecot teszi ezt, az azt jelenti, hogy már átvettem és kézbesítettem a címzettnek és csak az olvasásakor, megnyitásakor fut le a levélen az ellenőrzés. Rosszul értelmezem?
Ennél talán a procmail is jobb közvetlen a postaládába tevés előtt.

Lehet ilyet, de amiről nem vagy biztos, hogy spam, azt nem biztos, hogy ki akarod dobni a rendszerből. Asszem írok majd egy 3.1 részt is, ahol leírom, hogy kell spam mappába tenni a spamet.

Én a *spam*-ről beszéltem.
A határeseteket természetesen jelölöm én is és külön kezelem, de mindettől függetlenül, érdekel a 3.1-es kifejtés is.

clapf a neve, es preferaltan smtp-n beszelget :-) Ok, ugy meg lehet oldani, hogy konfigolsz _2_ eximet, koze meg bedobod a content filtert. De ha tudnam/d, hogy az exim milyen protokollt (tud) beszelget(ni) a tartalomszurovel, akkor tudnam ugy modositani a clapf-ot (ha kell), hogy egyutt tudjon mukodni az eximmel is.

SPAMtelenul - POP3 spamszuro szolgaltatas

Én az SMTP protokollt beszélő cuccokért sosem voltam oda. Egyrészt mert általában kevéssé konfigurálhatóak, másrészt mert saját queue-t tartanak fönt, amit vagy menedzselni tud az ember vagy nem (SMTP követelmény).

Azt hittem, az exim is egy smtp szerver... Btw. a clapf-ban egy halom parametert lehet tekerni, es nincs sajat queue-ja, amit menedzselni kellene. :-)

SPAMtelenul - POP3 spamszuro szolgaltatas

Ok, de az ilyen cuccoknak általában az kell, hogy ők figyeljenek a 25-ös porton. Namost, akkor viszont elesel attól, hogy Exim alatt ACL szabályokat tudj írni a kapcsolatra. Ha meg beékelődik két Exim közé, akkor a szabálykészleted JÓVAL megbonyolódik. Kellene írni valami socket daemont, ami realtime oda-vissza tolja az adatokat, kvázi mint a clamd.

Ezt oda teszed, ahova akarod, default a 127.0.0.1:10025/tcp-re ul. A clamd azert nem egeszen oda-vissza tolja a cuccot, hanem megadsz neki egy path-t, o meg visszaadja, hogy ok/nem ok/... Az SA / spamd csinalja ugy, hogy megkapja a levelet valamilyen protokollal, majd visszaadja valamilyennel. A kerdesem arra vonatkozott, hogy ismered-e ezt a protokollt, ill. hogyan modositsam a clapf demont, hogy az eximmel beszelgessen? (erre irtam, hogy jelenleg smtp-n tud beszelgetni.....)

SPAMtelenul - POP3 spamszuro szolgaltatas

A clamd csak akkor tesz így, ha nem TCP-n kapja az információt.

Ami a clapf daemont illeti, ha rá akarod venni a SPAMD protokoll beszélésére, az nem túl nehéz. A protokoll nagyjából hasonlít a HTTP-re, de jóval egyszerűbb annál. Itt van a leírása. PHP-ban írtam már hozzá tanító osztályt is.

A fenti azt jelenti, hogy a Clapf SMTP szerverként viselkedik, kvázi levelező szerver a külvilág számára? Ha igen, miért nem Ő fogadja a bejövő leveleket, mint egy SMTP proxy, miért kell két Exim közé beékelni?
Mennyire SMTP beszélő alkalmazás a Clapf, mennyire használható a fentebb említett célra?

A fenti azt jelenti, hogy a Clapf SMTP szerverként viselkedik, kvázi levelező szerver a külvilág számára?

Korrekt.

miért nem Ő fogadja a bejövő leveleket, mint egy SMTP proxy,

Mert tartalomszuresre van kihegyezve, es nem altalanos smtp funkciokra, mint pl. relay-zes, mailbox kezeles, level forward-olas, kliensek connection kezelese, queue kezeles, stb. Illetve nincs benne (bar nem lenne nehez) open relay vedelem.

Mennyire SMTP beszélő alkalmazás a Clapf, mennyire használható a fentebb említett célra?

Nagyon smtp-t beszelo, de (egyelore) nem ugy van kialakitva (ld. fentebb), hogy kozvetlenul az Internetre kosd, bar megteheted, ha akarod.

SPAMtelenul - POP3 spamszuro szolgaltatas

Mert tartalomszuresre van kihegyezve, es nem altalanos smtp funkciokra, mint pl. relay-zes, mailbox kezeles, level forward-olas, kliensek connection kezelese, queue kezeles, stb. Illetve nincs benne (bar nem lenne nehez) open relay vedelem.

Én itt csak arra gondoltam, hogy a levelet megfogja, eldönti, hogy spam-e és ha szerinte nem, továbbadja egy "éles" MTA-nak, ami a többi szűrést és kézbesítést elvégzi. Csak hogy minél kevesebb erőforrás kössek le egy feladatra, a célom az lett volna a felvetéssel.

Lehetne igy is, teszteltem ilyen felallast is, es jol szolt, de a levelezesben eppen a tartalomszures az eroforrasigenyes resz.

SPAMtelenul - POP3 spamszuro szolgaltatas

Igazad lehet...

Sikerült foglalkozz az Exim+Clapf házasítással?

nem volt meg idom ra, de janoszen adott egy jo linket, ahol le van irva a http-szeru protokoll, ugyhogy nem lehetetlen vallalkozas. Hasznalnal egy ilyen kombot?

SPAMtelenul - POP3 spamszuro szolgaltatas

Mivel a környezetemben én vagyok az *egyetlen* Postfix hívő, így mindegy, hogy az Exim4 tanulás mellé, még mit csapok hozzá. Szóval igen. Egy próbát megér és gyanítom a Clapf használhatósági körét is szélesítené masszívan.

ok, osszedobok hozza egy demont, ami az SA helyen figyel majd, aztan kuldok levelet, ha elkeszultem.

SPAMtelenul - POP3 spamszuro szolgaltatas

OK. Köszönöm.

Összeraktam magamnak egy Postfix+Clapf párost.
Megy minden szépen, de két kérdésem lenne ezzel kapcsolatban:

- A webui bejelentkezésnél mindenütt admin néven hivatkozol az adminisztrációs felhasználónévre a doksiban, de én csak admin@local névvel tudtam belépni. Én néztem be valamit, vagy a doksi hiányos ezen a ponton?

- A szűz telepítésnél, ahol nincs semmi spam/ham gyűjteményem, meg lehet csinálni a betaníttatáson kívül valamivel az adatbázis táblastruktúráját? Például a webui azok nélkül hibát dob, így kénytelen voltam egy-egy kamu levéllel megtaníttatni/táblákat létre hozatni.

A felhasznalonev valoban 'admin', de belepni a 0.4.2-tol mar az email cimmel lehet, ami 'admin@local'.

Az adatbazis tablastrukturajat a db-mysql.sql script lefuttatasaval lehet letrehozni. Melyik url dobott a milyen hibat ures adatbazisnal? Vagy az egyik tablad volt ures?

SPAMtelenul - POP3 spamszuro szolgaltatas

Dobtam a meglevő adatbázis tábláit...
Közvetlen a login után.
Url: http://192.168.130.130/webui/index.php?route=login/login

A hiba:
Error: Table 'clapf.user' doesn't exist
Error No: 1146
SELECT user.username, user.password, user.isadmin, user.domain FROM user, t_email WHERE t_email.email='lavian@clapf.demo.hu' AND t_email.uid=user.uid

A webui, ha nem találja a táblákat, a meglevő config.php-ja alapján meg tudná csinálni őket?

a setup kepes lehet ra. A mar mukodo webui-nak kellenek a tablak, a bejelentkezes is azok alapjan megy. Tehetek a setup.php-ba egy opciot, hogy keszitse el a tablakat.

SPAMtelenul - POP3 spamszuro szolgaltatas

Az én és még pár kezdő életét biztosan megkönnyítené kicsit.
Köszönöm

Még két dolog jutott eszembe:
- A setup felület megkérdezhetné az adminisztratív felhasználó nevét és mellé írná (a képernyőre is), hogy '@local' lesz a vége, valamint a választott jelszót kérné ehhez. Tehát nem lenne default felh/jelszó páros.

- Szerintem kellene a jelszó elfelejtése esetén egy beírom a mail címem és elküld ide egy véletlenszerűen generált jelszót lehetőség a felületre.

Az utóbbi pont nálam még megoldott, mert bele tudok nyúlni az adatbázisba, de több száz, ezer user esetében ez már nem járható.

Vélemény?

Friss telepítés:
http://192.168.130.130/webui/index.php?route=history/history

Ezt kapom:

Történet
Error: could not find driver

clapf web UI

Milyen driver kell neki?

PDO::SQLite3 (elvileg az 5.x php-ben benne van).

SPAMtelenul - POP3 spamszuro szolgaltatas

Köszönöm.

Felraktam, most ez kapom:
Error: SQLSTATE[HY000] [14] unable to open database file
Mi hozza létre az említett adatbázis fájlt, ill. miért nem nyitható?

ez hozza letre (ha lefuttatod, akkor maris nyithato lesz):

sqlite3 /var/lib/clapf/data/log.sdb < /usr/local/share/clapf/mail.sql

ez irja:

/usr/local/libexec/clapf/maillog.pl /var/log/maillog /var/lib/clapf/data/log.sdb &

SPAMtelenul - POP3 spamszuro szolgaltatas

Szia

Egy kis statisztika a csomagokról, amelyek a telepítés során a fordításhoz, ill. a működéshez kellettek.
Az alapja egy Ubuntu 9.04.

aptitude install build-essential
aptitude install postfix
aptitude install maildrop
aptitude install mysql-server
aptitude install mysql-client
aptitude install kernel-package
aptitude install mysql-dev
aptitude install libmysqlclient-dev
aptitude install libmysql++-dev
aptitude install php5
aptitude install php5-cgi
aptitude install lighttpd
aptitude install php5-mysql
aptitude install mailutils
aptitude install clamav-daemon
aptitude install clamav-freshclam
aptitude install php5-sqlite
aptitude install libdbd-sqlite3-perl
aptitude install libfile-tail-perl
aptitude install sqlite3

(Itt a kernel-devel lustaságból ment fel. Nem volt kedvem kiválogatni a make, autoconf, gcc,... csomagokat és a lighttpd meg a "könnyűsége" miatt került fel.)

Így visszagondolva egy profi segítséggel a nulláról két nap alatt működött a rendszer, ami végeredményben jó.

Egy kérdésem lenne: Mennyi értelmét látod az "Installation instructions" elején ezeket feltüntetni?

(Ideje átállítsam a rendszerem Exim4-re... 8-) )

Mar ott is van.

SPAMtelenul - POP3 spamszuro szolgaltatas

- A setup felület megkérdezhetné az adminisztratív felhasználó nevét és mellé írná (a képernyőre is), hogy '@local' lesz a vége,

Akar igy is lehetne, igaz. Atgondolom meg ...

- Szerintem kellene a jelszó elfelejtése esetén egy beírom a mail címem és elküld ide egy véletlenszerűen generált jelszót lehetőség a felületre.

felirom a TODO listara, kossz a tippet.

Ma estere sikerult levalasztani az smtp demon kodjarol az antispam reszt. Tesztelem meg par napig, hogy koser-e, aztan johet a "spamd emulator".

SPAMtelenul - POP3 spamszuro szolgaltatas

Ha elakadsz a protokollal, szólj, szívesen segítek.

Meg nem jarok a protokollnal, de meg tudod azt mondani, hogy van-e lehetoseg az exim-nel arra, hogy az envelope adatokat (mail from, rcpt to, smtp kliens IP-cime) atadja a content filternek valamilyen modon?

Mert ha a mail headerbol kell kiparse-olni a From: es To: esetleg Cc: cimet, az bizonyos feature-oket lehetetlenne tesz.

SPAMtelenul - POP3 spamszuro szolgaltatas

Húha, elvileg az envelope-from és envelope-to headereknek benne kellene lenniük. A kliens címének a legutolsó received headerben kellene benne lennie (de a received header konfigurálható formátumu).

Gondolkodtam kicsit a spam/ham betanításon. Ha jól értelmezem ezt így (is) lehet elkövetni: továbbküldöm a levelet a user+ham@valami.hu, user+spam@valami.hu-ra.
Ezzel kapcsolatban a következők merültek fel bennem:
- A rendszer mindenhonnan fogad levelet ezekre a címekre? Ha igen, akkor pillanat alatt fel lehet borítani a jó/rossz tokenek arányát, ha valaki kinézi magának a spamszűrőt és elkezdi küldeni mondjuk spamként/spamre a netről kivágott értelmes szövegeket.
- Csak a user @ valami.hu-ról fogad levelet? Ha igen, az nem sokban különbözik a fentitől.
- Mi a véleményed arról, hogy a clapf-nek beállítható legyen 'a.a.a.a/bb, c.c.c.c/dd' formátumban, hogy az ISP, vagy a NagyCég milyen IP tartományokkal rendelkezik és csak innen fogad, saját mailcímről betanító levelet és saját címről, de legalábbis a userhez rendelt címekről?
(Mondjuk, ha így van jelenleg is, akkor tárgytalan a dolog.)

Ha az utóbbi esetben a megadott tartományon, tartományokon kívülről kap betanító levelet:
- sikoltozva értesítse a rendszergazdát mailben, hogy nagy a baj, mert valaki próbálkozik
- hívjon meg egy külső script-et, amivel adott akciókat meg tudok csinálni, mondjuk tűzfalazok. Persze ebben az esetben paraméterként talán átadhatná a következőket: küldő mail címe + küldő hoszt neve + küldő IP + küldő mailszerver neve/domainje + küldő mailszerver IP-je
Ezzel már eléggé sok dolgot lehetne elkövetni.

A levelben van egy clapf level/queue/... azonosito. Amikor jon egy level tanitasra, akkor az alapjan megnezi, hogy az adott user queue konyvtaraban (.../queue/domain/u/user) szerepel-e ez az azonosito. Ha nem, akkor eldobja a tanitasi kerest. A clapf id-k tehat kvazi jelszokent is funkcionalnak erre a celra. Mivel a queue konyvtarban levo file-ok pedig folyamatosan torlodnek, kb. 1-2 het utan (vagy amennyit beallitasz), imho keves eselye van egy ilyen mergezesnek.

SPAMtelenul - POP3 spamszuro szolgaltatas

Következő rész itt.

Nezegettem egy kicsit az eximet. A clapf-ot modositottam, hogy emulalja a spamd-t, ami mukodik is, de kicsit olyan ez, mintha egy szuk cipot kellene hordani: kenyelmetlen.

A kerdes az, hogy lehet ravenni az eximet, hogy a clapf 'spam riportjat' a level _elejere_ szurja be?

Ill. olvastam a doksiban az lmtp/smtp transport-rol. Meg lehet-e egy olyat csinalni akar lmtp, akar smtp transport eseteben, hogy minden bejovo levelet adjon at az xxxx transport-nak, amiben nem szerepel egy 'titkos' header, amit a content-filter tesz a levelbe (pl. X-Aaaaa: 12345). A content-filter visszaadna a levelet az exim-nek, ugy hogy mar benne van a 'titkos' header, es az exim tovabbithatna a levelet a szokasos modon/uton.

SPAMtelenül - MX spamszűrő szolgáltatás, ahogyan még sosem próbálta

Próbáld meg azt, hogy az Eximben leforkolod a spamc forráskódot clapfc névre, saját config változókat definiálsz és innentől kezdve azt írsz át, amit akarsz. Ha sietsz vele, még a 4.7-esbe be is kerülhet.

kossz az infokat, lehet, hogy majd egyszer kiprobalom az otletedet, de - l. lentebb - talaltam egy modot, hogy a preferalt advanced content-filter-kent hasznalhassam.

SPAMtelenül - MX spamszűrő szolgáltatás, ahogyan még sosem próbálta

Akkor meg is valaszolom magamnak az amavis doksija (http://www.ijs.si/software/amavisd/README.exim_v4.txt) alapjan. Az alabbi konfig csak a bejovo leveleket ellenorzi:

1. a 'main configuration setting'-ben meg kell adni, hogy az exim a 10026-os porton is figyeljen:

local_interfaces = 0.0.0.0.25 : 127.0.0.1.10026

2. kell egy router-t letrehozni a 'remote_smtp' alatt:

amavis:
driver = manualroute
condition = "${if eq {$interface_port}{10025} {0}{1}}"
transport = amavis
route_list = "* localhost byname"
self = send
no_verify

3. vegul kell egy uj transport is (az elejere):

amavis:
driver = smtp
port = 10025
allow_localhost

Igy a clapf a szokasos (es preferalt) smtp content filter modban hasznalhato, es nem kell a spamassassin protokolljat emulalni.

SPAMtelenül - MX spamszűrő szolgáltatás, ahogyan még sosem próbálta

Ez eddig tök jó, de a Spamassassinnak az a nagyszerű tulajdonsága, hogy connection time elhajtja a kedves spamelőt a retekbe, ha spamet küld.

ezt nyilvan ugy tudja megoldani, hogy megkapja a levelet, atpasszolja az SA-nak, es amig az molyol a levellel, addig a kliens (=felado) varakozik a DOT command utani eredmenyre, amit csak akkor kap meg, ha az SA vegzett a feldolgozassal.

A clapf ezt kicsit maskeppen oldja meg: atveszi l/smtp-n a levelet, majd vissza adja az exim-nek, hogy 250 ok, es naplozas utan (ha ugy allitottad be) eldobja a spamet, es nem passzolja tovabb.

SPAMtelenül - MX spamszűrő szolgáltatás, ahogyan még sosem próbálta

Valahogy nem értem ezt a spamassassin dolgot.

Elvileg beállítottam a spamd_address ill. a DATA ACL-eket, gyakorlatilag egyik levelem sem egészül ki ezzel a fejléccel.
Úgy látom, mintha meg sem kapná a spamassassin feldolgozásra.
Nem tudom, ír-e valahova logot közben.

Gyakorlatilag frissen érkezett spammal ill. meglévő spamot újraküldve magamnak próbálkoztam, 0 eredménnyel.
Ha közvetlenül adom meg neki a spam-ot spamassassin < spam módon, akkor látom a fejlécét és pontoz is.

Telnettel látom, hogy a 783-as porton aktív a spamassassin.

Miért nem jelenik meg mégsem a fejléc?

Milyen Eximed van? Bele van forgatva a spamassassin támogatás? (Debian alatt a -heavy). Egyébként célszerű volna nem itt kérdezni, mert ezt ritkán olvassa bárki is, inkább fórum témába.

Lehet, hogy igazad van :)

Exim version 4.69 #1 built 30-Sep-2008 18:26:44

-heavy csomag fent van, Debian Lenny alatt fut.

Átolvasom az új írásodat + az ott gbor által írt "jegyzetet", kíváncsi vagyok rájuk, bár most kicsit fáradt vagyok nekiállni.
Köszi az írást, jó szolgálatot tesz.

Az ígéretemhez híven, ha egy kicsit soká is, elkészült a negyedik rész.