PowerDNSを使ってDNSSECに対応

CentOS5.5の環境でPowerDNSを利用してDNSSECに対応する。
Bindを利用したDNSSECの方法はいろいろ検索して出てくるが、PowerDNSについては見つからなかったのでその方法をメモしておく。

DNSSEC対応出来たかチェックするためにdigコマンドを用いるが、標準パッケージでは+sigchaseオプションが利用できない(DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3)。その為、bindをソースからインストールする。

# wget http://ftp.isc.org/isc/bind9/9.7.2-P3/bind-9.7.2-P3.tar.gz
# tar zxvf bind-9.7.2-P3.tar.gz
# cd bind-9.7.2-P3
# ./configure --disable-openssl-version-check STD_CDEFINES="-DDIG_SIGCHASE=1"
	※sigchaseオプションを有効にする
# make
# make install
	※新しいバージョンが/usr/local/bin/digにインストールされる。
# hash -r

既存のPowerDNSのDB(pdns)のバックアップを取得して、別途pdnssec DBにリストアする

# mysqldump -p DB名 > pdnssec.sql
# wget http://wiki.powerdns.com/trac/browser/trunk/pdns/pdns/dnssec.schema.mysql.sql
# mysqladmin -p create pdnssec
# mysql -u root -p pdnssec < dnssec.schema.mysql.sql
    ※DNSSEC用スキーマの追加

PowerDNSは3.0からDNSSECに対応しているが、リポジトリに登録されていない。ソースからインストールする場合、Boostライブラリのあたらし目のバージョンが必要だが、これもリポジトリにない。面倒なので、PowerDNSの配布元がライブラリをstaticリンクしたパッケージを公開しているので、それを利用する。
※すでにPowerDNS+MySQLにて運用している前提で記載してあります。

# wget http://powerdnssec.org/downloads/packages/pdns-static-3.0pre.20110207.1990-1.i386.rpm
# rpm -ivh --force pdns-static-3.0pre.20110207.1990-1.i386.rpm
    ※既存のpdnsパッケージと競合するので強制的にインストールする。
# rpm -qlp pdns-static-3.0pre.20110207.1990-1.i386.rpm
/etc/init.d/pdns
/etc/powerdns
/etc/powerdns/pdns.conf
/usr/bin/pdns_control
/usr/bin/pdnssec
/usr/bin/zone2sql
/usr/man/man8/pdns_control.8
/usr/man/man8/pdns_server.8
/usr/man/man8/zone2sql.8
/usr/sbin/pdns_server

# cd /etc/powerdns
# cp /etc/pdns/pdns.conf /etc/powerdns/pdns.conf
    ※既存の設定ファイルで上書き
# vi pdns.conf
launchの箇所にgmysql-dnssecを追加し、DB名を変更する。
ここから-------
gmysql-dbname=pdnssec
gmysql-dnssec
ここまで-------

必要であれば、MySQLの接続権限を追加する。
# mysql -p
GRANT SELECT,INSERT,UPDATE,DELETE ON pdnssec.* TO 'DB接続ユーザID'@'localhost';
FLUSH PRIVILEGES;
quit

またPowerAdminを使っているのであれば、接続先DB名を変える。

# /etc/init.d/pdns stop
# /etc/init.d/pdns start

どうもgmysql-dnssecを有効にした場合、以下で行うpdnssec secure-zone コマンドを実行するまでは、digなどでレコードが取得できなくなる模様。
※pdnssec secure-zoneコマンドはKSKと2つのZSKをドメインに追加するコマンド

# pdnssec secure-zone furelo.jp
# dig +dnssec -t A furelo.jp @localhost
  ※RSSIGレコードがAレコードの他に返ってくることを確認する。
# pdnssec export-zone-dnskey furelo.jp 1 | grep DNSKEY > trusted-keys
  ※KSK(Key Signing Key)をエクスポートする。
# dig +dnssec +sigchase +trusted-key=./trusted-keys -t A furelo.jp @127.0.0.1
  ※理解していないが、以下のようにsuccssと出たのでOKと思われる。
;; WE HAVE MATERIAL, WE NOW DO VALIDATION
;; VERIFYING CNAME RRset for www.furelo.jp. with DNSKEY:64131: success
;; OK We found DNSKEY (or more) to validate the RRset
;; Ok, find a Trusted Key in the DNSKEY RRset: 38374
;; VERIFYING DNSKEY RRset for furelo.jp. with DNSKEY:38374: success

;; Ok this DNSKEY is a Trusted Key, DNSSEC validation is ok: SUCCESS

今後、レコードを修正したら、以下の2つのコマンドを実行しないと、反映されない。

# pdnssec check-zone furelo.jp
# pdnssec rectify-zone furelo.jp

レジストラがDNSSEC未対応のため、JPドメインにはまだ登録出来ないので、
代わりにISC DLV Registryに登録を行ってみる。

先ほど作成した trusted-keysの内容をDNSKEY Recordsとして登録する。
登録したら、TXTレコードに登録する内容が表示されるので、DNSレコードに登録する。

pdnssecコマンドのヘルプ:

# pdnssec -h
Usage:
pdnssec [options] [show-zone] [secure-zone] [rectify-zone] [add-zone-key] [deactivate-zone-key] [remove-zone-key] [activate-zone-key]
         [import-zone-key] [export-zone-key] [set-nsec3] [set-presigned] [unset-nsec3] [unset-presigned] [export-zone-dnskey]

activate-zone-key ZONE KEY-ID   Activate the key with key id KEY-ID in ZONE
add-zone-key ZONE [zsk|ksk]     Add a ZSK or KSK to a zone
  [bits] [rsasha1|rsasha256]    and specify algorithm & bits
check-zone ZONE                 Check a zone for correctness
deactivate-zone-key             Dectivate the key with key id KEY-ID in ZONE
export-zone-dnskey ZONE KEY-ID  Export to stdout the public DNSKEY described
export-zone-key ZONE KEY-ID     Export to stdout the private key described
import-zone-key ZONE FILE       Import from a file a private key, ZSK or KSK
                [ksk|zsk]       Defaults to KSK
rectify-zone ZONE               Fix up DNSSEC fields (order, auth)
remove-zone-key ZONE KEY-ID     Remove key with KEY-ID from ZONE
secure-zone                     Add KSK and two ZSKs
set-nsec3 ZONE 'params' [narrow]     Enable NSEC3 with PARAMs. Optionally narrow
set-presigned ZONE              Use presigned RRSIGs from storage
show-zone ZONE                  Show DNSSEC (public) key details about a zone
unset-nsec3 ZONE                Switch back to NSEC
unset-presigned ZONE            No longer use presigned RRSIGs
カテゴリー: DNSSEC タグ: , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)