前書き

NTP(Network Time Protocol)は、さまざまなオペレーティングシステムで時刻を同期する方法を提供する標準化されたプロトコルです。 http://openntpd.org [OpenNTPd]は、元々http://openbsd.org [OpenBSD]プロジェクトの一部として開発されたNetwork Time Protocol(NTP)の無料で使いやすい実装です。 リモートNTPサーバーからローカルクロックを同期する機能を提供し、サーバー自体として機能することもできます。

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

前提条件

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

  • * root ユーザーを含む1つのFreeBSD 10.2ドロップレット。 DigitalOceanのデフォルトの freebsd *ユーザーで問題ありません。

FreeBSD Dropletには、リモートアクセス用のSSHキーが必要です。 SSHキーの設定に関するヘルプについては、https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-freebsd-server [SSHの設定方法]を参照してください。 FreeBSDサーバーでのキーベース認証]。 FreeBSD Dropletへのログインと基本管理の詳細については、https://www.digitalocean.com/community/tutorial_series/getting-started-with-freebsd [Getting Started with FreeBSD]チュートリアルシリーズをご覧ください。

ステップ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のhttps://github.com/abh/geodns[GeoDNS]を使用して、 `+ pool.ntp.org +`は通常、あなたの国またはその近くのサーバーのIPアドレスを返します。 ほとんどのユーザーにとって、これは最良の結果をもたらします。

または、 + br.pool.ntp.org id.pool.ntp.org`や + ru.pool.ntp.org + `のような国のゾーンを使用して、個人のニーズに合わせて結果を強制/制限することもできます。 NTPプールプロジェクトの詳細については、http://www.pool.ntp.org [pool.ntp.org]にアクセスしてください。

このチュートリアルの例では、ブラジルの領土の法的時間を保存および配布するブラジルのプロジェクト、http://ntp.br [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


# 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サイトを使用してください。 以下にハイライト表示されている最初の `#+`文字を削除することで、ファイルに含まれているサンプル行のコメントを解除できます。

/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


# 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サーバーに変更する方法を示します。

サーバー構成の最終結果はこのようになり、「++」がサーバーの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)


# 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 +`に渡すと、デーモンは設定された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は2つのバイナリを使用します: + ntpd +`と `+ ntpctl +。 最初のものはデーモン自体であり、クライアントまたはサーバーマシンに提供される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から解決)として応答するstratum 1サーバーに同期されていることを示しています。OpenNTPdデーモンは、NTPを介して31秒で時刻を更新します。

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.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アドレスの行が表示されます。 IPv4ソケットを表す「:123+」、およびリスニングIPv6ソケットを示す「:123」。

インターネットに接続する

`+ nc `を使用して、NTPだけでなく、多くのネットワークデーモンとそのソケット(UNIX、TCP、またはUDP)のトラブルシューティングを行います。 マンページには、「 ` telnet `とは異なり、netcatスクリプトはうまく機能し、エラーメッセージを ` telnet +`が標準出力に送信するのではなく標準エラーに分離します ”とあります。

IPv4経由でNTPサーバーまたはプールホストに到達できるかどうかを確認するには:

sudo nc pool.ntp.br 123 -z  -u -v
OutputConnection to pool.ntp.br 123 port [udp/ntp] succeeded!

IPv6経由でNTPサーバーまたはプールホストに到達できるかどうかを確認するには:

sudo nc pool.ntp.br 123 -z  -u -v
OutputConnection to pool.ntp.br 123 port [udp/ntp] succeeded!

ntpdateを使用する

+ ntpdate +`を使用して、使用するサーバーのトラブルシューティングを行います。 NTPサービスを実行しているマシンに関するいくつかの情報を取得できます: `+ stratum ++ offset +`および `+ delay +

sudo ntpdate -q  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 +」を使用します。

マニュアルページを読む

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

man -M /usr/local/man ntpd

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

結論

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