Posledná zmena: 7/9/2021
DNS je systém na správu doménových mien počítačov a ich IP adries. Umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad). Pre fungovanie Internetu je DNS kľúčovou záležitosťou, ktorú zabezpečujú programy na obsluhu DNS - DNS servery.
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou. Doména môže obsahovať znaky "A-Z", "a-z", "0-9", "-" a "_".
DNS si môžete predstaviť ako strom domén:
com edu ... sk / \ | \ / \ | \ google sun washington stuba / | | / \ www www www chtf elf / | \ chelin decef fornax
Výhodou stromového riešenia je, že každú časť stromu môže spravovať iný server. Správa systému domén je teda distribuovaná, čo znižuje možnosť výpadku celého systému v prípade výpadku niektorého uzla.
Najvyššiu úroveň stromu domén - domény najvyššej úrovne (top-level domains,
TLD) spravujú koreňové DNS servery. Tie obsahujú údaje o DNS serveroch pre
domény najvyššej úrovne (".com
", ".net
",
".sk
" atď.). Koreňové DNS servery sú veľmi dôležité, pretože sú
nevyhnutné pre správnu činnosť celého Internetu. Preto existuje niekoľko
koreňových DNS serverov, ktoré sú rozmiestnené na viacerých kontinentoch.
Adresy týchto serverov sú verejne známe a nachádzajú sa v konfigurácii
každého DNS servera.
Ak DNS server spravuje doménu, môže vytvárať domény nižšej úrovne
(subdomény) a buď obsahuje údaje o týchto doménach, alebo odkaz na
podriadené DNS servery, ktoré ich spravujú. Napr. DNS server
pre "stuba.sk
" obsahuje odkazy na DNS servery domén
"chtf.stuba.sk
" a "elf.stuba.sk
" (a mnoho
ďalších). Na DNS serveri pre doménu "elf.stuba.sk
" nájdete
napr. údaje o serveroch "decef.elf.stuba.sk
"
a "fornax.elf.stuba.sk
".
Časť stromu domén, ktorú spravuje DNS server, sa nazýva zóna.
TTL (Time To Live) je čas, počas ktorého klient považuje informáciu o doménach/adresách za platnú. Po uplynutí tohto času si opäť obnovuje informácie z DNS.
DNS servery rozdeľujeme na dva základné druhy:
mojadomena.sk
") sú uložené v DNS pre doménu
najvyššej úrovne (".sk
").Jeden DNS server môže byť autoritatívny aj pre viacero domén (typicky napr. provider Internetu), ale pre jednu doménu môže byť autoritatívny iba jeden DNS server.
Primárny DNS server sa v terminológii DNS servera BIND označuje aj ako "master", sekundárny server ako "slave".
Pri zisťovaní záznamu pre fiktívnu adresu
"server.mojadomena.sk
" sa postupuje takto:
mojadomena.sk
", obslúži požiadavku a vráti IP adresu
počítača "server.mojadomena.sk
".mojadomena.sk
", poskytne údaje o adrese
"server.mojadomena.sk
" zo svojej kópie zónového súboru.sk
"sk
" a získa
adresu DNS servera pre doménu "mojadomena.sk
"mojadomena.sk
"
a získa adresu pre záznam "server.mojadomena.sk
"
Informácie o doménach a adresách sú uložené v tzv. zónových súboroch. Jeden
zónový súbor by mal obsahovať údaje o jednej doméne, adresách v rámci tejto
domény a umožňuje preklad doménového mena servera na jeho IP adresu. Na
opačný preklad slúžia reverzné zónové súbory, ktoré definujú záznamy
v špeciálnej doméne "in.addr-arpa
". Reverzné DNS záznamy nie sú
vo všeobecnosti povinné, mnoho služieb ich však vyžaduje (napr. niektoré
konfigurácie mailových serverov neprijímajú maily od serverov bez reverzného
záznamu) a preto by ste ich mali používať minimálne pre vaše servery, ktoré
komunikujú s Internetom.
V niektorých prípadoch si môžete reverzné záznámy robiť sami Ak máte pridelený celý rozsah adries v A, B alebo C triede (maska 255.0.0.0, 255.255.0.0, 255.255.255.0), robíte si svoj reverzný záznam sami. Ak má vaša sieť inú masku, napr. 255.255.255.X, kde X nie je 0, robí poskytovateľ, ktorý vám pridelil adresu, aj reverzný záznam pre vašu podsieť.
Informácie v zónových súboroch sa nazývajú záznamy (Resource Records, RR). Existuje ich viacero, ale ukážeme si len tie, s ktorými sa stretnete naozaj v každom zónovom súbore DNS servera.
Syntax:
<doména> [<ttl>] [<trieda>] SOA <nameserver> <admin> ( <serial> <refresh> <retry> <expire> <minimum> )
mojadomena.sk IN SOA mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. ( 2003013101 ; serial 86400 ; refresh (1 day) 21600 ; retry (6 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 3600 ; minimum (1 hour) )
Záznam "IN SOA" (Start of Authority) definuje doménu, jej meno a vlastnosti.
"mojadomena.sk
" je plné meno definovanej domény.
"mojserver.mojadomena.sk
" určuje meno servera, ktorý spravuje
túto doménu, teda primárny DNS server. Nasleduje adresa administrátora domény,
v ktorej sa namiesto znaku "@" použije ".".
Syntax:
<doména> [<ttl>] [<trieda>] NS <server>
Príklad:
mojadomena.sk IN SOA mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. ( 2003013101 ; serial 86400 ; refresh (1 day) 21600 ; retry (6 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 3600 ; minimum (1 hour) ) NS mojserver.mojadomena.sk. NS inyserver.inadomena.sk.
Záznam "NS" (Name Server) určuje DNS servery pre definovanú doménu. Záznamy musia obsahovať doménové mená, nie IP adresy! Záznam "NS" nesmie byť alias na iný záznam. Každá doména musí mať najmenej jeden NS záznam, odporúča sa však, aby mala najmenej dva, ktoré sa nazývajú primárny a sekundárny DNS server (na poradí týchto záznamov nezáleží).
Toto označenie je však trochu mätúce, pretože doména môže mať aj viac sekundárnych DNS serverov. V novšej terminológii, ktorú používa aj BIND, sa preto DNS servery označujú ako master (primárny) a slave (sekundárny). Sekundárny DNS server by mal byť umiestnený fyzicky na inej sieti, ako je primárny DNS server, aby fungoval v prípade, že v dôsledku výpadku elektriny, pádu OS alebo nejakej živelnej pohromy nefunguje primárny DNS server. Obyčajne sa ako sekundárny DNS server používa DNS server poskytovateľa Internetu, prípadne sa môžete dohodnúť s nejakou organizáciou, že si budete navzájom robiť sekundárne DNS servery.
Pri aktualizácii zónového súboru nezabudnite na zvýšenie sériového čísla - DNS server upozorňuje všetky svoje sekundárne DNS servery, že nastala zmena zónového súboru a sekundárne servery si skopírujú zónu iba v prípade, že ste zvýšili sériové číslo!
V príklade definujeme dva DNS servery pre doménu "mojadomena.sk
"
s menami "mojserver.mojadomena.sk
"
a "inyserver.inadomena.sk
" (keďže je súčasťou domény, ktorú
nespravuje náš DNS server, je to náš sekundárny DNS server). Údaje sa
nachádzajú priamo v zónovom súbore s definíciou domény
"mojadomena.sk
", preto netreba opakovať meno domény pred obomi
záznamami.
Syntax:
<doména> [<ttl>] [<trieda>] MX <priorita> <server>
Príklad:
mojadomena.sk IN SOA mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. ( 2003013101 ; serial 86400 ; refresh (1 day) 21600 ; retry (6 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 3600 ; minimum (1 hour) ) NS mojserver.mojadomena.sk. NS inyserver.inadomena.sk. MX 10 mojserver.mojadomena.sk.
Záznam "MX" (Mail Exchanger) určuje server. ktorý prijíma poštu adresovanú na
adresy "pouzivatel@mojadomena.sk
". Týchto serverov môže byť viac.
Pri doručovaní mailu pre vašu doménu sa používa tento záznam na zistenie, kam
sa vlastne má pošta doručiť. Pomocou čísla pred menom servera sa nastavuje
jeho priorita - nižšie číslo znamená vyššiu prioritu. Najvyššiu prioritu má
server s hodnotou "0". To môžete využiť v prípade, že máte okrem primárneho
mail servera aj nejaké záložné, ktoré dočasne prevezmú funkciu prijímania
pošty v prípade výpadku a keď primárny mailový server funguje, vám ju doručia.
Hodnota "MX" záznamu musí byť doménová adresa a nesmie ísť o alias na iný záznam.
Poznámka: záložné mailové servery musia byť nakonfigurované pre
prijímanie vašej pošty, inak ju budú odmietať, pretože nie je určená pre ich
doménu! (chyby typu "Relaying denied") V prípade Postfixu
je
ukážka správneho nastavenia priamo na jeho
stránke v sekcii "Documentation, FAQ".
Syntax:
<server> [<ttl>] [<trieda>] A <adresa>
Príklad:
mojserver IN A 192.168.0.1 diane IN A 192.168.0.2
Záznam "A" (Address) určuje IP adresu pre server definovaný jeho menom. Servery uvedené ako "NS" a "MX", ktoré sú súčasťou vašej domény, musia mať záznam typu "A" (nie CNAME)!
Syntax:
<alias> [<ttl>] [<trieda>] CNAME <server>
Príklad:
mail IN CNAME mojserver www IN CNAME mojserver ftp IN CNAME mojserver
Záznam "CNAME" (Canonical Name) umožňuje vytvoriť alias pre server, ktorý už má "A" záznam, čiže niekoľko záznamov môže byť asociovaných s tou istou IP adresou. Toto sa používa pre definíciu serverov s menami "www", "mail" a podobne.
Aliasov môžete definovať ľubovoľné množstvo, nezabúdajte však, že servery uvedené ako "NS" (DNS servery) a "MX" (mailové servery pre doménu) musia mať "A" záznam (nie "CNAME"!)
Syntax:
<špeciálnemeno> [<ttl>] [<trieda>] PTR <meno>
Príklad:
1 IN PTR mojserver.mojadomena.sk. 2 IN PTR diane.mojadomena.sk.
Záznamy "PTR" umožňujú reverzný preklad (z IP adresy na doménové meno
počítača). Tieto záznamy môžete použiť iba v špeciálnej doméne
"in.addr-arpa
".
Je nesmierne dôležité, aby v prípade, že používate aj reverzné DNS, reverzný
preklad IP adresy "sedel" s priamym prekladom daného doménového mena na IP
adresu, inak sa dočkáte poriadnych problémov. To znamená, že ak preklad
doménového mena "mojserver.mojadomena.sk
" vracia IP adresu
192.168.0.1, nesmie preklad IP adresy 192.168.0.1 vracať iné meno ako
"mojserver.mojadomena.sk
". Je to síce perfektné platný záznam,
ale nie je to ani trochu v poriadku. vystavujete sa tým napr. riziku, že
z tohto servera bude odmietnutý prístup pri komunikácii s inými servermi,
ktoré si budú overovať reverzný záznam
kvôli bezpečnosti.
Inštalácia DNS servera BIND je jednoduchá. Môžete si stiahnuť zdrojový kód priamo z domácej stránky projektu, alebo použiť balíčky, ktoré dodávajú jednotlivé distribúcie (pre jednoduchosť odporúčam pracovať s balíčkami).
Na začiatku si treba ujasniť, či chcete inštalovať verziu BIND-u radu 8.X.X alebo 9.X.X. Verzia 9 bola napísaná takmer odznovu, takže by mala byť lepšia, krajšia atď. a považuje sa vo všeobecnosti za bezpečnejšiu. Obsahuje tiež viacero nových funkcií. Nevýhodou je, že ak prechádzate zo staršej verzie (8.X) na novšiu (9.X), môžu sa vyskytnúť drobné problémy s niektorými parametrami, prípadne zistíte, že váš zónový súbor s údajmi o adresách počítačov obsahuje chyby, o ktorých ste dovtedy nevedeli (BIND 9 je citlivejší na chyby).
Ak inštalujete DNS na čistý server, tak nie je čo riešiť - inštalujte priamo verziu radu 9.
V nasledujúcom texte budem predpokladať inštaláciu BIND 9.2.x, ale väčšina, (ak nie všetky) vecí by mala fungovať aj pre verzie 8.X.
Všetky údaje, ktoré bude DNS server pri svojej činnosti potrebovať, budeme
uchovávať v adresári "/var/named
". Je to najmä preto, že
adresár "/var
" zvykne byť pripájací bod pre súborový systém
a ten môžeme zabezpečiť tak, ako sme si to ukázali v kapitole "Rozdelenie disku".
Po stiahnutí balíka ho rozbalíme a skonfigurujeme:
cd /var/tmp tar xzf bind-9.x.x.tar.gz cd bind-9.x.x ./configure --enable-threads
Ak vás zaujímajú ďalšie parametre príkazu "./configure
", môžete
ho spustiť s parametrom "--help
".
./configure --help
Jeden z najpoužívanejších parametrov je "--prefix=cesta
", ktorý
určuje základnú cestu, kam sa BIND nainštaluje. Štandardne je táto cesta
"/usr/local/
" (BIND vytvorí pri inštalácii potrebné
podadresáre).
Po skonfigurovaní (nemali by ste vidieť nijaké chyby) program skompilujte príkazom
make
Po úspešnom skompilovaní (nemali by ste vidieť nijaké chyby) nainštalujte BIND príkazom:
make install
Súbory sa prekopírujú do cieľových adresárov (štandardne
"/usr/local/
"), takže samotný démon "named
" bude
uložený v adresári "/usr/local/sbin
". Konfiguračný súbor
"named.conf
" sa očakáva v adresári "/etc
".
Poznámka: ak inštalujete BIND zo zdrojákov (napr. preto, že balíčkové verzie neobsahujú najnovšie vlastnosti, ktoré potrebujete), nevytvorí sa štartovací skript. Preto je výhodné si tento skript skopírovať od niekoho, kto ho už má, prípadne použiť tento "postup":
/etc/init.d/named
" (Debian:
"/etc/init.d/bind9
", resp. "/etc/init.d/bind
")/etc/init.d
"/usr/local
")
Stiahnite si balíčky pre váš operačný systém a nainštalujte ich. Budú to
pravdepodobne balíčky nazvané "bind-XXX
"
a "bind-utils-XXX
" (XXX predstavuje číslo verzie).
/etc/init.d/named
", "/etc/init.d/bind9
"Ovládanie BINDu pomocou štartovacieho skriptu je jednoduché:
/etc/init.d/named start
/etc/init.d/named stop
/etc/init.d/named restart
/etc/init.d/named reload
Démon "named
" sa štandardne spúšťa s právami roota a je
otvorený útokom zo siete (ak má poskytovať údaje o doméne, nemôže byť
chránený firewallom), čo je príliš nebezpečné, aby ste to dovolili.
Našťastie, démon je napísaný tak, že sa vie po spustení prepnúť na iného
používateľa, ktorý už nemá rootovské privilégiá. Tohto používateľa treba
vytvoriť (nepoužívajte používateľa "nobody
"!).
Poznámka: poinštalačné skripty balíčkov v niektorých distribúciách
Linuxu vytvára používateľa "named
" za vás! Tento fakt treba
overiť kontrolou súboru "/etc/passwd
". (napr. príkazom
"grep named /etc/passwd
")
vytvorenie skupiny a používateľa: Debian
groupadd named adduser --system --disabled-login --shell /bin/false --ingroup named named
vytvorenie skupiny a používateľa: Mandrake
groupadd named useradd -d /var/named -g named -M -s /bin/false named
Teraz vytvorte adresáre pre zónové súbory: "/var/named/primary
"
pre záznamy vášho DNS (primárneho) a v prípade, že bude váš DNS server
fungovať ako sekundárny server pre inú doménu, vytvorte aj adresár
"/var/named/secondary
". Ďalej vytvorte adresár
"/var/run/named
" a zmeňte vlastníka a skupinu na
"named
" a "named
".
mkdir -p /var/named/primary mkdir /var/named/secondary mkdir /var/run/named chown named:named /var/named/secondary /var/run/named
BIND je nainštalovaný, nasleduje náročnejšia fáza a tou je konfigurácia. Ale táto príručka má za cieľ práve zjednodušenie tejto fázy ;-)
Tento súbor je najdôležitejší, určuje umiestnenie zónových súborov (s údajmi
o vašej doméne a adresách na tejto doméne) a mnoho parametrov pre beh
démona. Umiestňuje sa väčšinou v adresári "/etc
" alebo
"/etc/bind
", odporúčam však, aby ste ho umiestnili do adresára
"/var/named/etc
" (vytvorte ho, ak neexistuje) a vytvorili
symbolickú linku z "/etc/named.conf
":
ln -s /var/named/etc/named.conf /etc/named.conf
Dôvod tejto na prvý pohľad čudnej operácie je jednoduchý - pomôže nám to pri
neskoršom zabezpečovaní démona a uzatváraní
v adresári "/var/named
" pomocou volania
"chroot()
". Navyše, pri editovaní súboru môžete vďaka
symbolickej linke bez problémov používať cestu
"/etc/named.conf
".
V konfiguračných ukážkach budeme vytvárať záznamy pre doménu
"mojadomena.sk
" s adresami z rozsahu 192.168.0.0/255.255.255.0.
V skutočnosti ich pochopiteľne musíte nahradiť vašimi skutočnými adresami.
Nasleduje ukážka súboru "named.conf
" s komentármi (v
"named.conf
" sa ako začiatok komentára používa dvojité lomítko
(//), ako to poznáte z C++, komentár platí do konca riadku;
v zónových súboroch sa ako začiatok komentára používa bodkočiarka
(;), tiež platí do konca riadku).
Súbor obsahuje niekoľko direktív, ktoré sú vždy ukončené bodkočiarkou. Skupiny direktív sú ohraničené znakmi { a } (ako v programovacom jazyku C).
// uvedeny kluc sluzi na ovladanie demona, este o nom bude rec! vytvara sa // pomocou programu "rndc-confgen", ale da sa pouzit aj automaticke nastavenie key "rndc-key" { algorithm hmac-md5; secret "tuC4TiKfe9evXag2tLyfJQ=="; }; // nasledujuce nastavenie umoznuje ovladat demona iba z toho stroja, na // ktorom je spusteny. Pre vas staci vediet, ze na zaklade tohto nastavenia // funguje "/etc/init.d/named stop" a "/etc/init.d/named reload" controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; }; options { // adresar, v ktorom sa nachadzaju konfiguracne subory // vsetky relativne cesty maju zaklad v tomto adresari directory "/var/named/"; // subor s cislom procesu (pre ovladanie demona) // adresar musi byt zapisovatelny pre pouzivatela, s ktoreho pravami sa spusta // demon "named"! pid-file "/var/run/named/named.pid"; auth-nxdomain yes; // ak vas poskytovatel umoznuje pouzit jeho DNS servery na obsluhu // poziadaviek, ktore neviete obsluzit vy, usetrite si cas a procesor, pretoze // svoje poziadavky 'forwardujete' na jeho DNS servery forwarders { IP_ADRESA_DNS1_SERVERA_PROVIDERA; IP_ADRESA_DNS2_SERVERA_PROVIDERA; }; // direktiva 'forward only' sposobi, ze budete forwardovat poziadavky, ktore // neviete obsluzit, t.j. tie, ktore nemate v zonovych suboroch forward only; }; // obmedzi logovanie chyb, ktore nie su dolezite logging { category lame-servers { null; }; }; // adresy korenovych suborov // TENTO SUBOR NEMENTE! zone "." { type hint; file "named.ca"; }; // reverzny zaznam pre localhost // TENTO SUBOR NEMENTE zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; // zaznam pre domenu "mojadomena.sk" // TENTO SUBOR UPRAVTE PODLA POTREBY zone "mojadomena.sk" { type master; file "primary/mojadomena.sk.zone"; }; // reverzne zaznamy pre domenu "mojadomena.sk" // TENTO SUBOR UPRAVTE PODLA POTREBY VZDY PRI ZMENE PREDCH. SUBORU! zone "0.168.192.in-addr.arpa" { type master; file "primary/mojadomena.sk.reverse"; }; // takto vyzera definicia, ak je vas DNS sekundarny server pre domenu // "inadomena.sk", ktorej primarny DNS server ma adresu 10.0.0.1 // TENTO SUBOR NEMENTE, KOPIRUJE SA Z PRIMARNEHO NAMESERVERA DANEJ DOMENY! zone "inadomena.sk" { type slave; file "secondary/inadomena.sk.zone"; masters { 10.0.0.1 ; }; };
/etc/rndc.conf
", "/etc/rndc.key
"
Zmena, ktorá ma prekvapila oproti BIND 8.X.X, je nutnosť konfiguračného súboru
"/etc/rndc.conf
" (autori neodporúčajú aktualizovať konfiguráciu
zaslaním signálu "HUP" bežiacemu procesu "named
", ale funguje
to). Tento umožňuje ovládanie procesu "named
" z určených počítačov
s nainštalovaným programom "rndc
". Na ovládanie je potrebný
autentifikačný kľúč (vo formáte BASE64), ktorý sa predefinuje práve v tomto
konfiguračnom súbore, z ktorého ho bude čítať program "rndc
".
Ja osobne používam nastavenie, ktoré mi umožní ovládať "named" iba
z localhostu, pomocou skriptu "/etc/init.d/named
"
("/etc/init.d/bind9
"). Ak si štartovací skript pozriete, zistíte,
že operácie "stop" a "reload" používajú práve "rndc
".
Konfigurácia je veľmi jednoduchá. Máte dve možnosti:
rndc-confgen
-a
". vytvorí sa súbor "/etc/rndc.key
", ktorý obsahuje
kľúč. Nie je potrebná nijaká zmena v súboroch "/etc/rndc.conf
"
(netreba ho ani vytvoriť, ak neexistuje)
a "/etc/named.conf
".rndc-confgen
" bez parametrov, vypíše sa na štandardný výstup
text, ktorý musíte skopírovať do súboru "/etc/rndc.conf
"
a komentovaná časť, ktorú musíte doplniť do súboru
"/etc/named.conf
" (samozrejme, musíte odstrániť komentáre).
Všimnite si, že obe časti obsahujú ten istý kľúč (generuje sa náhodne). Ak
chcete použiť iný ako náhodný kľúč, pozrite si manuál k príkazu
"rndc.conf
" a "mmencode
".Poznámka: Krátko pred napísaním časti o "chroot()" som otestoval aj automatické nastavenie a všetko vyzerá byť OK (na mojom počítači bez siete). Preto odporúčam, aby ste podľa možnosti použili automatické nastavenie.
Príklad pre manuálnu konfiguráciu:
rndc-confgen # Start of rndc.conf key "rndc-key" { algorithm hmac-md5; secret "tuC4TiKfe9evXag2tLyfJQ=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; }; # End of rndc.conf # Use with the following in named.conf, adjusting the allow list as needed: # key "rndc-key" { # algorithm hmac-md5; # secret "tuC4TiKfe9evXag2tLyfJQ=="; # }; # # controls { # inet 127.0.0.1 port 953 # allow { 127.0.0.1; } keys { "rndc-key"; }; # }; # End of named.conf
Prekopírujte teda príslušné časti do súborov (odkomentujte ich!) a ďalší krok máte za sebou. Ako bodku za ním si zabezpečte konfiguračné súbory, ktoré obsahujú kľúč tak, aby sa k nim dostal iba používateľ v skupine "named" (nedáme mu právo vlastníka ani zápisu, iba právo čítania). Tieto operácie odporúčam uskutočniť aj vtedy, ak použijete automatickú konfiguráciu:
chown root:named /etc/rndc* /etc/named.conf chmod 640 /etc/rndc* /etc/named.conf
$ORIGIN . $TTL 86400 ; zivotnost zaznamu 1 den mojadomena.sk IN SOA mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. ( 2003013101 ; serial 86400 ; refresh (1 day) 21600 ; retry (6 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 3600 ; minimum (1 hour) ) NS mojserver.mojadomena.sk. NS inyserver.inadomena.sk. MX 10 mojserver.mojadomena.sk. $ORIGIN mojadomena.sk. $TTL 86400 ; 1 day mojserver IN A 192.168.0.1 ; to iste by bolo: ; mojserver.mojadomena.sk. IN A 192.168.0.1 mail IN CNAME mojserver www IN CNAME mojserver ftp IN CNAME mojserver diane IN A 192.168.0.2
Poznámky k zónovému súboru:
Pre záznamy nasledujúce po definícii domény platí: ak nie je meno ukončené
znakom ".", dopĺňa sa zaň automaticky doména, v ktorej sa nachádza. (Táto
doména je určená v SOA zázname alebo direktívou "$ORIGIN
".) To
umožňuje lepší prehľad v konfiguračnom súbore, pretože neopakujete stále meno
domény. Dajte si však pozor, aby ste všetky plne kvalifikované mená serverov
ukončovali bodkou, inak sa dočkáte prekvapení.
Príklad chyby (adresa v zázname "NS" nie je ukončená bodkou):
$ORIGIN . $TTL 86400 ; zivotnost zaznamu 1 den mojadomena.sk IN SOA mojserver.mojadomena.sk. adresa_spravcu.mojadomena.sk. ( 2003013101 ; serial 86400 ; refresh (1 day) 21600 ; retry (6 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 3600 ; minimum (1 hour) ) NS mojserver.mojadomena.sk ...
V tomto chybnom príklade záznam "mojserver.mojadomena.sk
" nie
je ukončený bodkou, takže to znamená, že bude mať hodnotu
"mojserver.mojadomena.sk.mojadomena.sk
", čo je samozrejme
chyba!!
Pri vytváraní reverzných zónových súborov postupujeme rovnako ako pri vytváraní priamych zónových súborov. Definujeme špeciálnu doménu "0.168.192.in-addr.arpa" (všimnite si, že obsahuje jednotlivé oktety z IP adries, ktoré používame, ale v opačnom poradí!) a namiesto záznamov "A" použijeme záznamy "PTR".
$ORIGIN . $TTL 86400 ; 1 day 0.168.192.in-addr.arpa IN SOA mojserver.mojadomena.sk. adresa_spravcu.mojadomena. ( 2003013101 ; serial 28800 ; refresh (8 hours) 14400 ; retry (4 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 86400 ; minimum (1 day) ) NS mojserver.mojadomena.sk. $ORIGIN 0.168.192.in-addr.arpa. 1 IN PTR mojserver.mojadomena.sk. 2 IN PTR diane.mojadomena.sk.
Pri testovaní konfiguračných súborov vám pomôže aj program "named-checkzone
".
Spúšťa sa s parametrami:
named-checkzone meno_zony cesta_k_zonovemu_suboru
čiže príkazy
named-checkzone mojadomena.sk /var/named/primary/mojadomena.sk.zone named-checkzone 0.168.192.in-addr.arpa /var/named/primary/mojadomena.sk.reverse
otestujú konfiguráciu vašich zónových súborov uvedených v týchto príkladoch.
/etc/resolv.conf
"
Aby procesy na vašom serveri vôbec používal váš vlastný DNS server, treba
upraviť súbor "/etc/resolv.conf
" takto:
search mojadomena.sk nameserver 127.0.0.1
BIND bol v minulosti často terčom útokov, pretože štandardne beží s právami roota a je otvorený do siete. Aj môj server bol hacknutý cez starý a neaktualizovaný BIND (to bolo ešte v čase, keď som o bezpečnosti nič nevedel). Preto je dôležité sledovať, či neboli vydané aktualizované verzie. V tomto veľmi pomáhajú maling listy ako BugTraq, prípadne mailing listy venované bezpečnosti jednotlivých distribúcií. Informácie o známych dierach sa tiež objavujú na stránkach distribúcií (Debian Security) a samozrejme, na stránke autorov programu BIND.
Pre bezpečnosť DNS servera môžete však urobiť ešte viac!
Ako som už spomínal, štandardne BIND beží s právami používateľa "root". Prišiel čas na zmenu.
Na začiatku sme vytvorili používateľa a skupinu s menom "named
".
Teraz je čas, aby sme ich využili!
Démon "named
" má parameter "-u pouzivatel
" (vo
verzii 8.X.X: "-u pouzivatel -g skupina
"), ktorý mu umožňuje
zmeniť po štarte svoje privilégiá a bežať s právami daného používateľa. Preto
treba upraviť štartovací skript a pridať tento parameter do cesty. Niektoré
distribúcie vám to ešte uľahčia:
OPTIONS
",
ktorej môžete priradiť hodnotu "-u named
". Hotovo./etc/sysconfig/named
" pridajte premennú
"OPTIONS="-u named"
". Hotovo.
Poznámka: pre BIND 8.X.X definujte aj parameter "-g
skupina
"; verzia 9.X.X použije pre používateľa, s ktorého právami sa
spustí, aj jeho primárnu skupinu, ktorú sme nastavili ako "named
".
Ak je váš DNS server sekundárnym serverom pre inú doménu, bude vytvárať
(kopírovať od primárneho DNS servera) na disku zónové súbory. Najprv však
potrebuje právo zápisu do adresára, kde sa tieto zónové súbory majú nachádzať.
Preto sme na tieto účely vytvorili adresár "/var/named/secondary
"
s vlastníkom "named
" a skupinou "named
".
Veľmi dobrým mechanizmom zabezpečovania služieb, ktoré počúvajú na sieťových portoch, je vytváranie vyhradených adresárov a spúšťanie procesov v týchto adresároch. Pre daného démona to znamená, že po jeho spustení sa uzavrie vo vybranom adresári pomocou systémového volania "chroot()" a tento adresár nijakým spôsobom nemôže opustiť. Na to, aby to stopercentne fungovalo, proces nesmie bežať s rootovskými právami. Je tiež ideálne, keď démon použitie vyhradeného adresára priamo umožňuje. Všetko toto spĺňa BIND.
Na začiatok si treba uvedomiť, že vyhradený adresár nahradí procesu koreňový
adresár ("/") a preto všetky absolútne cesty budú platiť v rámci vyhradeného
adresára. Ak je napr. vyhradeným adresárom "/var/named
", cesta
"/etc/passwd
" znamená "/var/named/etc/passwd
".
V praxi to znamená, že proces sa nielenže nedostane k súborom mimo vyhradeného
adresára, ale aj to, že mu potrebné súbory musíte do vyhradeného adresára
nakopírovať.
Zoznam súborov v adresári "/var/named
" pred našimi úpravami:
[vix@hudson /var/named]$ ls -R .: etc/ ./etc: named.ca named.conf named.local primary/ ./primary: mojadomena.sk.zone mojadomena.sk.reversed
Keďže proces "named
" o nejakom vyhradenom adresári ani len
netuší, treba zabezpečiť, že všetky súbory nájde na miestach, ktoré
zodpovedajú pôvodnému umiestneniu. Je to ako keby sme pred cestu ku každému
potrebnému súboru vložili cestu k vyhradenému adresáru
("/var/named
"). vytvoríme teda napr. adresár
"/var/named/dev
" simulujúci adresár "/dev
".
Adresár "/var/named/etc
" som odporúčal vytvoriť už pri
inštalovaní BIND-a, takže ho teraz
už vytvárať nebudeme.
Pred nasledujúcimi zmenami je žiadúce, aby proces "named
" nebežal, takže ho
zastavte príkazom "/etc/init.d/named stop
".
V adresári "/var/named
" zadajte príkazy:
cd /var/named mkdir dev mkdir -p var/named/primary mkdir -p var/named/run/named chown named:named var/named/run/named
V adresári "/var/named
" zadajte príkazy (predpokladám, že
používate automaticky vygenerovaný súbor "/etc/rndc.key
"):
cp /etc/localtime /var/named/etc/ mv /etc/rndc.key /var/named/etc ln -s /var/named/etc/rndc.key /etc/rndc.key chgrp named /var/named/etc/rndc.key chmod g+r /var/named/etc/rndc.key
BIND bude hľadať zónové súbory tam, kde predtým, teda v adresári
"/var/named/
". Lenže toto miesto je v skutočnosti v adresári
"/var/named/var/named/
", musíte teda súbory prekopírovať
(presunúť):
mv /var/named/named.ca /var/named/var/named mv /var/named/named.local /var/named/var/named mv /var/named/primary/mojadomena.sk.zone /var/named/var/named/primary mv /var/named/primary/mojadomena.sk.reverse /var/named/var/named/primary
V adresári "/var/named/dev
" treba vytvoriť špeciálne zariadenia
"null
" a "random
" (kópie zariadení
"/dev/null
" a "/dev/random
" - nemožno ich však
skopírovať!!!):
cd /var/named/dev mknod -m 666 /var/named/dev/null c 1 3 mknod -m 644 /var/named/dev/random c 1 8
Pozor! Ak je adresár "/var
" pripojený s atribútom
"nodev
", nebude možné vytvoriť systémové zariadenie! Budete tento
atribút musieť odstránit ("/etc/fstab
") a opätovne pripojiť
súborový systém "/var
" príkazom "mount /var -o remount
".
syslogd
"
Aby ste mohli používať program "syslogd
" na logovanie správ
procesu "named
", používa sa socket, ktorý sa vytvorí v adresári
"/dev/log
". Pomocou tohto socketu komunikujú programy so
syslogom. V našom prípade vyhradeného adresára treba vytvoriť
"/var/named/dev/log
" - nevytvoríte ho však vy, ale sám
"syslogd
". Treba ho najprv prekonfigurovať - zabezpečiť jeho
spúšťanie s parametrom "-a /var/named/dev/log
". Najjednoduchšie
je upraviť štartovací skript "/etc/init.d/syslogd
", môžete však
použiť aj konfiguračné súbory typické pre niektoré distribúcie. V Mandrake je
to súbor "/etc/sysconfig/syslog
", kde treba upraviť riadok:
SYSLOGD_OPTIONS="-m 0 -a /var/named/dev/log"
Pre distribúciu Debian treba upraviť priamo štartovací skript
"/etc/init.d/sysklogd
", konkrétne riadok:
SYSLOGD="-a /var/named/dev/log"
čo je, ako sami vidíte, celkom analogický postup.
Samozrejme, po zmene treba reštartovať "syslogd
" spustením
"/etc/init.d/syslogd restart
". Ak ste postupovali podľa
návodu, v adresári "/var/named/dev
" by sa mal vytvoriť špeciálny
súbor (socket) "log
".
/etc/init.d/named
"
Posledná vec je zmena štartovacieho skriptu. Treba zabezpečiť, aby sa
"named
" spúšťal s parametrom "-t /var/named
", ktorý
určuje vyhradený adresár. Môžete to opäť urobiť priamo v skripte, alebo
v konfiguračných súboroch pre jednotlivé distribúcie.
Pre Mandrake je to súbor
"/etc/sysconfig/named
", premenná "ROOTDIR
". Túto
premennú nastavte na
ROOTDIR="/var/named"
Pre distribúciu Debian doplňte do premennej "OPTS
" v štartovacom
skripte "/etc/init.d/bind9
" hodnotu:
OPTS="-t /var/named"
Výpis adresára "/var/named
" po našich úpravách (pripravený na
"chroot()"):
[root@hudson ~]# ls -laR /var/named /var/named: total 5 drwxr-xr-x 5 root root 1024 Feb 5 21:20 ./ drwxr-xr-x 19 root root 1024 Jan 31 19:27 ../ drwxr-xr-x 2 root root 1024 Feb 8 11:55 dev/ drwxr-xr-x 2 root root 1024 Feb 5 21:24 etc/ drwxr-xr-x 4 root root 1024 Feb 5 21:21 var/ /var/named/dev: total 2 drwxr-xr-x 2 root root 1024 Feb 8 11:55 ./ drwxr-xr-x 5 root root 1024 Feb 5 21:20 ../ srw-rw-rw- 1 root root 0 Feb 8 11:55 log= crw-rw-rw- 1 root root 1, 3 Feb 5 21:15 null crw-r--r-- 1 root root 1, 8 Feb 5 21:22 random /var/named/etc: total 5 drwxr-xr-x 2 root root 1024 Feb 5 21:24 ./ drwxr-xr-x 5 root root 1024 Feb 5 21:20 ../ -rw-r--r-- 1 root root 806 Feb 5 21:24 localtime -rw-r----- 1 root named 329 Feb 5 21:09 named.conf -rw-r----- 1 root named 77 Feb 5 21:21 rndc.key /var/named/var: total 4 drwxr-xr-x 4 root root 1024 Feb 5 21:21 ./ drwxr-xr-x 5 root root 1024 Feb 5 21:20 ../ drwxr-xr-x 3 root root 1024 Feb 5 21:19 named/ drwxr-xr-x 3 root root 1024 Feb 5 21:20 run/ /var/named/var/named: total 7 drwxr-xr-x 3 root root 1024 Feb 5 21:19 ./ drwxr-xr-x 4 root root 1024 Feb 5 21:21 ../ -rw-r--r-- 1 root root 2769 Feb 5 21:19 named.ca -rw-r--r-- 1 root root 436 Feb 5 21:19 named.local drwxr-xr-x 2 root root 1024 Feb 5 21:23 primary/ /var/named/var/named/primary: total 4 drwxr-xr-x 2 root root 1024 Feb 5 21:23 ./ drwxr-xr-x 3 root root 1024 Feb 5 21:19 ../ -rw-r--r-- 1 root root 402 Feb 5 21:23 mojadomena.sk.zone -rw-r--r-- 1 root root 402 Feb 5 21:23 mojadomena.sk.reverse /var/named/var/run: total 3 drwxr-xr-x 3 root root 1024 Feb 5 21:20 ./ drwxr-xr-x 4 root root 1024 Feb 5 21:21 ../ drwxr-xr-x 2 named named 1024 Feb 8 11:55 named/ /var/named/var/run/named: total 3 drwxr-xr-x 2 named named 1024 Feb 8 11:55 ./ drwxr-xr-x 3 root root 1024 Feb 5 21:20 ../ -rw-r--r-- 1 named named 4 Feb 8 11:55 named.pid
Teraz si v jednom okne spustite "tail -f /var/log/syslog
"
na zobrazovanie súboru "/var/log/syslog
" a v druhom okne spustite
štartovací skript "/etc/init.d/named start
".
Mali by ste vidieť niečo takéto:
Feb 12 21:34:02 hudson named: named startup succeeded Feb 12 21:34:02 hudson named[977]: starting BIND 9.2.1 -u named -t /var/named Feb 12 21:34:02 hudson named[977]: using 1 CPU Feb 12 21:34:03 hudson named[986]: loading configuration from '/etc/named.conf' Feb 12 21:34:03 hudson named[986]: no IPv6 interfaces found Feb 12 21:34:03 hudson named[986]: listening on IPv4 interface lo, 127.0.0.1#53 Feb 12 21:34:03 hudson named[986]: listening on IPv4 interface eth0, 10.0.0.1#53
Ak nevidíte žiadne chyby, všetko je OK. Otestujte funkčnosť DNS servera
niekoľkými príkazmi "host
", ako je to uvedené v nasledujúcej kapitole.
Ak vidíte chyby a démon "named
" sa nespustil, podľa chybového
hlásenia by ste mali byť schopní určiť problém. Pravdepodobne ste
neuskutočnili niektorý z krokov, popísaných vyššie. Vždy máte možnosť vrátiť
sa späť (inverziou krokov, ktoré ste urobili, najmä pokiaľ ide o presun
konfiguračných súborov a o symbolické linky z adresárov do
"/etc
").
Ak sa vám postup zdal príliš zložitý, mali by ste vedieť, že pri verzii BIND 8.X.X to bolo ešte komplikovanejšie: do vyhradeného adresára bolo potrebné skopírovať aj knižnice a programy patriace k BIND-u a to po každej aktualizácii balíčka BIND alebo knižníc.
TODO: Špeciality - 2 DNS servery na jednom serveri (Intranet + Internet DNS) alebo implementácia tohto istého pomocou jedného DNS
Medzi najpoužívanejšie programy na overovanie funkčnosti DNS a zisťovanie jeho
záznamov patria staručký "nslookup
" a novšie "host
"
a "dig
". Program "nslookup
" je označený ako
"deprecated" a nemali by ste ho používať, pokiaľ máte možnosť použiť niektorý
z jeho novších variantov.
host
"
Program "host
" je klientský program na komunikáciu s DNS serverom
a umožňuje prístup k záznamov v DNS. Jeho použitie (pre kompletný manuál pozri
"man host
"):
host [-a] [-t typ_zaznamu] meno [server]
Parametre:
-a
: nastaví filter pre akýkoľvek typ záznamu-t typ_zaznamu
: nastaví filter na daný typ záznamu (napr.
"-t mx"). Štandardne sa používa typ "A".meno
: doménová alebo IP adresa, pre ktorú sa má získať
záznamserver
: adresa DNS servera, ktorý sa má použiť na zistenie
záznamu (vhodné pre otestovanie funkčnosti vzdialeného DNS servera. Tento
parameter funguje iba v prípade, že to nastavenie DNS umožňuje)Príklady:
host www.vazka.sk
www.vazka.sk
"host 195.20.166.130
host -t mx vazka.sk
vazka.sk
"host -t ns vazka.sk server.example.com
server.example.com
" o zistenie NS záznamu
pre doménu "vazka.sk
"dig
"
Program "dig
" je zo všetkých troch spomínaných utilít najnovší
a má najviac možností, jeho výstup však môže začiatočníkom spôsobovať mierne
problémy (treba si zvyknúť, nie je to zasa nič zložité, pretože výstup
pripomína zónové súbory). Najjednoduchšie použitie príkazu má tvar:
dig [@server] meno typ_zaznamu
alebo
dig [@server] meno -t typ_zaznamu
Parametre:
-a
: nastaví filter pre akýkoľvek typ záznamu-t typ_zaznamu
: nastaví filter na daný typ záznamu (napr.
"-t mx"). Štandardne sa používa typ "A".meno
: doménová alebo IP adresa, pre ktorú sa má získať
záznamserver
: adresa DNS servera, ktorý sa má použiť na zistenie
záznamu (vhodné pre otestovanie funkčnosti vzdialeného DNS servera. Tento
parameter funguje iba v prípade, že to nastavenie DNS umožňuje)Príklady:
dig www.vazka.sk
dig -x 195.20.166.130
, resp.
dig 130.166.20.195.in-addr.arpa
dig -t mx vazka.sk
dig -t ns vazka.sk @server.example.com