DNSSECってよく聞くのだが、結局じぶんで環境を作ってみないとわかんねぇ。
ということで作ってみました。
DNSSECとは
DNSSECはDNSサーバから送られてくる名前解決(IPアドレスやホスト名)の情報の信頼性をセキュアにする拡張機能です。
DNSサーバとクライアント間で証明書を使うことにより、正当な回答をし、DNS応答の偽造、改ざんを防ぐことができます。
権威(root)サーバの設定
まずは、ゾーンの署名に使う鍵を作ります。
鍵は2種類あります。
- KSK(Key SigningKey)
ゾーン署名鍵ZSKに署名する鍵 - ZSK(Zone Signing Key)
ゾーンに署名するゾーン署名鍵
署名鍵をつくりには「dnssec-keygen」コマンドを使います。
今回は以下でオプションを使って作成しました。
- -f
→keyflag KSKを指定 - -a
→アルゴリズム RSASHA256を指定 - -b
→keyサイズ(bit) 4096bit - -n
→nametype ZONEを指定
それでは実際にコマンドを叩きます。
# dnssec-keygen -f KSK -a RSASHA256 -b 4096 -n zone v4.com Generating key pair.
このコマンドは時間がかなりかかります。
とりあえず速攻作成するには「-r /dev/urandom」オプションを使用する
※chroot配下の「/var/named」で作成!
以下はKSKとZSKの署名鍵を作成したコマンドです。
# dnssec-keygen -f KSK -r /dev/urandom -a RSASHA256 -b 4096 -n zone v4.com Generating key pair..........................++ .............++ Kv4.com.+008+62014 # dnssec-keygen -r /dev/urandom -a RSASHA256 -b 1024 -n zone v4.com Generating key pair.........++++++ .......................................++++++ Kv4.com.+008+53328
上記コマンドを実行すると以下ファイルが生成されます。
# ll 合計 36 -rw-r--r-- 1 root root 421 9月 4 18:22 2014 Kv4.com.+008+53328.key -rw------- 1 root root 1012 9月 4 18:22 2014 Kv4.com.+008+53328.private -rw-r--r-- 1 root root 941 9月 4 18:21 2014 Kv4.com.+008+62014.key -rw------- 1 root root 3316 9月 4 18:21 2014 Kv4.com.+008+62014.private
次に対象のゾーンファイルに作成した「key」を追記します。
※シリアル値の更新を忘れないこと!
# vim db.v4.com ; $TTL 1 @ IN SOA dns.jp. dnsadm.v4.com. ( 2014090401 ; Serial [yyyymmddhh] 3h ; Refresh[3h] 1h ; Retry [1h] 7d ; Expire [7d] 1d ) ; Minimum[1d] IN NS dns.v4.com. www IN A 4.4.4.4 dns IN A 10.50.0.1 $INCLUDE "Kv4.com.+008+53328.key" $INCLUDE "Kv4.com.+008+62014.key" ~
ゾーンファイルを更新後は該当のファイルにエラーがないかを確認します。
# named-checkzone v4.com db.v4.com zone v4.com/IN: loaded serial 2014090402 OK
署名作成
「dnssec-signzone」コマンド実施し、署名を作成します。
以下は、「-o」コマンドでzonefileを指名します。
# dnssec-signzone -o v4.com db.v4.com Verifying the zone using the following algorithms: RSASHA256. Zone signing complete: Algorithm: RSASHA256: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked db.v4.com.signed
「db.v4.com.signed」と「dsset-v4.com.」が作成されます。
# ll 合計 96 -rw-r--r-- 1 root root 421 9月 4 18:22 2014 Kv4.com.+008+53328.key -rw------- 1 root root 1012 9月 4 18:22 2014 Kv4.com.+008+53328.private -rw-r--r-- 1 root root 941 9月 4 18:21 2014 Kv4.com.+008+62014.key -rw------- 1 root root 3316 9月 4 18:21 2014 Kv4.com.+008+62014.private -rw-r--r-- 1 root root 4738 9月 4 18:42 2014 db.v4.com.signed -rw-r--r-- 1 root root 159 9月 4 18:42 2014 dsset-v4.com. 上記2つのファイルが作成される
署名済みのゾーンファイルは以下のようになってます。
DNSキーができていることがわかります。
# less db.v4.com.signed ; File written on Thu Sep 4 18:42:55 2014 ; dnssec_signzone version 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 v4.com. 1 IN SOA dns.jp. dnsadm.v4.com. ( 2014090403 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) 1 RRSIG SOA 8 2 1 20141004084255 ( 20140904084255 53328 v4.com. p+QlnDeiFm/XPTIPB/JCcUluJy5rfoxQeVKy p41gF9+srfBGSmQoBMv8VGL10gUM8tvSyY83 ---省略--- 1 DNSKEY 256 3 8 ( AwEAAbXa55rLbNHss1q+XvCuufD0GMOy5q68 0BNbbZxq4AGXSwKPK0o6UI1ry6fxPFRR4m9C ZDaH4k6ZKhFrnqiqxxt4NIZQHCJEPjv9jFar ---省略--- ) ; key id = 53328 1 DNSKEY 257 3 8 ( AwEAAaVkgIsZLnAGBUECdl8KKDiSB4kan7PZ 85BsurxVhjk3em1deM5vVNRys3MtPTvvCqPd WnyKULbobLYVFH7PnANkZaUX6RXtxEJ2zxSe Y0KzRrOA+To13sW8RE9UrM7rUb1f+YIerZUn GzHHtO10JlcXsikVWERKKvn0S7SUgQb3yacZ ---省略---
「named.conf」のタイプに「db.v4.com.signed」を記載します。
# vim /var/named/chroot/etc/named.conf zone "v4.com" IN { type master; file "db.v4.com.signed";
namedを再起動します。
# service named restart
エラーが吐かれていないか確認しましょう。
# named-checkconf || echo NG ※NGが出なければOK
dnssecが書かれているか確認します。
# dig +dnssec v4.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> +dnssec v4.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8539 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;v4.com. IN A ;; AUTHORITY SECTION: v4.com. 1 IN SOA dns.jp. dnsadm.v4.com. 2014090403 10800 3600 604800 86400 v4.com. 1 IN RRSIG SOA 8 2 1 20141004084255 20140904084255 53328 v4.com. p+QlnDeiFm/XPTIPB/JCcUluJy5rfoxQeVKyp41gF9+srfBGSmQoBMv8 v4.com. 86400 IN NSEC dns.v4.com. NS SOA RRSIG NSEC DNSKEY v4.com. 86400 IN RRSIG NSEC 8 2 86400 20141004084255 20140904084255 53328 v4.com. IHsDJcD+iXxn5T4jgtH1x9UX82ZeiF683XVUyFVmFebZEgMJqgpuXcab ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Sep 4 18:56:17 2014 ;; MSG SIZE rcvd: 449
キャッシュサーバの設定
今回とはあまり関係ないですが、最新のrootゾーンの公開鍵は以下のURLにあります。
https://data.iana.org/root-anchors/
キャッシュサーバのname.confでdnssecを有効にします。
options { --省略-- dnssec-enable yes; dnssec-validation yes; --省略-- };
権威サーバ(root)のKSK公開鍵の入手する
まずは、以下コマンドでrootゾーンのKSK公開鍵を入手します。
# dig v4.com dnskey | grep -w 257 > root-ksk.key
KSK公開鍵からDSを生成します。
# dnssec-dsfromkey -2 root-ksk.key v4.com. IN DS 62014 8 2 B881DEB2487A8CEC1C463D0C54D9D04C5D5B6610FE5E835E36E2C8C75F63F7E2
name.confに上記で生成root-ksk.keyに書かれているDNSKEYの文字列をコピーし、trusted-keysに張り付けます。
trusted-keys { “.“ 257 3 8 "AwEAAbXa55rLbNHss1q+XvCuufD0GMOy5q68 ---省略--- s58bx7jnD0TzpmlCSzv2nIB7VL0KMcdV"; };
※managed-keysを設定している場合はコメントアウトし反映させないようにしてください。
options { //managed-keys-directory "/etc/managed-keys"; //managed-keys { //. initial-key 257 3 8 " // oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3 // LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO // Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc // LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= // "; //};
設定が終わったら、必ずnamedを再起動します。
# service named restart
キャッシュDNSでDNSSECが正常に動いているか確認
ここまでくれば、後はDNSSECがうまく動いているか確認するだけです。
「dig」コマンドで名前解決され、「ad」フラグが表示されれば完了です。
# dig @localhost www.v4.com ; <<>> DiG 9.9.3-P2 <<>> @localhost www.v4.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64641 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.v4.com. IN A ;; ANSWER SECTION: www.v4.com. 1 IN A 4.4.4.4 ;; AUTHORITY SECTION: v4.com. 1 IN NS dns.v4.com. ;; Query time: 9 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Sep 05 17:35:54 JST 2014 ;; MSG SIZE rcvd: 73
adがフラグで立っているぜぃ!
+DNSSECで確認した結果です。
# dig @localhost www.v4.com +dnssec ; <<>> DiG 9.9.3-P2 <<>> @localhost www.v4.com +dnssec ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39633 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;www.v4.com. IN A ;; ANSWER SECTION: www.v4.com. 1 IN A 4.4.4.4 www.v4.com. 1 IN RRSIG A 8 3 1 20141004084255 20140904084255 53328 v4.com. WcR0jMffQU/wxTONciN6/toVqMnsjQ8iPWWA1gU78W84bUU2Aat8jD6a ;; AUTHORITY SECTION: v4.com. 1 IN NS dns.v4.com. v4.com. 1 IN RRSIG NS 8 2 1 20141004084255 20140904084255 53328 v4.com. YAzU2UOHPx+jMMrSjNJPh+dfX8eAPfFv+9ao67f4m4aktnCNZDk2SOU/ ;; Query time: 6 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Sep 05 18:09:14 JST 2014 ;; MSG SIZE rcvd: 405
これで、DNSSECでの設定完了です!
以上です。
サーバーを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す