SNMP
SNMP(Simple Network Management Protocol)とは
ネットワーク上の機器に対してリモートで以下のようなことが行えるプロトコル。
- 状態確認
- 設定変更・制御
- 状態通知
SNMPで現在一般的に使用されているバージョンは以下の3つ。
- v1
- v2c
- v3
バージョンが上がるごとにセキュリティ機能などが強化されているが、一般的によく使われているのはまだv2cが圧倒的でデファクトスタンダードある。 また、製造時期が古い製品や管理機能が質素な製品にはv1しか対応していないものがある。
SNMPの登場人物
SNMPマネージャ
リモートから状態確認したり設定変更・制御する側の機器。監視サーバとか。
SNMPエージェント
状態確認や設定変更・制御の対象となる機器。クライアントといった方がわかりやすいかも。
SNMPの通信(ポーリングとセットとトラップ)
SNMPには大きく分けてポーリングとセットとトラップという3つの通信がある。
SNMPポーリング (Get, GetNext)
マネージャ側からエージェントに対して状態確認するのがSNMPポーリングで、マネージャはエージェントのUDP161番に対して通信を行い、エージェントはそれに応答する。 例えば、監視サーバから5分おきに機器の状態を監視したい時にポーリングが使用される。
指定したオブジェクト(後述)の情報だけ取得する「Get」と、指定したオブジェクトとその配下のすべての情報を取得する「GetNext」がある。
SNMPセット (Set)
マネージャ側からエージェントに対して設定変更・制御を実行するのがセットで、マネージャはエージェントのUDP161番に対して通信を行い、エージェントはそれに応答する。 例えば、機器をリブートしたりする際にセットが使用される。
SNMPトラップ (Trap)
エージェント側から(自発的に)マネージャに対して自身の状態を通知したりするのがトラップで、 エージェントはマネージャのUDP162番に対して通信を行う。 例えば、機器に何らかの異常が発生したときに監視装置に即時通知したい時にトラップが使用される。
MIB (標準MIBと拡張MIB)
MIB(Management Information Base)はSNMPで取得できる情報を階層的に管理・構成するデータベースのこと。 MIBで管理される情報はオブジェクトと言い、それぞれにオブジェクト名とオブジェクトID(OID)という数値を持つ。
例えば、機器の稼働時間を管理するオブジェクト名はsysUpTimeで、階層構造のルートからsysUpTimeまでのオブジェクト名(OID)のツリー構造は以下のようになる。
iso(1) → org(3) → dod(6) → internet(1) → mgmt(2) → mib-2(1) → system(1) → sysUpTime(3)
OIDは階層部分をドットでつなげて以下のように記載する。
.1.3.6.1.2.1.1.3
※ 先頭を . から記載することでルートからの記載であることを示す。
MIBには標準MIBと拡張MIBがある。
標準MIB
その名のとおり標準化されたMIBで、機器のメーカーによらず同じ情報が同じオブジェクト名(OID)で管理されている。 例えば前述のsysUptimeも標準MIB内のオブジェクトで、他には機器のホスト名、インタフェースの状態や通信量の情報なども標準MIBで管理されている。
OIDが.1.3.6.1.2から始まっていれば標準MIB内のものとわかる。
拡張MIB
拡張MIBはメーカーなどが独自に定義したMIBでプライベートMIBとも言われる。 拡張MIBは必ず、iso(1)→org(3)→dod(6)→internet(1)→private(4)配下に置かれ、 例えばCiscoの拡張MIBは .1.3.6.1.4.1.9、YAMAHAの拡張MIBは.1.3.6.1.4.1.1182の配下に置かれる。
OIDが.1.3.6.1.4から始まっていれば拡張MIB内のものとわかる。
MIBファイル
SNMPマネージャが全てのMIB情報を最初から持っているわけでは無いので、必要に応じてマネージャにMIB情報を追加する。 MIB情報は、MIBファイルというテキストファイルが発行元からリリースされており、それをマネージャにインポートする。
アクセス権限とコミュニティ名
SNMPには以下の2種類のアクセス権限がある。
- 読み込みのみ可能 ReadOnly (RO)
- 読み書きが可能 ReadWrite (RW)
ポーリングするだけならRO権限があればよく、セットしたい時はRW権限が必要。 なお、オブジェクトによってはROのみ許されたものがあり、例えば前述のsysUptime(システム稼働時間)は普通書き換えられたら困る情報なのでROのみ可能なオブジェクトとなっている。
v1とv2cは「コミュニティ名」というパスワードのようなものを認証に用いている。 歴史的な経緯なのか、ROは「public」、RWは「private」をコミュニティに使う例が多く、 それをそのまま使用してセキュリティ事故となることがあったりするので注意。 (機器のデフォルト設定だったりする)