Konfiguracja serwera cz.4

execTak jak obiecałem – w długi weekend majowy opublikuję kolejną część kursu. Wiem, że strasznie przeciąga się ten poradnik, ale niestety uczelnia mnie nie rozpieszcza – sieci neuronowe, matlab i obliczenia wysokiej wydajności dają w kość. Never mind… .

W poprzedniej części opisywałem pełną instalację, konfigurację i korzystanie z Apache, PHP i MySQL. W dzisiajeszej czwartej części opiszę w jaki sposób wykorzystać deamon’a BIND na naszym serwerze.

Zapraszam więc do lektury…

Bind – serwer nazw

BIND (Berkeley Internet Name Domain, poprzednio: Berkeley Internet Name Daemon) jest popularnym serwerem (demonem) DNS. Został on stworzony przez Paula Vixie w roku 1988. 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ę.

Alternatywnym odpowiednikiem BIND jest PowerDNS, którzy działa z wykorzystaniem bazy danych (http://www.powerdns.com/). Teoretycznie działa szybciej i mnie będzie obciążać serwer dla dużej ilości domen, ale praktycznie nigdy nie miałem okazji tego sprawdzić. Kolejnym plusem jest to, że jednym zapytaniem SQL można zmienić adres IP wszystkich domen w systemie. Dla Binda trzeba pisać/pobrać skrypt Bash do tego.

Skupię się na BINDie, ponieważ jest najpopularniejszy i znacznie łatwiej uzyskać do niego pomoc, która może okazać się niezbędna początkującym administratorom.

Instalacja i zabezpieczenia
Historia wersji BIND jasno mówi, że od początku zabezpieczenia nie były jego mocną stroną i od początku był dziurawa aplikacją. Poświęćmy więc chwilę czasu na jego załatanie.

# apt-get install bind9

Po instalacji od razu zatrzymajmy serwer bind, aby wprowadzone zmiany nie odbywały się na uruchomionej aplikacji.

# /etc/init.d/bind9 stop

# /etc/init.d/bind9 status
bind9 is not running failed!

Zmienimy teraz zawartość pliku /etc/default/bind9 aby deamon był uruchamiany jako nieuprzywilejowany użytkownik bind, który będzie chrootowany w /var/lib/named.

Zamień odpowiednią linijką na tą:

OPTIONS=”-u bind -t /var/lib/named”
#Set RESOLVCONF=no to not run resolvconf
RESOLVCONF=yes

Następnie utwórz niezbędne katalogi:

# 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

Następnie główny katalog konfiguracyjny przesuń z domyślnej lokalizacji /etc/bind

# mv /etc/bind /var/lib/named/etc

Utwórz także link symboliczny starej lokalizacji i nowej. Unikniemy w ten sposób problemów w przyszłości jeśli aplikacja będzie aktualizowana, bądź w razie potrzeby, kiedy inna aplikacja chciała by skorzystać z binda.

# ln -s /var/lib/named/etc/bind /etc/bind

Wykonaj następnie poniższe komendy:

# 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

Teraz powinniśmy zmienić plik /etc/default/syslogd, aby wciąż niezbędne komunikaty o ewentualnych błędach były zapisywane do logów.

Jeśli w naszym systemie nie mamy ww. pliku to trzeba go „doinstalować”, wraz z odpowiednią aplikacją.

Wpisujemy w konsoli zatem:

# apt-get install sysklogd

A potem edytujemy plik

# vim /etc/default/syslogd

SYSLOGD=”-a /var/lib/named/dev/log”

Na koniec restartujemy demon od zarządzania logami, oraz uruchamiamy serwer bind.

# /etc/init.d/sysklogd restart
Restarting system log daemon….

# /etc/init.d/bind9 start
Starting domain name service…: bind9.

Po tych czynnościach mamy już sprawny, działający deamon BIND. Nie musimy pamiętać nowej lokalizacji plików (/var/lib/named/etc), ponieważ utworzyliśmy link do /etc/bind i z niego będziemy korzystać.

Własne NameServery
Przedstawiony poniżej sposób przeze mnie jest chyba najgorszym z możliwych – i zdaję sobie z tego sprawę. Ale biorąc pod uwagę to, że nie dysponuję drugim serwerem dedykowanym z możliwością wglądu do binda, nie zagłębiałem się specjalnie w to jakie możliwości daje to lepsze rozwiązanie. Metoda przedstawiona przeze mnie jest sprawnie działającą aplikacją. Przez ponad rok czasu metoda ta nie zawiodła mnie, więc uznaję ją jako „sprawdzoną, działającą”.

Wszystko rozchodzi się o to, aby ustawione ns1.blueman.pl i ns2.blueman.pl były na różnych serwerach, oraz aby wzajemnie wymieniały się danymi. Ja to uruchamiam na jednym serwerze – przez rok czasu nie miałem żadnych problemów z BINDem, a więc nie musiał się posiłkować działającym na innej maszynie serwerem secondary.
Można powiedzieć, że jest to temat rzeka. Zainteresowanych odsyłam do www.google.pl po więcej informacji ;)

