DNS zone transfer 的安全性
前言
前幾天去面試交大資工所時,大部分的問題都答上了,但最後一個問題問有關 DNS zone transfer (master/slave) 如何預防 MITM 攻擊,這我就真的沒操作過了,畢竟之前的 master/slave 不是架在相對安全的網路(成大學網),就是在安全的封閉網路內(內部網路),還真沒考慮過這一點,只有做 ACL 控管而已,於是藉此機會加強 DNS 安全性,並順便整理成這篇文章。
設定
基礎
ACL 限制
大部分的人應該都會做這部分最基礎的 ACL 限制
1 | |
有關 notify 的二三事
notify可以在options block 和zone block 內做設定,可設為yes、explicit、no、master-only和primary-only五種值。前三種分別代表如下意義,後兩種為較多層環境下的設定
notify yes;: 向網域內所有 NS 記錄的主機和also-notify設定的主機發送通知notify explicit;: 只向also-notify設定的主機發送通知notify no;: 不發送通知
TSIG
生成金鑰
1 | |
在一些文章中可能會看到使用dnssec-keygen來生成HMAC-MD5的金鑰,類似底下這樣
1 | |
但是可能會沒辦法執行,因為dnssec-keygen在編譯時沒有編譯這種加密算法進去,而且 MD5 也不太適合使用了,雖然HMAC-MD5還被視為安全;以我 debian 和 fedora 上的dnssec-keygen版本,都沒有支援 hmac 這類哈希的算法
生成的金鑰寫成設定大概長這樣,用tsig-keygen生成的會直接是可以 include 的格式
1 | |
最好調整一下金鑰檔案的權限
1 | |
使用金鑰
將金鑰檔案複製到 master/slave 兩台 server 上,並 include 進named.conf的第一層,不要放在其他的 block 中。
增加 server block 到named.conf的第一層,兩邊都要設定
在 y.y.y.y 上設定到 x.x.x.x 都要用這把 key
1 | |
在 x.x.x.x 上設定到 y.y.y.y 都要用這把 key
1 | |
設定完成後在 x.x.x.x 和 y.y.y.y 中間的所有 DNS 通訊都會使用 TSIG 的金鑰進行簽章,防止有中間人進行竄改,但是 TSIG 不會加密通訊,如果不想要被中間人監聽到 DNS 記錄,最好單獨使用 IPSec 或是其他 VPN 建立安全通道。
其他使用方式
不止可以使用 TSIG 對 某台 server 進行驗證,也可使用 key 來做 ACL 限制
像是針對allow-update做限制,以下限制了只有 a.a.a.a 才能 update,並且 update 的請求要使用 TSIG 的金鑰進行簽章
1 | |
TKEY
TKEY 是一種可以在兩個 server 間自動協商金鑰的方法, Bind9 只實作了一種 TKEY 的模式: Diffie-Hellman key exchange[1],但是好像使用 TKEY 這種方式的設定比較少,網路上難找到配置的方式,可能是因為曾經出現過與 TKEY 相關的漏洞,導致攻擊者能夠輕易對 BIND9 伺服器進行 DoS 攻擊;因此在這裡就不提如何設定了。