【図解】SNMPプロトコルで出来ること、利用ポート、監視の仕組み、マネージャによるMIBのポーリング/トラップ受信、TCP/UDP〜

スポンサーリンク
スポンサーリンク

SNMP初心者のためのプロトコル概要

SNMPとは、Simple Network Management Protocolの略で、IPを持つ様々な機器がきちんと働いているか、もしくは働く上で問題が無いか、といった観点で機器を監視するためのプロトコルです。

監視とは具体的には『CPUやメモリ、インタフェースでのパケット受信がどのくらい使われているか?筐体内の温度は何℃か?』といった状態監視や、『HDDや電源、ファン等の部品が壊れていないか?』といったハードウェア監視、『L2ループが発生していないか?』といったソフトウェア監視など、多岐に渡ります。

これらの監視は『SNMPマネージャからSNMPエージェントへのポーリングによる情報取得』と『SNMPエージェントからSNMPマネージャへのトラップ/インフォーム通知』の2種類の仕組みにより実現します。

具体的な構成例を以下に示します。以下の例では、Linux OS上に「Nagios」というフリーの監視ソフトをインストールしており、そのNagiosの中にSNMP Managerの機能が含まれています。また、監視対象のサーバやNW機器上ではSNMPエージェントが動作しています。

スポンサーリンク

SNMPマネージャとは

SNMPマネージャはSNMPエージェントとSNMPポーリング(SNMP Get-Requestの送信とSNMP Get-Responseの受信)を定期的(例えば3分間隔)に行います。これにより、SNMPエージェントは受動的に情報を渡します。

また、それと同時に、SNMPエージェント側の機器に何か障害が発生したときには速やかにSNMPエージェントから能動的にトラップ/インフォームRequest受信(インフォームを受信した場合はインフォームResponseの送信)を行うものです。

SNMPマネージャはWindowsサーバやLinuxサーバの上にインストールする、監視ソフトに内包されるのが一般的ですが、監視ソフトとしては、それ以外にもサービス監視、リソース監視、プロセス監視といった機能を持つことが多いです。それらは場合によってはSNMPエージェント以外のエージェントにより実現します。(先程の図の例であれば、Nagiosエージェント)

各監視の説明については下記ページをご参照下さい。

【ネットワークシステム運用監視設計】のための基礎知識
【ネットワークシステム運用監視設計】のための基礎知識
ネットワークシステム監視とは 構築したシステムを適切に運用するためにはいくつか...

また、監視ソフトには例えば以下があります。

・フリー:Nagios, Zabbix, MRTG, hinemos, xymon, 等
・有償ソフト:OP Manager, PRTG, 等

SNMPエージェントとは

SNMPエージェントは、ネットワーク機器であれば大抵初期インストールされており、設定で有効にするだけで使えるようになります。

例えばciscoであれば以下コマンドで使えるようになります。

Router(config)# snmp-server community public RO

また、Windowsも同様に、「SNMP Service」というサービスを設定・起動するだけで使えるようになります。

Ctrl + R
⇒『ファイル名を指定して実行』の名前欄に services.msc と押下しEnter
⇒以下画面の該当箇所をダブルクリックし、「起動」ボタンをクリック

スポンサーリンク

Linuxはnet-snmpというパッケージをインストールし、設定・有効化することで使えるようになります。

SNMPのバージョン

一般にバージョン1及びバージョン2は利用されません。バージョン2cかバージョン3が使われます。バージョン2cまではセキュリティが甘く、コミュニティと呼ばれる文字列が平文でやり取りされるため、パケットキャプチャをすればコミュニティが分かり、結果、第三者が簡単にMIB情報取得を出来てしまいます

例えば先程のCiscoのコマンドの例では、コミュニティは”public”となります。

バージョン3からは暗号化がサポートされ、その問題を回避できます。

SNMPでTCPでは無くUDPを使う理由、ポート番号について

SNMPではポーリングはUDP161番ポートトラップ/インフォームはUDP162が使われます。

