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

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

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

のっけから、わたくしごとで恐縮と言いますか、宣伝で申し訳ないのですが、 CentOS6の本の執筆のお手伝いをしました。

CentOS 6で作るネットワークサーバ構築ガイド
http://www.amazon.co.jp/exec/obidos/ASIN/4798032484/usupiorg-22

といっても、書いたのはたくさんあるうちの3つの章だけです。
名義も「サーバ構築研究会」となっているので、 上記のページにわたしの名前はこれっぽっちも出てきません。

でも、本の最後の著者紹介には、ちゃんと名前が載っています。
3章だけとはいえ、苦しみながら書いたので、感慨深いです。

というわけで、本屋さんで見かけたら、著者の欄を見てください。
そして人類皆兄弟だと思ったら、レジまでお持ちください。:-)

ただ、この本、とてつもなく分厚いです。
本業を除けば初めての著書となる記念すべき本なのですが、 家に置き場所がないので、やむを得ず会社に置いています。…微妙に残念です。

直球な宣伝が終わりましたので、今回もはりきってまいりましょう。

今回のお題 - NTP をきちんと使ってみる

前回、ntpd をさらっと動かすところまでをご紹介しました。

Vol.215 - NTPで時刻を合わせる
http://www.usupi.org/sysad/215.html

今回は、実際に導入することを考慮して、必要と思われる設定について、 ちまちまとご紹介させていただきます。

restrict に関しては、一部訂正すべきところもありますので、お急ぎの貴兄も、 さらりと目を通していただけますと幸いです。

restrict の訂正と詳細

まずは、前回ご紹介した「restrict」の訂正をさせていただきます。

特に restrict の設定をしていなければ、 何も制限がかかっていない状態になっています。そして、 複数ある restrict のうち、最後にマッチした設定が有効になります。
そのため、ローカルホストだけ許可しようとして、以下の設定を加えたとしても、

restrict 127.0.0.1
restrict ::1

デフォルトが許可なので、 ローカルホスト以外も依然として許可した状態になっています。
ですので、デフォルトを拒否にするため、 最初に以下の設定を指定せねばならないと思います。

restrict default ignore

その上で、許可したい設定を後からじわじわ追加していきます。
ちなみに、「default」は、すべてのホストが該当する指定です。
その後の「ignore」は、すべての要求を無視するという指定です。 他にも以下のような指定があり、複数記述できます。
(実際にはもっとありますが、説明しきれないので割愛します。)

  • ignore
    すべての要求を無視します。
  • nomodify
    時刻や設定等の変更の要求を無視します。(時刻の問合せには答えます)
  • notrust
    認証が通っていない場合、要求を無視します。
  • nopeer
    お互いに同期をとりません。
  • noquery
    時刻の問合せ要求を無視します。

認証や peer に関しては、後述します。

…あ、言い忘れましたが、設定を変更した場合は、それを反映するため、 以下の手順で ntpd を再起動してください。(以降も同様です。)

  $ sudo service ntp restart    (Debian系の場合)
  # service ntpd restart        (RedHat系の場合)

peer でお互いに同期をとる

時刻の正確さもさることながら、組織内で時刻を合わせることも重要だと思います。 そんなとき、たとえば組織内で2台のNTPサーバを立てて、2台の間で同期をとる、 といったことも設定次第では可能です。

以降では、2台のサーバ間で同期をとる設定について説明します。
まず、同期をとるためには、以下の条件を満たす必要があります。

  • stratum が同じ。
  • 同じ上位のサーバを参照していない。

まず、stratum を指定するため、「fudge」という設定を、 たとえば以下のように記述します。

fudge 127.127.1.0 stratum 数値

「127.127.1.0」というのは、 自身のハードウェアクロックを参照するというNTP独自の表現です。
そして、stratum の後の数値には、stratum を指定します。

次に、お互いに同期をとるための「peer」という設定を追加します。
書式は以下の通りです。

peer 相手のIPアドレスかホスト名  [prefer]

prefer を指定すると、他にも peer の設定があったときに、この設定が優先されます。

