ISC BIND

Archiwalne, stare wpisy FAQ i HowTo Użytkowników
wiking
Posty: 6
Rejestracja: 03 lipca 2007, 20:10
Lokalizacja: Bydgoszcz

ISC BIND

Post autor: wiking »

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:

Kod: Zaznacz cały

aptitude install bind9 bind9-host
No i mamy zainstalowanego BINDa. Domyślna konfiguracja pozwala na pracę jako serwer cachujący. Co to daje?

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
Zwróć uwagę na
Query time: 47 msec
Wydajemy jeszcze raz to samo polecenie

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
I co widzimy?
Query time: 4 msec
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

Kod: Zaznacz cały

stacjonarny:~# /etc/init.d/bind9 stop
Edytujemy plik /etc/default/bind9. Powinien mieć on taką postać:

Kod: Zaznacz cały

OPTIONS="-u bind -t /var/lib/named"
RESOLVCONF=yes
Następnie tworzymy katalogi dla BINDA:

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
Tworzymy urządzenia null i random oraz poprawiamy uprawnienia:

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
Ostatnią rzeczą będzie zmodyfikowanie pliku /etc/dafault/syslogd. Jego zawartość powinna być następująca:

Kod: Zaznacz cały

SYSLOGD="-a /var/lib/named/dev/log"
Teraz pozostaje jedynie uruchomić ponownie demony:

Kod: Zaznacz cały

/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.

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;
};


Teraz należy jeszcze utworzyć pliki logów (zwróć uwagę na ścieżkę)

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
¯eby mieć wszystkie logi w jednym miejscu tworzymy dowiązanie symbliczne

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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

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
3.4 Domena odwrotna

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; };
};
Plik /etc/bind/db.192

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. 	
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
Posty: 15
Rejestracja: 17 stycznia 2008, 21:36

Post autor: xbitdesigns »

W restarcie demona powinno byc:

Kod: Zaznacz cały

/etc/init.d/sysklogd restart
Pzdr.
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Teraz pozostaje jedynie uruchomić ponownie demony:

Kod: Zaznacz cały

/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.
Tutaj mały błąd: ten krok wykonujemy dopiero po wpisaniu jakiejś konfiguracji do /var/lib/named/etc/bind; najprościej poprzez

Kod: Zaznacz cały

Nexus:/home/lis6502# cp -dpR /etc/bind /var/lib/named/etc/ 
Pamiętaj użytkowniku, u Ciebie pliki konfiguracyjne takie jak
Poniżej zamieszczam swój plik /etc/bind/named.conf.options(...)
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.
Zablokowany