UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS BIND DNSSEC



■DNSSECとは?


DNSSEC(Domain Name System Security Extensions)とは、 DNSに対し、データ作成元の認証やデータの完全性を確認できるように仕様を拡張するものです。 DNSSECによって、データの偽装を検知することができるようになり、 DNSキャッシュポイズニングのような攻撃を防ぐことができます。

DNSSECでは、従来のDNSプロトコルに対し、DNS Public Key (DNSKEY)、 Resource Record Signature (RRSIG) 等のリソースレコードや、ADビット等のヘッダフラグが追加・修正されています。

データの作成元は、これらのレコードを用いて署名を行い、 また、データを参照する側のDNSリゾルバ(クライアント)は、 送られてきたデータの署名を検証することで、情報が正しいものかどうかを判断します。


JPNICより)



■BINDの設定


BIND9.7からはDNSSECに関する設定がデフォルトでほとんどされており、特別な手間を必要としません。DNSSECに必要な設定 は以下の2点です。

  • トラストアンカーの設定
  • DNSSECの有効化

BIND9.7からは上記2点ともデフォルトで有効になっておりますが該当箇所を確認していきます。まずDNSSECに関するnamed.confの設定について以下が該当箇所となります。

# vi /etc/named.conf
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";


デフォルトで上記のようになっていると思いますので特に意識しなくともDNSSECは有効ということになります。トラストアンカーについては/etc/named.iscdlv.keyで定義されておりこちらも特に意識する必要はありません。ちなみに中身は以下のようになっています。

$ORIGIN .
$TTL 0 ; 0 seconds
@ IN SOA . . (
15 ; serial
0 ; refresh (0 seconds)
0 ; retry (0 seconds)
0 ; expire (0 seconds)
0 ; minimum (0 seconds)
)
KEYDATA 20121122074635 20121121014556 19700101000000 257 3 8 (
AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ
bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh
/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA
JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp
oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3
LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO
Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc
LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
) ; key id = 19036
dlv.isc.org KEYDATA 20121121084634 20121121014603 19700101000000 257 3 5 (
BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn
4MxDCE1+lLy2brhQv5rN32RKtMzX6Mj70jdzeND4XknW
58dnJNPCxn8+jAGl2FZLK8t+1uq4W+nnA3qO2+DL+k6B
D4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5ymX4BI/o
Q+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte
/URkY62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw
/mRx/vwwMCTgNboMQKtUdvNXDrYJDSHZws3xiRXF1Rf+
al9UmZfSav/4NWLKjHzpT59k/VStTDN0YUuWrBNh
) ; key id = 19297

実際にdigコマンドで確認を行います。

# dig jprs.jp +dnssec

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.5 <<>> jprs.jp +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48625
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;jprs.jp. IN A

;; ANSWER SECTION:
jprs.jp. 86399 IN A 202.11.16.167
jprs.jp. 86399 IN RRSIG A 8 2 86400 20121215023007 \ 20121115023007 31944 jprs.jp. s5dBsoZIRQtiZ4+CVYzoNm43px7EgDvudYJ65Lxdp0FEv5weqnMJEj4p \ xn58I9PerqAOEnF6tc7fQU33ExB+RWaNXiUf+quGqPw3ZcAJsaWdZrn9 \ YeXk8ogP70BIIcgDyYMaDmlHNS0AXA0crIRXweNguMM9MH8Xi5+jd3uR Sgk=

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Nov 21 17:42:52 2012
;; MSG SIZE rcvd: 219


flagsのところで「ad」という文字列があればDNSSECは成功しています。DNSSECの運用上、以下の3つに注意する必要があります。


■時刻同期

時間が大幅にずれている場合、署名の検証等に失敗し名前解決が一切できなくなる可能性があるので注意してください。( DNSSECに限らず外部公開用サーバであれば時刻は正確に合わせておくべきですが )


■Port番号
DNSといえばポート番号はUDPの53という認識があると思いますが、実はTCPの53も比較的使われていたりします。基本的にはゾーン転送にTCP、クエリーにはUDPを使用しています。ただ、クエリーのUDPパケットはRFC上、512オクテットに制限されておりこのサイズを超えた場合はUDPからTCPに切り替わることもありますので、間にFIrewallがある場合は注意が必要です。


■時刻同期
通常のDNS運用と比較して、当然ながら色々な動作が増えますのでその分CPUやメモリなどで使用するリソースが多くなります。その辺りを考慮にいれても相当数のアクセスがなければ気にする必要はないと思いますが、一応頭に入れておいたほうが良いと思います。



 
 関連記事
 ●CentOS BINDのインストール
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.