サーバ側
まず、共通鍵認証を行うためには当然、共通鍵を作る必要がある。これは、手作業で行うこともできるが、自動的に生成させるのが簡単だ。FC5ではntpdのバージョンは、4.2なので、
ntp-keygen
というコマンドが入っているはずだ。このコマンドは基本的に、公開鍵認証を行うための秘密鍵と証明書を生成するためのものだが、-M
オプションをつけて実行すると、16個の共通鍵が自動的に生成される。鍵や証明書は、/etc/ntp
に生成されるので、rootで作業する必要がある。# ntp-keygen -M # cd /etc/ntp # ls keys ntpkey_cert_ntpserver.localnet ntpkey_host_ntpserver.localnet ntpkey_MD5key_ntpserver.localnet.3533248690 ntpkey_MD5_ntpserver.localnet ntpkey_RSAkey_ntpserver.localnet.3533248690 ntpkey_RSA-MD5cert_ntpserver.localnet.3533248690 ntpservers step-tickersこの
ntpkey_*
が新たに生成されたもの。ファイルスタンプを時刻を表す整数として、ntpkey_*_ホスト名.ファイルスタンプ
の形式になっているものが実ファイル。そうでないものは、それらに対するシンボリックリンクだ。これらのファイルは、所有者rootで、パーミッションを600にしておいた方が無難だ。# chown root.root ntpkey_* # chmod 600 ntpkey_*この内、共通鍵認証に使うの共通鍵ファイルは、
ntpkey_MD5key_*
。既存の共通鍵ファイルを退避し、代わりにこのファイルに対するシンボリックリンクを作成する。# mv keys keys.org # ln -s ntpkey_MD5_ntpserver.localnet keys以上で共通鍵の生成は終了だ。なお、この共通鍵ファイルの中身は、次のようになっているはずだ。
# ntpkey_MD5key_ntpserver.localnet.3533248690 # Mon Feb 12 11:04:55 2007 1 MD5 Vbevc\~F{3Yg(p6 # MD5 key 2 MD5 dPw#mEg+9=yc5Y] # MD5 key <<略>> 10 MD5 ;XlkqE~Q2Uc#*&2 # MD5 key <<略>> 15 MD5 lF943;ZrNNVHqYw # MD5 key 16 MD5 XKw$i#m%.TQ]lD" # MD5 key「
#
」から行末までは、お馴染みの通り無視されるつまり、コメント。各行は、空白区切りのカラムから成っている。第一カラムは、鍵識別子(key identifier)。1から65,535までの整数を指定する。第二カラムは、鍵形式(key format)。現在のバージョンでは、MD5
だけが許されている。第三カラムは、鍵そのもの。16文字以下の印刷可能文字列を指定する。この文字列には、空白および「#
」を含めてはいけない。次に、
/etc/ntp.conf
の変更。FC5では、共通鍵ファイルを指定するkeys
コマンドは既に記述されているはず。それに加えて以下の太字の部分を追加する。keys /etc/ntp/keys
trustedkey 10
ここで、trustedkey
コマンドに続けた引数10
は、keys
コマンドで指定した共通鍵ファイル中の鍵識別子。ここで指定した鍵識別子で指定した鍵のみが時刻同期時の認証で有効。鍵を複数指定する場合は、鍵識別子を空白で区切って並べる。設定変更を終えたら、ntpdを再起動する。# service ntpd restart
なお、コマンド
ntp-keygen
を実行した際に、「RAND_load_file /root/.rnd not found or empty」といったようなメッセージが出力され、鍵を生成できない場合がある。これは、メッセージの通り、/root/.rnd
を以下のように生成すればよい。# dd if=/dev/urandom of=/root/.rnd bs=1024 count=1 1+0 records in 1+0 records out 1024 bytes (1.0 kB) copied, 0.240445 seconds, 4.3 kB/s #
クライアント側
まず、共通鍵ファイル
/etc/ntp/keys
を準備する。鍵は、サーバと同じのものを準備する必要がある。上のサーバの例では、鍵識別子10の鍵だけが有効になっているので、クライアント側の共通鍵ファイルには、少なくともこの鍵をコピーしておく必要がある。逆に言えば、他の鍵はコピーしておく必要はない。むしろ、セキュリティの観点から言えば、コピーしない方がいいだろう。共通鍵ファイルの内容は、以下の通り。10 MD5 ;XlkqE~Q2Uc#*&2 # MD5 keyこのファイルは、所有者をrootにして、パーミッションを600にしておく。
# cd /etc/ntp # chown root.root keys # chmod 600 keys
次に、
/etc/ntp.conf
を変更する。クライアント・サーバで鍵識別子10を使用するとしよう。認証なしでサーバと時刻同期が取れているなら、server
コマンドのオプションとして、key 10
を付ける。また、trustedkey
コマンドにやはり鍵識別子10を指定する。server 192.168.55.133 key 10 keys /etc/ntp/keys trustedkey 10
設定変更を終えたら、ntpdを再起動する。
# service ntpd restart
確認
クライアント側で
ntpq
を起動し、peer
コマンドを使って確認すればよい。ただし、時刻同期は即時に行われるとは限らない。以下の実行例は、ntpdを再起動してしばらくたった後のものであることに注意して欲しい。正常に動作している場合は、次のようになるはずだ。
# ntpq ntpq> peer remote refid st t when poll reach delay offset jitter ============================================================================== *ntpserver.local 209.132.176.4 2 u 531 1024 377 10.367 3.617 4.396 LOCAL(0) LOCAL(0) 10 l 5 64 377 0.000 0.000 0.001 ntpq>もし、クライアント側で
trustkey
コマンドを追加していないか、鍵識別子を間違っているなどの問題があった場合は、次のような表示になる。ntpq> peer remote refid st t when poll reach delay offset jitter ============================================================================== ntpserver.local .NKEY. 16 u - 64 0 0.000 0.000 4000.00 LOCAL(0) LOCAL(0) 10 l 2 64 1 0.000 0.000 0.001 ntpq>上の実行例で、
refid
が.NKEY.
になっていることに注目して欲しい。この場合、syslogには、次のようなメッセージが記録されているはずだ。Feb 14 17:28:43 ntpclient ntpd[16217]: transmit: key 10 not found for 192.168.55.133
一方、サーバとクライアントの鍵識別子の指定が違っている場合、例えば、サーバ側では鍵識別子11を、クライアント側では鍵識別子10を指定しているような場合は、
ntpq> peer remote refid st t when poll reach delay offset jitter ============================================================================== ntpserver.local .INIT. 16 u - 64 0 0.000 0.000 4000.00 *LOCAL(0) LOCAL(0) 10 l 59 64 37 0.000 0.000 0.001 ntpq>のように、
refid
が.INIT.
、stratumが最大値の16になる。第一回:『NTP認証: ユニキャスト・共通鍵認証篇』
第二回:『NTP認証: ブロードキャスト・共通鍵認証篇』
第三回:『NTP認証: ntp-keygenコマンドとX.509証明書』
第四回:『NTP認証: ユニキャスト・公開鍵認証篇』
第五回:『NTP認証: マルチキャスト・共通鍵認証篇』
0 件のコメント:
コメントを投稿