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