第19章 ntpd を使用した NTP 設定

19.1. NTP の概要

Network Time Protocol (NTP) は正確な日時情報を広く行き渡らせ、ネットワークまたはインターネットで共通の参照先に同期しているネットワーク化されたコンピューターシステム上のタイムクロックを維持します。世界中の多くの標準機関には原子時計があり、これが参照先として利用可能になっている場合があります。Global Position システムを構成するサテライトには、複数の atomic クロックが含まれるため、時間のシグナルが非常に正確になる可能性があります。この信号は、軍事的な理由で意図的に弱められる場合があります。理想的な状況では、各サイトに独自の参照時計があるサーバーがあり、これがサイト全体のタイムサーバーとして機能します。低周波数のラジオ伝送またはグローバル位置システム (GPS) を介して、日時と日付を取得するデバイスが多数存在します。ただし多くの場合、インターネットに接続され、各地に分散する公開されたアクセス可能なタイムサーバーを使うことができます。これらの NTP サーバーは、協定世界時 (UTC) を提供します。これらのタイムサーバーに関する情報は、www.pool.ntp.org で確認できます。

IT では、多くの理由で正確な時間の維持が重要です。たとえばネットワーキングでは、パケットとログのタイムスタンプが正確であることが必要になります。ログはサービスとセキュリティーの問題を調査するために使われるので、異なるシステム上のタイムスタンプは、同期されたクロックで記録される必要があります。システムおよびネットワークがますます高速化するにつれ、これに対応してクロックの正確性と精度の必要性も高まっています。国によっては、正確な同期クロックを保持することが法律で定められているところもあります。詳細は、www.ntp.org を参照してください。Linux システムでは、NTP はユーザースペースで実行しているデーモンにより実装されます。Red Hat Enterprise Linux 7 のデフォルトの NTP ユーザー空間デーモンは chronyd です。ntpd デーモンを使用する場合は、無効にする必要があります。chrony の情報については、18章chrony スイートを使用した NTP 設定 を参照してください。

ユーザースペースのデーモンは、カーネルで実行しているソフトウェアクロックであるシステムクロックを更新します。Linux は、「Real Time Clock(RTC) と呼ばれる一般的な埋め込みハードウェアクロックよりも、より優れた解像度を実現するために、ソフトウェアクロックをシステムクロックとして使用します。ハードウェアクロックに関する情報は rtc(4) および hwclock(8)の man ページを参照してください。システムクロックは、さまざまなクロックソースを使用して時間を維持します。一般的に使用されるのは Time Stamp Counter (TSC) です。TSC は、最後にリセットされた時点からのサイクル数を計測する CPU レジスターです。TSC は、それが最後にリセットされてからのサイクル数をカウントする CPU レジスターです。これは非常に高速で精度が高く、割り込みがありません。RTC が保持する時間は、気温の変化により、1 カ月あたり最大 5 分ごとに実際の時間から離れます。RTC が維持している時間は実際の時間と比べて、温度変化によりひと月で最大 5 分間の誤差を生じます。ntpd がシステムクロックを同期している場合には、カーネルは自動的に RTC を 11 分ごとに更新します。

19.2. NTP Strata (階層)

NTP サーバーは、時間信号のソースとなる原子時計からの同期距離によって分類されます。サーバーは、上は 1 から下は 15 までの stratum (階層) に分類されていると考えられます。このため、特定の層に言及する際は、stratum という言葉が使用されます。アトミッククロックはソースである Stratum 0 と呼ばれます。ただし、インターネットでは Stratum 0 パケットが送信されず、すべての stratum 0 アトミッククロックは stratum 1 と呼ばれるサーバーにアタッチされます。これらのサーバーは、Stratum 1としてマークされたパケットを送信します。stratum n とマークされたパケットで同期されるサーバーは、次の下位の stratum に属し、そのパケットを stratum n+1 とマークします。stratum n のマークがついているパケットで同期されるサーバーは、その次に下位の stratum に所属し、パケットを stratum n+1 とマークします。Stratum 16 という名称は、サーバーが現在信頼できるタイムソースと同期していないことを意味します。

デフォルトでは、NTP クライアントはそれよりも下位の stratum にあるシステムのサーバーとして機能することに注意してください。

以下は NTP Strata (階層) のまとめになります。

Stratum 0

原子時計と無線および GPS による信号送信

  • GPS (全地球測位システム)
  • 携帯電話システム
  • 低周波無線送信 WWVB (米国コロラド州)、JJY-40 および JJY-60 (日本)、DCF77 (ドイツ)、および MSF (英国)

    これらの信号は専用デバイスで受信可能で、通常は RS-232 で組織全体またはサイト全体のタイムサーバーとして使用されるシステムに接続されます。

Stratum 1
電波時計、GPS 時計、または原子時計に接続しているコンピューター
Stratum 2
stratum 1 から読み取り、下位の strata に提供
Stratum 3
stratum 2 から読み取り、下位の strata に提供
Stratum n+1
stratum n から読み取り、下位の strata に提供
Stratum 15
stratum 14 から読み取り、これが最下位の stratum になります。

このプロセスは有効な最下位の Stratum 15 まで続きます。Stratum 16 というラベルは、非同期状態を示します。

19.3. NTP の概要

Red Hat Enterprise Linux で使用する NTP のバージョンは、RFC 1305 Network Time Protocol (Version 3) Specification, Implementation and Analysis および RFC 5905 Network Time Protocol Version 4: Protocol and Algorithms Specification で説明されています。

