Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2520986
  • 博文数量: 867
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 9800
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 14:44
文章分类

全部博文(867)

文章存档

2007年(6)

2006年(861)

我的朋友

分类:

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/serversvcadm 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.33

zone "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.1localhost

 

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中的情況。

  1. 為 Jail 監牢建立目錄

    # mkdir -p /chroot/shell

  2. 建立一個空殼目錄架構

    # cd /chroot/shell
    # mkdir -p usr/bin usr/lib usr/lib lib etc tmp dev bin

  3. 複制 /bin/sh 到 jail 監牢

    # cp /bin/sh /chroot/shell/bin/sh

  4. 複制 /bin/sh 所需的 libraries

    # cp /usr/lib/ld.so.1 /chroot/shell/usr/lib
    # cp /usr/lib/libc.so.1 /chroot/shell/usr/lib
    # cp /usr/lib/libdl.so.1 /chroot/shell/usr/lib
    # cp /lib/ld.so.1 /chroot/shell/lib/ld.so.1

  5. 再檢查 /chroot/bin/sh ,還需要使用什麼 libraries。然後,把需要的 libraries 複制到 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 就算沒複制也能運作。當然,這也要按照你的個人要求來決定。

    # cp /usr/lib/libgen.so.1 /chroot/shell/usr/lib

  6. 只需要:以下指令就可以開始測試 Jail 監牢

    # chroot /chroot/shell /bin/sh

    在測試中,你輸入 pwd 都還可以看到你進入了那個目錄。但 ls 功能就不能用了。因為 Jail 監牢環境中沒有 ls 這個程式。

    離開 shell 系統

    # exit


    複制 ls 到 Jail 監牢

    # cp /bin/ls /chroot/shell/bin/ls
    # cp /bin/ls /chroot/shell/usr/bin/ls

    再進入 Shell 的 Jail 監牢裡,應該你可以看到以下目錄

    # 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
    /
    #

    由這個測試把 Shell 放到 Jail 監牢中,你可以見到 Chroot Jail 怎樣運作

為 Bind 9 DNS Server 建立一個安全的 Chroot Jail 環境

為 DNS Server 建立 Jail 監牢目錄

  1. 建立 /chroot/dns 目錄

    # mkdir /chroot/dns

  2. 建立一個空殼目錄架構

    # cd /chroot/dns
    # mkdir -p etc/named var/run

  3. 複制 /etc/named.conf 到 Jail 監牢

    # cp /etc/named.conf /chroot/dns/etc/named.conf

  4. 複制 /etc/named 目錄中的文件到 Jail 監牢

    # cp /etc/named/* /chroot/dns/etc/named/

  5. 更改 /chroot/dns/var/run 目錄的權限

    # chmod 770 /chroot/dns/var/run
    # chown noaccess:root /chroot/dns/var/run

為 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 現在已經安裝好了。


阅读(1900) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~