SNMP
ネットワーク機器の状態を監視・管理するためのプロトコル。管理する側のSNMPマネージャと、管理される機器で動くSNMPエージェントが、MIBという管理情報をやり取りする。
イマシルちゃんの解説
会社にたくさんあるルータやスイッチが、ちゃんと動いているか、1台ずつ見て回るのは大変だよね。
SNMPを使うと、監視用のサーバから、各機器に「調子はどう?」って聞いて回れるんだ。
それに、機器のほうから「大変!ケーブルが抜けたよ!」って知らせてくれることもできるんだよ。
ネットワークの健康診断をしてくれる、頼もしい仕組みなんだ!
より深い解説
定義
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 |
マネージャが定期的に問い合わせる方式をポーリング、エージェントから通知する方式をトラップという。
バージョンとセキュリティ
| バージョン | 認証 | 暗号化 |
|---|---|---|
| SNMPv1 | コミュニティ名(平文) | なし |
| SNMPv2c | コミュニティ名(平文) | なし |
| SNMPv3 | 利用者ごとの認証(ハッシュ) | あり |
SNMPv1とv2cのコミュニティ名は、パスワードに相当するが、平文で送られる。初期値の「public」のまま使っていると、第三者に機器の情報を読み取られたり、書き込み可能な設定であれば設定を変更されたりする。安全に使うには、SNMPv3を使うか、アクセスできるマネージャのアドレスを限定する。
攻撃への悪用
SNMPは、管理のための強力な機能を持つため、攻撃に悪用されることがある。
| 悪用の例 | 内容 |
|---|---|
| 情報収集 | 推測しやすいコミュニティ名でMIBを読み出し、ネットワークの構成を調べる |
| 設定の改ざん | SetRequestで、機器の設定や、トラップの送信先を変更する |
| リフレクション攻撃 | 送信元を偽ったGetBulkRequestで、大きな応答を攻撃対象に送らせる(DRDoS攻撃) |
これらを防ぐため、SNMPのアクセスは管理用のネットワークに限定し、不要な書き込み(Set)の権限は無効にしておく。
監視でよく使うMIBの例
| 情報 | 内容 |
|---|---|
| sysUpTime | 機器が起動してからの時間 |
| ifOperStatus | インタフェースが動いているか(up / down) |
| ifInOctets / ifOutOctets | インタフェースの受信・送信のオクテット数(通信量の計算に使う) |