いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.206 / 読者数:1897名

こんばんは、うすだです。

前回発行した直後、つまり世間がお盆休みに入る前に、 家族で1泊の旅行へ行ってまいりました。

さて、我が家には、オカメインコのビーちゃんがいます。小鳥とはいえ、 ペットですので連れていくわけにはいきません。

というわけで、今回、初めてのお留守番となります。心配なので、 ライブカメラもどきを設置し、ケータイから監視できるように仕込みました。

といっても、ただ単に、cron で毎分、カメラで撮影した画像をサーバに置くだけ、 という超シンプル超低スペックなものです。

それだけのものなのに、家を出てから数分で止まってしまいました。
結局、それから一度も復旧することなく、心配なわれわれは、 予定を早めに切り上げて帰ってきてしまいました。

腑に落ちないのは、更新されなかった原因が未だにわからないことです。
ネットワークやカメラの接続に問題はなく、 撮影も動作し画像も作成されていたのですが、なぜか、 それをサーバに置きにいっていませんでした。

まだまだまだまだ修行が足りないなあ…と思った2日間でした。

休日らしい休日が終わったので、心機一転、はりきってまいりますよー。

今回のお題 - DNSSEC を設定してみる

前回は、DNSSEC のさわりを、さらっとご紹介しました。

Vol.205 - DNSSEC を体験してみる
http://www.usupi.org/sysad/205.html

今回は、実際に設定をしてみたいと思います。
また、前回説明できなかった、NSEC と NSEC3 について、 さらっと説明をさせていただきます。

さらっとおさらい

DNSSEC に関しては、自分でも、どうだったっけ? と思うことがありますので、 超早回しでおさらいをします。

  • DNSSECは、公開鍵暗号技術を使って、ゾーン情報に署名する運用方式
    ゾーン情報が、管理者により作られ、正しいを検証可能としている
  • DNSSEC では、KSK と ZSK の2つの鍵を使う
    どちらも DNSKEYレコードに公開鍵がある (KSK=257, ZSK=256)
  • KSK は ZSK を、ZSK はゾーン情報を署名するための鍵
    ZSKで署名した情報は RRSIGレコードにある
  • DSレコードは KSK のハッシュ値であり、親ゾーンに置いてもらうことで、 信頼できるというお墨付きを得る (信頼の連鎖)
  • ルートの KSK に関しては、 named.confのmanaged-keysステートメントに登録することで、信頼する (トラストアンカー)

おおざっぱすぎてわからないと嘆く貴兄は、前号をご確認ください。

ゾーンを DNSSEC 対応にする(仮)

ひとんちのゾーン情報を見ているだけでは、実感が沸きませんよね。
というわけで、自前のゾーンを DNSSEC 対応にしてみましょう。
といっても、今回はお試しですので、閉じた環境で行っております。

まず、KSK と ZSK を作成します。 そのためには dnssec-keygen コマンドを使用します。 以下のように、「-a」オプションでアルゴリズムを、 「-b」オプションで鍵の大きさ(ビット数)を、「-n」オプションでゾーンの鍵を、 KSK の場合は「-f KSK」をつけ、最後にゾーン名を指定して実行します。

  # dnssec-keygen -f KSK -a RSASHA256 -b 4096 -n zone local.usupi.org
  Generating key pair...
  Klocal.usupi.org.+008+32917
  # dnssec-keygen -a RSASHA256 -b 1024 -e -n zone local.usupi.org
  Generating key pair...
  Klocal.usupi.org.+008+52877

KSK よりも ZSK の方を定期的に変更する必要がありますので、 ZSK の方の鍵を短めに設定しています。

ただ、上記を実行してみるとわかりますが、すごーく時間がかかります。
これは、/dev/random を使用しているためです。 乱数として使える事象を必要としますので、 キーボードやマウスを頻繁に使うなどする必要があります。

ですので、もし、とりあえず試すだけだからすぐに生成したいという貴兄は、 「-r /dev/urandom」をつけて上記を実行してください。

 

さて、上記を実行しますと、以下のファイルが生成されます。
(KSK と ZSK の2種…つまり合計4つのファイルができているはずです。)

  Kゾーン名+アルゴリズムの番号+ID.key
  Kゾーン名+アルゴリズムの番号+ID.private

前者が DNSKEY レコードで登録する公開鍵、後者が署名に使用する秘密鍵です。

次は、後者を使って、ゾーン情報に署名をしてみたいと思います。
その前に、まずゾーンファイルを持ってきて、 以下の行を追加することで DNSKEY レコードを追加します。
(SOA レコードのシリアル番号の更新も、忘れずに行いましょう。)

  $INCLUDE "Klocal.usupi.org.+008+32917.key"
  $INCLUDE "Klocal.usupi.org.+008+52877.key"

