SSブログ

Tomcat(Java)を使うとDNSの変更が反映されない件 [職]

メールサーバの変更に伴うDNSレコードの変更が反映されなかったのでメモ。

今回、メールサーバをリプレースした。
DNSがらみでトラブったのでご参考までに。

以下の例で説明しよう。

変更前サーバ:192.168.1.1 ホスト名:aaa
変更後サーバ:192.168.1.2 ホスト名:bbb

SMTPやPOPなどはDNS上ではCNAMEとして登録する。

DNSレコードの例(変更前)
aaa A 192.168.1.1
smtp IN CNAME aaa


DNSレコードの例(変更後)
aaa A 192.168.1.1
bbb A 192.168.1.2
smtp IN CNAME bbb


上記のように変更する事によって、クライアント側での変更を最小限にする。
DNSの変更を素早く反映させるために、TTLを短縮する(86400秒=1日を600秒=10分に変更)

この設定変更により一部のサーバを除いて無事に変更が反映された。
反映されなかった一部のサーバではTomcatが動いていたため、この辺に何か問題があるのではないかと思われた。

まず、基本的な知識として確認。
Linuxの場合、/etc/nsswitch.confの中でホスト名の探索順位が決められている。

例)hosts:      files dns

上記の例では、まず、ホスト上のファイル(/etc/hosts)を参照し、その後DNSによる探索を行う。
DNSの探索を行う際には/etc/resolv.confで指定したネームサーバに問い合わせを行う。

Windowsの場合
hostsファイルを参照し、その後、ネットワークのプロパティで指定したDNSサーバに問い合わせを行うのは同じである。
しかし、DNSサーバに問い合わせを行う前にリゾルバキャッシュを確認する。
このキャッシュの内容は以下のコマンドで確認できる。

# ipconfig /displaydns

参考

このキャッシュの保持期間だが、ポジティブキャッシュは1日(86400秒)、ネガティブキャッシュは15分(900秒)とのことである。

このため、OSレベル、ネットワークレベルではキャッシュが永続化する仕組みはないため、DNS変更が反映されるはずなのだが、Tomcat(Java)を使っているとTomcatの再起動をしないと反映されない。
色々調べた結果、Javaのプロパティのひとつ(networkaddress.cache.ttl )が影響している事が分かった。
このプロパティ、デフォルトでは-1となっており、「ずっとキャッシュ」する。

参考

この値を変更するには、java.securityというファイルの中で値を変更する。
ただし、変更にあたってはDNSスプーフィング攻撃に気をつけてねということらしい。

結局、消極的対処としては従来通り、Tomcatを再起動すると言う方法が考えられる。
もう一つは、リスクを取ってこのプロパティ(networkaddress.cache.ttl)を変える。

というわけで、デフォルトではJava系を使っているサイトは再起動が必要になることは覚えておこう。


関連情報として、「DNS Rebinding」DNS攻撃手法というものが興味深い。
4年も前のものだけど全然知らなかった。勉強になります。

力石 健次 DNS rebinding attackの対策と考察


徳丸浩の日記 DNS rebinding

この元になっている論文はこちら。(あとで読む)

Collin Jackson et,al
Protecting Browsers from DNS Rebinding Attacks 
ACM CCS 07


タグ:DNS Java
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:[必須]
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。