~BINDをchroot化・DNSSEC/TSIGで強化~
目次
🧭 はじめに
DNSサーバーは外部からの攻撃対象になりやすいため、セキュリティ強化が必須です。この記事では、BINDを使ったセキュアなDNSサーバーの構築方法として、以下の4点を中心に解説します:
- chroot環境でのBIND実行
- 安全なデータ転送(TSIG)
- DNSSECの導入
- DANEの概要と使い方
🏗️ 1. BINDをchrootで実行する
🔒 chrootとは?
chroot(change root)は、プロセスがルートディレクトリとして認識するパスを変更し、外部から隔離する仕組みです。これにより、仮にBINDが侵害されても、システム全体への影響を抑えられます。
✅ セットアップ手順(例:/var/named/chroot)
パッケージのインストール
sudo yum install bind-chroot -y # RHEL系
chrootディレクトリ構成
/var/named/chroot/
├── etc/named.conf
├── var/named/
└── dev/null(← 手動で作成する必要あり)
dev/nullの作成(重要)
sudo mknod /var/named/chroot/dev/null c 1 3
sudo chmod 666 /var/named/chroot/dev/null
namedの起動(chroot版)
sudo systemctl start named-chroot
sudo systemctl enable named-chroot
🔄 2. forwardersによる構成分割
BINDのnamed.confでは、外部DNSサーバーへの問い合わせを中継する「フォワーダー」を設定できます。構成分割によって管理性・応答速度の向上、キャッシュDNSのセキュリティも強化されます。
🔧 named.confの例
options {
forwarders {
8.8.8.8;
1.1.1.1;
};
forward only;
};
🔐 3. DNSSECによる信頼性向上
DNSSECとは?
DNSSEC(Domain Name System Security Extensions)は、DNS応答に電子署名を付加して改ざんを防ぐ仕組みです。
主なツール
| ツール | 機能 |
|---|---|
dnssec-keygen | 鍵ペアの作成(KSK/ZSK) |
dnssec-signzone | ゾーンファイルへの署名追加 |
🔧 設定例
# 鍵の生成(ZSK)
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com
# 鍵の生成(KSK)
dnssec-keygen -a RSASHA256 -b 4096 -n ZONE -f KSK example.com
# ゾーンへの署名
dnssec-signzone -o example.com -k Kexample.com.+008+KSK.key example.com.zone
ゾーンファイルに署名付きファイル(example.com.zone.signed)を使用するようnamed.confで指定します。
🤝 4. TSIG(Transaction Signature)
TSIGは、DNSサーバー間の通信に共有鍵による認証を加える方式です。ゾーン転送や動的更新の安全性を高めます。
TSIGキーの作成
tsig-keygen example-key > tsig.key
生成されたtsig.keyファイルには以下のような情報が含まれます:
key "example-key" {
algorithm hmac-sha256;
secret "base64encodedsecret==";
};
named.confでの設定例
key "example-key" {
algorithm hmac-sha256;
secret "base64encodedsecret==";
};
server 192.0.2.10 {
keys { example-key; };
};
zone "example.com" {
type master;
allow-transfer { key example-key; };
file "example.com.zone";
};
🧾 5. DANE(DNS-Based Authentication of Named Entities)
DANEは、TLS証明書の公開鍵情報をDNSSECを通じて配信する仕組みです。第三者CAに依存せず、自ドメインで証明情報を管理可能になります。
主なレコード
- TLSAレコード:TLS証明書のフィンガープリントをDNSSEC署名付きで公開
TLSAレコードの形式
_443._tcp.example.com. IN TLSA 3 1 1 <フィンガープリント>
🧩 まとめ
| 技術 | 概要 | 目的 |
|---|---|---|
| chroot | BINDを仮想的なルートに閉じ込めて隔離 | セキュリティ強化 |
| forwarders | 外部のDNSへ問い合わせを委任 | 管理・パフォーマンス改善 |
| DNSSEC | 応答データの署名と検証 | 改ざん防止 |
| TSIG | 鍵によるDNS通信の認証 | 転送や更新の安全性確保 |
| DANE | TLS証明書をDNSSECと連携して配信 | CA不要の安全な認証 |
コメント