FreeBSD10.2にOpenNTPdをインストールして設定する方法
序章
ネットワークタイムプロトコルであるNTPは、さまざまなオペレーティングシステムで時刻を同期する方法を提供する標準化されたプロトコルです。 OpenNTPd は、元々 OpenBSD プロジェクトの一部として開発された、ネットワークタイムプロトコル(NTP)の無料で使いやすい実装です。 リモートNTPサーバーからローカルクロックを同期する機能を提供し、サーバー自体としても機能します。
このチュートリアルでは、FreeBSDにOpenNTPdをインストールする方法を説明します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- rootユーザーがいる1つのFreeBSD10.2ドロップレット。 DigitalOceanのデフォルトのfreebsdユーザーは問題ありません。
FreeBSD Dropletには、リモートアクセス用のSSHキーが必要です。 SSHキーの設定については、FreeBSDサーバーでSSHキーベースの認証を構成する方法をお読みください。 FreeBSD Dropletへのログインと基本的な管理の詳細については、 Get Getting Started withFreeBSDチュートリアルシリーズをご覧ください。
ステップ1—OpenNTPdをインストールする
OpenNTPdをインストールする前に、pkg
で使用されるリポジトリ情報を更新してください。
- sudo pkg update
次に、OpenNTPdパッケージをインストールします。
- sudo pkg install openntpd
デフォルトのOpenNTPd構成は、デフォルトのタイムサーバーとしてpool.ntp.org
を使用し、クライアントマシンとしてのみ機能するように構成されています。 このチュートリアルの残りの部分では、使用するタイムサーバーを変更する方法と、OpenNTPdをタイムサーバーとして構成する方法を示します。
手順2—タイムサーバーの変更((オプション)
次のいくつかの手順では、デフォルトの構成ファイルである/usr/local/etc/ntpd.conf
を編集します。 ee
、vi
、またはお好みのテキストエディタを使用して構成ファイルを編集します。
- sudo ee /usr/local/etc/ntpd.conf
AskBjørnHansenのGeoDNSを利用して、pool.ntp.org
は通常、お住まいの国またはその近くのサーバーのIPアドレスを返します。 ほとんどのユーザーにとって、これは最良の結果をもたらします。
または、br.pool.ntp.org
、de.pool.ntp.org
、ru.pool.ntp.org
などのカントリーゾーンを使用して、個人のニーズに合わせて結果を強制/制限することもできます。 NTPプールプロジェクトの詳細については、pool.ntp.orgにアクセスしてください。
このチュートリアルの例では、 NTP.br を使用します。これは、ブラジルの領土で法定時間を保存および配布するブラジルのプロジェクトです。 ブラジルにいない場合は、お住まいの国または地域で同様のプロジェクトを使用してください。
pool.ntp.br
を選択したタイムサーバーに置き換えて、このように目的のタイムサーバーを定義します。
# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
# sample ntpd configuration file, see ntpd.conf(5)
# Addresses to listen on (ntpd does not listen by default)
#listen on *
# sync to a single server
#server ntp.example.org
# use a random selection of NTP Pool Time Servers
# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
servers pool.ntp.br
# use a specific local timedelta sensor (radio clock, etc)
#sensor nmea0
# use all detected timedelta sensors
#sensor *
# get the time constraint from a well-known HTTPS site
#constraints from "https://www.google.com/search?q=openntpd"
ステップ3—制約を変更する
カスタムクライアントセットアップは、制約にサポートを追加することもできるため、ntpd
はTLSを介して信頼できるHTTPSサーバーからDate:
ヘッダーを照会できます。
ntpd.conf(5)
のマンページには、「時間情報が制約に近い範囲外にある受信NTPパケットは破棄され、そのようなNTPサーバーは無効としてマークされます」と記載されています。 これにより、クロックの精度を維持しながら、一部のMITM攻撃を防ぐことができます。
/usr/local/etc/ntpd.conf
に制約を追加します。 必ず1つ以上の信頼できる有名なHTTPSサイトを使用してください。 以下で強調表示されている最初の#
文字を削除することにより、ファイルで提供されているサンプル行のコメントを解除できます。
# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
# sample ntpd configuration file, see ntpd.conf(5)
# Addresses to listen on (ntpd does not listen by default)
#listen on *
# sync to a single server
#server ntp.example.org
# use a random selection of NTP Pool Time Servers
# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
servers pool.ntp.br
# use a specific local timedelta sensor (radio clock, etc)
#sensor nmea0
# use all detected timedelta sensors
#sensor *
# get the time constraint from a well-known HTTPS site
# constraints from "https://www.google.com/search?q=openntpd"
ステップ4—OpenNTPdをタイムサーバーとして設定する
このセクションでは、OpenNTPdのデフォルトの動作を変更し、FreeBSDをIPv4およびIPv6で時間を処理できるNTPサーバーに変更する方法を示します。
サーバー構成の最終結果は次のようになり、your_server_ip
がサーバーのIPv4またはIPv6アドレスに置き換えられます。
# $OpenBSD: ntpd.conf,v 1.2 2015/02/10 06:40:08 reyk Exp $
# sample ntpd configuration file, see ntpd.conf(5)
# Addresses to listen on (ntpd does not listen by default)
listen on your_server_ip
# sync to a single server
#server ntp.example.org
# use a random selection of NTP Pool Time Servers
# see http://support.ntp.org/bin/view/Servers/NTPPoolServers
servers pool.ntp.br
# use a specific local timedelta sensor (radio clock, etc)
#sensor nmea0
# use all detected timedelta sensors
#sensor *
# get the time constraint from a well-known HTTPS site
#constraints from "https://www.google.com/search?q=openntpd"
ステップ5—起動時にOpenNTPdを開始する
OpenNTPdのデフォルトのサービス設定は、FreeBSDのブートプロセス中にデーモンを起動しません。 FreeBSDでntpd
が提供するNTPサービスを追加するには、以下を実行します。
- sudo sysrc openntpd_enable="YES"
出力は次のようになります。
Outputopenntpd_enable: -> YES
起動直後に時刻を設定したい場合は、-s
をopenntpd_flags
に追加してください。 -v
を使用して、adjtime
へのすべての呼び出しがログに記録されるようにすることもできます。 -s
をntpd
に渡すと、デーモンはフォアグラウンドに最大15秒間留まり、構成されたNTPサーバーの1つが応答するのを待機します。 これはデフォルトではなく、次のようにカスタムセットアップを構成する必要があります。
- sudo sysrc openntpd_flags="-s -v"
出力は次のようになります。
Outputopenntpd_flags: -> -s -v
ステップ6—OpenNTPdサービスの管理
すべてのニーズに合うように構成ファイルを編集およびカスタマイズしたので、OpenNTPdが提供するサービスを開始できます。
サービスを開始するには:
sudo service openntpd start
正常に起動すると、次のように表示されます。
OutputStarting openntpd.
OpenNTPdデーモンのフラグがデバッグ情報をログに記録するように構成されている場合、出力の開始は次のようになります。
OutputStarting openntpd.
constraint certificate verification turned off
ntp_adjtime returns frequency of 8.643158ppm
OpenNTPdサービスは、通常のコマンドstatus
、restart
などで管理できます。
ステップ7—トラブルシューティング(オプション)
OpenNTPdは、ntpd
とntpctl
の2つのバイナリを使用します。 1つ目はデーモン自体であり、クライアントまたはサーバーマシンに提供されるNTPサービスを担当します。 2つ目は、実行中のデーモンに関する情報を表示するために使用されます。
このセクションでは、ntpctl
、nc
、およびsockstat
を使用して、OpenNTPdとそのデーモンによって提供されるNTPサービスのトラブルシューティングを行う方法を示します。 実行中のサービスがある場合、またはサービスが実行されているかどうかを確認する別の方法が必要な場合は、このセクションを使用してください。
ステータスとピアの取得
OpenNTPdのntpctl
は、OpenNTPdデーモンとの通信にローカルソケットを使用します。 デフォルトは/var/run/ntpd.sock
です。 このチュートリアルでは、ntpctl
で実行できる2種類のクエリstatus
とpeers
について説明します。
status
は、ピアとセンサーのステータス、およびシステムクロックが同期されているかどうかを示します。 システムクロックが同期されると、階層が表示されます。 システムクロックが同期されていない場合、adjtime
システムコールによって報告されたシステムクロックのオフセットが表示されます。 中央値制約が設定されている場合、現地時間へのオフセットが表示されます。
ntpctlを使用してステータスを表示するには:
- sudo ntpctl -s status
出力は次のようになります。
8/8 peers valid, clock synced, stratum 2
peers
は、各ピアに関する次の情報を表示します:weight(wt)、trustlevel(tl)、stratum(st)、およびピアへの次の更新(次のポーリング)までの秒数。 オフセット、ネットワーク遅延、およびネットワークジッターの値はミリ秒単位です。 システムクロックがピアに同期されると、そのピアの重み列の左側にアスタリスク( * )が表示されます。
ntpctl
を使用してピア情報を表示するには:
- sudo ntpctl -s peers
次の出力は、OpenNTPdが実行され、「200.160.7.193」( pool.ntp.br から解決)として応答するストラタム1サーバーに同期され、OpenNTPdデーモンが時刻を更新するという情報を示しています。 31秒でNTP経由:
Output peer
wt tl st next poll offset delay jitter
200.160.0.8 from pool pool.ntp.br
1 10 2 8s 30s -0.005ms 44.814ms 0.023ms
200.160.7.193 from pool pool.ntp.br
* 1 10 1 26s 31s -0.012ms 44.814ms 0.027ms
200.20.186.76 from pool pool.ntp.br
1 10 1 18s 31s 0.023ms 37.481ms 0.031ms
. . .
リスニングソケット
sockstat
を使用して、開いているIPv4、IPv6、およびUNIXドメインソケットを一覧表示できます。 NTP over IPv4およびIPv6に関連するリスニングソケットを一覧表示するには、次の手順に従います。
- sudo sockstat -4 -6 -p 123
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
_ntp ntpd 44208 7 udp4 203.0.113.123:16987 200.160.0.8:123
_ntp ntpd 44208 8 udp4 203.0.113.123:38739 200.160.7.193:123
. . .
ネットワーク経由で時間を提供するためにOpenNTPdを実行している場合、LOCAL ADDRESS
列にIPアドレスの行が表示されます。 your_ipv4_address:123
はIPv4ソケットを表し、your_ipv6_address:123
はリスニングIPv6ソケットを表します。
インターネットへの接続
nc
を使用して、NTPだけでなく、多くのネットワークデーモンとそのソケット(UNIX、TCP、またはUDP)のトラブルシューティングを行います。 マンページには次のように書かれています。「telnet
とは異なり、netcatスクリプトは、エラーメッセージをtelnet
のように標準出力に送信するのではなく、標準エラーにうまく分離します」。
IPv4を介してNTPサーバーまたはプールホストに到達できるかどうかを確認するには、次の手順に従います。
- sudo nc pool.ntp.br 123 -z -4 -u -v
OutputConnection to pool.ntp.br 123 port [udp/ntp] succeeded!
IPv6を介してNTPサーバーまたはプールホストに到達できるかどうかを確認するには、次の手順に従います。
- sudo nc pool.ntp.br 123 -z -6 -u -v
OutputConnection to pool.ntp.br 123 port [udp/ntp] succeeded!
ntpdateを使用する
ntpdate
を使用して、使用する可能性のあるいくつかのサーバーのトラブルシューティングを行います。 NTPサービスを実行しているマシンに関する情報を取得できます:stratum
、offset
、およびdelay
。
- sudo ntpdate -q -4 ntp.cais.rnp.br
出力は次のようになります。
Outputserver 200.144.121.33, stratum 3, offset -0.000049, delay 0.09001
1 Sep 17:28:54 ntpdate[66740]: adjust time server 200.144.121.33 offset -0.000049 sec
ntpdate
の機能が、FreeBSDのntpd
プログラムで利用できるようになったことに注意してください。 FreeBSDのntpd
マンページの-q
コマンドラインオプションを参照するか、ntpq
を使用してください。
警告:ntpdate
ユーティリティは間もなく廃止されます。
マニュアルページを読む
OpenNTPdのntpd
、ntpd.conf
、ntpctl
はFreeBSDのベースシステムの一部ではないため、そのマニュアルページもオペレーティングシステムのデフォルトのMANPATH
の一部ではありません。 OpenNTPdのマニュアルページを確実に読むには、man
を-M /usr/local/man
で実行する必要があります。 FreeBSDのデフォルトのntpd(8)
マンページと混同しないでください。
- man -M /usr/local/man ntpd
同じ手順を繰り返して、OpenNTPdのntpctl(8)
またはntpd.conf(5)
のマンページを読みます。
結論
時間は、ワークステーション、サーバー、ルーター、およびネットワークの機能にとって本質的に重要です。 同期された時間がないと、デバイス間の情報を正確に関連付けることは、不可能ではないにしても困難になります。 セキュリティに関しては、各ルーターとすべてのネットワークサーバー間でログを正常に比較できない場合、インシデントの信頼できる全体像を作成するのは非常に困難です。