NTP を実装すると、10 秒以下の正確性が達成できます。インターネット上では、数十ミリ秒の正確性の維持は普通のことです。ローカルエリアネットワーク (LAN) 上では、1 ミリ秒の正確性は理想的な条件下では可能です。これは、クロックのドリフトを考慮して修正され、以前の、シンプルな時間プロトコルシステムで行われていないためです。64 ビットのタイムスタンプを使用することにより、233 ピコ秒の解像度が得られます。ここではタイムスタンプの最初の 32 ビットが秒に使われ、次の 32 ビットが 1 秒未満に使われます。

NTP が示すのは、1900 年 1 月 1 日の GMT 午前 0 時 00 分からの積算秒数です。秒数のカウントには 32 ビットが使われているので、時間は 2036 年にロールオーバーしてしまいます。しかし、NTP はタイムスタンプ間の差異で機能するため、タイムプロトコルの他の実装ほどの問題はもたらされません。誤差が 68 年以内のハードウェアクロックが起動時に利用可能であれば、NTP は正確に現在の日時を解釈します。NTP4 仕様は、「Era Number」と「Era Offset」を提供します。これを使用することで、68 年間の時間の長さを扱う場合にソフトウェアをより堅牢にすることができます。この問題は Unix の 2038 年問題と混同しないようにしてください。

NTP プロトコルは、正確性を高めるために追加情報を提供します。4 つのタイムスタンプを使うことで、往復時間とサーバー応答時間の計算が可能になります。NTP クライアントとしての役割でシステムが参照時間サーバーと同期するために、送信元タイムスタンプの付いたパケットが送信されます。パケットが届くと、タイムサーバーが受信先タイムスタンプを追加します。日時情報の要求を処理した後、パケットの返信前に転送先タイムスタンプが追加されます。返信パケットが NTP クライアントに届くと、受信先タイムスタンプが生成されます。クライアントはこれで往復時間が計算でき、処理時間を差し引くことで実際の移動時間が導き出されます。送信時間と受信時間が同じだと仮定すると、NTP データを受信する際の 1 回の移動での遅延が計算されます。ただし、正式な NTP アルゴリズムは、ここで示されているものよりもはるかに複雑です。

時間情報を含むパケットは、受信後にただちに処理されるのではなく、最初に検証され、その後にいくつかの他の時間サンプルと一緒に処理されて、時間を予想します。その後、システムクロックを比較して時間オフセットを決定し、システムクロックの時間と ntpd が時間と決定する時間の違いを決定します。システムクロックは、使用されているカウンターの頻度を変更することで、このオフセットを低減するために、最大で 0.5 /ミリ秒の割合で調整されます。この方法を使用してクロックを 1 秒で調整するには、最低 2000 秒かかります。この方法でクロックを 1 秒調整するには、少なくとも 2000 秒かかります。クロックの時間オフセットが 128 ミリ秒を超える場合 (デフォルト設定)、ntpd はクロックの転送または後方を「ステップ」できます。システムののタイムオフセットが 1000 ミリ秒を超える場合は、ユーザーまたはインストールスクリプトで手動の調整を行う必要があります。3章日付と時刻の設定を参照してください。-g オプションを ntpd コマンドで使用 (デフォルトで使用) すると、システム起動時のオフセットは修正されますが、通常の操作中に修正されるオフセットは最大 1000 秒までです。

時間を遅らせると、失敗したりエラーになるソフトウェアもいくつかあります。時間のステップ変更の影響を受けるシステムでは、128 ms ではなく、しきい値を -x オプション (-g オプションとは関連しない) を使用して 600 s に変更できます。-x オプションを使ってステップの制限を 0.128 秒から 600 秒に増やすと、クロック制御に異なる方法が使用されるので、マイナス面もあります。カーネルのクロック規範が無効になり、クロックの正確性にマイナスの影響が出る可能性があります。-x オプションは、/etc/sysconfig/ntpd 設定ファイルに追加できます。

19.4. 誤差ファイルの概要

誤差ファイルは、通常の周波数で稼働しているシステムクロックと、UTC と同期し続けるために必要な周波数との間の周波数オフセットを保存するために使われます。誤差ファイルに値がある場合は、システム起動時に読み取られ、クロックソースの修正に使われます。誤差ファイルを使用すると、安定的かつ正確な時間の達成に必要な時間が短縮されます。この値は、1 時間ごとに ntpd が計算して、誤差ファイルはそのたび置換されます。誤差ファイルは更新されるのではなく置換されるので、ntpd が書き込みパーミッションのあるディレクトリーに格納される必要があります。

19.5. UTC、タイムゾーン、および DST

NTP は完全に UTC (協定世界時) を使用しているため、タイムゾーンと夏時間 (DST) はシステムがローカルで適用します。ファイル /etc/localtime は、/usr/share/zoneinfo からゾーン情報のコピー、またはへのシンボリックリンクです。RTC は、/etc/adjtime の 3 行目に指定してあるとおり、ローカルタイムまたは UTC になります。これは、RTC クロックの設定方法を示す LOCAL または UTC のいずれかです。Date and Time グラフィカル設定ツールの System Clock Uses UTC で、この設定を簡単に変更できます。そのツール 3章日付と時刻の設定 の使用方法は、を参照してください。夏時間を変更する際には、各種の問題を避けるために RTC を UTC で実行することが推奨されます。

ntpd の詳細な操作方法は、ntpd(8) の man ページで説明されています。リソースセクションでは、役に立つ情報ソースを紹介しています。「関連資料」を参照してください。

19.6. NTP の認証オプション

