Dnes se podíváme na realizaci vlastního RPZ nocoin filtru, pokud se vám nelíbí jeho stahování z veřejného zdroje. Zároveň to můžete brát jako inspiraci pro vlastní pravidla. Sám jsem musel podobný filtr přidat, když manželce začal padat prohlížeč, protože weby pro široké masy asi „vylepšily“ svůj kód o nějaké další reklamní a sledovací skripty a prohlížeč to už nezvládal. Blokací se také dramaticky zvýšila rychlost načítání těchto stránek, ale to jsem odbočil.
Co se dozvíte v článku
Získávání dat z filtru NoCoin
Při provozu vlastního filtru potřebujete získávat informace, že vystavený filtr NoCoinu byl aktualizován. Nemám rád, když si každá služba, co na serveru běží, posílá vlastní notifikační maily. Raději mám notifikování a monitoring centrální službou, u nás používáme NagiosXI. Proto jsem vytvořil skript, který je volán přes NRPE, Nagiosem. Skript stáhne aktuální verzi souboru filtru, porovná ji s lokální verzí a podle výsledku notifikuje.
Je samozřejmě možné použít i jiný dohledový systém, který NRPE podporuje. Jen musíte správně nastavit čas a periodu spouštění skriptu, stačí na 1× denně. Notifikaci nastavíme už na první výskyt ne OK stavu.
Obsah skriptu check_nocoin_file.sh
:
#!/bin/bash #webova adresa na stazeni host tabulky web_host_table="https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt" #soubor s novymi daty new_file="/var/cache/bind/nocoin_new.txt" #soubor se starymi daty old_file="/var/cache/bind/nocoin_old.txt" ########################################################## wget -q -O $new_file $web_host_table diff -q $new_file $old_file > /dev/null 2>&1 if [[ $? == 0 ]] then echo "no new data"; exit 0 else echo "new data available"; exit 1 fi
Povšimněte si, že NoCoin vydává filtr nejen ve formátu pro Adblock ale také jako lokální host tabulku. A právě toho využijeme, protože host tabulka se lépe parsuje a přetavuje do formy zónového souboru pro Bind.
Sestavování zónového souboru
O parsování staženého souboru, a sestavování zónového souboru, se stará ručně spouštěný skript nocoin_bind.pl. Sestavování zóny jsem nechtěl automatizovat, aby byla kontrola toho, co se ze zóny odebírá a co se do ní přidává. Při případné kompromitaci souboru filtru na internetu nedojde k neštěstí. Po spuštění nám skript ukáže rozdíly a ptá se nás, zda má pokračovat. Pro svou činnost skript potřebuje Perlovské moduly DateTime
a Text::Diff
.
Ve skriptu je také implementována podpora whitelistu a blacklistu. Jsou to obyčejné textové soubory, kde na každém řádku je jedna doména. Doména na whitelistu nebude do filtru nikdy přidána a doména na blacklistu tam bude přidána vždy.
Sériové číslo generované zóny je založeno na klasickém datumovém systému a jako poslední dvojčíslí je použita hodina. Běžně soubor spouštíme jednou za dlouhou dobu, spuštění dvakrát během jedné hodiny neupraví správně sériové číslo a může způsobit chyby v propagaci aktualizace zóny v DNS.
Instalace vlastního filtru v Bindu
Zónový soubor máme, stačí jej přidat do konfigurace Bindu, který nám plní funkci rekurzivního resolveru.
options { ... response-policy { zone "rpz.cesnet.cz"; zone "phishing"; zone "nocoin.upce.cz"; }; }; zone "nocoin.upce.cz" { file "/etc/bind/nocoin.conf"; type master; };
Na rozdíl od konfigurace, v předchozím článku, je toto zóna typu master a je v lokálním souboru. Na ukázku zde uvádím více RPZ zón, které používáme. Je to blokace nepovolených hazardních webů a obrana proti phishingu v mailech.
Filtrování phishingu
K phishingu udělám malou odbočku. Byli a občas ještě jsme terčem mailových phishingových útoků. Uživatelé nám tak klikali na linky v mailech a zadávali hesla do podvodných stránek. A některé podvodné stránky byly opravdu zdařilé, včetně fotek našich skutečných stránek.
Pokud IT helpdesk zaznamená výskyt takových mailů, šup s doménou z odkazu do filtru. Uživateli se pak místo podvodné stránky zobrazí varování, že je na něj zkoušen podvod. Pokud byste měli zájem, mohu o této věci napsat také krátký článek.
Aktivace filtru
Ale zpátky k našemu nocoinu. Bind máme nakonfigurovaný, zkontrolujeme, zda je zóna v pořádku a zda ji bind vidí a pak můžeme nás nový filtr aktivovat reloadem Bindu:
root@dns-nocoin:~# named-checkconf -z zone nocoin.upce.cz/IN: loaded serial 2020010207 root@dns-nocoin:~# rndc reload
Pokud již filtr běží a my ho jen aktualizujeme, krok konfigurace Bindu samozřejmě vynecháme. Jen necháme zónový soubor nově vygenerovat, zkontrolujeme zda jej bind vidí správně a reloadujeme.