ここで指定しているファイル名は、dnssec-keygen が生成した公開鍵の方のファイルです。 ですので、いままさに試されている貴兄は、 実際に生成されたファイル名を指定してください。

追加したら、間違いがないか named-checkzone コマンドで確認します。
以下は、ゾーンファイル名が db.local.usupi の場合の実行例です。

  # named-checkzone local.usupi.org db.local.usupi
  zone local.usupi.org/IN: loaded serial 2011082100
  OK

問題なければ、いよいよ署名です。それには、dnssec-signzone コマンドを実行します。 「-o」オプションでゾーン名を指定しています。

  # dnssec-signzone -o local.usupi.org db.local.usupi
  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.local.usupi.signed

問題なければ、ゾーンファイル名.signed というファイルが作られます。
これが署名されたゾーンファイルです。中身を見ると、 RRSIG レコードが各所に追加されていることがわかります。

また、dsset-ゾーン名 というファイルも作成されます。
こちらは、親ゾーンに登録してもらう DS レコードが記載されたファイルです。
いまはお試しでやっていますが、そうではなく、 実際に親ゾーンに登録してもらえる環境にあるなら、これを登録してもらってください。

あとは、named.conf に登録されているゾーンファイルを変更して、 named を再起動するだけです。
まずは、ゾーンの設定のところで、署名したファイルを指定します。

  zone "local.usupi.org" {
      type master;
      file "db.local.usupi.signed";
      ...後略...
  };

そして、named を再起動します。

  # named-checkconf || echo NG
  (NG とか出力されたら、named.conf を見直してください)
  # service named restart  (FedoraやCentOSの場合)
  # service bind9 restart  (UbuntuやDebianの場合)

 

前回同様、「+dnssec」をつけて dig コマンドで問い合わせてみますと、 RRSIG レコードなどの情報が確認できます。

  $ dig +dnssec www.dnssec.jp
  ...中略...
  ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5

  ;; OPT PSEUDOSECTION:
  ; EDNS: version: 0, flags: do; udp: 4096
  ;; QUESTION SECTION:
  ;www.local.usupi.org.           IN    A

  ;; ANSWER SECTION:
  www.local.usupi.org.  86400     IN    A      192.168.1.80
  www.local.usupi.org.  86400     IN    RRSIG  A 8 4 86400 ...
  ...後略...

ただし、flags: のところに「ad」がありません。
これは、親ゾーンに DS レコードが登録されていないためです。
そこで、named.conf のtrusted-keysステートメントに、 local.usupi.org の KSK を書いてみたのですが、 それでも「ad」フラグはつきませんでした。

  trusted-keys {
      local.usupi.org. 257 3 8 "AwEAAaly+fXS/Qi...中略...";
  };

…うーん、中途半端で申し訳ありません。
またわかったらご紹介したいと思います。

NSEC, NSEC3 について

あと、説明してなかった、NSEC と NSEC3 レコードについて説明します。

当たり前なことではありますが、 各種情報に署名をして正しいことを検証可能にしたのが DNSSEC です。
では逆に、情報が存在しないことを検証可能にするには、どうすればいいのでしょうか。

という疑問に答えるのが、NSEC と NSEC3 レコードです。

NSEC レコードでは、アルファベット順(ASCIIコード順)で次の名前を記載して、 その間には何も情報がないことを示します。
NSEC レコードの例を以下に示します。

  bar.local.usupi.org.  IN NSEC  foo.local.usupi.org A RRSIG NSEC

bar.local.usupi.org の次は foo.local.usupi.org で、 その間には情報がないことを示しています。
また、bar.local.usupi.org には A, RRSIG および NSEC レコードが存在することを示しています。

例として、前述で作成した local.usupi.org に対して、問い合わせしてみた結果が、 以下です。

  $ host -t nsec local.usupi.org.
  local.usupi.org has NSEC record ns.local.usupi.org. A AAAA ...
  $ host -t nsec ns.local.usupi.org.
  ns.local.usupi.org has NSEC record test0.local.usupi.org. ...
  ...中略...
  $ host -t nsec test3.local.usupi.org.
  test3.local.usupi.org has NSEC record www.local.usupi.org. ...
  $ host -t nsec www.local.usupi.org.
  www.local.usupi.org has NSEC record local.usupi.org. A ...

local.usupi.org → ns.local.usupi.org → test0.local.usupi.org → ...中略... → test3.local.usupi.org → www.local.usupi.org と来て、 最後に local.usupi.org に戻ってきました。

