SNMP
ネットワーク機器の状態を監視・管理するためのプロトコル。管理する側のSNMPマネージャと、管理される機器で動くSNMPエージェントが、MIBという管理情報をやり取りする。
イマシルちゃんの解説
たくさんのルータやスイッチを管理するとき、通信量や接続の状態をまとめて確認できると助かるよね。
そのために使うプロトコルがSNMPだよ。
監視する側のSNMPマネージャが、各機器で動くSNMPエージェントへ情報を問い合わせるんだ。
機器の情報はMIBという形で整理されていて、必要な項目を指定すると値を取得できるよ。
反対に機器側から、接続が切れたといった出来事をトラップで知らせることもできるんだ。
対応する設定を変更する機能もあり、機器を1台ずつ操作しなくてもネットワーク全体の監視や管理を進められるよ。
この解説はわかりやすかったですか?
より深い解説
定義
SNMP(Simple Network Management Protocol)は、IPネットワーク上の機器(ルータ、スイッチ、サーバ、プリンタなど)を監視・管理するためのプロトコルである。一般的な転送方式ではトランスポート層にUDPを使う。
| 構成要素 | 役割 |
|---|---|
| SNMPマネージャ | 監視する側(監視サーバ)。エージェントに情報を要求し、通知を受け取る |
| SNMPエージェント | 監視される機器で動くプログラム。機器の情報を管理し、マネージャに応答・通知する |
| MIB(Management Information Base) | エージェントが管理する情報の集まり。インタフェースの状態、通信量、CPU使用率などが、木構造の識別子(OID)で整理されている |
主な操作
| 操作 | 方向 | 内容 | ポート番号 |
|---|---|---|---|
| GetRequest / GetNextRequest | マネージャ → エージェント | MIBの値を読み出す | 161 |
| SetRequest | マネージャ → エージェント | MIBの値を書き換える(設定を変更する) | 161 |
| Response | エージェント → マネージャ | 要求への応答 | − |
| Trap | エージェント → マネージャ | 機器でイベントが起きたことを、エージェントから自発的に通知する | 162 |
| InformRequest | エージェント → マネージャ | Trapと同様の通知だが、受信の確認応答を求める(v2c以降) | 162 |
マネージャが定期的に問い合わせる方式をポーリング、エージェントから通知する方式をトラップという。定期取得ではMIBの中の必要な項目をOIDで指定し、現在の値を読む。管理情報の定義ファイル全体を毎回転送する意味ではない。
Trapには受信の確認応答がないため、通知の損失や機器の突然の停止をそれだけで検出できるとは限らない。定期取得と組み合わせて状態を照合する。InformRequestは受信側に応答を求める通知であり、両者を区別する。
バージョンとセキュリティ
| バージョン | 認証 | 暗号化 |
|---|---|---|
| SNMPv1 | コミュニティ名(平文) | なし |
| SNMPv2c | コミュニティ名(平文) | なし |
| SNMPv3のUSM | 利用者と認証鍵に基づく認証を選べる | authPrivを選ぶと暗号化も利用する |
SNMPv1とv2cでは、マネージャとエージェントに同じコミュニティ名を設定する。アクセスを制御する文字列だが平文で送られ、利用者を強く認証する仕組みではない。初期値の「public」のまま使っていると、第三者に機器の情報を読み取られたり、書込みが許可されていれば設定を変更されたりする。安全に使うには、SNMPv3で認証と暗号化を適切に設定し、アクセス元や操作権限も限定する。
SNMPv3を選んだだけで必ず暗号化されるわけではない。USMには認証なしのnoAuthNoPriv、認証のみのauthNoPriv、認証と暗号化を行うauthPrivというセキュリティレベルがある。
攻撃への悪用
SNMPは、管理のための強力な機能を持つため、攻撃に悪用されることがある。
| 悪用の例 | 内容 |
|---|---|
| 情報収集 | 推測しやすいコミュニティ名でMIBの値を読み出し、ネットワークの構成を調べる |
| 設定の改ざん | SetRequestで、機器の設定や、トラップの送信先を変更する |
| リフレクション攻撃 | 送信元を偽ったGetBulkRequestで、大きな応答を攻撃対象に送らせる(DRDoS攻撃) |
これらを防ぐため、SNMPのアクセスは管理用のネットワークに限定し、不要な書き込み(Set)の権限は無効にしておく。
監視でよく読む管理項目
| 情報 | 内容 |
|---|---|
| sysUpTime | SNMPの管理機能が初期化されてからの時間 |
| ifOperStatus | インタフェースが動いているか(up / down) |
| ifInOctets / ifOutOctets | インタフェースの受信・送信のオクテット数(通信量の計算に使う) |
LLDPで学習した隣接機器やポートの情報はLLDP-MIBから取得できる。監視サーバが各機器へ問い合わせて、どのポートがどの機器とつながるかを表にする構成がある。隣接装置間で情報を交換するLLDPと、保存された管理項目を読み取るSNMPの役割は異なる。
参考資料
実際の試験ではここに出る!全9問
ネットワークスペシャリスト
テクニカルエンジニア(ネットワーク)
- 午前