A FreeBSD alapértelmezés szerint a BIND (Berkeley Internet Name Domain) egyik verzióját tartalmazza, amely a névfeloldási (Domain Name System, DNS) protokoll egyik elterjedt implementációja. A DNS protokollon keresztül tudunk az IP-címekhez neveket rendelni és fordítva. Például a www.FreeBSD.org névre a FreeBSD Projekt webszerverének IP-címét kapjuk meg, miközben a ftp.FreeBSD.org pedig a hozzátartozó FTP szerver IP-címét fogja visszaadni. Ehhez hasonlóan a fordítottja is megtörténhet, vagyis egy IP-címhez is kérhetjük a hálózati név feloldását. A névfeloldási kérések kiszolgálásához nem feltétlenül szükséges névszervert futtatni a rendszerünkön.
A FreeBSD jelen pillanatban alapból a BIND9 névszervert tartalmazza. A benne szereplő változata több biztonsági javítást, új állományrendszeri kiosztást és automatizált chroot(8) beállítást is magában foglal.
Az interneten keresztüli névfeloldást legfelső szintű tartományoknak (Top Level Domain, TLD) nevezett hitelesített tövek némileg bonyolult rendszerén alapszik, valamint más egyéb olyan névszervereken, amelyek további egyéni információkat tárolnak és táraznak.
A BIND fejlesztését jelenleg az Internet Software Consortium (http://www.isc.org/) felügyeli.
A leírás megértéséhez be kell mutatnunk néhány névfeloldással kapcsolatos fogalmat.
Fogalom | Meghatározás |
---|---|
Közvetlen névfeloldás (forward DNS) | A hálózati nevek leképezése IP-címekre. |
Ős (origin) | Egy adott zóna állományban szereplő tartományra vonatkozik. |
named, BIND, névszerver (name server) | A FreeBSD-n belüli BIND névszerver különböző megnevezései. |
Névfeloldó (resolver) | Az a program a rendszerben, amelyhez a hálózaton levő gépek a zónák adatainak elérésével kapcsolatban fordulnak. |
Inverz névfeloldás (reverse DNS) | A rendes névfeloldás ellentéte, vagyis az IP-címek leképzése hálózati nevekre. |
Gyökérzóna (root zone) | Az interneten található zónák hierarchiájának töve. Minden zóna ebbe a gyökérzónába esik, ahhoz hasonlóan, ahogy egy állományrendszerben az állományok a gyökérkönyvtárba. |
Zóna (zone) | Egy különálló tartomány, altartomány vagy a névfeloldás azon része, amelyet egyazon fennhatóság alatt tartanak karban. |
Példák zónákra:
A . gyökérzóna.
A org. egy legfelső szintű tartomány (TLD) a gyökérzónán belül.
A minta.org. a org. TLD tartomány alatti zóna.
A 1.168.192.in-addr.arpa egy olyan zóna, amelyek a 192.168.1.* IP-tartományban szereplő összes címet jelöli.
Mint láthatjuk, a hálózati nevek balról kiegészülve pontosodnak. Tehát például a minta.org. sokkal pontosabb meghatározás, mint a org., ahogy az org. magánál a gyökérzónánál jelent többet. A hálózati nevek felosztása leginkább egy állományrendszerhez hasonlítható, például a /dev könyvtár a gyökéren belül található, és így tovább.
A névszerverek általában két alakban jelennek meg. Egyikük a hitelesített névszerver, a másikuk a gyorsítótárazó névszerver.
Egy hitelesített névszerverre akkor van szükségünk, ha:
a világ többi része felé akarunk hiteles névfeloldási információkat szolgáltatni;
regisztráltunk egy tartományt (például minta.org) és az alatta levő hálózati nevekhez is szeretnénk IP-címeket rendeltetni;
a IP-címtartományunkban szükség van inverz névfeloldási bejegyzésekre (amely IP-címből ad meg hálózati nevet) is;
a kérések teljesítéséhez egy tartalék avagy második, alárendelt (slave) névszerver kell.
A gyorsítótárazó névszerverre akkor van szükségünk, ha:
egy helyi névfeloldó szerver felhasználásával fel akarjuk gyorsítani az egyébként a külső névszerver felé irányuló kérések kiszolgálását.
Amikor valaki lekérdezi a www.FreeBSD.org címét, akkor a névfeloldó először általában a kapcsolatot rendelkezésre bocsátó internet-szolgáltató névszerverét kérdezi meg és onnan kapja meg a választ. Egy helyi, gyorsítótárazó névszerver használata esetén azonban egy ilyen kérést csak egyszer kell kiadni a külső névszervernek. Ezután már minden további ilyen kérés el sem hagyja a belső hálózatunkat, mivel a válasz szerepel a gyorsítótárban.
FreeBSD alatt a BIND démon nyilvánvaló okokból named néven érhető el.
Állomány | Leírás |
---|---|
named(8) | A BIND démon. |
rndc(8) | A névszervert vezérlő segédprogram. |
/etc/namedb | A BIND által kezelt zónák adatait tároló könyvtár. |
/etc/namedb/named.conf | A démon konfigurációs állománya. |
Attól függően, hogy miként állítjuk be az adott zónát a szerveren, a hozzátartozó állományok a /etc/namedb könyvtáron belül a master, slave vagy dynamic alkönyvtárban foglalnak helyet. Az itt tárolt állományokban levő névfeloldási információk alapján válaszol a névszerver a felé intézett kérésekre.
Mivel a BIND alapból elérhető a rendszerben, viszonylag könnyen be tudjuk állítani.
A named alapértelmezett beállítása szerint egy chroot(8) környezetben futó egyszerű névfeloldást végző szerver. Ezzel a beállítással a következő parancson keresztül tudjuk elindítani:
# /etc/rc.d/named forcestart
Ha engedélyezni akarjuk a named démont minden egyes rendszerindításkor, tegyük a következő sort az /etc/rc.conf állományba:
named_enable="YES"
Értelemszerűen az /etc/namedb/named.conf tele van olyan beállítási lehetőségekkel, amelyek meghaladják ennek a leírásnak a kereteit. Ha viszont kíváncsiak vagyunk a FreeBSD-ben a named indításához használt beállításokra, akkor az /etc/defaults/rc.conf állományban nézzük meg named_* változókat és olvassuk át az rc.conf(5) man oldalt. Emellett még a 11.7 Szakaszt is hasznos lehet elolvasni.
A named beállításait tartalmazó állományok pillanatnyilag az /etc/namedb könyvtárban találhatóak és hacsak nem egy egyszerű névfeloldóra tartunk igényt, akkor a használata előtt módosítanunk is kell. Itt ejtjük meg a beállítások nagy részét.
Ha a helyi gépen egy központi zónát akarunk beállítani, akkor lépjünk be az /etc/namedb könyvtárba és futtassuk le a következő parancsot:
# sh make-localhost
Ha nem történt semmilyen hiba, akkor a master alkönyvtárban most meg kell jelennie egy új állománynak. A helyi tartománynévhez tartozó állomány a localhost.rev, valamint IPv6 környezetben a localhost-v6.rev. Alapértelmezett konfigurációs állományként a named.conf ehhez tartalmaz minden szükséges információt.
// $FreeBSD$ // // Részletesebb leírást a named.conf(5) és named(8) man oldalakon, valamint // a /usr/share/doc/bind9 könyvtárban találhatunk. // // Ha egy hitelesített szervert akarunk beállítani, akkor igyekezzünk // a névfeloldás összes finom részletével pontosan tisztában lenni. // Ugyanis még a legkisebb hibákkal is egyrészt elvághatunk gépeket az // internet-lérésétől, vagy másrészt felesleges forgalmat tudunk // generálni // options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; // Ha a named démont csak helyi névfeloldóként használjuk, akkor ez // egy biztonságos alapbeállítás. Ha viszont a named démon az egész // hálózatunkat is kiszolgálja, akkor ezt a beállítást tegyük // megjegyzésbe, vagy adjunk meg egy rendes IP-címet, esetleg // töröljük ki. listen-on { 127.0.0.1; }; // Ha rendszerünkön engedélyezett az IPv6 használata, akkor a helyi // névfeloldó használatához ezt a sort vegyük ki a megjegyzésből. // A hálózatunk többi részéről pedig úgy lehet elérni, ha itt megadunk // egy IPv6 címet, vagy az "any" kulcsszót. // listen-on-v6 { ::1; }; // A "forwarders" blokk mellett a következő sorral megkérhetjük a // névszervert, hogy önmagától soha nem kezdeményezzen kéréseket, // hanem mindig az iménti helyen megjelölt szerverekhez irányítsa // ezeket: // // forward only; // Ha a szolgáltatónk névszervert is elérhetővé tett számunkra, akkor // itt adjuk meg annak az IP-címét és engedélyezzük az alábbi sort. // Ezzel egyben kihasználjuk a gyorsítótárat is, így mérsékeljük az // internet felé mozgó névfeloldásokat. /* forwarders { 127.0.0.1; }; */
Ahogy arról a megjegyzésekben is szó esik, úgy tudjuk aktiválni a gyorsítótárat, ha megadjuk a forwarders beállítást. Normális körülmények között a névszerver az interneten az egyes névszervereket rekurzívan fogja keresni egészen addig, amíg meg nem találja a keresett választ. Az iménti beállítás engedélyezésével azonban először a szolgáltató névszerverét (vagy az általa kijelölt névszervert) fogjuk megkérdezni, a saját gyorsítótárából. Ha a szolgáltató kérdéses névszervere egy gyakran használt, gyors névszerver, akkor ezt érdemes bekapcsolnunk.
Figyelem: Itt a 127.0.0.1 megadása nem működik. Mindenképpen írjuk át a szolgáltatónk névszerverének IP-címére.
/* * Ha köztünk és az elérni kívánt névszerverek között tűzfal * is található, akkor az alábbi "query-source" direktívát is * engedélyeznünk kell. A BIND korábbi változatait mindig az * 53-as porton keresztül küldték el a kéréseiket, de BIND * nyolcadik verziójától kezdve alapértelmezés szerint * erre a feladatra már egy véletlenszerűen választott, nem * privilegizált UDP portot használnak. */ // query-source address * port 53; }; // Ha engedélyezzük a helyi névszervert, akkor az /etc/resolv.conf // állományban első helyen megadni a 127.0.0.1 címet. Sőt, az // /etc/rc.conf állományból se felejtsük ki. zone "." { type hint; file "named.root"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "master/localhost.rev"; }; // RFC 3152 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA" { type master; file "master/localhost-v6.rev"; }; // FONTOS: Ne használjuk ezeket az IP-címeket, mert nem valódiak, // csupán illusztrációs és dokumentációs célokból adtuk meg! // // Az alárendelt zónák beállításaira vonatkozó bejegyzések. Érdemes // ilyet beállítani legalább ahhoz a zónához, amelyhez a tartományunk is // tartozik. Az elsődleges zónához tartozó IP-címet érdeklődjük meg // az illetékes hálózati rendszergazdától. // // Soha ne felejtsünk el megadni zónát az inverz kereséshez // IN-ADDR.ARPA)! (A neve a IP-cím tagjainak fordított sorrendjéből // származik, amelyhez hozzátoldunk még egy ".IN-ADDR.ARPA" részt.) // // Mielőtt nekilátnánk egy elsődleges zóna beállításának, gondoljuk // végig, hogy tényleg a megfelelő szinten ismerjük a névfeloldás és // a BIND működését. Gyakran ugyanis egyáltalán nem nyilvánvaló // csapdákba tudunk esni. Egy alárendelt zóna beállítása sokkal // egyszerűbb feladat. // // FONTOS: Ne kövessük vakon a most következő példát :-) Helyette inkább // valódi neveket és címeket adjunk meg. /* Példa központi zónára zone "minta.net" { type master; file "master/minta.net"; }; */ /* Példa dinamikus zónára key "mintaorgkulcs" { algorithm hmac-md5; secret "sf87HJqjkqh8ac87a02lla=="; }; zone "minta.org" { type master; allow-update { key "mintaorgkulcs"; }; file "dynamic/minta.org"; }; */ /* Példa közvetlen és inverz alárendelt zónákra zone "minta.com" { type slave; file "slave/minta.com"; masters { 192.168.1.1; }; }; zone "1.168.192.in-addr.arpa" { type slave; file "slave/1.168.192.in-addr.arpa"; masters { 192.168.1.1; }; }; */
A named.conf állományban tehát így adhatunk meg közvetlen és inverz alárendelt zónákat.
Minden egyes újabb kiszolgált zónához az egy új bejegyzést kell felvenni a named.conf állományban.
Például a minta.org címhez tartozó legegyszerűbb ilyen bejegyzés így néz ki:
zone "minta.org" { type master; file "master/minta.org"; };
Ez egy központi zóna, ahogy arról a
type
mező, vagyis a típusa is
árulkodik. Továbbá a
file
mezőben láthatjuk, hogy a
hozzátartozó információkat az
/etc/namedb/master/minta.org
állományban tárolja.
zone "minta.org" { type slave; file "slave/minta.org"; };
Az alárendelt esetben a zónához tartozó információkat a zóna központi szerverétől kapjuk meg és megadott állományban mentjük el. Ha valamiért a központi szerver leáll vagy nem érhető el, akkor az alárendelt szerver az átküldött zóna információk alapján képes helyette kiszolgálni a kéréseket.
A minta.org címhez tartozó példa központi zóna állomány (amely az /etc/namedb/master/néven.org érhető el) tartalma az alábbi:
$TTL 3600 ; 1 óra minta.org. IN SOA ns1.minta.org. admin.minta.org. ( 2006051501 ; sorozatszám 10800 ; frissítés 3600 ; ismétlés 604800 ; lejárat 86400 ; minimális TTL ) ; névszerverek IN NS ns1.minta.org. IN NS ns2.minta.org. ; MX rekordok IN MX 10 mx.minta.org. IN MX 20 levelezes.minta.org. IN A 192.168.1.1 ; a gépek nevei localhost IN A 127.0.0.1 ns1 IN A 192.168.1.2 ns2 IN A 192.168.1.3 mx IN A 192.168.1.4 levelezes IN A 192.168.1.5 ; álnevek www IN CNAME @
A “.”-ra végződő hálózati nevek abszolút nevek, míg minden más “.” nélküli név az ősére vezehető vissza (tehát relatív). Például a www a www.ős. A kitalált zóna állományunkban itt most az ős a minta.org, így a www névből a www.minta.org név keletkezik.
A zóna állományok felépítése a következő:
rekordnév IN rekordtípus érték
A névfeloldásban leggyakrabban alkalmazott rekordok típusai:
a zóna fennhatóságának kezdete
egy hitelesített névszerver
egy gép címe
egy álnév kanonikus neve
levélváltó
mutató a tartománynévre (az inverz feloldás használja)
minta.org. IN SOA ns1.minta.org. admin.minta.org. ( 2006051501 ; sorozatszám 10800 ; 3 óránként frissítsünk 3600 ; 1 óra után próbálkozzunk újra 604800 ; 1 hét után jár le 86400 ) ; a minimális TTL 1 nap
a tartomány neve, amely egyben a zóna őse
a zóna elsődleges/hitelesített névszervere
a zónáért felelős
személy neve, akinek az e-mail
címét a “@”
behelyettesítésével kapjuk meg.
(Tehát a <admin@example.org>
címből admin.example.org
lesz.)
az állomány sorozatszáma. Ezt a zóna állomány módosításakor mindig növelnünk kell. Manapság a rendszergazdák a sorozatszámot ééééhhnnvv alakban adják meg. A 2006051501 tehát azt jelenti, hogy az állományt 2006. május 15-én módosították utoljára, és a 01 pedig arra utal, hogy aznap először. A sorozatszám megadása fontos az alárendelt névszerverek számára, mivel így tudják megállapítani, hogy a zóna mikor változott utoljára.
IN NS ns1.minta.org.
Ez egy NS bejegyzés. A zónához tartozó minden hitelesített névszervernek lennie kell legalább egy ilyen bejegyzésének.
localhost IN A 127.0.0.1 ns1 IN A 192.168.1.2 ns2 IN A 192.168.1.3 mx IN A 192.168.1.4 levelezes IN A 192.168.1.5
Az A rekord egy gép nevét adja meg. Ahogy a fenti példából is kiderül, az ns1.minta.org név a 192.168.1.2 címre képződik le.
IN A 192.168.1.1
Ez a sor 192.168.1.1 címet rendeli az aktuális őshöz, amely jelen esetünkben az example.org.
www IN CNAME @
A kanonikus neveket tároló rekordokat általában egy gép álneveihez használjuk. Ebben a példában a www a “főgép” egyik álneve, amely itt a minta.org (192.168.1.1) tartomány. A CNAME rekordok tehát álnevek megadására használhatóak, vagy egyetlen állománynév körkörös rendszerű (round robin típusú) feloldására több gép között.
IN MX 10 levelezes.minta.org.
Az MX rekord adja meg, hogy milyen levelező szerverek felelősek a zónába érkező levelek fogadásáért. A levelezes.minta.org a levelező szerver hálózati neve, ahol a 10 az adott levelező szerver prioritása.
Több levelező szerver is megadható 10-es, 20-as stb. prioritásokkal. A minta.org tartományon belül először mindig a legnagyobb MX prioritással rendelkező levelező szervernek próbáljuk meg továbbítani a leveleket (a legkisebb prioritási értékkel rendelkező rekord), majd ezután a második legnagyobbnak stb. egészen addig, amíg a levelet tovább nem küldtük.
Az in-addr.arpa zóna állományok (inverz DNS) esetén ugyanez a felépítés, kivéve, hogy a PTR típusú bejegyzések szerepelnek az A és CNAME helyett.
$TTL 3600 1.168.192.in-addr.arpa. IN SOA ns1.minta.org. admin.minta.org. ( 2006051501 ; sorozatszám 10800 ; frissítés 3600 ; ismétlés 604800 ; lejárat 3600 ) ; minimum IN NS ns1.minta.org. IN NS ns2.minta.org. 1 IN PTR minta.org. 2 IN PTR ns1.minta.org. 3 IN PTR ns2.minta.org. 4 IN PTR mx.minta.org. 5 IN PTR levelezes.minta.org.
Ez az állomány írja le tehát a kitalált tartományunkon belül az IP-címek és hálózati nevek összerendelését.
A gyorsítótárazó névszerver az a névszerver, amelyik egyik zónában sem hitelesített. Egyszerűen csak öncélú kéréseket küld, és a kapott válaszokat megjegyzi. A beállításához mindössze annyit kell tennünk, hogy az eddigiekhez hasonlóan, de zónák nélkül beállítunk egy névszervert.
Habár a névfeloldás szempontjából a BIND a legelterjedtebb, a biztonságosságával azért akadnak gondok. Gyakran találnak benne potenciális és kihasználható biztonsági réseket.
A FreeBSD azonban a named démont automatikusan egy chroot(8) környezetbe helyezi. Emellett még léteznek további más védelmi mechanizmusok is, amelyek segítségével el tudjuk kerülni a névfeloldást célzó esetleges támadásokat.
Sosem árt olvasgatni a CERT által kiadott biztonsági figyelmeztetéseket és feliratkozni a FreeBSD security notifications levelezési lista címére, hogy folyamatosan értesüljünk az interneten és a FreeBSD-ben talált különböző biztonsági hibákról.
Tipp: Ha valamilyen gondunk támadna, akkor esetleg próbálkozzunk meg a forrásaink frissítésével és a named újrafordításával.
A BIND/named man oldalai: rndc(8) named(8) named.conf(5)
Ha kérdése van a FreeBSD-vel kapcsolatban, a következő
címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése,
kérjük erre a címre írjon: <gabor@FreeBSD.org>.