つまり、情報があるのはこれらだけ、ということがわかります。

 

…ただ、この方法ですと、そのゾーンのすべての情報が得られますので、 ゾーン転送を許しているのと実質変わらないことになってしまいます。

そこで、NSEC3 レコードでは、ドメイン名をそのまま使わず、 ハッシュ値で確認するようになっています。

たとえば、dnssec.jp の場合、NSEC3 は以下のようになっています。
(ちなみに、host -t nsec3 とかでは引けませんでした。)

  $ dig +dnssec dnssec.jp
  ...中略...
  07K7Q3H393N30KGCCB8M6T371D84HHBJ.dnssec.jp. 507 IN NSEC3 1 0 10 D4 \
  0N7VEMBA2L4TE7JP0DHJKBJKRD3AVIA4 A NS SOA MX TXT RRSIG DNSKEY \
  NSEC3PARAM
  ...後略...

NSEC3 の後の値は、ハッシュアルゴリズム(1=SHA1)、フラグ(Opt-Out)、 繰り返し(10回)、ソルト(D4)、次のドメイン名のハッシュ値(0N7VE...)、 dnssec.jp が持つリソースレコード(A, NS, SOA, ...)、となります。

NSEC3PARAM レコードは、上記のうちの最初の4つが登録されています。

  $ host -t nsec3param dnssec.jp
  dnssec.jp has NSEC3PARAM record 1 0 10 D4

で、ハッシュ値ですが、nsec3hash というコマンドで求められます。
ソルト、ハッシュアルゴリズム、繰り返しとドメイン名を指定します。

  $ nsec3hash D4 1 10 dnssec.jp
  07K7Q3H393N30KGCCB8M6T371D84HHBJ (salt=D4, hash=1, iterations=10)

前述の NSEC3 の最初の値と一致することがわかります。
つまり、問い合わせるときは、ドメイン名のハッシュ値に、 ドメイン名を付加したものを使用します。

ですが、次のハッシュ値 0N7VEMBA2... がどのドメイン名を表すのかは、 ドメイン名を知らないとわからない、という具合になっています。
(わたしは知らないので、これ以上はたどれませんでした。スミマセン。)

おわりに

以上、ゾーンを DNSSEC 対応にしたり、 NSEC や NSEC3 の概要をさらっとご紹介したりしました。

他にも、DLV(DNSSEC Lookaside Validation)という、今回のお試しのような、 ルートからたどれないドメインでも信頼してもらう仕組みがあったりするのですが、 余力がなくてご紹介できませんでした。

DNSSEC に関する状況は、今後も変わっていく可能性があります。
ですので、基礎をしっかり固めて、 定期的に追いかけていく必要があるのではないかと思います。

宿題の答え

前回の宿題は、

  他のドメインの DNSSEC の対応具合などを確認してみましょう。

でした。

起点としては、アクセス数の多いサイトからでしょうか。
というわけで、以下を参考に、調べてみました。

Alexa - Top Sites in Japan
http://www.alexa.com/topsites/countries/JP

で、かたっぱしから確認してみたのですが、以下のように、箸にも棒にもかかりません。

  $ host -t dnskey yahoo.co.jp.
  yahoo.co.jp has no DNSKEY record
  $ host -t dnskey google.co.jp.
  google.co.jp has no DNSKEY record
  $ host -t dnskey fc2.com.
  fc2.com has no DNSKEY record
  $ host -t dnskey youtube.com.
  youtube.com has no DNSKEY record
  $ host -t dnskey google.com.
  google.com has no DNSKEY record
  $ host -t dnskey ameblo.jp.
  ameblo.jp has no DNSKEY record
  $ host -t dnskey rakuten.co.jp.
  rakuten.co.jp has no DNSKEY record
  ...

よく考えたら、たくさんのひとに利用されているので、 たやすく DNSSEC を導入するわけにもいかないんじゃないか、と思いました。

では、DNSSEC やセキュリティに深く関連するサイトを、 思いつくままに調べてみたところ、少なくとも以下のドメインに DNSKEY がありました。

  iana.org.
  icann.org.
  ripe.net.
  mozilla.org.
  jprs.jp.
  iij.ad.jp.

