Stawiamy własny serwer DNSBL (RBL) - Mandriva
Ostatnio zauważyłem, że bind zeżarł mi 100MB pamięci operacyjnej, winnym okazało się oczywiście trzymanie pliku strefy z zakresami adresów typu DUHL (odziedziczonych z Rangersa i SORBSa).
Skoro bind nie nadaje się kompletnie do trzymania dużych (kilka/naście/dziesiąt/set) tysięcy zakresów) stref, a takie właśnie wchodzą w grę jak robimy własnego DNSBLa to można użyć do tego celu albo rbldnsa D. J. Bernsteina albo rbldnsd by Michael Tokarev (kurtka, dopełniacz?). Ja użyłem tego drugiego, przy czym moim zadaniem było postawienie go na jednej maszynie razem z bindem (jakby nie było konflikt na porcie 53). Rozwiązaniem jest postawienie rbldnsa na aliasie interfejsu lo. Poniższy przepis jest aktualny dla dystrybucji Mandriva 2006.
Najpierw ściągamy źródło i kompilujemy i instalujemy:
./configure --disable-ipv6
make
cp rbldnsd /usr/sbin
cp -p rbldnsd.8 /usr/man/man8/
cp -p debian/rbldnsd.default /etc/sysconfig/rbldnsd
cp -p debian/rbldnsd.init /etc/init.d/rbldnsd
chmod +x /etc/init.d/rbldnsd
mkdir -p -m 0755 /var/lib/rbldns
groupadd rbldns
useradd -r -d /var/lib/rbldnsd -M -c "rbldns Daemon" -g rbldns -s /sbin/nologin rbldns
/sbin/chkconfig --add rbldnsd
Następnie należy zrobić alias na interfejsie lo (utworzyć interfejs lo:0 i przypisać do niego adres IP 127.0.0.2). W tym celu tworzymy plik /etc/sysconfig/network-scripts/ifcfg-lo:0 z zawartością (to ten fragment instrukcji jest zależny od dystrybucji linuxa - Mandriva, Fedora):
DEVICE=lo:0
IPADDR=127.0.0.2
NETMASK=255.255.255.255
NETWORK=127.0.0.0
BROADCAST=127.0.0.2
ONBOOT=yes
NAME=loopback
NO_ALIASROUTING=yes
następnie możemy wykonać:
/etc/sysconfig/network-scripts/ifup-aliases lo
który nam ten dodatkowy interfejs podniesie, czy tak się stanie sprawdzamy poleceniem ifconfig.
Oczywiście do takiego interfejsu za chwilkę przyczepi się named, dlatego w /etc/named.conf w sekcji options trzeba mu tego (nasłuchiwania na adresie 127.0.0.2) zakazać:
options {
listen-on { !127.0.0.2; any; };
...
};
oprócz tego możemy od razu wpisać sobie aby named wszelkie pytania o naszego RBLa kierował do naszego RBLa czyli do 127.0.0.2:
zone "rbl.tld" {
type forward;
forward only;
forwarders {
127.0.0.2;
};
};
Następnie tworzymy plik /var/lib/rbldns/tld (plik do pobrania stąd) z zawartością:
$TTL 86400
$SOA 1d ns1.tld. root..tld. 2006101400 43200 900 604800 86400
$NS 1d 127.0.0.1
$DATASET ip4trie:dynamic dynamic @
:127.0.0.2:Dynamic/residential IP spam source (dial-up or DSL line). Please use your ISP's SMTP.
i tu dalej adresy IP w postaci CIDR
Powyższy plik zawiera definicję stref:
- dynamic.rbl.tld - zakresy IP dynamiczne lub sieci DUHL (dial-up or home lusers), czyli sieci, z których raczej nie ma legalnej poczty, za to jest spam - w dużej ilości.
- revdns.rbl.tld - revDNSy sieci DUHL. Przed uaktywnieniem sobie tej strefy należy zwrócić uwagę na wpisy - na przykład ja blokuję francuskie wanadoo - co może być u Was niepożądane.
- chikor.rbl.tld - zakresy IP należące do Chin i Korei pobrane z okean.com (strona nie działa), przed uaktywnieniem sobie tej strefy warto ściągnąć najnowsze strefy z tej strony.
Do pliku /etc/sysconfig/rbldnsd dodajemy linię:
RBLDNSD="- -u rbldns:rbldns -r /var/lib/rbldnsd -b 127.0.0.2 -4 -f rbl.tld:combined:tld"
i w tym momencie możemy przeładować binda /etc/init.d/named reload i zastartować RBLDNSa /etc/init.d/rbldnsd start
aby przetestować, czy wszystko się udało możemy użyć polecenia dig, najpierw bezpośrednio pytamy rbldnsd (niepotrzebe linie wycięte, 83.27.1.1 to neostrada):
# dig 1.1.27.83.dynamic.rbl.tld @127.0.0.2 -t any;; ANSWER SECTION:
1.1.27.83.rbl.tld. 86400 IN A 127.0.0.2
1.1.27.83.rbl.tld. 86400 IN TXT "Dynamic/residential IP spam source (dial-up or DSL line). Please use your ISP's SMTP."
a potem możemy sprawdzić, czy bind ładnie się z nim połączy:
# dig 1.1.27.83.dynamic.rbl.tld -t any;; ANSWER SECTION:
1.1.27.83.dynamic.rbl.tld. 86400 IN TXT "Dynamic/residential IP spam source (dial-up or DSL line). Please use your ISP's SMTP."
1.1.27.83.dynamic.rbl.tld. 86400 IN A 127.0.0.2