NTPv4 NTPv4 は、公開非対称暗号をベースとしながら対称鍵暗号にも対応している Autokey Security Architecture 向けのサポートを開始しました。Autokey プロトコルについては RFC 5906 Network Time Protocol Version 4: Autokey Specification で説明しています。ただし、このプロトコルには深刻なセキュリティー問題があるため、Red Hat は代わりに対称鍵の使用を強く推奨しています。ntpd の認証オプションとコマンドについては、ntp_auth(5) の man ページで説明しています。

ネットワーク上の攻撃者は、不正確な時間情報のある NTP パケットを送信することで、サービス妨害を試みることがあります。NTP サーバーのパブリックプールを使用しているシステムでは /etc/ntp.conf のパブリック NTP サーバーの一覧内に 4 つ以上の NTP サーバーを記載することでこのリスクが軽減されます。1 つのタイムソースのみが危険にさらされるか、またはなりすましを受けた場合、ntpd はそのソースを無視します。リスク評価を実行し、不正確な時間がアプリケーションおよび組織に及ぼす影響を検討してください。内部のタイムソースがある場合は、NTP パケットが配布されるネットワークを保護する手段を検討してください。リスク評価を実行して、リスクを許容でき、アプリケーションへの影響が最小限であると判断した場合は、認証を使わないことを選択することもできます。

ブロードキャストおよびマルチキャストの両モードは、デフォルトで認証を必要とします。ネットワークが信頼できると判断した場合は、ntp.conf ファイル内の disable auth ディレクティブを使って認証を無効にできます。別の方法では、SHA1 または MD5 シンメトリックキーを使って認証を設定するか、Autokey スキームを使用して公開 (非対称) キー暗号法で認証を設定する必要があります。非対称暗号法の Autokey スキームは、ntp_auth(8) の man ページで、キーの生成については ntp-keygen(8) で説明されています。シンメトリックキー暗号法の実装方法については、key の説明の 「鍵を使った対称認証の設定」 を参照してください。

19.7. 仮想マシン上での時間管理

仮想マシンは実際のハードウェアクロックにアクセスできず、仮想クロックの安定性はホストシステムの作業量に依存することから、十分な安定性がありません。このため、使用する仮想化アプリケーションが準仮想化クロックを提供する必要があります。KVM 搭載した Red Hat Enterprise Linux では、デフォルトのクロックソースは kvm-clock です。Red Hat Enterprise Linux 7 Virtualization Deployment and Administration GuideKVM guest timing management の章を参照してください。

19.8. うるう秒の概要

グリニッジ標準時 (GMT) は太陽日の測定から導き出されており、これは地球の自転に依存しています。原子時計が最初に作成された際に、より正確な時間の定義が可能になりました。1958 年に国際原子時 (TAI) がより正確で安定的な原子時計を基に導入されました。さらに正確な天文時である世界時 1 (UT1) も導入され、GMT に代わるものとなりました。実際、原子時計は地球の自転よりもはるかに安定しているので、この 2 つの時間の差異が広がり始めました。これが理由で、現実的な方法として UTC が導入されました。これは UT1 の 1 秒以内に維持されますが、わずかな調整を何度も行うことを避けるため、うるう秒 の概念を導入し、管理可能な方法でこの差異を調整することにしました。UT1 と UTC の差異は、0.5 秒以上になるまで監視されます。1 秒進めるまたは遅らす調整が必要とみなされた場合にのみ、これが実行されます。地球の自転速度は不規則なため、長期の将来にわたって調整の必要性を予測することはできません。調整をいつ行うかについては、国際地球回転・基準系事業 (IERS) が判断します。しかし、NTP は保留中のうるう秒についての情報を転送し、これらを自動的に適用するので、この発表が重要となるのは、Stratum 1 サーバーの管理者のみになります。

19.9. ntpd 設定ファイルについて

ntpd デーモンは、システム起動時またはサービスの再起動時に設定ファイルを読み取ります。このファイルのデフォルトの位置は /etc/ntp.conf で、以下のコマンド入力して確認することができます。

~]$ less /etc/ntp.conf

設定コマンドについては、本章の後半 「NTP の設定」 で簡単に説明されており、詳しくは ntp.conf(5) man ページで説明されています。

ここでは、以下でデフォルトの設定ファイルを簡単に説明します。

driftfile エントリー

drift ファイルへのパスが指定されていると、Red Hat Enterprise Linux のデフォルトエントリーは以下のようになります。

driftfile /var/lib/ntp/drift

これを変更する場合は、ディレクトリーが ntpd で書き込み可能となっていることを確認してください。ファイルには、システムもしくはサービス起動時に毎回システムクロックの周波数を調整する値が含まれます。詳細情報は、誤差ファイルの概要 を参照してください。

アクセス制御エントリー

以下の行は、デフォルトのアクセス制御制限を設定します。