あとは、地道に host コマンドなどで引っ張ってくるだけです。
例として、mozilla.org に対して行った一連の作業を、以下に示します。

  [ネームサーバを確認]
  $ host -t ns org.
  org name server a0.org.afilias-nst.info.
  org name server d0.org.afilias-nst.org.
  org name server a2.org.afilias-nst.info.
  ...中略...
  $ host -t ns mozilla.org.
  mozilla.org name server ns1.mozilla.org.
  mozilla.org name server ns2.mozilla.org.
  mozilla.org name server ns3.mozilla.org.

  [orgのネームサーバに mozilla.org の DS を聞く (知ってる)]
  $ host -r -t ds mozilla.org. a0.org.afilias-nst.info.
  Using domain server:
  Name: a0.org.afilias-nst.info.
  Address: 199.19.56.1#53
  Aliases:

  mozilla.org has DS record 51618 7 1 B996ED047EF73B9CF9342491...

  [orgのネームサーバに mozilla.org の DS を聞く (知らない)]
  $ host -r -t ds mozilla.org. ns1.mozilla.org.
  Using domain server:
  Name: ns1.mozilla.org.
  Address: 63.245.208.161#53
  Aliases:

  mozilla.org has no DS record

  [mozilla.org の DNSKEY を調べる]
  $ host -r -t dnskey mozilla.org. ns1.mozilla.org.
  ;; Truncated, retrying in TCP mode.
  Using domain server:
  Name: ns1.mozilla.org.
  Address: 63.245.208.161#53
  Aliases:

  mozilla.org has DNSKEY record 256 3 7 AwEAAcFXyRp5IafjNb1DYz...
  mozilla.org has DNSKEY record 257 3 7 AwEAAdtgEegkly09xLY+zl...
  mozilla.org has DNSKEY record 256 3 7 AwEAAbS5ecawRegQvvSpN3...

  [mozilla.org の RRSIG を調べる]
  $ host -r -t rrsig mozilla.org. ns1.mozilla.org.
  ;; Truncated, retrying in TCP mode.
  Using domain server:
  Name: ns1.mozilla.org.
  Address: 63.245.208.161#53
  Aliases:

  mozilla.org has RRSIG record SOA 7 2 600 20110919030314 ...
  mozilla.org has RRSIG record SOA 7 2 600 20110919030349 ...
  mozilla.org has RRSIG record NS 7 2 600 20110919030457 ...
  mozilla.org has RRSIG record NS 7 2 600 20110919030829 ...
  mozilla.org has RRSIG record DNSKEY 7 2 600 20110919030308 ...
  ...後略...

…とまあ、やってることはたいしたことないのですが、 面倒といえば面倒な作業と言えなくもないです。

実は、これらをすぱっと自動的にやってくれるサイトがあります。
しかも、図で表してくださいますので、非常にわかりやすいです。

DNSViz | A DNS visualization tool
http://dnsviz.net/

実行結果を PNG や SVG でダウンロードもできますので、 興味のある方は試してみてくださいませ。

ちなみに、タイムリーなことに、情報処理学会の9月号の会誌に、 DNSSEC の解説が載っておりまして、上記はそこからの情報です。
情報処理学会の会員の方は、ちらっと目を通してみてください。

今回の宿題

今回の宿題は、

  digコマンドで得られるフラグについて調べましょう。

です。

さらっと「ad」フラグが必要とかなんとか書きましたが、詳細について、 これっぽっちも説明していませんでした。

Googleさまや関連する RFC などを参照して、 フラグのそれぞれの意味を調べておきましょう。

あとがき

会社では、毎朝、だれかが1分間スピーチをすることになっています。

つい先日、とうとうその番がわたしに回ってきまして、組織には多様性が必要ですよね、 という内容を、緊張しまくってかみまくりながら、 恐らく1分をはるかに越える時間で述べさせていただきました。

さて、個人の場合、組織に対する多様性に該当するものはなんなんだろうかという疑問が、 スピーチを終えてほっとしてから沸いてきました。

この土日にこのメルマガを書きながら思ったことは、結局のところ、 個人の中での多様性というのは「変化」なのではないかという、 とってもありきたりな考えに、以下を拝見して到着した次第です。

[名言] 知的能力に必要なのは、休息ではなく変化 [名言コツコツ]
http://meigen.ko2ko2.net/2011/08/1195.html

一定のところまで来ると、 ここまでやったんだからと思って安定を望んでしまいがちです。ですが、 上記にあるように、知的能力は疲れないので、新しいことを始めつづけることで、 変化しつづけるべきだと思います。

そして、つい、やることリストに放り込んで、 リストをどんどん長くしてしまいがちですが、今後はリストに追加するのではなく、 すぐに実行するようにしようと思います。

そうすることで、体や脳が若返り、抜け毛が減ってくれるといいんだけどなあ… というのが、実は本音だったりするのですが…。
(諸悪の根源は睡眠不足だろうなと、薄々感じているのですけどね…。)

 

今回も、ここまで読んでいただき、たいへんありがとうございました。
次回は、9月4日(日) の未明にお会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」- 毎日早めに描くことで、よい感じになってきました。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本