BINDの使い方(TSIG)
1 TSIG(Transaction Signature)とは?
TSIGは次のことを保証する仕組みです。
・DNSメッセージの完全性
・DNSメッセージ送信元の真正性
これにより、プライマリーサーバとセカンダリーサーバの間でゾーン情報を安全に転送することができます。TSIG はDNS メッセージにTSIGレコードを付加することで、DNS メッセージに電子署名を行います。なお、ゾーン転送は、BINDの使い方(ゾーン転送) - hana_shinのLinux技術ブログを参照してください。
2 検証環境
3 動作確認
bindパッケージのインストール方法やポート番号の開放は、BINDの使い方(ゾーン転送) - hana_shinのLinux技術ブログを参照ください。
3.1 共有鍵の作成
共有鍵はtsig-keygenコマンドを使って作成します。書式は以下のとおりです。tsig-keygenコマンドの引数にはハッシュ関数と共有鍵名を指定します。デフォルトのハッシュ関数はhmac-sha256です。
# tsig-keygen -a [アルゴリズム] 共有鍵名
tsig-keygenコマンドを使用して共有鍵を作成します。共有鍵の名前はprimary-secondaryとします。
[root@primary ~]# tsig-keygen primary-secondary
key "primary-secondary" {
algorithm hmac-sha256;
secret "QBTirziTOPJe3Fa0lA8hVXt9hNxuqAAKz8jIwYiZGck=";
};
3.2 プライマリーサーバ
作成した共有鍵をプライマリーサーバの設定ファイルに追加します。
[root@primary ~]# diff -Nur /etc/named.conf.org /etc/named.conf
--- /etc/named.conf.org 2023-06-03 23:42:27.674145301 +0900
+++ /etc/named.conf 2023-06-03 23:40:37.412881984 +0900
@@ -63,3 +63,10 @@
allow-transfer { 192.168.122.213; };
notify yes;
};
+
+key "primary-secondary" {
+ algorithm hmac-sha256;
+ secret "QBTirziTOPJe3Fa0lA8hVXt9hNxuqAAKz8jIwYiZGck=";
+};
+
+
3.3 セカンダリーサーバ
作成した共有鍵をセカンダリーサーバの設定ファイルに追加します。さらに、共有鍵を使用するため、serverステートメント内でkeysサブステートメントを使って定義します。keysサブステートメント内のパラメータは鍵の名前(primary-secondary)を指定します。
[root@secondary ~]# diff -Nur /etc/named.conf.org /etc/named.conf
--- /etc/named.conf.org 2023-06-03 23:43:34.299629797 +0900
+++ /etc/named.conf 2023-06-03 23:50:39.562587606 +0900
@@ -62,3 +62,13 @@
file "slaves/abc.test.db";
masters { 192.168.122.16; };
};
+
+key "primary-secondary" {
+ algorithm hmac-sha256;
+ secret "QBTirziTOPJe3Fa0lA8hVXt9hNxuqAAKz8jIwYiZGck=";
+};
+
+server 192.168.122.16 {
+ keys { primary-secondary; };
+};
+
3.4 TSIGレコードの確認
TSIG レコードを確認するため、tcpdumpコマンドを実行します。tcpdumpコマンドの使い方は、tcpdumpの使い方(基本編) - hana_shinのLinux技術ブログを参照してください。
[root@secondary ~]# tcpdump -i eth0 host 192.168.122.16 and port 53 -w dns.pcap
セカンダリーサーバのnamedを起動したらすぐにゾーン転送が行われるようにするため、セカンダリーサーバの/var/named/slaves配下のゾーンファイルを削除します(もし存在していたら)。以下の実行例では、ゾーンファイルが存在しないことがわかります。
[root@secondary ~]# ls /var/named/slaves/ [root@secondary ~]#
プライマリーサーバでnamedサービスを起動します。
[root@primary ~]# systemctl start named
セカンダリーサーバでnamedサービスを起動すると、ゾーン転送が開始されます。
[root@secondary ~]# systemctl start named
以下は、セカンダリーサーバからプライマリーサーバにゾーン転送を要求したときのWiresharkのキャプチャ画面です。Additional RRsが1となっていて、TSIGレコードが1つ追加されていることがわかります。また、TSIGレコードのMACフィールドは、DNSメッセージの完全性/真正性を実現するために使用されます。