たとえば、自分のstratumが 10 で、192.168.1.2 と peer の設定をするには、 以下の設定を追加します。

fudge 127.127.1.0 stratum 10
peer 192.168.1.2

設定を追加したら、ntpd を再起動します。

あとは、ntpq -p を実行して、きちんと届いているかなど確認します。
reach(8つの各ビットが届いたかどうかを示しています)や refid などを確認すればよいと思います。
(各項目の意味は、前回ご説明しましたので、そちらをご覧ください。)

  $ ntpq -p
       remote           refid  st t when poll reach   delay   offset  jitter
  ==========================================================================
  +ntp-b3.nict.go. .NICT.       1 u   12   64  377   10.356  -29.165  22.529
  *ntp-a2.nict.go. .NICT.       1 u    7   64  377    7.064  -13.200  12.995
  +ntp-a3.nict.go. .NICT.       1 u   17   64  377    8.264    4.962  22.049
  -192.168.1.2     10.0.0.2     2 u  118  256  377    0.115   -9.356   2.842

認証機能を使ってみる

時刻情報は重要です。ですが、NTPはUDPで通信しますので、 比較的簡単にパケットを詐称できてしまいます。
とはいえ、悪いひとからの嘘っぱちな時刻情報を鵜呑みにして、 システムの時刻を狂わせるわけにはいきません。

そこで、認証機能を使ってみましょう。
ここでは、一番簡単な、共通鍵暗号を用いる方法を示します。

まずはじめに鍵を生成します。そのために「ntp-keygen」というコマンドを実行します。 「-M」オプション付きで実行すると、MD5による共通鍵を10個ほど生成して、 以下のようにカレントディレクトリにファイルを生成してくれます。ですので、 実行の際にはやや注意してください。
(たとえば、/etc/ntp にそのファイルを置くなら、/etc/ntp で実行してください。 でないと変なところにファイルを作ってしまいます。)

  # ntp-keygen -M
  ...中略...
  # ls -l
  ...中略...
  -rw-r--r--. 1 root root 1064  3月  5 00:28 ntpkey_MD5key_ホスト名.数値
  lrwxrwxrwx. 1 root root   33  3月  5 00:28 ntpkey_md5_ホスト名 \
  -> ntpkey_MD5key_ホスト名.数値
  ...後略...

また、このファイルは極力秘密にしておく必要があるため、 root だけが参照できるようにしておきます。

  # chmod 600 ntpkey_MD5key_ホスト名.数値

