Exim howto part 3 - Spam szűrés

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ások

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

É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.

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

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.

Ö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?

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?

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-) )

- 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

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

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

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

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

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?

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.