restrict default nomodify notrap nopeer noquery
  • nomodify オプションは、設定に変更が加えられないようにします。
  • notrap オプションは、ntpdc 制御メッセージプロトコルトラップを防ぎます。
  • nopeer オプションは、ピア関連付けが形成されないようにします。
  • noquery オプションは、ntpq および ntpdc クエリーを防ぎますが、タイムクエリーは応答しません。

    重要

    ntpq および ntpdc クエリーは増幅攻撃で使用することができます。そのため、アクセスを公開しているシステムでは、restrict default コマンドから noquery オプションを削除しないでください。

    詳細は、CVE-2013-5211 を参照してください。

    127.0.0.0/8 範囲内のアドレスは、種々のプロセスやアプリケーションが必要とすることがあります。上記の "restrict default" 行は明示的に許可されていないすべてのものへのアクセスを妨害するので、IPv4 および IPv6 の標準ループバックアドレスへのアクセスは以下の行で許可されます。

    # the administrative functions.
    restrict 127.0.0.1
    restrict ::1

    別のアプリケーションで特に必要とされる場合は、アドレスはすぐ下に追加できます。

    ローカルネットワーク上のホストは、上記の "restrict default" 行のために許可されません。これを変更して、たとえば 192.0.2.0/24 ネットワークからのホストが時間および統計情報のみをクエリーできるようにするには、以下の形式の行が必要になります。

    restrict 192.0.2.0 mask 255.255.255.0 nomodify notrap nopeer

    特定のホスト、たとえば 192.0.2.250/32 からの無制限のアクセスを許可するには、以下の形式の行が必要になります。

    restrict 192.0.2.250

    指定がない場合は、255.255.255.255 のマスクが適用されます。

    制限コマンドは、ntp_acc(5) man ページで説明されています。

公開サーバーエントリー

デフォルトでは、以下の 4 つの公開サーバーエントリーが ntp.conf ファイルに格納されています。

server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst
server 3.rhel.pool.ntp.org iburst
ブロードキャストマルチキャストサーバーエントリー
デフォルトでは、ntp.conf ファイルにはコメントアウトされた例がいくつか含まれています。これらは見ればすぐにわかります。特定のコマンドの説明は、「NTP の設定」 を参照してください。必要に応じて、例のすぐ下にコマンドを追加します。
注記

DHCP クライアントプログラムである dhclientDHCP サーバーから NTP サーバーの一覧を受信して、これらを ntp.conf に追加し、サービスを再起動します。この機能を無効にするには、PEERNTP=no/etc/sysconfig/network に追加します。

19.10. ntpd Sysconfig ファイルの概要

このファイルは、サービス起動時に ntpd init スクリプトが読み取ります。デフォルトのコンテンツは以下のとおりです。

# Command line options for ntpd
OPTIONS="-g"

-g オプションを指定すると、ntpd は 1000 秒のオフセット制限を無視し、オフセットが 1000 秒よりも大きい場合でも、システムの起動時にのみ同期を試みます。このオプションを使用しないと、タイムオフセットが 1000 秒を超える場合、ntpd は終了します。また、-g オプションを使用しても、サービスが再起動し、オフセットが 1000 秒を超えると、システムの起動後に終了します。

19.11. chrony の無効化

ntpd を使用するには、デフォルトのユーザースペースデーモンである chronyd を停止して、無効にする必要があります。これには、root で以下のコマンドを発行します。

~]# systemctl stop chronyd

システム起動時に自動的に起動しないようにするには、root で以下のコマンドを発行します。

~]# systemctl disable chronyd

chronyd のステータスを確認するには、以下のコマンドを実行します。

~]$ systemctl status chronyd

19.12. NTP デーモンのインストールを確認する

ntpd がインストールされていることを確認するには、root で以下のコマンドを発行します。

~]# yum install ntp

NTP デーモンまたはサービス ntpd で実装されます。これは、ntp パッケージに含まれています。

19.13. NTP デーモン (ntpd) のインストール

ntpd をインストールするには、root で以下のコマンドを入力します。

~]# yum install ntp

システム起動時に ntpd を有効にするには、root で以下のコマンドを発行します。

~]# systemctl enable ntpd

19.14. NTP ステータスの確認

ntpd が実行中で、システム起動時に実行される設定になっていることを確認するには、以下のコマンドを発行します。

~]$ systemctl status ntpd

ntpd から簡単なステータスレポートを取得するには、以下のコマンドを発行します。

~]$ ntpstat
unsynchronised
 time server re-starting
  polling server every 64 s
~]$ ntpstat
synchronised to NTP server (10.5.26.10) at stratum 2
  time correct to within 52 ms
  polling server every 1024 s

19.15. 着信 NTP パケットを許可するファイアウォールの設定

NTP トラフィックはポート UDP 上の 123 パケットで構成されており、NTP が機能するにはネットワークおよびホストベースのファイアウォール通過が許可されている必要があります。

グラフィカルの Firewall Configuration ツールを使って、ファイアウォールの設定でクライアントが着信 NTP トラフィックを許可しているかどうかを確認します。

グラフィカルの firewall-config ツールを起動するには、Super キーを押してアクティビティーの概要に入り、firewall と入力して Enter を押します。Firewall Configuration ウィンドウが開きます。次にパスワード入力が求められます。

コマンドラインを使ってグラフィカルなファイアウォール設定ツールを起動するには、root で以下のコマンドを入力します。

~]# firewall-config

Firewall Configuration ウィンドウが開きます。このコマンドは一般ユーザーとしても実行できますが、その場合は時折 root パスワードの入力を求められることに注意してください。

ウィンドウ左下の「接続しました」の表示を確認してください。これは、firewall-config ツールがユーザースペースデーモン firewalld に接続されていることを示します。

19.15.1. ファイアウォールの設定変更

現行のファイアウォール設定をただちに変更するには、Configuration というラベルのドロップダウン選択メニューが Runtime に設定されていることを確認します。または、システムの次回の起動時またはファイアウォールの再読み込み時に設定が適用されるように編集するには、ドロップダウンリストから Permanent を選択します。

注記

Runtime モードでファイアウォール設定を変更する際には、サービスに関連するチェックボックスにチェックを入れたり解除したりすると、その選択がただちに反映されます。他のユーザーが使用している可能性のあるシステムでこの作業を行う場合は、この点を考慮してください。

