Cytując polską Wikipedię:
BIND (Berkeley Internet Name Domain, poprzednio: Berkeley Internet Name Daemon) jest popularnym serwerem (demonem) DNS. Został on stworzony przez Paula Vixie w roku 1988 podczas jego pracy w DEC. BIND jest jednym z najpopularniejszych serwerów DNS wykorzystywanym w systemach Linux i Unix. BIND stanowi niezmiernie ważny składnik zapewniający poprawne działanie systemu nazw w Internecie. Wielu użytkowników globalnej sieci bezwiednie korzysta z serwera BIND, kiedy ich przeglądarka WWW odpytuje go o adres IP komputera udostępniającego interesującą ich stronę.
2. Instalacja
W Debianie sprowadza się do wydania polecenia:
Kod: Zaznacz cały
aptitude install bind9 bind9-host
Kod: Zaznacz cały
stacjonarny:~# dig [url]www.debian.org[/url]
; <<>> DiG 9.4.1 <<>> [url]www.debian.org[/url]
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50622
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 0
;; QUESTION SECTION:
;[url]www.debian.org[/url]. IN A
;; ANSWER SECTION:
[url]www.debian.org[/url]. 543 IN A 194.109.137.218
;; AUTHORITY SECTION:
. 510149 IN NS L.ROOT-SERVERS.NET.
. 510149 IN NS D.ROOT-SERVERS.NET.
. 510149 IN NS K.ROOT-SERVERS.NET.
. 510149 IN NS E.ROOT-SERVERS.NET.
. 510149 IN NS J.ROOT-SERVERS.NET.
. 510149 IN NS A.ROOT-SERVERS.NET.
. 510149 IN NS F.ROOT-SERVERS.NET.
. 510149 IN NS B.ROOT-SERVERS.NET.
. 510149 IN NS C.ROOT-SERVERS.NET.
. 510149 IN NS H.ROOT-SERVERS.NET.
. 510149 IN NS M.ROOT-SERVERS.NET.
. 510149 IN NS G.ROOT-SERVERS.NET.
. 510149 IN NS I.ROOT-SERVERS.NET.
;; Query time: 47 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jul 22 10:15:37 2007
;; MSG SIZE rcvd: 259
Wydajemy jeszcze raz to samo polecenieQuery time: 47 msec
Kod: Zaznacz cały
stacjonarny:~# dig [url]www.debian.org[/url]
; <<>> DiG 9.4.1 <<>> [url]www.debian.org[/url]
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63968
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 0
;; QUESTION SECTION:
;[url]www.debian.org[/url]. IN A
;; ANSWER SECTION:
[url]www.debian.org[/url]. 315 IN A 194.109.137.218
;; AUTHORITY SECTION:
. 509921 IN NS G.ROOT-SERVERS.NET.
. 509921 IN NS K.ROOT-SERVERS.NET.
. 509921 IN NS B.ROOT-SERVERS.NET.
. 509921 IN NS F.ROOT-SERVERS.NET.
. 509921 IN NS D.ROOT-SERVERS.NET.
. 509921 IN NS L.ROOT-SERVERS.NET.
. 509921 IN NS M.ROOT-SERVERS.NET.
. 509921 IN NS E.ROOT-SERVERS.NET.
. 509921 IN NS H.ROOT-SERVERS.NET.
. 509921 IN NS A.ROOT-SERVERS.NET.
. 509921 IN NS I.ROOT-SERVERS.NET.
. 509921 IN NS C.ROOT-SERVERS.NET.
. 509921 IN NS J.ROOT-SERVERS.NET.
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jul 22 10:19:25 2007
;; MSG SIZE rcvd: 259
Nic dodać, nic ująć. Niby niewiele, jednak w dużych sieciach znacząco oszczędza to czas i pasmo.Query time: 4 msec
3. Konfiguracja
Czas teraz na właściwą konfigurację serwera dns. Przedstawię tutaj w jaki sposób zamknąć BINDa w więzieniu (chroot), stworzyć własną domenę, domenę odwrotną oraz nieco rozszerzone logowanie.
3.1 Chroot
Jako, że BIND nie należy do najbezpieczniejszych demonów zamkniemy go w więzieniu czyli w chroot jail. Co nam to da? Tyle, że gdy padniemy ofiarą ataku, napastnik nie będzie mógł się wydostać poza więzienie, czyli tak naprawdę katalog, jakie przygotowaliśmy dla BINDa.
No to zaczynamy:
Pierwszym krokiem jest zatrzymanie usługi
Kod: Zaznacz cały
stacjonarny:~# /etc/init.d/bind9 stop
Kod: Zaznacz cały
OPTIONS="-u bind -t /var/lib/named"
RESOLVCONF=yes
Kod: Zaznacz cały
mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run
Kod: Zaznacz cały
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind
Kod: Zaznacz cały
SYSLOGD="-a /var/lib/named/dev/log"
Kod: Zaznacz cały
/etc/init.d/syslogd restart
/etc/init.d/bind9 start
3.2 Wstępna konfiguracja
Poniżej zamieszczam swój plik /etc/bind/named.conf.options. Jeśli chcesz go użyć musisz dostosować go do swoich potrzeb. Sekcje logging i acl nie są konieczne.
Kod: Zaznacz cały
options {
directory "/var/cache/bind";
statistics-file "/var/cache/bind/bind.stats";
dump-file "/var/cache/bind/bind.dump";
zone-statistics yes;
allow-recursion { 127.0.0.1; 192.168.0.0/8; };
allow-transfer { 192.168.0.3; };
notify yes;
transfer-format many-answers;
query-source address * port 53;
transfer-source * port 53;
notify-source * port 53;
forwarders {
208.67.222.222;
208.67.220.220;
};
auth-nxdomain yes;
listen-on { 127.0.0.1; 192.168.0.1; };
listen-on-v6 { none; };
};
// Logowanie
logging {
channel default_file { file "/var/log/named/default.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel general_file { file "/var/log/named/general.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel database_file { file "/var/log/named/database.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel security_file { file "/var/log/named/security.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel config_file { file "/var/log/named/config.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel resolver_file { file "/var/log/named/resolver.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel xfer-in_file { file "/var/log/named/xfer-in.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel xfer-out_file { file "/var/log/named/xfer-out.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel notify_file { file "/var/log/named/notify.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel client_file { file "/var/log/named/client.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel unmatched_file { file "/var/log/named/unmatched.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel queries_file { file "/var/log/named/queries.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel network_file { file "/var/log/named/network.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel update_file { file "/var/log/named/update.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel dispatch_file { file "/var/log/named/dispatch.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel dnssec_file { file "/var/log/named/dnssec.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel lame-servers_file { file "/var/log/named/lame-servers.log" versions 3 size 5m; severity dynamic; print-time yes; };
category default { default_file; };
category general { general_file; };
category database { database_file; };
category security { security_file; };
category config { config_file; };
category resolver { resolver_file; };
category xfer-in { xfer-in_file; };
category xfer-out { xfer-out_file; };
category notify { notify_file; };
category client { client_file; };
category unmatched { unmatched_file; };
category queries { queries_file; };
category network { network_file; };
category update { update_file; };
category dispatch { dispatch_file; };
category dnssec { dnssec_file; };
category lame-servers { lame-servers_file; };
};
// ACL
acl "moje_sieci" {
192.168.1.0/24;
127.0.0.1;
};
Kod: Zaznacz cały
touch /var/lib/named/var/log/named/client.log
touch /var/lib/named/var/log/named/config.log
touch /var/lib/named/var/log/named/database.log
touch /var/lib/named/var/log/named/default.log
touch /var/lib/named/var/log/named/dispatch.log
touch /var/lib/named/var/log/named/dnssec.log
touch /var/lib/named/var/log/named/general.log
touch /var/lib/named/var/log/named/lame-servers.log
touch /var/lib/named/var/log/named/network.log
touch /var/lib/named/var/log/named/notify.log
touch /var/lib/named/var/log/named/queries.log
touch /var/lib/named/var/log/named/resolver.log
touch /var/lib/named/var/log/named/security.log
touch /var/lib/named/var/log/named/unmatched.log
touch /var/lib/named/var/log/named/update.log
touch /var/lib/named/var/log/named/xfer-in.log
touch /var/lib/named/var/log/named/xfer-out.log
Kod: Zaznacz cały
ln -s /var/lib/named/var/log/named /var/log/named
Nadeszła pora na główną część konfiguracji czyli plik strefy dla naszej domeny.
Edytujemy plik /etc/bin/named.conf.local
Kod: Zaznacz cały
zone "siec.domowa" IN {
type master;
file "/etc/bind/db.siec.domowa";
allow-query { moje_sieci; };
};
Kod: Zaznacz cały
$TTL 604800
@ IN SOA stacjonarny.siec.domowa. root.stacjonarny.siec.domowa. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
IN NS dns1.siec.domowa.
IN NS dns2.siec.domowa.
IN MX 10 smtp.siec.domowa.
@ IN A 192.168.0.1
stacjonarny IN A 192.168.0.1
dns1 IN A 192.168.0.1
smtp IN A 192.168.0.1
dns2 IN A 192.168.0.3
Edytujemy plik /etc/bin/named.conf.local
Kod: Zaznacz cały
zone "siec.domowa" IN {
type master;
file "/etc/bind/db.siec.domowa";
allow-query { moje_sieci; };
};
zone "0.168.192.IN-ADDR.ARPA" IN {
type master;
file "/etc/bind/db.192";
allow-query { moje_sieci; };
};
Kod: Zaznacz cały
$TTL 600
0.168.192.IN-ADDR.ARPA. IN SOA stacjonarny.siec.domowa. root.stacjonarny.siec.domowa. (
1 ; serial
12h ; refresh
1h ; retry
2w ; expire
1h ; default_ttl
)
IN NS dns1.siec.domowa.
IN NS dns2.siec.domowa.
1 IN PTR stacjonarny.siec.domowa.
2 IN PTR dns2.siec.domowa.
No i to by było na tyle. Zdaję sobie sprawę, że opis ten nie jest kompletny (postaram się go uzupełnić niebawem), ale pozwala na szybkie i bezstresowe uruchomienie serwera dns. Mam nadzieję, że komuś się przyda.