SNMPは一度にたくさんの機器を監視するケースが多いため、TCPだとマネージャにたくさんのコネクションが張られ、負荷が大きいです。また、小さいデータしか扱わないため、例えば実容量が96Byte程度のやり取りをする場合は、3way Handshake や FIN/ACKの処理も含めると、UDPで扱う場合に比べて通信量が約2.8倍にもなります。

スポンサーリンク

なのでSNMPではUDPを使いポーリングに3回連続応答しない場合は異常があったと見做す、というような設定が一般的です。

ポーリングは往復が前提であるため、応答が無ければ異常だと検知できますが、トラップはエージェントから一方的に送られるだけです。なので万が一マネージャがそのパケットを取りこぼした場合は検知できません。

そのため、バージョン2からはトラップだけでなく、インフォームという方式も使えるようになりました。SNMPエージェントがインフォームリクエストでSNMPマネージャに通知した場合SNMPマネージャはSNMPエージェントにインフォームレスポンスを返さなければなりません。もしSNMPマネージャがインフォームリクエストを取りこぼした場合、レスポンスが返されませんので、SNMPエージェントはタイムアウトの後、リクエストの再送を試みます。

MIBとは

MIBとは、機器の監視に使えるような情報を含んだ軽量のデータベースです。oidと呼ばれる一意な識別子により、どのような情報が含まれているかが決まっています。

例えばCPU使用率の情報のoidは”1.3.6.1.2.1.25.3.3.1.2″です。

SNMPポーリングではマネージャ側がoidを指定し、そのMIB情報を取りに行っています。また、トラップ/インフォームでは、エージェント側がどのようなトラップ/インフォームを出すかを設定しておき、それに対応するoidの情報が変わった際にトラップ/インフォームを送信します。

MIBは大きく2種類に分かれます。

1つはすべての機器に共通のもので、MIB-2と呼ばれています。もう1つはベンダ独自のもので、ベンダーMIB(プライベートMIB)と呼ばれています。

MIB-2 の oid は 1.3.6.1.2.1 で始まるものです。例えば先程のCPU負荷は MIB-2 です。その他、ホスト名やインタフェースのユニキャストパケット受信量など、汎用的なものが含まれています。

一方、ベンダーMIB の oid は 1.3.6.1.4.1 です。この次の値はベンダを識別するものです。例えばAlaxalaであれば”21839″ですので、”1.3.6.1.4.1.21839.” と続いていきます。これらにはベンダ独自の情報が含まれています。例えば、Alaxalaのリングプロトコルに関連する情報なども存在し、リングプロトコルのステータス(リングが保たれているか否か)等の情報も取得できます。

各メーカ、SNMPベンダーMIBは公開されているか、購入後にベンダから提供されますので、必要に応じて調べ、監視項目として設定していくのが良いでしょう。

oid は以下サイト等から調べられます。

http://oidref.com/

スポンサーリンク

SNMP writeの実装例

SNMP には Read モードWrite モードの2種類がありますが、基本的に Read モードのみが使われることが多いです。監視では情報を読み取るだけなので、監視のみが目的であれば、Read だけで事足りるからです。

では Write モードではどのようなことが出来て、どのような実装があるのでしょうか

SNMP Writeモードで出来ること

まず、Writeモードでは機器のMIB値の変更が出来ます。これにより、特定インタフェースをDownさせたり、機器自体をリブートしたりと、MIBが持っている内容に応じて、様々な連携が可能になります。

SNMP Writeモードの実装例

例えばIPSと連携して、事後検疫システムの実装が出来ます。

具体的には、UTM=Fortinet FortiGate, コアL3スイッチ=Alcatel-Lucent OmniSwitchで、Alcatel-Lucentが提供するソフトウェア「OmniVista」をインストールしたWindowsサーバで以下のような構成を組みます。

FortiGateのIPS機能で不正通信ログをOmniVistaへsyslogで飛ばし、そのsyslogに含まれるIP情報をOmniSwitch へ Alcatel独自MIBを SNMP write で変更することで、そのIPに紐づくMACアドレスの通信を禁止する、といった連携が可能です。

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク