block-main - popis funkce

block-main je e-mailový filtr, který filtruje poštu při jejím příchodu na server (čili ještě před jejím zpracováním a doručením do mailboxů). Má sloužit jako

Je psaný speciálně pro Qmail a v jazyce Ruby. Pro instalaci a konfiguraci je nutné znát základní syntaxi jazyka Ruby (není těžká, dá se okoukat) a regulární výrazy.

Příchozí mail filtr block-main otestuje a podle výsledku testu a konfigurace udělá jednu ze čtyř možných akcí:

Filtr umožňuje vložit do zprávy o nedoručení informaci pro odesílatele (např. odkaz na www stránku s dalšími informacemi).

Filtr zapisuje všechny akce do logu, je možné ukládat kopie odmítnutých nebo zahozených mailů.

Testy

Mail prochází postupně těmito testy:

TEST_TO_ADMIN - je-li určený administrátorovi (adresy postmaster, abuse, mailer-daemon), projde vždy (ale označený jako spam, správce pošty s tím musí počítat)

TEST_SHEAD - je-li mail již označený jako spam, je možné definovat, kterým serverům důvěřovat (viz block-cfg.rb)

TEST_ATTACHMENT_TYPE - testuje se seznam příloh (typ, jméno, délka), je možné definovat test a akci (viz block-patterns.rb)

TEST_STR_HEADER - testuje se záhlaví (subject, adresy, jednotlivé řádky), je možné definovat test a akci (viz block-patterns.rb)

TEST_STR_BODY - testuje se tělo mailu (jednotlivé řádky), je možné definovat test a akci (viz block-patterns.rb)

TEST_BADFROM - zda existuje doména uvedená ve zpáteční adrese, je možné definovat akci (viz block-cfg.rb)

TEST_NOPTR - zda počítač, ze kterého mail přišel, nemá v DNS PTR záznam, je možné definovat akci (viz block-cfg.rb)

TEST_BADHOSTNAME - zda počítač, ze kterého mail přišel, je připojený přes adsl nebo dialup, je možné definovat akci a max. délku doménového jména (viz block-cfg.rb)

Dva poslední testy se vztahují buď na počítač, ze kterého mail přišel, nebo na předchozí (pokud přišel přes MX server). Je možné definovat seznam MX serverů (viz block-cfg.rb).

Pokud některý test uspěje, další se už neprovádí.

Pokud se nemá nějaký test provádět vůbec, nejjednodušší je zakomentovat jeho volání v souboru block-main (na konci).

Označování mailů

Pokud je již mail označen některým důvěryhodným serverem jako spam (viz TEST_SHEAD), filtr ho nechá projít a označení ponechá.

Pokud žádný test neuspěje nebo pokud nějaký uspěje, ale vrátí jako akci "pass" (pustit) a důvod "forw" (neboli výjimka, viz block-patterns.rb), mail filtrem projde beze změny.

Ve zbývajících případech filtr mail označí v záhlaví například takto:

X-Spam-Checker-Version: Block-main 2.8.2 on server.domain.cz
X-Spam-Status: Yes, badhostname0
X-Spam-Flag: YES
X-Spam: badhostname0

První tři řádky by měly být "kompatibilní" s označováním, které dělá filtr SpamAssassin, čtvrtá řádka je speciálně pro block-main z důvodu zachování zpětné kompatibility.

Klientské poštovní programy pak lze nastavit tak, aby takto označené maily zpracovávaly určitým způsobem. Příklad nastavení klientských programů viz http://www.cuni.cz/cucc/email/spam.

Odmítání mailů

Pokud filtr mail odmítne (akce "back"), vrátí ho Qmail zpět jako nedoručitelný. Do zprávy o nedoručení je možné vložit informaci pro odesílatele. Informace může mít max. 512 znaků, např. odkaz na www stránku, kde jsou další, podrobnější informace o existenci spamového filtru a bezpečnostní politice sítě. Je možné definovat, zda má filtr informaci vkládat a text (viz block-cfg.rb).

Má-li koncový uživatel nastavený server jako odchozí SMTP server, zobrazí se mu v případě odmítnutí mailu text v okénku s chybovým hlášením. Zobrazí se pouze poslední řádek textu.

Vyžaduje patch do Qmailu. Bez patche musí být funkce vypnuta.

Logování

O každém mailu zapíše filtr řádku do logu, např.

2004-02-16 14:09:50 211.109.42.186 Pass: noptr0 From: izfs3314@hinet.net To: nichols1@ruk.cuni.cz
2004-02-16 14:09:56 195.113.48.2 Pass: ok0 From: jiri.votava@lf1.cuni.cz To: petr.hala@ruk.cuni.cz
2004-02-16 14:10:06 195.113.1.16 Pass: ok0 From: Karla.Vankova@ruk.cuni.cz To: ali-ab-ibn@seznam.cz
2004-02-16 14:10:07 195.113.52.6 Pass: spam502 From: ijpnjktbcvmwd@chainre.com To: eva.bulova@ff.cuni.cz
2004-02-16 14:10:08 195.113.52.6 Pass: spam342 From: dermalptch1@home.nl To: helena.jarosova@ff.cuni.cz

Formát je

DATUM ČAS IP-SERVERU AKCE DŮVOD FROM TO

Logování je možné vypnout/zapnout, je možné logovat i "dobré maily" (důvod ok0), definovat jméno a umístění log souboru (viz block-cfg.rb)

Pro zpracování logu jsou k dispozici skript filterstat a jeho aliasy spamstat a virstat.

Ukládání kopií mailů

Filtr umožňuje ukládat kopie odmítnutých, zahozených nebo označených mailů pro pozdější analýzu a dohledávání problémů. Provádí to forwardováním mailů na definovanou adresu. Adresa musí být lokální, aby maily znovu neprocházely filtrem. Ukládání se dá zapnout/vypnout celkově nebo pro jednotlivé testy (viz block-cfg.rb).

Další zpracování (rotace logů apod.) block-main neřeší.

Při virové nebo spamové epidemii může objem ukládaných kopií dosáhnout několika GB za den a je nebezpečí přeplnění disku.