bind DNS

dns歷史
早期使用/etc/hosts檔來對應ip與名稱,但因為現在主機太多所以使用dns(domain name server)來做自動的對應


BIND,berkeley internet name domain(www.isc.org)
包含三部份
 1,DNS伺服器:可能需額外安裝,由以下組成
    named:伺服程式
    資料檔:所有管轄網域的網域名稱(含正反解檔,root根資料檔,loopback檔)
    named.conf:bind8/9的組態檔
 2,DNS resolver library :用來轉換ip及網域的函式庫,通常己內建在系統內
 3,DNS tool : 驗證dns用的程式,通常系統內都有
    ex:nslookup,dig,whois

…………………………………………………

以下是資料檔設定

正解檔格式
$TTL 86400  //單位為秒,查詢到的資料放入快取可儲存時間
socket.idv.tw.  IN  SOA  dns.socket.idv.tw.  //宣告socket.idv.tw網域由dns.socket.idv.tw伺服器管理
admin.dns.socket.idv.tw.  (  //系統管理者的電郵
  1; //序號,辦別設定檔版本
  10800; //更新時間,控制slave多久來master下載新的資料檔
  3600; //重試時間,若slave下載失敗,多久在重試
  604800; //逾期時間,slave下載時所限定的時間
  86400 ); //mini ttl ,slave可保存多久下載的資料
socket.idv.tw.  IN  NS  dns.socket.idv.tw.  //socket.idv.tw網域的dns伺服器是dns.socket.idv.tw
www.socket.idv.tw.  IN  A  192.192.6.2 //設定www.socket.idv.tw的對應ip為192.192.6.2
www2                     IN   A  192.192.6.22 //www2.socket.idv.tw對應到192.192.6.22的簡寫
dns.socket.idv.tw.  IN  A  192.192.6.3
study.socket.idv.tw.  IN  CNAME  www.socket.idv.tw. //為www.socket.idv.tw取一個別名study.socket.idv.tw
study2IN  CNAME   www2         //www2.socket.idv.tw的別名study2.socket.idv.tw的簡寫
socket.idv.tw. IN MX 10 www.socket.idv.tw. //寄給user@socket.idv.tw時,信件會給www.socket.idv.tw這部主機,後面的主機名稱表示上游的郵件主機名稱
socket.idv.tw. IN  MX  20  mail.socket.idv.tw.  //寄給user@socket.idv.tw信件給www.socket.idv.tw處理不成功時,就會給mail.socket.idv.tw處理
web.systw.net                     IN A 192.168.1.1   //設定負載平衡,user查詢web.systw.net時會得到3個ip的其中之一 
web.systw.net                     IN A 192.168.1.2
web.systw.net                     IN A 192.168.1.3

反解檔格式
$TTL 86400
6.192.192.in-addr.arpa.  IN  SOA  dns.socket.idv.tw. //宣告192.192.6網域由dns.socket.idv.tw伺服器管理
admin.dns.socket.idv.tw.  (
 1;
 10800;
 3600;
 604800;
 86400 );
6.192.192.in-addr.arpa.  IN  NS  dns.socket.idv.tw.  //192.192.6網域的dns伺服器是dns.socket.idv.tw
2.6.192.192.in-addr.arpa.  IN  PTR  www.socket.idv.tw. //設定192.192.6.2的ip網域名稱為www.socket.idv.tw
3.6.192.192.in-addr.arpa.  IN  PTR  dns.socket.idv.tw.

loopback檔:localhost查詢用
$TTL 86400
0.0.127.in-addr.arpa.  IN  SOA  dns.socket.idv.tw.  admin.dns.socket.idv.tw. (
 1;
 10800;
 3600;
 604800;
 86400);
0.0.127.in-addr.arpa.  IN  NS  dns.socket.idv.tw.
1.0.0.127.in-addr.arpa.  IN  PTR  loc
root檔:最上層dns伺服器清單,需上網下載,如ftp.rs.inernic.net/domain/db.cache


……………………………………………..

