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