Przedstawiony poniżej opis konfiguracji będę opisywać na przykładzie mojej domeny ania.li, którą kupiłem tylko dla potrzeb serwerów nazw i ogólnej przydatności serwerowej. Jest to najtańsza domena jeśli chodzi o odnowienie – w www.ovh.pl kosztuje 12.99 zł netto. A zyskałem tym samym prostą 4-literową domenę :)

Konfigurację rozpoczynamy od zajrzenia do pliku /etc/bind/named.conf

# vim /etc/bind/named.conf

Zawiera on (nie wiem do końca jak to określić…) spis wszystkich domen, wraz z parametrami w jakim trybie domena jest „uruchomiona”. Domena może być uruchamiana jako „master”, oraz „slave” (oraz pewnie także w innych o których nie mam pojęcia).

Tuż za ostatnim wpisem:

zone „255.in-addr.arpa” {
type master;
file „/etc/bind/db.255”;
};

wstawmy informację o nowej strefie domeny którą będziemy ustawiać.

zone „ania.li” {
type master;
file „/etc/bind/db.ania.li”;
};

Musimy także utworzyć plik db.ania.li w katalogu /etc/bind. Nazewnictwo plików i ich położenie nie ma większego znaczenia – ważne, aby aplikacja BIND miała do nich dostęp (uprawnienia).

Plik db.ania.li powinien tak wyglądać:

$TTL 86400
@ IN SOA ns1.ania.li. root.ania.li. (
2009041703
3600
3600
3600000
1209600
)

;
@ IN NS ns1.ania.li.
@ IN NS ns2.ania.li.
;
@ IN MX 10 mail.ania.li.
;
@ IN A 83.242.78.666
www IN CNAME ania.li.
ns1 IN A 83.242.78.666
ns2 IN A 83.242.78.666

BIND jest dość skomplikowaną aplikacją i początkujący administrator będzie mieć na pewno problem, aby go ujarzmić. Postaram się zmniejszyć ten ból wyjaśniając problemy z jakimi ja się napotykałem na swojej drodze.

  • @ IN SOA ns1.ania.li. root.ania.li.
    ns1.ania.li – jest to adres master nameserwer
    root.ania.li – można tutaj właściwie wstawić dowolny tekst. Nie wiem od czego to zależy
  • 2009041703
    Bardzo ważna linijka – tzw. SERIAL! Przy każdej zmianie w pliku binda domeny musimy tutaj podać nową cyfrę (serial). Możemy numerować to dowolnie – 1, 2, 3, 4, 5, 6, 7, 8, a także 1, 2, 1, 2, 1, 2. Jednak przyjął się pewien standard, który chyba wszyscy używają.
    Pierwsze 4 cyfry to ROK, kolejne 4 to MIESIĄC oraz DZIEŃ. A następne 2 cyfry to numeracja ilości zmian pliku w danym dniu.
    W moim przypadku ostatnio w tym pliku „grzebałem” 17 kwietnia 2009, trzykrotnie zmieniając jego zawartość w tym dniu.

Część pliku po zamykającym nawiasie zwykłym zawiera już konkretną zawartość strefy, która jest widoczna i odpytywana przez zewnętrzne serwery.

