|
ISC BIND
wiking - 22-07-2007 14:33
1. Czym jest BIND
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:
aptitude install bind9 bind9-host
No i mamy zainstalowanego BINDa. Domyślna konfiguracja pozwala na pracę jako serwer cachujący. Co to daje?
stacjonarny:~# dig www.debian.org ; <<>> DiG 9.4.1 <<>> www.debian.org ;; 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: ;www.debian.org. IN A
;; ANSWER SECTION: www.debian.org. 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
Zwróć uwagę na
Wydajemy jeszcze raz to samo polecenie
stacjonarny:~# dig www.debian.org ; <<>> DiG 9.4.1 <<>> www.debian.org ;; 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: ;www.debian.org. IN A
;; ANSWER SECTION: www.debian.org. 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
I co widzimy?
Nic dodać, nic ująć. Niby niewiele, jednak w dużych sieciach znacząco oszczędza to czas i pasmo.
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
stacjonarny:~# /etc/init.d/bind9 stop
Edytujemy plik /etc/default/bind9. Powinien mieć on taką postać:
OPTIONS="-u bind -t /var/lib/named" RESOLVCONF=yes
Następnie tworzymy katalogi dla BINDA:
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
Tworzymy urządzenia null i random oraz poprawiamy uprawnienia:
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
Ostatnią rzeczą będzie zmodyfikowanie pliku /etc/dafault/syslogd. Jego zawartość powinna być następująca:
SYSLOGD="-a /var/lib/named/dev/log"
Teraz pozostaje jedynie uruchomić ponownie demony:
/etc/init.d/syslogd restart /etc/init.d/bind9 start
Nie muszę chyba dodawać, że dobrze jest rzucić okiem na plik /var/log/syslog, żeby sprawdzić czy demony uruchamiają się bez błędów.
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.
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; };
Teraz należy jeszcze utworzyć pliki logów (zwróć uwagę na ścieżkę)
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
ÂŻeby mieć wszystkie logi w jednym miejscu tworzymy dowiązanie symbliczne
ln -s /var/lib/named/var/log/named /var/log/named
3.3 Plik strefy
Nadeszła pora na główną część konfiguracji czyli plik strefy dla naszej domeny.
Edytujemy plik /etc/bin/named.conf.local
zone "siec.domowa" IN { type master; file "/etc/bind/db.siec.domowa"; allow-query { moje_sieci; }; };
No i plik strefy /etc/bind/db.siec.domowa $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
3.4 Domena odwrotna
Edytujemy plik /etc/bin/named.conf.local
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; }; };
Plik /etc/bind/db.192
$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.
Zakończenie 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.
xbitdesigns - 24-01-2008 04:29
W restarcie demona powinno byc:
/etc/init.d/sysklogd restart
Pzdr.
lis6502 - 04-01-2009 23:14
Nie muszę chyba dodawać, że dobrze jest rzucić okiem na plik /var/log/syslog, żeby sprawdzić czy demony uruchamiają się bez błędów.
Tutaj mały błąd: ten krok wykonujemy dopiero po wpisaniu jakiejś konfiguracji do /var/lib/named/etc/bind; najprościej poprzez
Nexus:/home/lis6502# cp -dpR /etc/bind /var/lib/named/etc/
Pamiętaj użytkowniku, u Ciebie pliki konfiguracyjne takie jak
znajdują się wewnątrz klatki, czyli w /var/lib/named/etc/bind/named.conf. Ważne: Wszystkie odwołania w plikach muszą wyglądać normalnie, czyli /etc/bind/db.local, ale dla Ciebie jako root'a będzie chodziło o /var/lib/named/etc/bind/db.local.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|