Permanent モードでファイアウォール設定を変更すると、ファイアウォールを再読み込みした場合か、またはシステムの再起動時にのみ変更が反映されます。ファイアウォールを再読み込みするには、オプションメニューを選択して Reload Firewall を選択します。

19.15.2. NTP パケット用にファイアウォールでポートを開く

特定のポートへのトラフィックがファイアウォールを通過できるようにするには、firewall-config ツールを起動して、設定を変更するネットワークゾーンを選択します。Ports タブを選んで Add ボタンをクリックします。Port and Protocol ウィンドウが開きます。

ポート番号 123 を入力し、ドロップダウンリストから udp を選択します。

19.16. ntpdate サーバーの設定

ntpdate サービスの目的は、システム起動時にクロックを設定することです。このサービスはこれまで、ntpdate が正確な時間を確保して、クロックでジャンプが生じないようにしてからサービスが開始するために使われていました。ntpdate の使用と step-tickers の一覧は非推奨とみなされるため、Red Hat Enterprise Linux 7 では -g オプションを ntpd コマンドに指定しますが、デフォルトでは ntpdate は使用しません。

Red Hat Enterprise Linux 7 の ntpdate サービスは、ntpd service なしのときや、ntpd コマンドに -x オプションが指定されているときにメリットがあります。ntpd-x とともに使用されていも、ntpdate サービスを有効にしない場合は、時間の差が 600 秒より大きい場合に限りステップにより修正されます。600 秒に満たない場合は徐々に修正されるため、1 秒修正するために約 2000 秒かかります。

ntpdate がシステム起動時に実行されるようになっていることを確認するには、以下のコマンドを発行します。

~]$ systemctl status ntpdate

システム起動時にサービスが実行するようにするには、root で以下のコマンドを発行します。

~]# systemctl enable ntpdate

Red Hat Enterprise Linux 7 では、デフォルトの /etc/ntp/step-tickers ファイルには 0.rhel.pool.ntp.org が含まれます。追加の ntpdate サーバーを設定するには、root としてテキストエディターで /etc/ntp/step-tickers を編集します。ntpdate は、システム起動時に日付情報を取得するためにこのファイルを 1 回使用するだけなので、記載されているサーバー数は重要ではありません。内部のタイムサーバーがある場合は、そのホスト名を 1 行目に使います。2 行目に追加のホストをバックアップとしておくのがよいでしょう。バックアップサーバーにどれを選ぶか、また 2 番目のホストを内部または外部とするかは、リスク評価によります。たとえば、1 番目のサーバーに影響する問題が 2 番目のサーバーにも影響する可能性はどの程度か。1 番目のサーバーにアクセスできなくなるネットワーク障害時に、より接続性が高いのは外部サーバーかそれとも内部サーバーか、といった点を考慮します。

19.17. NTP の設定

NTP サービスのデフォルト設定を変更するには、root ユーザーとしてテキストエディターを使用して /etc/ntp.conf ファイルを編集します。このファイルは、ntpd とともにインストールされ、Red Hat プールからのタイムサーバーを使用するデフォルト設定になっています。ntp.conf(5) の man ページでは、アクセスおよびレート制限コマンドを除く、設定ファイルで使用可能なコマンドオプションが説明されています。アクセスおよびレート制限コマンドは、ntp_acc(5) man ページで説明されています。

19.17.1. NTP サービスへのアクセス制御の設定

システムで実行している NTP サービスへのアクセスを制限または制御するには、ntp.conf ファイル内の restrict コマンドを利用します。コメントアウトされた例は以下のとおりです。

# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

restrict コマンドは以下の形式になります。

restrict option

ここでの オプション は、以下のいずれか (1 つまたは複数) になります。

  • ignore: ntpq および ntpdc クエリーを含むすべてのパケットは無視されます。
  • kod: Kiss-o'-death パケットが送信され、不要なクエリーが少なくなります。
  • limited: パケットがレート制限のデフォルト値または discard コマンドで指定された値に違反する場合は、タイムサービス要求に応答しません。ntpq および ntpdc クエリーは影響を受けません。discard コマンドおよびデフォルト値に関する詳細情報は、「NTP サービスへのレート制限アクセスの設定」 を参照してください。
  • lowpriotrap: 一致するホストがトラップを低い優先度に設定します。
  • nomodify: 設定に変更を加えられないようにします。
  • タイムクエリーではなく、noquery: ntpq および ntpdc クエリーの応答は禁止されます。
  • nopeer: ピア関連付けの形成をできないようにします。
  • noserve: ntpq および ntpdc クエリー以外のパケットをすべて拒否します。
  • notrap: ntpdc 制御メッセージプロトコルトラップをできないようにします。
  • notrust: 暗号法で認証されないパケットを拒否します。
  • ntpport: 発信元ポートが標準の NTP UDP ポート 123 の場合、一致アルゴリズムが制限のみを適用するように修正します。
  • version: 現在の NTP バージョンに一致しないパケットを拒否します。

レート制限アクセスがクエリーに対してまったく応答しないように設定するには、各 restrict コマンドに limited オプションを指定する必要があります。ntpdKoD パケットで応答する場合には、restrict コマンドには limitedkod オプションの両方が必要です。

ntpq および ntpdc クエリーは増幅攻撃で使用することができます (詳細は CVE-2013-5211 を参照)。アクセスを公開しているシステムでは restrict default コマンドから noquery オプションを削除しないでください。

