NIC-VIP

Projekt: Unbound bindings pro jazyk Python, využití jako lokální DNS White/Gray/Black List pro potlačení spamu
Autoři: Zdeněk Vašíček, Marek Vavruša

Shrnutí

Cílem projektu bylo zpřístupnit Unbound server (libUnbound) v prostředí jazyka Python a následně python modul využít pro implementaci white/black/grey listu (DNSBL) založeného na DNS službě. Výstup tvoří tři nezávislé části a sice:
  1. Rozšiřující modul umožňující využívat validující resolver v prostředí jazyka Python (pyUnbound).

    Narozdíl od libUnbound C API se v pythonu pracuje s resolverem objektově. Pro zjednodušení práce byl navržen přístup starající se o automatické uvolňování alokovaných struktur a dále rozšíření dovolující dekódovat získaná data (libUnbound poskytuje data v RAW wireformátu).

    Zdrojové kódy jsou umístěny v adresáři unbound/contrib/python, kde lze nalézt i řadu příkladů.

  2. Modul pro Unbound server v jazyce C, který umožňuje jeho rozšíření pomocí skriptů psaných v jazyce Python (pythonmod).

    Unbound tak v současné době obsahuje tři moduly: iterátor, validátor a pythonmod, které lze nakonfigurovat tak, aby se volali v libovolném pořadí. Díky tomu může pythonmod sloužit nejen pro generování detailních statistik či ladění, ale může též poskytovat odpověď na DNS dotazy. Oba případy použití jsou uvedeny v dokumentaci. Navržené rozšíření má schopnost povýšit služby DNS ze statické do dynamické roviny (viz příklady použití).

    Zdrojové kódy jsou umístěny v adresáři unbound/pythonmod, zde lze nalézt i několik příkladů, které jsou popsány v dokumentaci.

  3. DNSBL plugin využívající Unbound resolveru s cache, který je možné použít jako filtr pro Posfix či Sendmail.

    Milter plugin napsaný v jazyce Python, který používá modul pyUnbound jakožto kešujícího resolveru, který vyřizuje požadavky na externí DNSBL služby a uživatelský white/black list. Cílem projektu bylo navrhnout jednoduše konfigurovatelné řešení, které a) umožní snížit režii způsobenou externími DNS dotazy b) integruje do DNSBL/WL greylisting.

    Filtr funguje následovně: při SMTP spojení ověří, zda-li zdrojová adresa není v uživatelském whitelistu, pokud ano, následující kontroly jsou vynechány. Pokud nikoliv, a trojice (IP adresa, odesílatel, příjemce) je viděna poprve, spojení je odmítnuto a poznačen čas do kdy bude tato trojice blokována - je aplikován greylisting. V případě, že mail server znovu zkusí odeslat poštu (toto je odlišnost od spammera) a čas blokace pro danou trojici pominul, je teprve aplikován DNS black listing dle externích služeb (např. spamhaus apod.). Tímto se redukuje počet dotazů na externí a pomalé DNS servery, další redukce je dosaženo využitím cache resolveru. Není li IP adresa v žádném blacklistu (existuje více POLICY pravidel, viz dokumentace), je spojení propuštěno.

    Zdrojové kódy jsou umístěny v adresáři milter - viz dokumentace.

Extension i python modul je součástí zdrojových kódů projektu unbound, oba lze do překladu zahrnout volitelně (rozšířen configure skript).

Dokumentace a download


15.1.2008, Zdeněk Vašíček (vasicek AT fit.vutbr.cz), Marek Vavruša (xvavru00 AT stud.fit.vutbr.cz)