ちなみに、中身はこんな感じです。
鍵のID、アルゴリズム、鍵データと並んでいます。

  $ cat ntpkey_md5_ホスト名
   1 MD5 O3hhQw-(]o^cVsSU7{[T  # MD5 key
   2 MD5 sCltLKNRxmRKqMQ(A77=  # MD5 key
   3 MD5 x0ED2NDgl_F9:j$>W\Ht  # MD5 key
   4 MD5 ]/Pi!oi_;nx[suR!(Z:Q  # MD5 key
  ...

次に、ntp.conf に以下の設定を追加します。
これは、時刻を参照される側のサーバも、参照する側のサーバも、 いずれにも必要な設定です。
追記: authenticate 云々は不要です。

authenticate yes
keys 上記で生成された鍵のファイル
trustedkey 使用する鍵のID

たとえば、鍵のファイルが /etc/ntp/keys で、使用する鍵のIDが 10 の場合、 以下を追加します。

authenticate yes
keys /etc/ntp/keys
trustedkey 10

さらに、時刻を参照する側は、相手のサーバを指定する server コマンドで、 以下のように鍵を明示的に指定します。

server サーバのIPアドレスかホスト名 key 使用する鍵のID

たとえば、時刻を参照するサーバが 192.168.1.2、 鍵のIDが 10 の場合は以下の設定を追加します。

server 192.168.1.2 key 10

そして、いつものように ntpd を再起動し、参照する側で ntpq -p にて確認します。 以下のように、reach で時刻を参照できていること、 実際に時刻同期されていることを確認しましょう。

  $ ntpq -p
       remote           refid  st t when poll reach   delay   offset  jitter
  ==========================================================================
  ...中略...
  *192.168.1.2     10.0.0.2     3 u   53   64  377    0.592  -18.000   2.698

driftfile で微調整

PCの内部時計には、たいてい水晶振動子が用いられています。 これは正確ではあるものの、正確な時刻から、 どうしても少しずつずれてしまう傾向があります。

ntpd は、そのずれを自動的に計算し、考慮して時刻を管理します。
ただ、そのずれを算出するには、それなりの時間を必要とします。
そこで、毎回起動時に算出するのではなく、算出した結果を残しておき、 次からはその結果をベースにすることで、効率よく時刻を管理する、 などといったかしこいことをしています。

というわけで、「drifttime」というコマンドで、残すためのファイルを指定します。 たとえば、/var/lib/ntp/ntp.drift というファイルに記録するには、 以下のように指定します。

driftfile /var/lib/ntp/ntp.drift

すると、以下のように記録されるようになります。

  $ cat /var/lib/ntp/ntp.drift
  23.477

ちなみに、単位はPPM(Parts-Per-Million)です。
1PPMの場合、100万分の1の誤差なので、86400秒(1日)に86.4ミリ秒ずれることになります。

おわりに

以上、NTP を実際に導入する際に必要となるかもしれない設定について、 いくつかご紹介しました。

今回はご紹介できませんでしたが、 statsdir や filegen を指定してログに状態を出力させて確認する、 といったことも可能です。
微妙にうまくいかないときなどは、以下のような設定を追加して、 ログの中身を確認してみてください。

statsdir /var/log/ntpstats/
filegen peerstats file peerstats type month link enable
filegen loopstats file loopstats type month link enable

組織内で時刻を同期させることは、いろいろな意味で必須だと思います。
ぜひ NTP を導入して、じわじわと同期させてみてください。

宿題の答え

前回の宿題は、

  ファイアウォールでNTPを通さない設定にしたとき、ntp -q の出力結果
  がどうなるか確認しましょう。

でした。

というわけで、やってみました。
ファイアウォールの設定を変えてもよいのですが、ここは簡便に、 試してみるサーバの iptables で、NTPのパケットを外に出さなくしてみます。

指定した種類のパケットしか許可していない場合は、NTPの許可を外してください。 そうではなく、基本的に許可な設定になっている場合は、以下のように、 NTPのパケットを落とすようにします。

  # iptables -A OUTPUT -p udp --dport 123 -j DROP

ただ、本当に捨てられているかわからないので、ログにも吐かせるため、 以下のようにしてみました。

  # iptables -N LOG_DROP
  # iptables -A LOG_DROP -j LOG
  # iptables -A LOG_DROP -j DROP
  # iptables -A OUTPUT -p udp --dport 123 -j LOG_DROP

LOG_DROP という、LOG と DROP を行う新しいチェインを追加して、 外に出て行くNTPのパケットには、LOG_DROP を適用します。

さて、上記を実行する前に、ntpq コマンドで確認すると、 以下のように順当に時刻同期されていることがわかります。

  $ ntpq -p
       remote           refid  st t when poll reach   delay   offset  jitter
  ==========================================================================
  +ntp-b3.nict.go. .NICT.       1 u  105  128  377   11.467   -8.896   2.207
  +ntp-b2.nict.go. .NICT.       1 u  111  128  377   11.283  -11.986   2.458
  *ntp-a3.nict.go. .NICT.       1 u  102  256  377    9.295   -9.251   2.110

ですが、上記 iptables コマンドを実行すると、 syslog に以下のようなメッセージが出力されるようになります。
(kern ファシリティの出力先ログファイルを確認しましょう。)

  kernel: IN= OUT=eth0 SRC=192.168.1.1 DST=133.243.238.164 LEN=76 \
  TOS=0x00 PREC=0xC0 TTL=64 ID=0 DF PROTO=UDP SPT=123 DPT=123 LEN=56 

そして、when(最後に受信してから経過した秒)が増え、 reachの 0 なbitも増えていきます。

       remote           refid  st t when poll reach   delay   offset  jitter
  ==========================================================================
  +ntp-b3.nict.go. .NICT.       1 u  429  128  370   11.467   -8.896   2.207
  +ntp-b2.nict.go. .NICT.       1 u  435  128  370   11.283  -11.986   2.458
  *ntp-a3.nict.go. .NICT.       1 u  426  256  376    9.295   -9.251   2.110

しばらくたつと、reach が完全に 0 になり、 参照・同期中や参照可能を表す先頭の * や + が消えてしまいました。

       remote           refid  st t when poll reach   delay   offset  jitter
  ==========================================================================
   ntp-b3.nict.go. .NICT.       1 u 136m  128    0   12.156   -7.408   0.000
   ntp-b2.nict.go. .NICT.       1 u 136m  128    0   12.377   -7.350   0.000
   ntp-a3.nict.go. .NICT.       1 u 136m  256    0   10.345   -7.370   0.000

ここで、先ほど追加した iptables のルールを消します。

  # iptables -D OUTPUT -p udp --dport 123 -j DROP

LOG_DROP チェインを作った貴兄は、もうちょっと消します。

  # iptables -D OUTPUT -p udp --dport 123 -j LOG_DROP
  # iptables -D LOG_DROP -j LOG
  # iptables -D LOG_DROP -j DROP
  # iptables -X LOG_DROP

すると、そのうち reach が 0 でなくなります。

       remote           refid  st t when poll reach   delay   offset  jitter
  ==========================================================================
   ntp-b3.nict.go. .NICT.       1 u  535 1024    1   12.613  -61.158   0.002
   ntp-b2.nict.go. .NICT.       1 u  553 1024    1   11.095  -61.348   0.002
   ntp-a3.nict.go. .NICT.       1 u  494 1024    1    9.827  -61.592   0.002

しばらく待つと、* や + のある最初の状態に戻ります。

実際やってみることで、when や reach など、 いろいろな数値が変化するということに気づくことができたと思います。
それらの値の変化の意味を、いまのうちに考えておくことで、 トラブルに遭遇したとき、慌てず落ち着いて対応できるのではないでしょうか。

今回の宿題

今回の宿題は、

  違う鍵で参照させたときの動作を確認してみましょう。

です。

…まあ、当然うまくはいかないと思いますが…。
restrict の notrust との関連も、個人的には調べておこうと思います。

あとがき

妻が録画していたNHKの番組を、なぜか2回ほど見ていました。
それは、下記の第4回「スランプを味方にする自己管理」です。

仕事学のすすめ "司法試験流"知的生産術 2012年2月
伊藤真:語り手 / 野田稔:トランスレーター
https://www.nhk-book.co.jp/shop/main.jsp?trxID=C5010101&webCode=61895742012

弁護士でかつカリスマ(?)講師の伊藤真さんが、司法試験に落ちてどん底にいたとき、 どうやってそれを克服したのかということを、熱く語られていました。

そのとき、わたしの心に響いたのが、 「今の未熟な自分が最悪と評価しているにすぎない」という言葉でした。
(…あ、正確には違う表現だったかもしれません。)

今、仕事でもその他でもいろいろうまくいっておらず、 すべて放り投げて逃げ出してしまいたい衝動にかられるときが、少なからずあります。

ですが、そんな嫌な状況も、今の未熟な自分が「嫌」だと思っているだけであり、 実は自分が成長するためのハードルに過ぎないかもしれない、 ということなのかもしれないなあ、と思えるようになってきました。

神田昌典さんも、どこかの本で、課題から逃げても、 克服するまで何度もその課題が与えられる、みたいなことをおっしゃっていました。
いま目の前にある問題が、その課題なのだと思って、前向きに取り組もうと思います。

 

…まあ、妻は、 ほんとうは自分の息子に何か感じてもらおうと思って録画していたようなのですが…。 息子も何か感じていますように…。

 

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

 

「いますぐ実践! 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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本