以下是named.conf組態檔設定
/usr/local/bind/etc/named.conf //bind9的組態檔可能位置
/etc/named.conf //bind8的組態檔可能位置
//設定資料檔所在目錄
options{
  directory “/usr/local/bind/etc”;  //指定從/usr/local/bind/etc目錄取出資料檔
};
//讀取根轄區檔
zone “.” in {
 type hint;
 file “db.cache”; //讀取db.cache的root檔
};
//讀取普通轄區檔
zone “socket.idv.tw” in{   //管理的網域是socket.idv.tw
 type master;
 file “db.socket.idv.tw”; //設定socket.idv.tw網域的正解檔是db.socket.idv.tw
};
zone “6.192.192.in-addr-arpa” in{
 type master;
 file “db.192.192.6”; //設定192.192.6網域的反解檔是db.192.192.6
};
zone “0.0.127.in-addr-arpa” in{
 type master;
 file “db.127.0.0”; //設定127.0.0網域的反解檔是db.127.0.0
};

type 有以下五種
master:主要伺服器
slave:次要伺服器,會和master做zone transfer定期複製資料
stub:只複製master的ns記錄
hint:表示root伺服器
forwarder:將client要求轉送到其他dns

補充option
dump-file 指定dns cache要存放在那一個檔案
statistics-file 指定dns統計資料要寫入那個檔案
pid-file 指定named pid
forward-only 只允許轉送
forwarders 指定查詢時要問那個master dns
allow-query{ address } 是否允許用戶端查詢,也就是設定acl
address常見格式為
1允許所有client查詢
 allow-query{ any; };
2搭配trusted設定可查詢的名單
 acl “trusted” {
   localhost;
   203.71.0.0/16;
   };
 allow-query{ trusted; }
3指定可查詢的名單
 allow-query{ localhost;10.10.10.0/24;};
此項目也可用在特定轄區,如下
zone “systw.net” {
 allow-query { address }
}
allow-transfer{ address } 是否允許zone transfer,用來設定slave dns
1若為master通常如下設定
 allow-transfer{slavednsip1;,slavedns2;,…};
2若為slave且下面也沒任何dns,通常如下設定,否則會對大家開放transfer
 allow-transfer{none;};

………………………………………………………..


安裝並測試dns server是否架設成功
1,連到ftp.rs.internic.net(輸入anonymous,及email當密碼後進入domain目錄)或其他地方,下載db.cache(root根資料檔)
2,將db.cache複製到named.conf內所指定目錄,並重啟dns server
3,打nslookup後,下server dnsserver目前ip(server指令用來設定預設dns主機)
4,輸入各網域,若得到對應位置表示dnsserver架設成功
ps:重啟bind時,若程式有問題才會無法啟動,若組態設錯是可以啟動的,因此啟動後還需驗證組態是否正常運作

dns更新
1在zone file內修改欲更新的ip和網域
2更改zone file的序號
3重新dns
ps:在unix中,可執行kill -1 < dns process id>

………………………………………………….

安全性建議

以最小的特權執行bind
named啟動後,變更其uid或gid將權限設為最小
ex:
將named的擁有者變為使用者bind
named -u bind
ps:named.conf只會在啟動時讀取一次,但轄區資料檔可能會被讀取多次,因此轄區資料檔的權限必須確定使用者bind可讀取

關閉顯示版本
在named.conf的option中設定version none ,使用dig時不會顯示版本資訊,可避免被攻擊者知道版本

避免未授權的轄區資料傳送
allow-transfer預設允許任何來源要求資料傳送
若dns獨立運作
則在named.conf的option需設定allow-transfer {none;};拒絕所有主機要求資料傳送
若dns為master/slave架構
在master,named.conf的option需於allow-transfer指定slave主機
在slave,named.conf的option需設定allow-transfer {none;};拒絕所有主機要求資料傳送

功能分離
將dns設定為公佈用及解析用
advertising(公佈用)dns
負責回應internet非遞迴的詢問要求
安全設定:需關閉遞迴功能,ex:在option內設定recursion no;
resolving(解析用)dns
負責回應client或其他dns做遞迴的詢問要求
安全設定:需限制查詢,ex:在option內設定query-allow
整合公佈用及解析用dns
bind9可使用allow-recursion
ex:
設定10.0.0.0可以使用遞迴查詢(解析用dns),且外網也可非遞迴查詢systw.net(公佈用dns)
acl “trust” {
  10.0.0.0;
};
option{
  directory “/var/named”;
  allow-recursion { “trust”; };
}
zone “systw.net” {
  type master;
  file “db.systw.net”;
}

其他選擇性建議
限制query要求
在named.conf的option中設定allow-query