Split DNS: Difference between revisions
Line 214: | Line 214: | ||
}; | }; | ||
</pre> | </pre> | ||
== Kokkuvõte == | |||
== Kasutatud allikad == |
Revision as of 16:09, 10 June 2015
Autor: Deniss Krajuhhin, AK31
Mis on Split DNS
Split DNS-i (ka Split-horizon DNS, split-view DNS, split-brain DNS) võiks eesti keeles nimetada jagatud DNS-iks, mille eesmärk on loogiliselt või füüsiliselt üks teisest eraldada DNS päringud ja vastused samade ressursside kohta lähte IP-aadressi alusel. Ehk teisi sõnu saab üks teisest eraldada oma sisevõrgust ja väljast poolt, Internetist, tulevad DNS päringud, mis oluliselt tõstab oma IT infrastruktuuri turvalisust, juhul kui peab tagama nimeserveripoolset lahendust nii sise- kui ka välistele klientidele.
Jagatud DNS-i juurutamiseks võib kasutada järgmisi arhitektuurilisi lähenemisi: eraldiseisev DNS server väliste teenuste tarbeks (näiteks DMZ-i paigaldatuna), üks DNS server kahe eraldi võrguliidesega väliste ja sisemiste ühenduste jaoks ning üks ühe võrguliidesega DNS server. Viimase kahe puhul kasutatakse välise ja sisemise tsooni loogilist eraldamist.
Antud artikkel käsitleb kahte viimast, ühel nimeserveril põhineval jagatud DNS-i lahenduse rakendamist.
NB! Jagatud DNS-i rakendamisel production keskkonnas tuleb lähtuda organisatsiooni infoturbepoliitikast või selle puudumisel rakendada piisavad abinõud oma DNS serveri kaitsmiseks (tulemüüri taha paigutamine, NAT-i kasutamine, oma nimeserveri mitte OpenResolever-iks konfigureerimine jms.).
Eeldused
Antud lahenduse rakendamise eelduseks on IT infrastruktuuri teenuste DNS labori edukas kaitsmine või vastaval tasemel BIND9 nimeserveri seadistamise ja haldamise tundmine. Siin kasutatud näited põhinevad Ubuntu Server versioonil 14.04.1 ning lähtekohaks on võetud IT infrastruktuuri teenuste aine Labor 2 (DNS labor) lõppseis.
Lähtekoht
Labor 2 -es failis /etc/bind/named.conf.local me kirjeldasime ära kõik tsoonid, kuhu meie poolt paigaldatud nimeserveri kaudu on võimalik saada:
sudo /etc/bind/named.conf.local
Faili etc/bind/named.conf.local konfiguratsioon:
zone "tsooni_nimi.zz" { type master; file "/var/lib/bind/tsooni_nimi.zz"; }; zone "56.168.192.in-addr.arpa" { type master; file "/var/lib/bind/rev.tsooni_nimi.zz"; }; zone "sõbratsoon.zz" { type slave; file "/var/lib/bind/sõbra_tsoon.zz"; allow-notify {sõbra_dns_ip;}; masters {sõbra_dns_ip;}; };
Failis /etc/bind/named.conf.options aga sai konfigureeritud kontrollnimekiri,acl, mille alusel sai defineeritud, millistest võrkudest ja mis õigustega on lubatud päringud meie nimeserveri vastu.
sudo /etc/bind/named.conf.options
Faili etc/bind/named.conf.options konfiguratsioon:
acl sisev6rk {192.168.56.0/24;10.1.0.0/16;}; options { directory "/var/cache/bind"; forwarders { 172.16.0.105; 8.8.8.8; 8.8.4.4; }; allow-recursion {sisev6rk;}; allow-transfer {sisev6rk;}; allow-query {sisev6rk;}; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; };
Tsooni tsooni_nimi.zz konfiguratsioonifaili sisu:
; ; BIND data file for tsooni_nimi.zz ; $TTL 600 @ IN SOA tsooni_nimi.zz. root.tsooni_nimi.zz. (;root.tsooni_nimi.zz on meiliaadress. esimest punkti asendatakse @-ga 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 600 ) ; Negative Cache TTL ; @ IN NS ns.tsooni_nimi.zz. ns.tsooni_nimi.zz. IN A 192.168.56.201 www IN CNAME server server IN A 192.168.56.200 veeb IN CNAME server dvwa IN A 192.168.56.2 wp IN A 192.168.56.3
Jagatud DNS-i seadistamine
Antud näites jagatud DNS-i seadistamiseks kasutame BIND9 funktsionaalsuse View, mille rakendame BIND9 konfiguratsioonifaili /etc/bind/named.conf.local kaudu. View võimaldab suunata kliente neile lubatud ressursidele selles kirjeldatud parameetrite alusel.
sudo nano /etc/bind/named.conf.local
Kirjeldame erinevad View-d failis /etc/bind/named.options acl-i alusel:
view "sise" { match-clients { sisev6rk; }; zone "tsooni_nimi.zz" { type master; file "/var/lib/bind/tsooni_nimi.zz"; }; zone "56.168.192.in-addr.arpa" { type master; file "/var/lib/bind/rev.tsooni_nimi.zz"; }; zone "sõbratsoon.zz" { type slave; file "/var/lib/bind/sõbra_tsoon.zz"; allow-notify {sõbra_dns_ip;}; masters {sõbra_dns_ip;}; }; }; view "external" { match-clients { any; }; zone "tsooni_nimi.zz" { type master; file "/etc/bind/external/tsooni_nimi.zz"; }; };
Juhul kui väliseid kliente on vaja üks teisest kuidagi eristada, näiteks riigi või organisatsiooni IP-aadressi alusel, siis võib luua täiendavaid acl-e ka väliste klientide jaoks. Sellisel juhul erinevatele välistele klientidele oleks võimalik ette sööta erinevaid tsoonifaile, mis peaksid olema kirjeldatud vastavate View-de all.
Kuna "external" View-s oleme viitanud ka uuele faili asukohale, siis tuleb vastav tsoonifail, antud juhul /var/lib/bind/tsooni_nimi.zz kopeerida viidatud asukohta ja ka selles olevad IP-aadressid ära muuta:
sudo cp /var/lib/bind/tsooni_nimi.zz /var/lib/bind/external/tsooni_nimi.zz
sudo nano /var/lib/bind/external/tsooni_nimi.zz
Asendame sisevõrgu IP-aadressid vastavate väliste IP-aadressidega (antud näites hostide ja aliaste IP-aadressite seadistamist ei käsitleta):
; ; BIND data file for tsooni_nimi.zz ; $TTL 600 @ IN SOA tsooni_nimi.zz. root.tsooni_nimi.zz. (;root.tsooni_nimi.zz on meiliaadress. esimest punkti asendatakse @-ga 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 600 ) ; Negative Cache TTL ; @ IN NS ns.tsooni_nimi.zz. ns.tsooni_nimi.zz. IN A väline_IP www IN CNAME server server IN A väline_IP veeb IN CNAME server dvwa IN A väline_IP wp IN A väline_IP
Turvalisus
Selleks, et meie DNS server ei teenindaks suvalisi väljastpoolt tulevaid päringuid, on vaja ära muuta selle funktsionaalsust.
Esiteks, selleks et tõkestada väljast tulevate päringute edasi saatmist teistele DNS serveritele, tõstame /etc/bind/named.conf.options failis oleva forwarders kirjelduse meie sisevõrgu View alla (vanas asukohas selle aga kindlasti kustutame):
sudo nano /etc/bind/named.conf.local
view "sise" { match-clients { sisev6rk; }; zone "tsooni_nimi.zz" { type master; file "/var/lib/bind/tsooni_nimi.zz"; }; zone "56.168.192.in-addr.arpa" { type master; file "/var/lib/bind/rev.tsooni_nimi.zz"; }; zone "sõbratsoon.zz" { type slave; file "/var/lib/bind/sõbra_tsoon.zz"; allow-notify {sõbra_dns_ip;}; masters {sõbra_dns_ip;}; }; forwarders { 172.16.0.105; 8.8.8.8; 8.8.4.4; }; };
Teiseks, keelame väljastpoolt tulevaid rekursiivseid päringuid (kuigi, kui pole lubatud, siis vaikimisi on see lubatud ainult localhost-il ja sisevõrgu klientidel):
view "external" { match-clients { any; }; zone "tsooni_nimi.zz" { type master; file "/etc/bind/external/tsooni_nimi.zz"; recursion no; }; };