序章

ネットワーク時間プロトコルであるNTPは、さまざまなオペレーティングシステムで時間を同期する方法を提供する標準化されたプロトコルです。 OpenNTPd は、元々 OpenBSD プロジェクトの一部として開発された、ネットワークタイムプロトコル(NTP)の無料で使いやすい実装です。 リモートNTPサーバーからローカルクロックを同期する機能を提供し、サーバー自体としても機能します。

このチュートリアルでは、FreeBSDにOpenNTPdをインストールする方法を説明します。

Note: As of July 1, 2022, DigitalOcean no longer supports FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.

前提条件

このチュートリアルに従うには、次のものが必要です。

  • One FreeBSD 10.2 server with a root user; in this tutorial, we will refer to the user freebsd.

A FreeBSD server requires an SSH key for remote access. SSHキーの設定については、FreeBSDサーバーでSSHキーベースの認証を設定する方法をお読みください。 To learn more about FreeBSD servers and basic management, check out the Getting Started with FreeBSD tutorial series.

ステップ1—OpenNTPdをインストールする

OpenNTPdをインストールする前に、によって使用されるリポジトリ情報を更新してください pkg:

  1. sudo pkg update

次に、OpenNTPdパッケージをインストールします。

  1. sudo pkg install openntpd

デフォルトのOpenNTPd構成は pool.ntp.org デフォルトのタイムサーバーとして使用され、クライアントマシンとしてのみ機能するように構成されています。 このチュートリアルの残りの部分では、使用するタイムサーバーを変更する方法と、OpenNTPdをタイムサーバーとして構成する方法を示します。