19.17.2. NTP サービスへのレート制限アクセスの設定

システムで実行している NTP サービスへのレート制限アクセスを有効にするには、「NTP サービスへのアクセス制御の設定」 の説明に従って restrict コマンドに limited オプションを追加します。デフォルトの discard パラメーターを使用したくない場合は、以下の説明にあるように discard コマンドも使用できます。

discard: コマンドは以下の形式になります。

discard average value minimum value monitor value
  • average: 許可される最小限の平均パケット間隔を指定します。これは、log2 秒の引数を取ります。デフォルト値は 3 (23 は 8 秒) です。
  • minimum: 許可される最小限のパケット間隔を指定し、log2 秒の引数を取ります。デフォルト値は 1 (21 は 2 に相当) です。
  • monitor: 許可されるレート制限を超えた場合のパケットの discard の確率を指定します。デフォルト値は、3000 秒です。このオプションは、1 秒あたり 1000 以上のリクエストを受信するサーバー用に用意されています。

discard コマンドの例を以下に示します。

discard average 4
discard average 4 minimum 2

19.17.3. ピアアドレスの追加

ピアのアドレス、つまり同一 stratum の NTP サービスを実行しているサーバーのアドレスを追加するには、peer ファイルの ntp.conf コマンドを利用します。

peer コマンドは以下の形式になります。

peer address

ここでの address は、IP ユニキャストアドレスまたは DNS の解決可能な名前になります。アドレスは、同一 stratum のメンバーに既知のシステムのものである必要があります。ピアは、相互に異なる時間ソースを少なくとも 1 つ持っている必要があります。ピアは通常、同一管理制御下にあるシステム群です。

19.17.4. サーバーアドレスの追加

ピアのアドレス、つまり高い stratum の NTP サービスを実行しているサーバーのアドレスを追加するには、server ファイルの ntp.conf コマンドを利用します。

server コマンドは以下の形式になります。

server address

ここでの address は、IP ユニキャストアドレスまたは DNS の解決可能な名前になります。パケットの送信元となるリモートリファレンスサーバーまたはローカルリファレンスクロックのアドレスになります。

19.17.5. ブロードキャストまたはマルチキャストサーバーアドレスの追加

送信用のブロードキャストまたはマルチキャストアドレス、つまり NTP パケットをブロードキャストまたはマルチキャストする宛先のアドレスを追加 するには、broadcast ファイルの ntp.conf コマンドを利用します。

ブロードキャストおよびマルチキャストの両モードは、デフォルトで認証を必要とします。「NTP の認証オプション」を参照してください。

broadcast コマンドは以下の形式になります。

broadcast address

ここでの address は、パケットの送信先となる IP ブロードキャストまたはマルチキャストアドレスになります。

このコマンドは、システムが NTP ブロードキャストサーバーとして作動するように設定します。使用するアドレスは、ブロードキャストかマルチキャストアドレスである必要があります。ブロードキャストアドレスの場合は、IPv4 アドレス 255.255.255.255 を意味します。デフォルトでは、ルーターはブロードキャストメッセージを渡しません。マルチキャストアドレスは IPv4 Class D アドレスまたは IPv6 アドレスになります。IANA には、IPv4 マルチキャストアドレス 224.0.1.1 および IPv6 アドレス FF05::101 (サイトローカル) が NTP に割り当てられています。RFC 2365 Administratively Scoped IP Multicast の説明にあるように、管理者が範囲指定した IPv4 マルチキャストアドレスも使用可能です。

19.17.6. Manycast クライアントアドレスの追加

manycast クライアントアドレスを追加する、つまり NTP サーバーの発見に使用するマルチキャストアドレスを設定するには、manycastclient ファイルの ntp.conf コマンドを利用します。

manycastclient コマンドは以下の形式になります。

manycastclient address

ここでの addressIP マルチキャストアドレスで、ここからパケットが受信されます。クライアントはこのアドレスにリクエストを送信し、応答から最善のサーバーを選んで他を無視します。その後は、NTP 通信は発見された NTP サーバーが ntp.conf にリストされているかのようにユニキャスト関連付けを使用します。

このコマンドは、システムが NTP クライアントのように動作するように設定します。システムは、同時にクライアントとサーバーの両方になることができます。

19.17.7. ブロードキャストクライアントアドレスの追加

ブロードキャストクライアントのアドレスを追加するには、つまりブロードキャスト NTP パケット用にブロードキャストアドレスを監視するように設定するには、broadcastclient ファイルの ntp.conf コマンドを利用します。

broadcastclient コマンドは以下の形式になります。

broadcastclient

ブロードキャストメッセージを受信可能にします。デフォルトで認証を必要とします。「NTP の認証オプション」を参照してください。

このコマンドは、システムが NTP クライアントのように動作するように設定します。システムは、同時にクライアントとサーバーの両方になることができます。

19.17.8. Manycast サーバーアドレスの追加

manycast サーバーのアドレスを追加する、つまり NTP パケットをマルチキャストすることでクライアントがサーバーを発見できるようにするアドレスを設定するには、manycastserver ファイルの ntp.conf コマンドを利用します。

manycastserver コマンドは以下の形式になります。

manycastserver address

マルチキャストメッセージの送信ができるようになります。ここでの address は、マルチキャスト送信先のアドレスになります。これは認証と合わせて使用して、サービス中断を防ぎます。

このコマンドは、システムが NTP サーバーのように動作するように設定します。システムは、同時にクライアントとサーバーの両方になることができます。

19.17.9. マルチキャストクライアントアドレスの追加

