Bezpieczniejszy DNS
Wstęp
Jak wiadomo, jedną z najważniejszych usług są serwery DNS. Ich uszkodzenie
lub przejęcie może spowodować, że użytkownicy korzystający z zasobów
naszych serwerów nie będą mieli do nich dostępu.
BIND jest jedną z najczęściej używanych implementacji protokołu DNS.
Przy pisaniu artykułu używano wersji 9.2.1 BINDa.
Wszystkie czynności opisane w tym tekście były testowane na systemie
FreeBSD 5.2.1. Po małych korektach można je stosować na
innych platformach. Jedyną rzeczą, która może sprawić problemy jest "jail"
- we FreeBSD natywny, gdzie indziej nieobecny (tam zastosować należy
"chroot"). W poniższym tekście opiszę tworzenie jaila dla serwera
cachującego.
Przygotowania
Standardowo w systemie FreeBSD znajduje się BIND w wersji 8.x,
ponieważ będziemy korzystać z wersji 9.2.1 musimy ją zainstalować.
W tym celu przechodzimy do odpowiedniego katalogu komendą:
a następnie instalujemy i sprzątamy:
Po skompilowaniu i zainstalowaniu mamy już w systemie wersję 9.2.1.
Tworzenie struktury katalogow
W tym celu możemy wykorzystać skrypt, który napisałem lub zrobić wszystko
ręcznie.
Uwaga: jeśli robimy jaila na systemie z serii 4.x lub wczesne 5.x to trzeba
zmienić ścieżki do bibliotek bo wraz z pojawieniem się wersji 5.1 zmieniły się
położenia plików.
# miejsce gdzie będzie katalog domowy naszego jaila
home=/usr/jails/caching-named
mkdir -v -p $home/chroot/etc/namedb
mkdir -v -p $home/chroot/var/run
mkdir -v $home/etc
mkdir -v $home/lib
mkdir -v $home/dev
mkdir -v $home/libexec
cp -v /lib/libc.so.5 $home/lib/
cp -v /lib/libcrypto.so.3 $home/lib/
cp -v /usr/sbin/named $home/
cp -v /libexec/ld-elf.so.1 $home/libexec
fetch FTP.INTERNIC.NET/domain/named.root
mv -v named.root $home/chroot/etc/namedb/named.root
cp -v /etc/namedb/named.root $home/chroot/etc/namedb/
cp -v /etc/namedb/localhost-v6.rev $home/chroot/etc/namedb/
cp -v /etc/namedb/localhost.rev $home/chroot/etc/namedb/
touch $home/etc/master.passwd
echo "bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin" > $home/etc/master.passwd
pwd_mkdb -d $home/etc/ $home/etc/master.passwd
chown -R bind:bind $home/*
Dodatkowo trzeba jeszcze zaopatrzyć się w pliki konfiguracyjne binda.
Poniżej 4 pliki, które powinny znaleźć się w katalogu $home/chroot/etc/namedb/.
1. named.conf
directory "/etc/namedb";
pid-file "/var/run/named.pid";
};
// Root server hints
zone "." { type hint; file "named.root"; };
// Provide a reverse mapping for the loopback address 127.0.0.1
zone "0.0.127.in-addr.arpa" {
type master;
file "localhost.rev";
notify no;
};
// RFC 3152
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA" {
type master;
file "localhost-v6.rev";
notify no;
};
2. localhost.rev
@ IN SOA localhost. root.localhost. (
20031123 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
3. localhost-v6.rev
$TTL 3600
@ IN SOA localhost. root.localhost. (
20031123 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS localhost.
IN PTR localhost.
4. named.root
Jeśli tak się nie stanie to trzeba go ręcznie pobrać i umieścić w tym
katalogu.
Uruchomienie
Czas na uruchomienie naszego jaila:
# jail $home caching-named 127.0.0.1 /named -u bind -t /chroot
Aby wszystko uruchamiało się automatycznie podczas startu systemu należy do pliku
/etc/rc.conf dopisać:
jail_list="cache" # Space separated list of names of jails
jail_set_hostname_allow="NO" # Allow root user in a jail to change its hostname
jail_cache_rootdir="$home" # Jail's root directory
jail_cache_hostname="caching-named" # Jail's hostname
jail_cache_ip="127.0.0.1" # Jail's IP number
jail_cache_exec="/named -u bind -t /chroot" # command to execute in jail
Powinno to wystarczyć do prawidłowej pracy demona w jailu.
Zaznaczam, że ten tekst jest jeszcze w fazie doszlifowywania - poprawki mile widziane.
tytus, pt., 18/04/2008 - 20:08