手順2—タイムサーバーの変更((オプション)

次のいくつかのステップは編集します /usr/local/etc/ntpd.conf、デフォルトの構成ファイル。 使用する ee, vi、またはお気に入りのテキストエディタを使用して、構成ファイルを編集します。

  1. 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 選択したタイムサーバーで。

/usr/local/etc/ntpd.conf
# $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 クエリできます Date: TLSを介した信頼できるHTTPSサーバーからのヘッダー。

The ntpd.conf(5) マンページには次のように書かれています。「時間情報が制約に近い範囲外にある受信したNTPパケットは破棄され、そのようなNTPサーバーは無効としてマークされます」。 これにより、クロックの精度を維持しながら、一部のMITM攻撃を防ぐことができます。

に制約を追加します /usr/local/etc/ntpd.conf. 必ず1つ以上の信頼できる有名なHTTPSサイトを使用してください。 最初の行を削除することで、ファイルで提供されている例の行のコメントを解除できます # 以下で強調表示されている文字:

/usr/local/etc/ntpd.conf
# $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アドレスに置き換えられます。

/usr/local/etc/ntpd.conf
# $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のブートプロセス中にデーモンを起動しません。 によって提供されるNTPサービスを追加するには ntpd FreeBSDで、以下を実行します。

  1. sudo sysrc openntpd_enable="YES"

出力は次のようになります。

Output
openntpd_enable: -> YES

起動直後に時刻を設定したい場合は、 -sopenntpd_flags. -v へのすべての呼び出しが adjtime ログに記録されます。 通過 -sntpd デーモンは、構成されたNTPサーバーの1つが応答するのを[X21X]待機して最大15秒間フォアグラウンドに留まります。 これはデフォルトではなく、次のようにカスタムセットアップを構成する必要があります。

  1. sudo sysrc openntpd_flags="-s -v"

出力は次のようになります。

Output
openntpd_flags: -> -s -v

ステップ6—OpenNTPdサービスの管理

すべてのニーズに合うように構成ファイルを編集およびカスタマイズしたので、OpenNTPdが提供するサービスを開始できます。

サービスを開始するには:

sudo service openntpd start

正常に起動すると、次のように表示されます。

Output
Starting openntpd.

OpenNTPdデーモンのフラグがデバッグ情報をログに記録するように構成されている場合、出力の開始は次のようになります。

Output
Starting openntpd. constraint certificate verification turned off ntp_adjtime returns frequency of 8.643158ppm

通常のコマンドでOpenNTPdサービスを管理できます。 status, restart、など。

ステップ7—トラブルシューティング(オプション)

OpenNTPdは2つのバイナリを使用します: ntpdntpctl. 1つ目はデーモン自体であり、クライアントまたはサーバーマシンに提供されるNTPサービスを担当します。 2つ目は、実行中のデーモンに関する情報を表示するために使用されます。

このセクションでは、使用方法を説明します ntpctl, nc、 と sockstat OpenNTPdとそのデーモンによって提供されるNTPサービスのトラブルシューティングを行います。 実行中のサービスがある場合、またはサービスが実行されているかどうかを確認する別の方法が必要な場合は、このセクションを使用してください。

ステータスとピアの取得

OpenNTPdの ntpctl OpenNTPdデーモンとの通信にローカルソケットを使用します。 デフォルトは /var/run/ntpd.sock. このチュートリアルでは、実行できる2種類のクエリについて説明します。 ntpctl: statuspeers.

status ピアとセンサーのステータス、およびシステムクロックが同期されているかどうかを示します。 システムクロックが同期されると、階層が表示されます。 システムクロックが同期されていない場合、システムクロックのオフセット。 adjtime システムコールが表示されます。 中央値制約が設定されている場合、現地時間へのオフセットが表示されます。

ntpctlを使用してステータスを表示するには:

  1. sudo ntpctl -s status

出力は次のようになります。

出力
8/8 peers valid, clock synced, stratum 2

peers は、各ピアに関する次の情報を示しています。weight(wt)、trustlevel(tl)、stratum(st)、およびピアの次の更新(次のポーリング)までの秒数。 オフセット、ネットワーク遅延、およびネットワークジッターの値はミリ秒単位です。 システムクロックがピアに同期されると、そのピアの重み列の左側にアスタリスク( * )が表示されます。

を使用してピア情報を表示するには ntpctl:

  1. 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に関連するリスニングソケットを一覧表示するには、次の手順に従います。

  1. 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サーバーまたはプールホストに到達できるかどうかを確認するには、次の手順に従います。

  1. sudo nc pool.ntp.br 123 -z -4 -u -v
Output
Connection to pool.ntp.br 123 port [udp/ntp] succeeded!

IPv6を介してNTPサーバーまたはプールホストに到達できるかどうかを確認するには、次の手順に従います。

  1. sudo nc pool.ntp.br 123 -z -6 -u -v
Output
Connection to pool.ntp.br 123 port [udp/ntp] succeeded!

ntpdateを使用する

使用する ntpdate 使用する可能性のあるいくつかのサーバーのトラブルシューティングを行います。 NTPサービスを実行しているマシンに関する情報を取得できます。 stratum, offsetdelay.

  1. sudo ntpdate -q -4 ntp.cais.rnp.br

出力は次のようになります。

Output
server 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 プログラム。 を参照してください -q FreeBSDのコマンドラインオプション ntpd マンページ、または使用 ntpq.

警告: ntpdate ユーティリティはまもなく廃止されます。

マニュアルページを読む

OpenNTPdの ntpd, ntpd.confntpctl FreeBSDのベースシステムの一部ではないため、そのマニュアルページもオペレーティングシステムのデフォルトの一部ではありません。 MANPATH. OpenNTPdのマニュアルページを確実に読むには、次を実行する必要があります man-M /usr/local/man. FreeBSDのデフォルトと混同しないでください ntpd(8) マンページ。

  1. man -M /usr/local/man ntpd

同じ手順を繰り返してOpenNTPdを読み取ります ntpctl(8) また ntpd.conf(5) マンページ。

結論

時間は、ワークステーション、サーバー、ルーター、およびネットワークの機能にとって本質的に重要です。 同期された時間がないと、デバイス間の情報を正確に関連付けることは、不可能ではないにしても困難になります。 セキュリティに関しては、各ルーターとすべてのネットワークサーバー間でログを正常に比較できない場合、インシデントの信頼できる画像を作成するのは非常に困難です。