Menu główne

Bitcoin

Bind
omen, piątek 18 sierpnia 2017


Debian Jessie. Instalacja Bind-a w środowisku chroot , logowanie błędów + monitorowanie za pomocą Webmina.

W internecie można znaleźć kilka tutoriali traktujących o tym jak zabezpieczyć Bind-a poprzez uruchomienie go w katalogu Chroot.  Nie znalazłem jednak żadnego, który porusza temat pełnej obsługi błędów oraz wizualnego monitorowania pracy serwera DNS przez Webmina. Poniższy przewodnik był początkowo zlepkiem notatek, do których często zaglądam ale ponieważ kilka osób prosiło mnie o porady związane z konfiguracją serwera DNS więc postanowiłem opublikować kompletny opis w sieci. Mam nadzieję, że komuś się przyda. 
W przypadku pytań lub niejasności proszę o komentarze.
 
Uwagi. Wszystkie polecenia wydajemy z poziomu użytkownika root. Pliki konfiguracyjne edytujemy dowolnym edytorem np vi lub mcedit. Po każdej zmianie konfiguracji i restarcie warto jest sprawdzić stan serwera poleceniem "status". W przypadku problemów wyświetlone zostaną od razu błędy i unikniemy grzebania w logach serwera. Jeśli wcześniej BIND uruchamiany był przez Webmina to nalezy go zatrzymać równiez przez Webmina. 
  
  
1. Instalacja Binda (jeśli nie jest jeszcze zainstalowany)
 
apt-get update && apt-get upgrade 
apt-get install bind9 

 

    2. Zatrzymanie Bind-a

 

 
/etc/init.d/bind9 stop && /etc/init.d/bind9 status 

- po wydaniu powyższego polecenia warto poleceniem TOP lub HTOP upewnić się czy na pewno w systemie nie działa inna instancja Bind-a lub jego proces potomny. Jeśli tak jest należy go wyłączyć poleceniem KILL

   3. Utworzenie katalogów chroot-a oraz przydzielenie uprawnień odczytu/zapisu:

 

- Utworzenie katalogów etc, dev....

 

mkdir -p /var/bind9/chroot/{etc,dev,var/cache/bind,var/run/named} 


- Utworzenie urządzeń systemowych:

 

mknod /var/bind9/chroot/dev/null c 1 3 

 

mknod /var/bind9/chroot/dev/random c 1 8 


 ...oraz zmiana uprawnień odczytu / zapisu :

 

chmod 660 /var/bind9/chroot/dev/{null,random} 

 

- Przeniesienie oryginalnej lokalizacji Bind-a do katalogu chroot:

 

mv /etc/bind /var/bind9/chroot/etc 

 

- Utworzenie dowiązania symbolicznego w poprzedniej lokalizacji katalogu głównego:

 

ln -s /var/bind9/chroot/etc/bind /etc/bind 

 

- Zmiana właściciela podkatalogów /etc/bind na „bind” oraz grupę „bind”:

 

