BIND

出自 Arch Linux 中文维基

伯克利互聯網名稱服務 (Berkeley Internet Name Daemon,簡稱 BIND) 是 DNS 協議的一個參考實現。

注意: 開發 BIND 的組織在發現安全漏洞之後,會先通知付費客户,四天以後才會通知 Linux 發行版和大眾。[1]

安裝[編輯 | 編輯原始碼]

安裝 軟件包 bind

要使用 BIND 提供系統 DNS 服務,修改 resolv.conf,將nameserver 127.0.0.1放到最前面。

開始/啟用 named.service 服務。

配置[編輯 | 編輯原始碼]

BIND 的配置文件是 /etc/named.conf. named.conf man 手冊頁介紹了所有選項。

Reload the named.service unit 以應用配置變更.

只允許本地訪問[編輯 | 編輯原始碼]

如果希望只允許本地網絡訪問,編輯 /etc/named.conf 並將這行配置加入到 options 區域。

listen-on { 127.0.0.1; };

DNS 轉發[編輯 | 編輯原始碼]

要將 DNS 請求請求轉發到上游 DNS 伺服器(例如説您的 ISP 的伺服器,或者 Google、OpenNIC 等知名的服務)。將下面字段加入配置文件的 options 中。.

 forwarders { 8.8.8.8; 8.8.4.4; };

不要忘記重啟 named.service 服務。

權威 DNS 伺服器[編輯 | 編輯原始碼]

以下為一個設置權威域的簡單教程。在這個示例中,我們的權威域名為 "domain.tld"。

更詳盡的教程參見 Two-in-one DNS server with BIND9.

1. 創建一個 zonefile[編輯 | 編輯原始碼]

# nano /var/named/domain.tld.zone
$TTL 7200
; domain.tld
@       IN      SOA     ns01.domain.tld. postmaster.domain.tld. (
                                        2007011601 ; Serial
                                        28800      ; Refresh
                                        1800       ; Retry
                                        604800     ; Expire - 1 week
                                        86400 )    ; Minimum
                IN      NS      ns01
                IN      NS      ns02
ns01            IN      A       0.0.0.0
ns02            IN      A       0.0.0.0
localhost       IN      A       127.0.0.1
@               IN      MX 10   mail
imap            IN      CNAME   mail
smtp            IN      CNAME   mail
@               IN      A       0.0.0.0
www             IN      A       0.0.0.0
mail            IN      A       0.0.0.0
@               IN      TXT     "v=spf1 mx"

$TTL 定義了默認的 TTL (time-to-live), 單位為秒。在這個例子中,默認 TTL 為 2 小時。

每次修改 zonefile 的時候,都需要將 Serial (序列號) 加一再重啟 named。只有當新的 Serial 比最後傳輸的域的序列號大的時候,從伺服器才會請求傳輸新的域。

2. 配置主伺服器[編輯 | 編輯原始碼]

將您的 zone 文件加到 /etc/named.conf:

zone "domain.tld" IN {
        type master;
        file "domain.tld.zone";
        allow-update { none; };
        notify no;
};

重新加載 named.service 服務。

3. 將其設置為默認 DNS 伺服器[編輯 | 編輯原始碼]

如果您自己已經在運行 DNS 伺服器的話,可以考慮同時將其用來處理 DNS 查詢請求。伺服器必須支持 recursive (遞歸) 查詢。為了防止 DNS 放大攻擊,許多 DNS 解析程序都默認禁用了遞歸功能。Arch 的默認 /etc/named.conf 配置只允許本機地址使用遞歸:

allow-recursion { 127.0.0.1; };

resolv.conf 配置文件必須包含 127.0.0.1 地址以使用您的 DNS 伺服器。 參見 Domain name resolution#Overwriting of /etc/resolv.conf 以了解確保這個文件不會被覆蓋的方法。

如果您想為您的局域網提供 DNS 服務的話(例如 192.168.0 IP 段),您必須將對應的 IP 段加入到 /etc/named.conf 中:

allow-recursion { 192.168.0.0/24; 127.0.0.1; };

配置 DNSSEC[編輯 | 編輯原始碼]

自動監聽新的網絡接口[編輯 | 編輯原始碼]

BIND 會每個每隔幾個小時掃描新的網絡接口並停止在已經不再不存在的上監聽。如果您想修改這個時間的話,可以在 /etc/named.conf 中增加這個項:

interface-interval <扫描间隔>;

最大間隔為 28 天 (40230 分鐘)。

如果需要禁用這個功能的話,可以將時間值設置為 0

最後,請重啟服務。

在 chroot 環境運行 BIND[編輯 | 編輯原始碼]

在 [chroot] 環境運行可以提高安全性。

創建 Jail House[編輯 | 編輯原始碼]

首先,我們需要創建一個 jail。我們可以使用 /srv/named, 並將相關文件都放到裏面去。

 mkdir -p /srv/named/{dev,etc,usr/lib/engines,var/{run,log,named}}
 # Copy over required system files
 cp -av /etc/{localtime,named.conf} /srv/named/etc/
 cp -av /usr/lib/engines-1.1/* /srv/named/usr/lib/engines/
 cp -dfprv /var/named /srv/named/var/
 # Set up required dev nodes
 mknod /srv/named/dev/null c 1 3
 mknod /srv/named/dev/random c 1 8
 # Set Ownership of the files
 chown -R named:named /srv/named

這些步驟可以配置 jail 的文件系統。

服務文件[編輯 | 編輯原始碼]

接下來我們需要創建服務文件 (service file),以強制 BIND 在 chroot 環境中啟動。

 cp -av /usr/lib/systemd/system/named.service /etc/systemd/system/named-chroot.service

我們需要修改 service 啟動 BIND 的方法。

/etc/systemd/system/named-chroot.service
  ExecStart=/usr/bin/named -4 -f -u named -t "/srv/named"

}

最後,重新加載 systemd systemctl daemon-reload。然後,啟動 named-chroot.service

參見[編輯 | 編輯原始碼]