Split DNS: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Dkrajuhh (talk | contribs)
Dkrajuhh (talk | contribs)
 
(48 intermediate revisions by the same user not shown)
Line 2: Line 2:


== Mis on Split DNS ==
== 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õrgu ja väljast poolt, Internetist, tulevad DNS päringud, mis oluliselt tõstab oma IT infrastruktuuri turvalisust.
''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. Juhul kui peab tagama nimeserveripoolset lahendust nii sise- kui ka välistele klientidele samalt nimeserverilt, see oluliselt tõstab oma IT infrastruktuuri turvalisust<ref>[https://www.howtoforge.com/two_in_one_dns_bind9_views Two-in-one DNS server with BIND9]</ref>.


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.
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<ref>[http://en.wikipedia.org/wiki/Split-horizon_DNS Wikipedia]</ref>.


Antud artikkel käsitleb ühe võrguliidesega ühe jagatud DNS-i lahenduse rakendamist.
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.).
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.).
Line 12: Line 12:
== Eeldused ==
== Eeldused ==
Antud lahenduse rakendamise eelduseks on IT infrastruktuuri teenuste DNS labori edukas kaitsmine või vastaval tasemel BIND9 nimeserveri seadistamise ja haldamise tundmine.
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.
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<ref>[https://docs.google.com/document/d/1ZeQpPXdVq1C7RQpxQYR0gBB0OBMYB_0g6aFFxs_-fIA/edit DNS labori näitelahendus]</ref>.


 
== Lähtekoht ==
== Jagatud DNS-i seadistamine ==
Labor 2-es paigaldatud nimeserveri konfifailis <b>/etc/bind/named.conf.local</b> said kirjeldatud nimeserveri tsoonid järgnevalt:  
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:  


<pre>
<pre>
Line 22: Line 21:
</pre>
</pre>


Faili etc/bind/named.conf.local konfiguratsioon:  
Faili <b>etc/bind/named.conf.local</b> konfiguratsioon:  


<pre>
<pre>
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";


zone "tsooni_nimi.zz" {
zone "tsooni_nimi.zz" {
Line 51: Line 43:
</pre>
</pre>


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.
Failis <b>/etc/bind/named.conf.options</b> aga sai konfigureeritud kontrollnimekiri,''acl'', mille alusel sai defineeritud, millistest võrkudest ja mis õigustega on lubatud päringud nimeserveri vastu.


<pre>
<pre>
Line 57: Line 49:
</pre>
</pre>


Faili etc/bind/named.conf.options konfiguratsioon:
Faili <b>etc/bind/named.conf.options</b> konfiguratsioon:
<pre>
<pre>
acl sise {192.168.56.0/24;10.1.0.0/16;};
acl sisev6rk {192.168.56.0/24;10.1.0.0/16;};


options {
options {
Line 70: Line 62:
         };
         };


         allow-recursion {sise;};
         allow-recursion {sisev6rk;};
         allow-transfer {sise;};
         allow-transfer {sisev6rk;};
         allow-query {sise;};
         allow-query {sisev6rk;};
         auth-nxdomain no;    # conform to RFC1035
         auth-nxdomain no;    # conform to RFC1035
         listen-on-v6 { any; };
         listen-on-v6 { any; };
};
};
</pre>
</pre>
Tsooni <b>tsooni_nimi.zz</b> konfiguratsioonifaili sisu:
<pre>
;
; 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
</pre>
== Jagatud DNS-i seadistamine ==
Antud näites jagatud DNS-i seadistamiseks kasutan ''BIND9'' funktsionaalsust ''View'', mille rakendan ''BIND9'' konfiguratsioonifaili <b>/etc/bind/named.conf.local</b> kaudu. ''View'' võimaldab suunata kliente neile lubatud ressursidele selles kirjeldatud parameetrite alusel.
<pre>
sudo nano /etc/bind/named.conf.local
</pre>
Kirjeldan erinevad ''View''-d failis <b>/etc/bind/named.options</b> ''acl''-i alusel:
<pre>
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";
    };
};
</pre>
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:
<pre>
sudo cp /var/lib/bind/tsooni_nimi.zz /var/lib/bind/external/tsooni_nimi.zz
</pre>
<pre>
sudo nano /var/lib/bind/external/tsooni_nimi.zz
</pre>
Asendan sisevõrgu IP-aadressid vastavate väliste IP-aadressidega (antud näites hostide ja aliaste IP-aadressite seadistamist ei käsitleta):
<pre>
;
; 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
</pre>
Muudatuste rakendamiseks tuleb taaslaadida nimeserveri teenus:
<pre> sudo service bind9 reload</pre>
== Turvalisus ==
Selleks, et 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, tuleb tõsta <b>/etc/bind/named.conf.options</b> failis oleva ''forwarders'' kirjelduse sisu sisevõrgu ''View'' alla (vanas asukohas tuleb selle aga kindlasti kustutada)<ref>[http://www.zytrax.com/books/dns/ch7/queries.html#forwarders Zytrax.com]</ref>:
<pre>
sudo nano /etc/bind/named.conf.local
</pre>
<pre>
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;
    };
};
</pre>
Teiseks, tuleb keelata väljastpoolt tulevaid rekursiivseid päringuid<ref>[https://www.howtoforge.com/two_in_one_dns_bind9_views Two-in-one DNS server with BIND9]</ref><ref>[http://www.zytrax.com/books/dns/ch9/close.html Zytrax.com]></ref><ref>[http://www.zytrax.com/books/dns/ch7/queries.html#recursion Zytrax.com]</ref>:
<pre>
view "external" {
    match-clients { any; };
    zone "tsooni_nimi.zz" {
        type master;
        file "/etc/bind/external/tsooni_nimi.zz";
    recursion no;
    };
};
</pre>
== Kokkuvõte ==
Antud artikkel käsitleb kõige lihtsamat jagatud DNS serveri paigaldamise stsenaariumit ''BIND9'' näitel. Väidetavalt tarkvaralist DNS serveri jagamist on võimalik saavutada mis iganes nimeserveri tarkvaraga.
Eelistatum jagatud DNS-i lahendus peaks olema riistvaraline, sest sattugu väline DNS server rünnaku alla, sisemised veebiteenused jäävad selliselt häirimata. Kui aga on vaja mingil põhjusel väljastpoolt saada ligi sisevõrgus olevatele veebiteenustele, siis selleks oleks turvalisem kasutada VPN-i põhiseid lahendusi.
== Kasutatud allikad ==
<references/>

Latest revision as of 19:51, 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. Juhul kui peab tagama nimeserveripoolset lahendust nii sise- kui ka välistele klientidele samalt nimeserverilt, see oluliselt tõstab oma IT infrastruktuuri turvalisust[1].

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[2].

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[3].

Lähtekoht

Labor 2-es paigaldatud nimeserveri konfifailis /etc/bind/named.conf.local said kirjeldatud nimeserveri tsoonid järgnevalt:

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 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 kasutan BIND9 funktsionaalsust View, mille rakendan 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

Kirjeldan 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

Asendan 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

Muudatuste rakendamiseks tuleb taaslaadida nimeserveri teenus:

 sudo service bind9 reload

Turvalisus

Selleks, et 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, tuleb tõsta /etc/bind/named.conf.options failis oleva forwarders kirjelduse sisu sisevõrgu View alla (vanas asukohas tuleb selle aga kindlasti kustutada)[4]:

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, tuleb keelata väljastpoolt tulevaid rekursiivseid päringuid[5][6][7]:

view "external" {
    match-clients { any; };
    zone "tsooni_nimi.zz" {
        type master;
        file "/etc/bind/external/tsooni_nimi.zz";
    recursion no;
    };
};

Kokkuvõte

Antud artikkel käsitleb kõige lihtsamat jagatud DNS serveri paigaldamise stsenaariumit BIND9 näitel. Väidetavalt tarkvaralist DNS serveri jagamist on võimalik saavutada mis iganes nimeserveri tarkvaraga. Eelistatum jagatud DNS-i lahendus peaks olema riistvaraline, sest sattugu väline DNS server rünnaku alla, sisemised veebiteenused jäävad selliselt häirimata. Kui aga on vaja mingil põhjusel väljastpoolt saada ligi sisevõrgus olevatele veebiteenustele, siis selleks oleks turvalisem kasutada VPN-i põhiseid lahendusi.

Kasutatud allikad