分类:
2006-09-08 11:20:13
前言
Solaris 10 基本上就已經安裝好 Bind 9 DNS Server,所以,跟本就不存在安裝的問題。但為什麼還要寫這編文章呢?在某程度上跟和 Solaris 10 的新功能 Service Management Facility (SMF)有關,而且,這編文章也有助於對 SMF的深入了解。
另外,安裝好了 Bind DNS Server 之後還有很多問題要面對。
怎樣啟動和停止 Bind 9 DNS Server?
如何設定 Bind 9 DNS Server?
如何把我的 Domain Name 加入 Bind 9 DNS Server?
怎樣另到 Bind 9 DNS Server 把我的 Domain Name 指向我的 Web Server、Ftp Server、MX Mail Server、SMTP Server 和 POP Server?
怎樣提高 Bind 9 DNS Server 的安全性,使到就算給 Hacker Hack 進了 Bind 9 DNS Server,Hacker 們也沒有辦法真正進入系統?
什麼是 Chroot Jail (保安監牢)?
Bind 9 DNS Server 怎樣使用 Chroot Jail (保安監牢)功能來防止 Hacker 進入系統?
怎樣建立新的 SMF Service 來啟動 Chroot Jail 後的 DNS Server?
如何把 Solaris 10 內的 Bind 9 DNS Server升級到最新版本?
以上的問題,都是本編文章主要討論的內容。
怎樣啟動和停止 Bind 9 DNS Server
在Solaris 10 版本,只要需要建立好 DNS Server 的設定檔 /etc/named.conf ,從新啟動 Solaris 10,Bind 9 DNS Server 就會自動啟動。
啟動和停止DNS Server舊版本 Solaris | Solaris 10 | |
---|---|---|
啟動 DNS Server |
/etc/init.d/named start |
svcadm enable dns/server 或 svcadm enable dns/server:default |
停止 DNS Server | /etc/init.d/named stop | svcadm disable dns/server 或 svcadm disable dns/server:default |
如何設定 Bind 9 DNS Server
設定 Bind 9 DNS Server的第一個工作,就是建立 /etc/named.conf 這個文件檔。
1. 在建立之前,先做一些準備和假設:
IP Address | Domain Name | |
---|---|---|
Domain Name | 202.134.130.131 | tophk.net |
Gateway / Router IP Address | 202.134.130.129 | gw1.tophk.net |
DNS Server IP Address | 202.134.130.130 | ns1.tophk.net |
Web Server | 202.134.130.131 | |
FTP Server | 202.134.130.131 | ftp.tophk.net |
MX Mail Server | 202.134.130.132 | mail.tophk.net |
SMTP Server | 202.134.130.132 | smtp.tophk.net |
POP Server | 202.134.130.133 | pop.tophk.net |
2. 編輯 /etc/named.conf
options {directory "/etc/named"; pid-file "/var/run/named.pid";}; controls {/* empty */}; // Root server hints zone "." {type hint; file "root.hint";}; // Provide a reverse mapping for the loopback address 127.0.0.1 zone "0.0.127.in-addr.arpa" {type master; file "localhost.rev"; notify no;}; zone "tonhk.net" {type master; file "db.tophk";};
options {directory "/etc/named"; pid-file "/var/run/named.pid";};
directory "/etc/named"
除了 /etc/named.conf 之外, 還要建立一個目錄給 DNS Server 存放 每一個Domain 的詳細資料。這個例子為 /etc/named。
建立 /etc/named 目錄:
# mkdir /etc/named
pid-file "/var/run/named.pid"
DNS Server 運作的 process ID 存放在 /var/run/named.pid
controls {/* empty */};
允許任何人使用這台 DNS Server
zone "." {type hint; file "root.hint";};
Root Cache 檔存放在 /etc/named/root.hint
root.hint 文件內存放了所有最頂層 DNS Server 的 IP 和資料,Bind 9 DNS Server 會向這些 DNS Server 查詢 Internet 內所有 Domain Name 的資料。
建立和下載 root.hint 檔:
# dig @a.root-servers.net . ns > /etc/named/root.hint
或自行編輯 /etc/named/root.hint 檔:
$TTL 999999 . IN NS A.ROOT-SERVERS.NET. . IN NS B.ROOT-SERVERS.NET. . IN NS C.ROOT-SERVERS.NET. . IN NS D.ROOT-SERVERS.NET. . IN NS E.ROOT-SERVERS.NET. . IN NS F.ROOT-SERVERS.NET. . IN NS G.ROOT-SERVERS.NET. . IN NS H.ROOT-SERVERS.NET. . IN NS I.ROOT-SERVERS.NET. . IN NS J.ROOT-SERVERS.NET. . IN NS K.ROOT-SERVERS.NET. . IN NS L.ROOT-SERVERS.NET. . IN NS M.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. IN A 198.41.0.4 B.ROOT-SERVERS.NET. IN A 192.228.79.201 C.ROOT-SERVERS.NET. IN A 192.33.4.12 D.ROOT-SERVERS.NET. IN A 128.8.10.90 E.ROOT-SERVERS.NET. IN A 192.203.230.10 F.ROOT-SERVERS.NET. IN A 192.5.5.241 G.ROOT-SERVERS.NET. IN A 192.112.36.4 H.ROOT-SERVERS.NET. IN A 128.63.2.53 I.ROOT-SERVERS.NET. IN A 192.36.148.17 J.ROOT-SERVERS.NET. IN A 192.58.128.30 K.ROOT-SERVERS.NET. IN A 193.0.14.129 L.ROOT-SERVERS.NET. IN A 198.32.64.12 M.ROOT-SERVERS.NET. IN A 202.12.27.33zone "0.0.127.in-addr.arpa" {type master; file "localhost.rev"; notify no;};
127.0.0.x 的 reverse lookup 功能。
這是用來定義 127.0.0.0 至127.0.0.255 的 Domain 是什麼, 但習慣上, 這個範圍的 IP 是沒有什麼需要定義的。
基本上,只有 127.0.0.1 有需要 reverse lookup。
127.0.0.x 的 reverse lookup 資料檔存放在 /etc/named/localhost.rev 內。
編輯 /etc/named/localhost.rev 檔:
$TTL 86400 @ IN SOA 0.0.127.in-addr.arpa. info.tophk.net. ( 2 ; Serial 3600 ; Refresh every hour 900 ; Retry every 15 minutes 3600000 ; Expire 1000 hours 3600 ) ; Minimum 1 hour IN NS ns1.tophk.net. IN NS ns2.tophk.net. 1 600 IN PTR localhost$TTL 86400
TTL (Time to Live) 。通知其他 DNS Server 不要 Cache (暫存) 記錄這個 Zone record 的資料超過 24小時 (86400秒)。
@ IN SOA 0.0.127.in-addr.arpat. info.tophk.net. (
對應的 Zone 名 0.0.127.in-addr.arpa.。
Zone File 負責人為 info.tophk.net.。 ( 即 info@tophk.net )
2 ; Serial
Zone file 版本號,每次改變內容後需要把版本號數值加大,例如,把2改成3。Slave DNS Server 會根據這個 Master DNS Server 的 Zone file 版本號來決定是否需要更新 Slave DNS Server 的資料 ( 即 Zone Transfer )。
3600 ; Refresh every hour
通知 Slave DNS Server 每格一小時 (3600秒),檢查這個 Zone file 版本號是否有更改 。
900 ; Retry every 15 minutes
通知 Slaver DNS Server ,如果無法進行檢查這個 Master Zone file 版本號,要每格15分鐘 (900秒) 再試一次。
3600000 ; Expire 1000 hours
通知 Slaver DNS Server ,如果在1000小時內 (3600000秒) 也無法進行檢查這個 Master Zone file 版本號,Slave DNS Server 就會自動刪除這個 Zone Copy。
3600 ) ; Minimum 1 hour
通知其它的 DNS server cache 這筆Zone File 內容時, 最長不應該超過這個一個小時 (3600秒)。
IN NS ns1.tophk.net.
第一台 DNS Server 名稱為 ns1.tophk.net。
IN NS ns2.tophk.net.
第二台 DNS Server 名稱為 ns2.tophk.net。
1 600 IN PTR localhost
127.0.0.1 是 localhost。
zone "tonhk.net" {type master; file "db.tophk";};
Doamain Name 為 tophk.net
保存了 tophk.net 詳細資料的 Zone file 位置,/etc/named/db.tophk。
編輯 /etc/named/db.tophk 檔:
$TTL 18000 @ IN SOA tophk.net. info.tophk.net. ( 2005030104 ; Serial 36000 ; refresh: 10 hrs 1800 ; retry: 30 mins 3456000 ; expire: 40 days 36000 ; minimum: 10 hrs ) IN NS ns1.tophk.net. IN NS ns1.formulahk.com. IN A 202.134.130.131 IN MX 10 mail.tophk.net. ns1 600 IN A 202.134.130.130 www 600 IN CNAME tophk.net. ftp 600 IN CNAME tophk.net. mail 600 IN A 202.134.130.132 smtp 600 IN CNAME mail.tophk.net. pop 600 IN A 202.134.130.133 gw1 600 IN A 202.134.130.129$TTL 18000
TTL (Time to Live) 。通知其他 DNS Server 不要 Cache (暫存) 記錄這個 Zone record 的資料超過 5小時 (18000秒)。
@ IN SOA tophk.net. info.tophk.net. (
對應的 Zone 名 tophk.net.。
Zone File 負責人為 info.tophk.net.。 ( 即 info@tophk.net )
2005030104 ; Serial
Zone file 版本號,每次改變內容後需要把版本號數值加大3。Slave DNS Server 會根據這個 Master DNS Server 的 Zone file 版本號來決定是否需要更新 Slave DNS Server 的資料 ( 即 Zone Transfer )。
36000 ; Refresh 10 hour
通知 Slave DNS Server 每格10小時 (36000秒),檢查這個 Zone file 版本號是否有更改 。
1800 ; Retry: 30 minutes
通知 Slaver DNS Server ,如果無法進行檢查這個 Master Zone file 版本號,要每格15分鐘 (900秒) 再試一次。
3456000 ; Expire 40 days
通知 Slaver DNS Server ,如果在40日內 (3456000秒) 也無法進行檢查這個 Master Zone file 版本號,Slave DNS Server 就會自動刪除這個 Zone Copy。
36000 ) ; Minimum 10 hour
通知其它的 DNS server cache 這筆Zone File 內容時, 最長不應該超過這個10個小時 (36000秒)。
IN NS ns1.tophk.net.
tophk.net 的第一台 DNS Server 名稱為 ns1.tophk.net。
IN NS ns2.formulahk.com.
tophk.net 的第二台 DNS Server 名稱為 ns1.formulahk.com。
IN A 202.134.130.131
tophk.net 的 IP Address 為 202.134.130.131 。
IN MX 10 mail.tophk.net.
tophk.net 的Mail Exchange Server 為 mail.tophk.net , 對應 mail.tophk.net 的 IP Address 為 202.134.105.132。
ns1 600 IN A 202.134.130.130
ns1.tophk.net 的 IP Address 為 202.134.130.130。
www 600 IN CNAME tophk.net.
的對應名稱為 tophk.net,即 IP Address 為 202.134.130.131。
ftp 600 IN CNAME tophk.net.
ftp.tophk.net 的對應名稱為 tophk.net,即 IP Address 為 202.134.130.131。
mail 600 IN A 202.134.130.132
mail.tophk.net 的 IP Address 為 202.134.130.132。
smtp 600 IN CNAME mail.tophk.net.
smtp.tophk.net 的對應名稱為 mail.tophk.net,即 IP Address 為 202.134.130.132。
pop 600 IN A 202.134.130.133
pop.tophk.net 的 IP Address 為 202.134.130.133。
gw1 600 IN A 202.134.130.129
gw1.tophk.net 的 IP Address 為 202.134.130.129。
3. 設定完成後,可以嘗試啟動 Bind 9 DNS Server
# svcadm disable dns/server
# svcadm enable dns/server
什麼是 Chroot Jail (保安監牢)?
Chroot Jail ,就好像為系統建立一個監牢,把你需要執行的程式放在監牢中運行。
而這個監牢什麼也沒有,監牢裡面有的系統程式,只緊緊足夠你所需要運行的程式使用。
一但因為你的程式出現了系統漏洞,而使到Hacker可以透過你的程式進入系統,那個時候,你都可以不用太擔心Hacker們能在你的系統中做到什麼。
因為,Chroot Jail 架構裡有的程式很少,連 shell、ls 和 一些基本Unix 應該有的指令和程式也沒有。Hacker們,那裡還能夠修改你的系統和上載軟件。
就算你他們能夠作出很大的破壞,他們能所破壞的也只不過是 Chroot Jail 監牢中的假系統,他們不可以穿過 Chroot Jail 監牢進入真正的系統。
而且,一般執行Chroot Jail 監牢中的程式時,大部份都不會使用 root 的權限來運作,盡量使用一些沒意義的使用者權限來運作 Chroot Jail 監牢中的程式。
所以,Hacker 們 hack 進來後,獲得的權限簡直是低到不能再低。 就是建立了這種什麼資源都不足的環境,保安方面便提高了很多。
圖片中的例子,說明了 Chroot Jail 中的環境狀態
一個簡單的例子,在 Chroot Jail 中執行 Shell 環境
舉例說明如何建立一個 Chroot Jail 監牢和在Chroot Jail中的情況。
# ldd /chroot/shell/bin/sh libgen.so.1 => /usr/lib/libgen.so.1 libsecdb.so.1 => /usr/lib/libsecdb.so.1 libc.so.1 => /usr/lib/libc.so.1 libnsl.so.1 => /usr/lib/libnsl.so.1 libcmd.so.1 => /usr/lib/libcmd.so.1 libmp.so.2 => /usr/lib/libmp.so.2 libmd5.so.1 => /usr/lib/libmd5.so.1 libscf.so.1 => /usr/lib/libscf.so.1 libdoor.so.1 => /usr/lib/libdoor.so.1 libuutil.so.1 => /usr/lib/libuutil.so.1 libm.so.2 => /usr/lib/libm.so.2在這裡我只複制 libgen.so.1,因為,能用就算,而且,其它的 libraries 就算沒複制也能運作。當然,這也要按照你的個人要求來決定。
# chroot /chroot /bin/sh # ls bin dev etc lib tmp usr # ls -l bin total 188 -r-xr-xr-x 1 0 1 15400 Oct 4 08:42 ls -r-xr-xr-x 1 0 1 79380 Oct 4 08:18 sh # ls -l dev total 0 crw-r--r-- 1 0 1 13, 2 Oct 4 08:30 null crw-r--r-- 1 0 1 13, 12 Oct 4 08:26 zero # ls -l usr/lib total 2408 -rwxr-xr-x 1 2 2 198836 Oct 4 08:29 ld.so.1 -rwxr-xr-x 1 2 2 959436 Oct 4 08:29 libc.so.1 -rwxr-xr-x 1 2 2 4484 Oct 4 08:29 libdl.so.1 -rwxr-xr-x 1 0 1 38944 Oct 4 08:31 libgen.so.1 # pwd /
#
為 Bind 9 DNS Server 建立一個安全的 Chroot Jail 環境
為 DNS Server 建立 Jail 監牢目錄
為 Solaris 10 建立一個新 service
原本的 DNS Server Service 名稱為 dns/server。
建立新service 後,以後要啟動舊版本的 DNS service 時,不能只啟動 dns/server,而要改為 dns/server:default。
新 DNS Server Chroot service 名稱為, dns/server:chroot
開始建立新 Service
# cd /var/svc/manifest/network/dns
# cp server.xml server-chroot.xml編輯 server-chroot.xml
------------------------
尋找
改為
------------------------
尋找
exec='/usr/sbin/named'
改為
exec='/usr/sbin/named -t /chroot/dns'
------------------------
尋找
privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr,file_dac_read,file_dac_search,sys_resource' />
改為
privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr,priv_proc_chroot,priv_file_dac_read,file_dac_search,sys_resource' />
------------------------
尋找
user='root'
改為
user='noaccess'
------------------------
存檔
------------------------停止預設 DNS service
# svcadm disable dns/server:default
匯入新的 DNS Server Chroot service
# svccfg import server-chroot.xml啟動 chroot DNS service
# svcadm enable dns/server:chroot
# svcs dns/server STATE STIME FMRI disabled 6:21:03 svc:/network/dns/server:default online 6:27:01 svc:/network/dns/server:chroot #Bind 9 DNS Server 現在已經能夠在 Chroot Jail 環境中運行
到 ISC BIND 下載 ( )
# cd /usr/local/src
# wget
# cp bind-9.3.2.tar.gz ..
# cd ..
# gzip -d bind-9.3.2.tar.gz
# tar -vxf bind-9.3.2.tar
# rm bind-9.3.2.tar
# cd bind-9.3.2
# ./configure
.....
# make
.....
# make install
# cd /usr/sbin
# mv named named.orig
# mv named-checkconf named-checkconf.orig
# mv named-checkzone named-checkzone.orig
# cp /usr/local/sbin/named .
# cp /usr/local/sbin/named-checkconf .
# cp /usr/local/sbin/named-checkzone .檢查新安裝的 BIND 9 DNS Server 版本
# /usr/sbin/named -v
BIND 9.3.2
從新啟動 Chroot Jail 了的 DNS Service
# svcadm disable dns/server:chroot
# svcadm enable dns/server:chroot# svcs dns/server STATE STIME FMRI disabled 6:21:03 svc:/network/dns/server:default online 6:27:01 svc:/network/dns/server:chroot #
# ps -elf | grep named noaccess 133 1 0 20:31:29 ? 0:00 /usr/sbin/named -t /chroot/dns #新的 Bind 9 DNS Server Version 9.3.2 現在已經安裝好了。