マルチキャストクライアントのアドレスを追加するには、つまりマルチキャスト NTP パケット用にマルチキャストアドレスを監視するように設定するには、multicastclient ファイルの ntp.conf コマンドを利用します。

multicastclient コマンドは以下の形式になります。

multicastclient address

マルチキャストメッセージの受信ができるようになります。ここでの address は、サブスクライブするアドレスになります。これは認証と合わせて使用して、サービス中断を防ぎます。

このコマンドは、システムが NTP クライアントのように動作するように設定します。システムは、同時にクライアントとサーバーの両方になることができます。

19.17.10. Burst オプションの設定

公開サーバーに対して burst オプションを使用することは、濫用とみなされます。公開 NTP サーバーでは、このオプションを使用しないでください。このオプションは、組織内のアプリケーションにのみ使用するようにしてください。

時間オフセットの統計情報の平均的な品質を向上させるには、サーバーコマンドの最後に以下のオプションを追加します。

burst

サーバーが反応している場合は、ポーリングの間隔ごとにシステムが通常の 1 パケットではなく、最大 8 パケットのバーストを送信します。server コマンドを使うと、時間オフセット計算の平均的な質が向上します。

19.17.11. iburst オプションの設定

初回同期にかかる時間を改善するには、サーバーコマンドの最後に以下のオプションを追加します。

iburst

サーバーに到達できない場合は、1 パケットではなく、8 パケットのバーストが送信されます。パケットの間隔は通常は 2 秒間隔ですが、1 番目と2 番目のパケット間の間隔は、モデムまたは ISDN 呼び出しの完了に必要な追加の時間を許可できるように calldelay コマンドを使って変更することができます。server コマンドと使用すると、初回の同期にかかる時間が短縮されます。これが設定ファイルでのデフォルトオプションになります。

19.17.12. 鍵を使った対称認証の設定

鍵を使った対称認証を設定するには、サーバーまたはピアコマンドの最後に以下のオプションを追加します。

key number

ここでの number は、1 から 65534 までの数字になります。このオプションを使うと、パケット内で メッセージ認証コード (MAC) が使えるようになります。このオプションは peerserverbroadcast、および manycastclient コマンドで使用します。

オプションは、以下のように /etc/ntp.conf ファイルで使用できます。

server 192.168.1.1 key 10
broadcast 192.168.1.255 key 20
manycastclient 239.255.254.254 key 30

「NTP の認証オプション」も参照してください。

19.17.13. ポーリング間隔の設定

デフォルトのポーリング間隔を変更するには、サーバーまたはピアコマンドの最後に以下のオプションを追加します。

minpoll value and maxpoll value

デフォルトのポーリング間隔を変更するオプション。ここでは、秒単位の間隔を 2 の 乗で計算します。つまり、間隔は log2 秒で表示されます。デフォルトの minpoll 値は 6 (26 は 64 に相当) です。maxpoll のデフォルト値は 10 で、1024 秒に相当します。使用できる値は、3 から 17 の範囲で、それぞれ 8 s から 36.4 h に相当する値になります。これらのオプションは、peer または server で使用する場合に使用します。maxpoll を短く設定すると、クロックの精度が向上する場合があります。

19.17.14. サーバー優先順位の設定

特定のサーバーが他の同様の統計情報のサーバーよりも優先されるよう指定するには、サーバーまたはピアコマンドの最後に以下のオプションを追加します。

prefer

他の同様の統計情報のサーバーに優先して、このサーバーが同期に使用されます。このオプションは、peer または server コマンドで使用します。

19.17.15. NTP パケットの Time-to-Live (有効期限) の設定

デフォルトで使用される特定の time-to-live (TTL: 有効期限) の値を指定するには、サーバーまたはピアコマンドの最後に以下のオプションを追加します。

ttl value

ブロードキャストサーバーおよびマルチキャスト NTP サーバーが送信するパケットで使用される TTL の値を指定します。manycast クライアントが expanding ring search を使用するには、TTL の最大値を指定します。デフォルト値は 127 です。

19.17.16. 使用する NTP バージョンの設定

デフォルトで使用される特定バージョンの NTP を指定するには、サーバーまたはピアコマンドの最後に以下のオプションを追加します。

version value

作成された NTP パケットで NTP セットのバージョンを指定します。値は 1 から 4 になります。デフォルトは 4 です。

19.18. ハードウェアクロック更新の設定

リアルタイムクロック (RTC) とも呼ばれるハードウェアクロックの更新には、システムクロックが使用できます。本セクションでは、これを実行する 3 つのアプローチを説明します。

即時ワンタイム更新

ハードウェアクロックの即時ワンタイム更新を行うには、root で以下のコマンドを実行します。

~]# hwclock --systohc
ブートごとの更新

ntpdate 同期ユーティリティー実行後にブートごとに毎回ハードウェアクロックが更新するようにするには、以下を実行します。

  1. /etc/sysconfig/ntpdate ファイルに以下の行を追加します。

    SYNC_HWCLOCK=yes
  2. ntpdate サービスを root で有効にします。

    ~]# systemctl enable ntpdate.service

    ntpdate サービスは、/etc/ntp/step-tickers ファイルで定義されている NTP サーバーを使用することに注意してください。

    注記

    仮想マシンの場合は、仮想マシン自体の次回起動時ではなく、ホストマシンの次回起動時にハードウェアクロックが更新されます。

NTP から更新

ntpd または chronyd サービスを使うと、システムクロックが更新されるたびにハードウェアクロックを更新することができます。

