Spam Proxy - dokumentace

Vytvořil Martin Petříček <bilbo@centrum.cz>

Obsah

Stručný popis programu

Program, který naslouhá na dvou portech (POP3 a SMTP protokol). Na POP3 zkoumá stahované zprávy jestli je to spam a podle výsledku identifikace podnikne akce (označit zprávu, poslat falešné upozornění "uživatel neexistuje", atd ...) Na SMTP pouze forwarduje zprávy nějakému nadřazenému SMTP a ukládá emailové adresy lidí, kterým pošlu email do whitelistu
K programu je i tato dokumentace:
Popis syntaxe konfiguračního souboru
Seznam parametrů příkazové řádky

Použité knihovny

Standardní knihovna (libc)
POSIX threads (libpthread)

Popis zdrojových kódů

Dokumentace je generována automaticky z okomentovaných zdrojových kódů (čímž si ušetřím práci, stačí "jenom" dobře komentovat zdrojáky, dokumentace se pak vytvoří automaticky)
Dokumentace je generována do samostatného adresáře doc/html

Poznámky ke kompilaci

Před kompilací je nutné spustit
./configure Potom lze spustit
make - zkompiluje program

Ke kompilaci je vyžadován perl. (na většině unixů je standardně nainstalován)
Pokud spustíte make clean tak dojde k vymazání všech vytvořených dočasných a vygenerovaných souborů.
make distclean smaže kromě toho i zkompilované binární soubory a konfiguraci vytvořenou skriptem configure.

RCS
V adresáři RCS jsou uloženy pomocí RCS (Revision control system) i starší verze projektu.

Jak to funguje

SMTP proxy

Emaily jsou pouze přeposílány, pouze příjemce (skutečný příjemce daný při komunikaci se SMTP serverem, nikoliv to, co je v emailu v hlavičce "To:") je přidán do whitelistu.

POP3 proxy

Proxy očekává uživatelské jméno ve tvaru "uživatel@server", poté se připojí na server server, kterému pošle uživatelské jméno uživatel
Každý přijatý email ze serveru je nejprve otestován na přítomost odesílatele v blacklistu, či whitelistu (ten má vyšší prioritu), pokud není ani v jednom z nich, aplikují se na email filtry dané v konfiguraci pod klíčem classify-filter a jejich výstup je ohodnocen programem classification.
Podle hodnoty, která vyplyne buď z blacklistu, whitelistu, nebo klasifikace emailu, jsou na původní email (před filtrací pomocí classify-filter) aplikovány filtry dané v klíči post-filter a pak jsou na něj spuštěny akce dané programy v klíči post-action.
Poté je email eventuelně označen podle konfigurace v klíči mark-subject a poté je poslán klientovi.
Jiné příkazy (např. výpis hlaviček, atd ...) procházejí nezměněny.

Filtry a akce

Filtr, klasifikátor, či akce je proces, který POP3 proxy spustí a na standardní vstup mu pošle zpracovávaný mail.
Proces by měl načíst email ze STDIN a u filtru se očekává, že vrátí nějak pozměněný (nebo i nepozměněný) email na STDOUT.
U akcí se STDOUT ignoruje - sice se čte (takže program se nezasekne, pokud bude vypisovat nějaké debugovací hlášky), ale zahazuje se.
U klasifikátoru se očekává, že místo emailu na výstup napíše kladné celé číslo a odřádkuje.
Procesy by měly vracet návratový kód 0 (exit(0)), pokud vrátí něco jiného, bere se ze to, že selhaly (u filtru bude obnovena původní zpráva, u akcí bude toto jen zalogováno, u klasifikátoru dostane email hodnotu 0)
Dále, pokud filtr nevypíše na výstup jediný bajt, bere se za to, že nechce mail pozměnit (a výsledek pak bude stejný, jako by mail pouze přeposlal ze vstupu na výstup, jen se tím ušetří čas)
Další detaily o použití filtrů jsou uvedeny v Popisu syntaxe konfiguračního souboru

V adresáři filters je několik ukázkových (a i v praxi použitelných) skriptů, které lze použít s POP3 proxy.
Soubor init.d/spproxy je určený pro nakopírování do /etc/init.d/sp_proxy, kde po patřičném nalinkování (jako např. S90spproxy do runlevelů, kde chceme tohoto démona spouštět - typicky 2 až 5 - a jako K10spproxy do runlevelů, kde běžet nemá - typicky 0,1,6) zajistí spuštění démona v patřičných runlevelech. Na systémech, kde neběží System V init, si musíte startovací skripty upravit sami.