サーバーを連続稼働していると、システムクロックが数秒程度狂ったり、あるいは、仮想化で動かしている場合は、日時がバラバラになったりすることがあります。
今回は、そういうときのサーバーの時計(時間)を合わせる方法をいくつか紹介したいと思います。
- 目次
- 履歴
2014年1月29日 ntpd脆弱性対応
2013年3月13日 初版
システムクロックをNTPで合わせて、ハードクロックを合わせる
ハードクロック、システムクロック(ソフトクロック)ともに信頼できない状態の場合、あるいは、システムクロックがより信頼できるとなった場合の対応です。
一般的なシステムでは、このパターンがほとんどでしょう。
|
- 独立行政法人情報通信研究機構(NICT) : ntp.nict.jp
- 東京大学 : ntp.nc.u-tokyo.ac.jp
- 東京理科大学 : ntp.sut.ac.jp
- 東北大学 : ntp.tohoku.ac.jp
- 豊橋技術科学大学 : ntp.tut.ac.jp
- 大阪府立大学 : ntp.osakafu-u.ac.jp
- 福岡大学 : clock.nc.fukuoka-u.ac.jp
- Ring Server Project : ntp.ring.gr.jp
- インターネットマルチフィード(MFEED) : ntp.jst.mfeed.ad.jp
システムクロックをハードクロックに合わせる
ハードクロックとシステムクロック(ソフトクロック)とに差がある場合で、どちらがより信用できるか?
を考えた時に、ハードクロックはそれなりに信頼できる場合の対応です。
これは、仮想化されている場合がほとんどではないかと思います。
ゲストOSのシステムクロックが狂った場合の対応は、ハードクロックが正常な場合が多いので、ここで示すような対応でも可能かと思います。
|
ntpdで常時合わせる
サーバーならこれが最もポピュラーな方法だと思います。ただ、ntpdは NTPデーモンですから、(それほどのリソースを必要とするわけではありませんが)常にメモリに常駐することになります。
これが気になる方は、先のシステムクロックをNTPで合わせて、ハードクロックを合わせる をシェル化してcron登録すれば、ntpdは必要ないかもしれません。
ntpdを立てた方が良い方は、NTPサーバーとして利用したい場合がほとんどではないでしょうか。
ntpのインストール
まずは、ntpをインストールします。
[CentOS,ScientificLinux]
|
[Debian,Ubuntu]
|
ntpの設定
ntpの設定は、/etc/ntp.conf を編集して行います。 細かいオプションの設定がありますが、ここでは、最低限かつセキュアな設定を例をあげて解説します。
- NTPサーバーとして使用しない場合の設定例
# 全てのNTPサーバー機能を停止します。 restrict default ignore restrict -6 default ignore # -- ntpq すら動作しなくなるので、localhostはOKとする。 restrict 127.0.0.1 restrict -6 ::1 # -- NTPサーバーとの通信は許可する restrict ntp.nict.jp notrap nomodify nopeer noquery restrict ntp.ring.gr.jp notrap nomodify nopeer noquery restrict ntp.jst.mfeed.ad.jp notrap nomodify nopeer noquery # 自身が合わせる元のNTPサーバーを指定します。 server ntp.nict.jp iburst server ntp.ring.gr.jp iburst server ntp.jst.mfeed.ad.jp iburst ... # monlist 機能をOFFにする(脆弱性対応) disable monitor
restrict ディレクティブ[形式]
restrict {host|default} [mask netmask] [parameter] [parameter] …
[概要]
NTPの制限(ポリシー)を宣言します。
host : ホスト名 or IPアドレス or default(予約語) のいずれかを指定します。
また、-6 は、IPv6の意味です。-4 は、IPv4の意味ですが、通常、省略されます。
mask netmask : host 情報をネットワーク情報としたい場合は、ネットマスク情報をここで指定します。
例) mask 255.255.255.0
以下は各パラメータの意味です。
kodアクセスが拒否された場合、明示的にクライアントにアクセス拒否パケット(死の接吻パケット(Kiss Of Deth)と呼ばれる)を送信します。notrapサーバの設定変更や状態の確認/変更に使用される NTP モード 6 (ntpq で使用) および 7 (ntpdc で使用) のパケットは受け付けない。時間の問い合わせには影響なし。なお、これらのパケットも UDP の 123 番ポートを使用する点に変わりはないignoreすべてのNTPパケットを無視nomodify時刻問い合わせに応答するが、時刻の変更要求などは無視notrust時刻問い合わせに応答するが、自身の時刻合わせには使用しないnopeer指定ホストと相互に同期しないnoqueryNTPの実装に依存する時刻問い合わせを無視server ディレクティブ[形式]
server host [parameter] [parameter] …
[概要]
NTPサーバーを宣言します。
host : NTPサーバーのホスト名 or IPアドレス のいずれかを指定します。
また、-6 は、IPv6の意味です。-4 は、IPv4の意味ですが、通常、省略されます。
以下は各パラメータの意味です。
autokeyサーバもしくは通信相手との間で送受信したパケットの全てが、 認証オプション の項で説明する autokey 方式を使用して暗号化された 認証フィールドを含むようになります。burstサーバが到達可能な場合、 ポーリング間隔ごとに、通常のパケット 1 個の代わりに、 パケット 8 個をバースト的に送信します。 最初のパケットと2 個目のパケットの間隔は約 16 秒としてあります。 これはモデムによる電話接続が完了するまでの時間を取るためです。 それ以後のパケットの間隔は約 2 秒です。 この動作は、 server コマンドと s アドレスを使った時刻管理を質的に改善するために 設計されました。iburstサーバもしくは通信相手との間で送受信したパケットの全てが、 1から65534の間 (両端を含む) の値の 鍵識別子 key を使用して暗号化された認証フィールドを含むようになります。 デフォルトでは、暗号化されたフィールドは含まれません。minpoll minpoll
maxpoll maxpollこのオプションは、NTP メッセージに対する最小および最大のポーリング間隔 を、秒単位で 2 の指数の値で指定します。 最大ポーリング間隔のデフォルトは 10 (1024秒) ですが、 maxpoll オプションを使用することで、上限である 17 (36.4 時間) まで 増やすことができます。 最小ポーリング時間はのデフォルトは 6 (64 秒) ですが、 minpoll オプションを使用することで、下限である 4 (16 秒) まで 減らすことができます。preferサーバに望ましいものとしての印をつけます。 他の条件で差がなければ、この印のついたサーバは、 正しく動作しているホストの中から同期用に選択されます。 さらなる情報が必要なら、 “緩和のルールと prefer キーワード” のページを参照してください。ttlttlこのオプションは、ブロードキャストサーバモードと メニーキャストクライアントモードでのみ使用します。 このオプションは、ブロードキャストサーバとマルチキャストサーバの上で 使用する生存時間 ttl を指定し、リング検索をメニーキャストクライアントパケットに拡張する 最大 ttl を指定します。 デフォルトの値は 127 ですが、適切な値を選択するのはちょっとした 黒魔術のようなものですので、システム管理者との間の調整が必要です。version version送出する NTP パケットで使用するバージョン番号を指定します。 バージョン 1-4 から選択します。 バージョン 4 がデフォルトです。(出典 : man ntp.conf)
- NTPサーバーとしてローカルエリア内だけで使用する場合の設定例
ここでは、ローカルエリア内(192.168.1 ネットワークとしています)からのみNTPサーバーとしての機能を受け付ける場合の設定例を解説してみます。 先の NTPサーバーとして使用しない場合の設定例 の ntp.conf の設定例に 以下の1行を追加するだけで、それを実現することができます。
... # -- LANからのアクセスは、NTPサーバーとしての通信を許可する restrict 192.168.1.0 mask 255.255.255.0 notrap nomodify nopeer noquery
ntpサーバーには、いくつかの脆弱性が確認されています。ntpサーバーとして起動する必要があるか否かは、十分に検討の上、下記のポートを開くようにしましょう。
iptablesなどでtcp/udpポートを閉じている場合は、必ず、ntpのtcp/udpポートを開いておきます。
以下は、iptables の設定例です。
設定を終えたら、設定情報を保存しておきます。# 123(ntpのポート)の入力は許可 $ /sbin/iptables -A INPUT -p tcp --dport 123 -j ACCEPT $ /sbin/iptables -A INPUT -p udp --dport 123 -j ACCEPT
[CentOS,ScientificLinux]
# 設定を保存 $ /sbin/iptables save
[Debian,Ubuntu]
# 設定を保存 $ /sbin/iptables-save > /etc/network/iptables/iptables.db
ntpdでは、システムクロックのみの設定しか行いません。つまり、ハードクロックの設定は行わないということです。 ハードクロックとシステムクロックの違いの度合いにもよりますが、1日1回程度、システムクロックとハードクロックの同調を行うことをおすすめします。これをCRONで1日1回程度あるいは、1W1回程度起動するようにしておくと良いと思います。# hwclock コマンドでシステムクロックからハードクロックへ同調設定します。 $ hwclock --systohc
これだと、毎日5時に起動されます。$ vim /etc/crontab 0 5 * * * root /sbin/hwclock --systohc
NTPの設定は、もっと細かく設定できますが、概ね必要な事項は上記のとおりです。 よほど、細かい設定が必要な方を除き、上記の設定で十分かと思います。
また、NTPデーモンをNTPサーバーとして利用する場合は、セキュリティに注意を払う必要があります。ここでは、できる限り限定的な利用方法のみを公開としている点に注意してください。
通常のレンタルサーバーでの設定では、ntpdateによるシステム時計の更新作業をCRONでやっておけば十分かと思います。 社内システムでも、それほど秒に厳密でないといけない場合を除き、ntpdateコマンドで十分かと思います。お試しあれ。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :