NTP
ネットワークにつながった機器の時刻を、正確な時刻のサーバに合わせる(同期する)ためのプロトコル。UDPの123番ポートを使う。
イマシルちゃんの解説
パソコンやサーバの時計は、放っておくと少しずつずれていくんだ。
時刻がそろっていないと、複数の機器が残した動作記録(ログ)を比べても出来事の順番を追いにくくなるよ。
NTPは、ネットワークを通じて機器の時計をサーバの時刻に合わせるプロトコルなんだ。
問い合わせと応答を送受信した時刻から、通信にかかった時間と時計のずれを見積もるよ。
その結果を使って時計を調整し、定期的にやり取りしてずれを小さく保つんだ。
通信の状況などで誤差は残るけれど、機器同士で時刻をそろえると障害の原因を調べやすくなるんだよ。
この解説はわかりやすかったですか?
より深い解説
定義
NTP(Network Time Protocol)は、RFC 5905などで定められた、ネットワークを通じて機器の時刻を同期するためのプロトコルである。UDPのポート123番を使う。インターネット上でもミリ秒単位、LANではそれ以上の精度で時刻を合わせられる。
階層構造(ストラタム)
| ストラタム | 内容 |
|---|---|
| 0 | 原子時計やGPSなどの、正確な時刻の源(基準時計) |
| 1 | ストラタム0に直接接続されたNTPサーバ |
| 2 | ストラタム1から時刻を得るサーバ |
| … | 数字が大きいほど、基準時計から遠い(最大15) |
上位のサーバに負荷が集中しないように、組織の中にNTPサーバを置き、組織の機器はそこから時刻を得るのが一般的である。
時刻の合わせ方
クライアントとサーバの間で、送信と受信の4つの時刻(T1~T4)を記録し、ネットワークの往復の遅延を差し引いて、時刻のずれを計算する。
往復の遅延 = (T4 − T1) − (T3 − T2)
時刻のずれ = ((T2 − T1) + (T3 − T4)) ÷ 2
T1:クライアントの送信時刻、T2:サーバの受信時刻、T3:サーバの送信時刻、T4:クライアントの受信時刻
NTPを使った増幅型のDDoS攻撃
NTPは、送信元を偽装しやすいUDPを使い、小さな要求に大きな応答を返す機能があったため、DRDoS(リフレクション)攻撃の踏み台に悪用された。
- 攻撃者は、送信元IPアドレスを攻撃対象に偽装して、多数のNTPサーバに要求を送る
- 悪用されたのは、管理用のmonlistコマンド(直近にアクセスしてきた最大600件のクライアントの一覧を返す機能)
- 小さな要求に対して、非常に大きな応答(数百倍)が、攻撃対象に送りつけられる
踏み台にされないための対策
| 対策 | 内容 |
|---|---|
| monlistを無効にする | NTPサーバの設定を変更して、状態確認の機能(monlist)を使えなくする。ソフトウェアを更新する(新しい版では既定で無効) |
| アクセスの制限 | 時刻の問い合わせに応答する相手を、自組織のネットワークに限定する |
| 送信元の偽装を防ぐ | ISPや組織の出口で、送信元IPアドレスが偽装されたパケットを遮断する(イングレスフィルタリング) |
「自ネットワーク外のNTPサーバへの時刻の問い合わせを止める」ことは、自分の時刻同期を止めるだけで、踏み台にされることの防止にはならない。また、「外部からのUDPのアクセスをNTPだけ許可する」設定は、むしろNTPへの要求を受け入れることになる。
SNTP
SNTP(Simple NTP)は、NTPの機能を簡略化したもので、高い精度を必要としないクライアントや組込み機器で使われる。NTPと同じパケットの形式とポート番号を使う。