chown -R bind:bind /etc/bind/* 

 

- Zmiana uprawnień odczytu/zapisu plików:

 

chmod 775 /var/bind9/chroot/var/{cache/bind,run/named} 

 

chgrp bind /var/bind9/chroot/var/{cache/bind,run/named} 

 

 4. Wskazanie nowej lokalizacji pliku PID dla autostartu Bind-a. 

- Dokonanie zmian w pliku konfiguracyjnym /etc/init.d/bind9 , znaleźć wiersz z informacją o lokalizacji procesu PID oraz zamienić na poniższe:

 

PIDFILE=/var/bind9/chroot/var/run/named/named.pid 

 

 5. Opcje uruchamiania (ważne). Najpierw należy sprawdzić czy mamy SYSTEMD czy nie jest on używany.


 a) Jeśli w systemie NIE działa SYSTEMD). 

 - Plik do edycji  /etc/default/bind9 

  # startup options for the server 

 - dodać , zmienić lub odkomentować wiersz 


OPTIONS="-u bind -t /var/bind9/chroot -c /etc/bind/named.conf" 


b) Jeśli Funkcjonuje SYSTEMD należy dokonać zmian w pliku konfiguracyjnym  /etc/systemd/system/bind9.service


c) Jesli powyższy plik nie istnieje , nalezy go utworzyć. Powinien wyglądac następująco:

 

[Unit]

Description=BIND Domain Name Server

Documentation=man:named(8)

After=network.target

 

[Service]

ExecStart=/usr/sbin/named -f -u bind -t /var/bind9/chroot

ExecReload=/usr/sbin/rndc reload

ExecStop=/usr/sbin/rndc stop

 

[Install]

WantedBy=multi-user.target

 

d) Aktualizacja uruchamiania Binda przez SYSTEMD uzyskuje wie wydając polecenie:

systemctl reenable bind9

 

 6. Logowanie zdarzeń.

-  Tworzenie katalogów lib oraz log dla chroota:


mkdir /var/bind9/chroot/var/{lib,log} 

 

... oraz puste pliki w folderze log:

 

touch /var/bind9/chroot/var/log/{dns.log,bind.log,dns_queries.log,security_info.log,update_debug.log} 

 

- zmiana uprawnień odczytu/zapisu plików z logami:

chmod 644 /var/bind9/chroot/var/log/{dns.log,bind.log,dns_queries.log,security_info.log,update_debug.log} 

- Zmiana właściciela na bind oraz grupę root + skopiowanie pliku localtime wymaganego do poprawnej pracy Bind-a:

chown -R bind:root /var/bind9/chroot/var/log/* 

 

mkdir /var/bind9/chroot/var/lib/bind 

 

cp /etc/localtime /var/bind9/chroot/etc 

 

Po powyższych zmianach konfiguracji błędy logowane są do katalogu chroot. Aby mogły być odczytywane przez inne prorgamy lub innych użytkowników (w tym Webmina), należy utworzyć dowiązania symboliczne do głównego katalogu błędów::

 

ln -sf /var/bind9/chroot/var/log/bind.log /var/log/bind.log
ln -sf /var/bind9/chroot/var/log/security_info.log /var/log/security_info.log
ln -sf /var/bind9/chroot/var/log/update_debug.log /var/log/update_debug.log
ln -sf /var/bind9/chroot/var/log/dns.log /var/log/dns.log
ln -sf /var/bind9/chroot/var/log/dns_queries.log /var/log/dns_queries.log

 

7. Konfiguracja plików Bind-a:


- Do głównej konfiguracji Binda należy dodać informację o lokalizacji plików logów. Plik named.conf zlokalizowany w /var/bind9/chroot/etc/bind powinien wyglądac następująco:

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
 // If you are just adding zones, please do that in /etc/bind/named.conf.local
 include "/etc/bind/named.conf.options";
 include "/etc/bind/named.conf.local";
 include "/etc/bind/named.conf.default-zones";
 include "/etc/bind/named.conf.log";



- W katalogu /var/bin9/chroot/etc/bind należy ponadto utworzyc plik poleceń logowania błędów:

touch /var/bind9/chroot/etc/bind named.conf.log

...oraz nadać mu odpowiednie uprawnienia (właściciel: root , grupa: bind) ,odczyta/zapis 644

chown root:bind /var/bind9/chroot/etc/bind named.conf.log
chmod 644 /var/bind9/chroot/etc/bind named.conf.log

- Plik powinien wyglądać następująco:

logging {
channel update_debug {
file "/var/log/update_debug.log" versions 3 size 100k;
severity debug;
print-severity yes;
print-time yes;
};
channel security_info {
file "/var/log/security_info.log" versions 1 size 100k;
severity info;
print-severity yes;
print-time yes;
};
channel bind_log {
file "/var/log/bind.log" versions 3 size 1m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
channel log_dns {
file "/var/log/dns.log" versions 3 size 10m;
print-category yes;
print-severity yes;
print-time yes;
};
channel log_queries {
file "/var/log/dns_queries.log" versions 3 size 20m;
print-category yes;
print-severity yes;
print-time yes;
};
category default {log_dns; };
category queries {log_queries; };
category default { bind_log; };
category lame-servers { null; };
category update { update_debug; };
category update-security { update_debug; };
category security { security_info; };

 9. Testowanie konfiguracji:

- Uruchomienie Binda:

/etc/init.d/bind9 start && /etc/init.d/bind9 status 

 

Powyższą konfigurację testowałem na czterech różnych serwerach i działała prawidłowo. W przypadku wystąpienia błędów warto w pierwszej kolejności posprawdzać uprawnienia plików i folderów.

W niektórych konfiguracjach Debiana Jessie folder /var/bind9/chroot/var/lib/bind musi mieć ustawione prawa własności dla użytkownika bind i grupy bind. W razie potrzeby należy więc wykonać polecenie:

chown bind:bind /var/bind9/chroot/var/lib/bind

 

 Jeśli z jakiegoś powodu serwer nie chce sie uruchomić , to przyczynę można łatwo znaleźć w logu /var/log/syslog


Jeżeli konfiguracja działa poprawnie to można rozpocząć namawianie Webmina do współpracy z Bindem w nowym środowisku.

Warto zwrócic uwagę na fakt , że uruchamiając Binda w katalogu Chroot parametry jego działania nie są domyślnie monitorowane przez Webmina ze względu na różnice lokalizacji pliku PID oraz sposób uruchamiania. 

Należy więc w panelu Webmina wejść w ustawienia konfiguracyjne serwera DNS i wymusic nastepujące parametry: 

 

- Katalog CHROOT dla binda -> /var/bind9/chroot

- NAMED.CONF w katalogu chroot TAK

- Własciciel pliku stref: bind:root

- Dodawać nowe strefy do pliku -> /etc/bind/named.conf.local

- Pełna ścieżka do pliku named.conf -> /etc/bind/named.conf

- Pełna scieżka do programu named -> /usr/sbin/named

- PID -> /var/run/named/named.pid

- PID w katalogu chroot TAK

- Polecenie uruchamiające /etc/init.d/bind9 start

- zatrzymanie /etc/init.d/bind9 stop

- przeładowanie /etc/init.d/bind9 reload


- Testowanie współpracy Webminem:

Procedura jest bardzo prosta.

-  Uruchamiamy Binda z poziomu konsoli  (/etc/init.d/bind9 start && /etc/init.d/bind9 status) , odświeżamy stronę Webmina i sprawdzamy czy widzi pracujący serwer DNS.

- Zatrzymujemy Binda z poziomu konsoli (/etc/init.d/bind9 stop && /etc/init.d/bind9 status), odświeżamy stronę Webmina i sprawdzamy czy widzi zatrzymany serwer DNS.

... i / lub odwrotnie

- Uruchamiamy serwer DNS z poziomu Webmina a następnie w konsoli wydajemy polecenie /etc/init.d/bind9 status i sprawdzamy czy pracuje bez błędów.

- Zatrzymujemy serwer DNS z poziomu Webmina i sprawadzamy jego status w konsoli. Oczywiście powinien być zatrzymany.


Jesli coś nie działa poprawnie to przyczyny można szukać na dwa sposoby:

Metoda pierwsza (z moich obserwacji wynika, że najbardziej popularna) to "wygoglowanie" w sieci pierwszych 10-ciu stron poświęconych tematom serwera DNS i opublikowanie posta z treścią typu "coś nie działa" , "nic nie działa" , "nie wiem czy działa" , "nie wiem czy nie działa" itp... Metoda jest w bliżej nieokreslonym dla mnie stopniu na pewno skuteczna ale rozwiązanie najbardziej prozaicznego problemu zajmuje kilka dni.


Metoda druga to wygodny monitor, kolejne dobre piwo i analiza logów serwera. Nie trzeba być do tego geniuszem komputerowym ale warto znać chociażby zasadę działania jakiegokolwiek oprogramowania w środowisku chroot. Jak już wspomniałem wcześniej , błędy najczęściej spowodowane są nieprawidłowymi ustawieniami uprawnień odczytu/zapisu plików oraz katalogów lub też drobnymi pomyłkami podczas wydawania poleceń konfiguracyjnych.  Wszystko można bardzo łatwo sprawdzić w głównych logach serwera /var/log/syslog  a jesli Bind mimo błędów sie uruchamia to w logach  bind.log, dns.log, dns_queries.log, security_info.log czy update_debug.log widocznych z poziomu Webmina lub podłączonych symlinkiem do /var/log. Warto równiez zwracać uwage czy podczas testów na pewno uruchamiami i zatrzymujemy serwer dns. Lokalizacja plików PID jest różna dla oryginalnej lokalizacji Bind-a jak i dla Chroota. Do poprawnej pracy powinien ją też widzieć Webmin. Bind pracuje tak samo w katalogu Chroot jak i w domyślnym. Róznica polega jedynie na lokalizacji katalogu głównego!

Jesli serwer DNS pracuje jako slave to testy warto zacząć od tego czy możliwy jest transfer strefy z serwera główngo. Często bywa tak (i nie wiem od czego to zależy), że plik strefy jest eksportowany do serwera zapasowego ale nie daje się odczytac poniewaz jest w formacie binarnym. Wystarczy wtedy dodac do named.conf.local polecenie "masterfile-format text;" i po kłopocie.


to tyle ;-)

 

 

 

 

 


 

Do wystawianie komentarzy na tej stronie wymagane jest zalogowania się - zaloguj się lub kliknij tutaj , aby się zarejestrować.

Witaj

Online

Licznik

Bunkry dla bunkrowców !

Niniejsza strona internetowa przedstawia opisy miejsc trudnodostępnych i w większości przypadków niebezpiecznych , których zwiedzanie bez należytego przygotowania technicznego oraz wiedzy moze spowodować wypadek lub trwałe kalectwo.

Publikowanie zdjęć oraz artykułów umieszczonych w tym serwisie tylko za zgodą autora.

© Adam Wojcieszonek - Gdynia 2002-2017