root で ntpd サービスを起動します。

~]# systemctl start ntpd.service

この動作を次回ブート後にも維持するには、サービスがブート時に自動的に起動するようにします。

~]# systemctl enable ntpd.service

または

root で chronyd サービスを起動します。

~]# systemctl start chronyd.service

この動作を次回ブート後にも維持するには、サービスがブート時に自動的に起動するようにします。

~]# systemctl enable chronyd.service

その結果、ntpd または chronyd がシステムクロックを同期するたびに、カーネルがハードウェアクロックを 11 分ごとに自動更新します。

警告

上記の 11 分モードは常に有効になっているわけではないので、このアプローチが常に機能するとは限りません。このため、ハードウェアクロックはシステムクロックの更新時に更新されるとは限りません。

ソフトウェアクロックとハードウェアクロックの同期を確認するには、ntpdc -c kerninfo または ntptime コマンドを root として使用します。

~]# ntpdc -c kerninfo

以下のような結果になります。

pll offset:      0 s
pll frequency:    0.000 ppm
maximum error:    8.0185 s
estimated error:   0 s
status: 2001 pll nano
pll time constant:  6
precision:      1e-09 s
frequency tolerance: 500 ppm

または

~]# ntptime

以下のような結果になります。

ntp_gettime() returns code 0 (OK)
 time dcba5798.c3dfe2e0 Mon, May 8 2017 11:34:00.765, (.765135199),
 maximum error 8010000 us, estimated error 0 us, TAI offset 0
ntp_adjtime() returns code 0 (OK)
 modes 0x0 (),
 offset 0.000 us, frequency 0.000 ppm, interval 1 s,
 maximum error 8010000 us, estimated error 0 us,
status 0x2001 (PLL,NANO),
 time constant 6, precision 0.001 us, tolerance 500 ppm,

ハードウェアクロックがシステムクロックに同期しているかどうかを確認するには、出力の status 行を確認します。その行に unsync または UNSYNC という単語が含まれている場合は、ハードウェアクロックがシステムクロックと同期していません。

ハードウェアクロックがシステムクロックに同期しています。

status 0x2001 (PLL,NANO)

ハードウェアクロックがシステムクロックに同期していません。

status 0x41 (PLL,UNSYNC)

19.19. クロックソースの設定

システムで使用可能なクロックソースを一覧表示するには、以下のコマンドを発行します。

~]$ cd /sys/devices/system/clocksource/clocksource0/
clocksource0]$ cat available_clocksource
kvm-clock tsc hpet acpi_pm
clocksource0]$ cat current_clocksource
kvm-clock

上記の例では、カーネルは kvm-clock を使用しています。これは仮想マシンなので、起動時にこのクロックソースが選択されています。利用可能なクロックソースはアーキテクチャーに依存することに注意してください。

デフォルトのクロックソースを上書きするには、clocksource ディレクティブをカーネルの GRUB 2 メニューエントリーの末尾に追加します。grubby ツールを使用して変更します。たとえば、システムのデフォルトのカーネルが tsc クロックソースを使用するように強制するには、以下のコマンドを入力します。

~]# grubby --args=clocksource=tsc --update-kernel=DEFAULT

--update-kernel パラメーターはキーワード ALL、またはカーネルインデックス番号のコンマ区切りの一覧も受け入れます。

GRUB 2 メニューの変更方法は、26章GRUB 2 での作業 を参照してください。

19.20. 関連資料

以下の資料は、NTPntpd に関するその他の情報を提供します。

19.20.1. インストールされているドキュメント

  • ntpd(8) man ページ: ntpd の詳細な説明があり、コマンドラインオプションも含まれています。
  • ntp.conf(5) man ページ: サーバーおよびピアとの関連付けの設定方法に関する情報が含まれています。
  • ntpq(8) の man ページ: NTP サーバーを NTP 監視およびクエリーするクエリーユーティリティーを説明しています。
  • ntpdc(8) man ページ: ntpd の状態をクエリーおよび変更する ntpd ユーティリティーを説明しています。
  • ntp_auth(5) man ページ: ntpd の認証オプション、コマンド、および鍵管理を説明しています。
  • ntp_keygen(8) man ページ: ntpd の公開および秘密鍵生成を説明しています。
  • ntp_acc(5) の man ページ: restrict コマンドを使用してアクセス制御オプションを説明しています。
  • ntp_mon(5) の man ページ: 統計情報収集に関する監視オプションを説明しています。
  • ntp_clock(5) の man ページ: 基準クロックを設定するコマンドを説明しています。
  • ntp_misc(5) man ページ: その他のオプションが説明されています。
  • ntp_decode(5) の man ページ: ntpd レポーティングおよび監視に使用されるステータス文字、イベントメッセージ、およびエラーコードを一覧表示します。
  • ntpstat(8) の man ページ: ローカルマシン上で実行している NTP デーモンの同期状態をレポートするユーティリティーを説明しています。
  • ntptime(8) man ページ: カーネル時間変数を読み取り、設定するユーティリティーを説明しています。
  • tickadj(8) man ページ: ティックの長さを読み取り、オプションで設定するユーティリティーを説明しています。

19.20.2. 便利な Web サイト

http://doc.ntp.org/
NTP 資料のアーカイブ
http://www.eecis.udel.edu/~mills/ntp.html
Network Time Synchronization Research Project
http://www.eecis.udel.edu/~mills/ntp/html/manyopt.html
NTPv4 での Automatic Server Discovery に関する情報

このページには機械翻訳が使用されている場合があります (詳細はこちら)。