@ IN NS ns1.ania.li.
@ IN NS ns2.ania.li.

Określa na jakie NameServery wskazuje domena, które poniżej zostały zadeklarowane

ns1 IN A 83.242.78.666
ns2 IN A 83.242.78.666

Możesz użyć tutaj dowolnych nazw – zaproponowane przeze mnie ns1 i ns2 są tylko przykładami. Równie dobrze możesz zamiast nich wpisać reks i burek. Pamiętaj, aby zmiany te zrobić wszędzie, a nie tylko w linijce przy adresie IP!

@ IN A 83.242.78.666
www IN CNAME ania.li.

Linijki te wysyłają przychodzące zgłoszenie z adresu *.ania.li oraz www.ania.li do serwera o wskazanym IP.
Znak małpy @ oznacza po prostu „dla wszystkich adresów” w sensie (subdomen).

Typy wpisów:

  • A podajemy adresy IP, na które ma wskazywać dany wpis,
  • AAAA jak wyżej, tyle, że adresy typu Ipv6
  • NS podajemy nazwy (nie adresy IP!) serwerów, które utrzymują daną strefę,
  • MX podajemy nazwy serwerów obsługujących pocztę,
  • CNAME podajemy aliasy na inne domeny.

Pamiętajcie!
Po słownych nazwach serwerów zawsze trzeba wstawić kropkę. Po IP nie wolno tego robić !

Tym samym mamy już skonfigurowane i działające własne dwa serwery nazw :] Możemy ich używać podpinając kolejną domenę do serwera.

Przy każdej zmianie wpisu domeny trzeba zmieniać SERIAL na nowy, aby aplikacja pobrał nowe wartości.
Musimy także zrestartować cały bind jeśli wprowadzamy jakieś zmiany

# /etc/init.d/bind restart

Strefa dla nowej domeny
Nim jednak to zrobimy w panelu zarządzania domeną u naszego domenowego providera musimy najpierw na naszym serwerze utworzyć jej strefę.

Edytujemy więc plik /etc/bind/named.conf
I tuż przed (który jest na końcu pliku)

include „/etc/bind/named.conf.local”;

dodajemy

zone „moja-domena.pl” { type master; file „/etc/bind/db.moja-domena.pl”; };

Wychodzimy z pliku named.conf uprzednio go zapisując. Oraz tworzymy plik /etc/bind/db.moja-domena.pl z zawartością:

$TTL 86400
@ IN SOA ns1.ania.li. root.moja-domena.pl. (
2009050301
3600
3600
3600000
1209600
)

;
@ IN NS ns1.ania.li.
@ IN NS ns2.ania.li.
;
@ IN MX 10 mail.moja-domena.pl.
;
@ IN A 83.242.78.666
www IN A 83.242.78.666

Zwróćcie proszę uwagę na to, aby w rekordzie SOA było odwołanie do naszego NS, oraz także @ IN NS wskazywało na nasze główne NS. A także na to, aby SERIAL był nowy (przy kolejnych zmianach tego pliku).

Jeśli wszystko wprowadziliśmy dobrze i po restarcie binda

# /etc/init.d/bind9 restart

Serwer nie zakomunikował żadnych błędów możemy się cieszyć :)

Aby sprawdzić, czy strefa nowej domeny została prawidłowo załadowana, wykonujemy polecenie:

# named -g 2>&1 | grep loaded

Gdy już nic nowego nie będzie pojawiać się na wydruku ekranu naciskamy Ctrl+C oraz szukamy, czy nasza nazwa domeny jest na ekranie.

Wydruk powinien wyglądać mniej więcej tak:

03-May-2009 01:23:01.574 zone 0.in-addr.arpa/IN: loaded serial 1
03-May-2009 01:23:01.575 zone 127.in-addr.arpa/IN: loaded serial 1
03-May-2009 01:23:01.576 zone 255.in-addr.arpa/IN: loaded serial 1
03-May-2009 01:23:01.577 zone ania.li/IN: loaded serial 2009041703
03-May-2009 01:23:01.578 zone localhost/IN: loaded serial 2
03-May-2009 01:23:01.578 zone moja-domena.pl/IN: loaded serial 2009050301

Jeśli wszystko jest OK, to możemy zmienić NS domeny na własne w firmie w której wykupiliśmy nasza nazwę. Powinno zadziałać za pierwszym razem.

Pełny kurs dostępny jest także w formie dokumentu PDF:
pdf icon big Podstawowa konfiguracja serwera dedykowanego/VPS

W kolejnej części
Instalacja postfix, proftpd, eaccelerator

  • crazyluki

    dziękuje, na pewno się przyda;-)

  • http://www.blogplay.eu ddluk

    Co do nameservera to ja bym to zrobił trochę inaczej :) Trzymanie dwóch na jednej maszynie nie jest dobrym rozwiązaniem. Dobrze by było użyć jako drugiego darmowego http://freedns.sgh.waw.pl/

  • http://www.BlueForum.pl BlueMan

    @ddluk – próbowałem się kiedyś z tym bić, ale po prostu mi nie wyszło.

  • emilek

    zapomniales dodać zeby phpmyadmin trzeba dodać w pliku: /etc/apache2/apache2.conf linijkę: Include /etc/phpmyadmin/apache.conf
    U mnie bez tego nie chciał działać phpmyadmin

  • http://www.BlueForum.pl BlueMan

    Jak instaluje się z paczki to on powinien sam to dodać. Jak ręcznie, to też powinno działać.

    Ja nigdy nie miałem z tym problemów, dlatego nie opisałem tego.

  • http://zone.advmdev.pl/ AdvMDev

    Nie trzeba dodawać. Wystarczy dowiązać (i ew. wywalić .htaccess, jak pokazuje internal server error).

  • http://pavobe.pl/ pavobe

    Może ktoś powiedzieć, co jest nie tak z moim bindem?

    sudo /etc/init.d/bind9 restart
    Stopping domain name service…: bind9rndc: connect failed: 127.0.0.1#953: connection refused
    .
    Starting domain name service…: bind9 failed!

    Kilka dni temu wszystko śmigało. Nie zmieniałem nic. Tylko prosto i jasno proszę :P.

  • http://www.shad.pl shadow_no

    @pavobe

    [email protected]:/# pkill bind9
    [email protected]:/# chown root.bind /etc/bind/rndc.key

    Oczywiście po tym restartujesz binda:
    [email protected]:/# /etc/init.d/bind9 restart

  • waz

    a słuchaj co wpisałeś u rejestratora domeny ania.li ?

    • NEWS

      Też się nad tym zastanawiam…
      Wg mnie skoro domenę przypisaliśmy do naszego serwera nazw to wypadało by ją przypisać u dostawcy do IP naszego serwera DNS.
      Zgadza się ? Tylko jak, aby wszystko hulało ?
      Zmiana w domenie pozycji z IP ( A 195….) wystarczy ?

  • IDOL

    Mam ten sam problem co pavobe:
    ————————-
    „Starting domain name service…: bind9 failed!”
    „Stopping domain name service…: bind9rndc: connect failed: 127.0.0.1#953: connection refused”
    ————————-

    Wskazówka shadow_no nie pomogła. Jakieś pomysły co może być nie tak…?

    • IDOL

      Już nieważne… można usunąć mój komentarz. Brakowało mi średnika w named.conf

      Gdyby kogoś interesowało jak sprawdzić logi przy podobnym problemie:

      grep named /var/log/daemon.log | tail -n 25

  • gregor

    Witam wszystkich. Uważam ze jest to super opis jak postawić serwer DNS :) naprawdę polecam :) działa w 100%

  • jaszczur

    Witam, po restarcie binda wyskoczył mi poniższy komunikat:

    Stopping domain name service…: bind9WARNING: key file (/etc/bind/rndc.key) exists, but using default configuration file (/etc/bind/rndc.conf)
    rndc: connect failed: 127.0.0.1#953: connection refused
    .
    Starting domain name service…: bind9 failed!

    Gdzie szukać problemu? Jak sprawdzić logi?

  • Pewu

    Witam,
    Przy próbie restartu binda komendą /etc/init.d/bind9 start
    Mam taki komunikat: /etc/init.d/bind9: 1: /etc/default/bind9: bind: not found