SNMPとは
SNMP(Simple Network Management Protocol)は、ルータ、スイッチ、サーバなどの通信機器をネットワーク経由で監視・制御するためのアプリケーション層プロトコルです。SNMPを利用すると、ネットワーク障害が発生した場合にどの機器に問題があるのかを素早く突き止められ、障害対応に役立ちます。
SNMPの構成要素
SNMPは「管理する側」と「管理される側」で構成されます。
- SNMPマネージャ:監視を行う側。エージェントに情報を要求したり監視したりする
- SNMPエージェント:監視される側。マネージャの要求に応答したり、状態変化を通知したりする
代表的なSNMPマネージャには net-snmp(オープンソース)、JP1/Network Node Manager i(HITACHI)、TWSNMP Manager などがあります。
| 構成要素 | 役割 | 使用機器 |
|---|---|---|
| SNMPマネージャ | 情報要求や監視を行う | Windowsサーバ、Linuxサーバなど |
| SNMPエージェント | 応答や状態変化の通知を行う | ルータ、スイッチ、サーバなど |
SNMPのトラフィック
- SNMPエージェント:UDPのポート番号161を使用
- SNMPマネージャ:UDPのポート番号162を使用
マネージャからエージェントへの問い合わせはポート161、エージェントからマネージャへのトラップ通知はポート162が使われます。
MIBとは
MIB(Management Information Base)は、SNMPエージェントが持つ機器情報のデータベースです。SNMPマネージャとエージェントは、このMIBを使って通信機器の状態をやり取りします。
- MIBはツリー構造で管理され、個々の情報はオブジェクトと呼ばれる
- 各オブジェクトにはOID(オブジェクトID)が付与される
- 例:
dodのOIDは「1.3.6」、CiscoのOIDは「1.3.6.1.4.1.9」
MIBには標準MIBとベンダ独自の拡張MIBがあり、現在はMIB2が主流です。SNMPマネージャでも機器のMIB情報を読み込む必要があり、メーカーのサイトからMIBファイルを入手できます。
RMONとは
RMON(Remote Monitoring)は、SNMPを拡張してLANの通信状況を遠隔監視する仕組みです。通常のMIBが「機器単体」の監視情報を提供するのに対し、RMONでは「ネットワーク回線全体」のトラフィック統計情報を取得できます。
SNMPメッセージ
SNMPマネージャとエージェントがやり取りするメッセージには以下の種類があります。
| SNMPメッセージ | 送信側 | 内容 |
|---|---|---|
| Get Request | マネージャ | OIDを指定して情報を要求 |
| GetNext Request | マネージャ | 指定したOIDの次の情報を要求 |
| Set Request | マネージャ | OIDを指定してエージェントの設定を変更 |
| Get Response | エージェント | マネージャの要求に応答して値を返す |
| TRAP | エージェント | 機器の状態変化をマネージャに通知 |
まとめ
- SNMPは「ネットワーク機器の監視と制御」を行うプロトコル
- ポート番号は「161(エージェント側)」「162(マネージャ側)」
- 監視情報はMIBに格納され、OIDで識別される
- RMONを使うとネットワーク全体のトラフィックを監視できる
SNMPコミュニティとは
SNMPコミュニティとは、SNMPで管理されるネットワークの範囲を表す仕組みです。SNMPマネージャとSNMPエージェントが同じコミュニティ名を設定している場合、情報をやりとりできます。異なる機器ごとにコミュニティ名を分けることで、効率的な管理やアクセス権限の分離が可能です。
MIB(管理情報ベース)に対するアクセス権限は以下のように分かれます。
| MIBへのアクセス権限 | 説明 |
|---|---|
| RO | Read-only。読み取りのみ可能 |
| RW | Read-write。読み取りと書き込みが可能 |
| Read-write-all | コミュニティ設定を含めた読み書きが可能 |
RW以上の権限があると、マネージャ側からルータを強制再起動するなど制御も可能になります。
SNMPのバージョン
SNMPには以下のバージョンがあります。実際に広く使われているのは v1、v2c、v3 の3種類です。
| SNMPバージョン | RFC | 特徴 |
|---|---|---|
| SNMPv1 | RFC 1157 | コミュニティ名による平文認証。トラップ再送確認なし |
| SNMPv2c | RFC 1901 | コミュニティ名による平文認証。トラップ再送確認あり |
| SNMPv3 | RFC 2273〜2275 | ユーザ単位のパスワード認証と暗号化対応。トラップ再送確認あり |
SNMPメッセージ
- SNMPv1では以下の5つ
- Get Request:情報取得要求
- GetNext Request:次の情報取得要求
- Set Request:設定変更要求
- Get Response:エージェントからの応答
- TRAP:状態変化の通知
- SNMPv2cでは上記5つに加え、次の2つが追加
- GetBulk Request:複数情報の一括取得
- Inform Request:通知と応答のやりとり
- SNMPv3もSNMPv2cと同じ7種類を利用可能
SNMPv3のセキュリティ機能
SNMPv3では、従来の「コミュニティ名」ではなく以下の2つの仕組みが追加されています。
- USM(User-based Security Model):ユーザごとのパスワード認証
- VACM(View-based Access Control Model):ユーザごとにアクセス可能なMIB範囲を設定
SNMPv3には3段階のセキュリティレベルがあります(Cisco機器の例)。
| セキュリティレベル | 認証 | 暗号化 | 結果 |
|---|---|---|---|
| noAuthNoPriv | ユーザ名のみ | なし | 認証・暗号化なし |
| authNoPriv | MD5 または SHA | なし | 認証あり・暗号化なし |
| authPriv | MD5 または SHA | DES または AES | 認証あり・暗号化あり |
SNMPv3を使用する場合は、マネージャとエージェントの双方がSNMPv3に対応している必要があります。
まとめ
- SNMPコミュニティは「監視のグループ名」のようなもので、同じ名前を設定するとやりとりできる
- v1は古く、v2cはよく使われ、v3は安全性が高い
- v3では「ユーザ認証+暗号化」でセキュリティが強化されている
SNMPv1・SNMPv2c:設定例まとめ
Cisco機器を「SNMPエージェント」として動作させるには、SNMPマネージャ(監視サーバ)からの要求やTrap送信を受け付けるように設定する必要があります。
以下に、試験や実機設定でよく問われるコンフィグ例を整理します。
① Get Request / GetNext Request(読み取り専用)
監視サーバがCisco機器の情報を取得するための設定です。読み取り専用(ro)のコミュニティ文字列を定義します。
(config)# snmp-server community Public01 ro
Public01:コミュニティ文字列(パスワードのような役割)ro:読み取り専用(read-only)
→ SNMPマネージャからMIB値の取得は可能ですが、書き換えはできません。
② Set Request(書き込み可能)
監視サーバからCisco機器の設定を書き換えたい場合に使用します。読み書き可能(rw)のコミュニティ文字列を定義します。
(config)# snmp-server community Private01 rw
Private01:コミュニティ文字列rw:読み取り+書き込み(read-write)
→ 例えばインターフェースの状態変更などが可能になります。
※ 実運用ではセキュリティ上、rwの使用は極力避けます。
③ Trap送信(SNMPv1)
Cisco機器から監視サーバへイベント通知を行う場合の設定です。
(config)# snmp-server host 192.168.1.101 Public01
(config)# snmp-server enable traps
192.168.1.101:SNMPマネージャのIPアドレスPublic01:Trap送信用のコミュニティ文字列enable traps:Trap送信を有効化
④ Trap送信(SNMPv2c)
SNMPv2cを使う場合はバージョン指定が必要です。
(config)# snmp-server host 192.168.1.101 version 2c Public01
(config)# snmp-server enable traps
version 2c:SNMPv2cを指定- コミュニティ文字列はSNMPv1と同様に必要
SNMPのデフォルト設定を理解する
シスコ機器は、初期状態ではSNMP関連の機能がほとんど無効化されています。これはセキュリティ上の理由からであり、誤って外部から管理操作を受けないようにするためです。例えば、SNMPエージェントそのものが無効、トラップ受信先は未設定、通知も基本的には送信されません。また、バージョン指定をしないと自動的にSNMPv1が選択される点も重要です。SNMPv3については、デフォルトで認証も暗号化もない「noAuthNoPriv」という最低限のセキュリティレベルになります。
SNMPv1・v2cで使うコミュニティストリング
SNMPv1とv2cでは「コミュニティストリング」という文字列を使ってアクセス制御を行います。これはパスワードのようなもので、管理者が定めた文字列を知っているSNMPマネージャだけがアクセスできます。設定コマンドは次の形式です。
(config)# snmp-server community string [ view view-name ] [ ro | rw ] [ acl-number ]
ここで指定する string がパスワード代わり、ro は読み取り専用、rw は読み書き可能を意味します。さらにACL番号を指定すると、特定のホストだけをアクセス許可することも可能です。例えば、読み取り専用の「Public01」を作るなら snmp-server community Public01 ro となります。試験では「roとrwの違い」や「ACLと組み合わせてアクセス制御できる」点を理解しているかどうかがチェックされます。
SNMPマネージャを特定ホストに限定する
セキュリティを高めるため、SNMPマネージャを特定のIPアドレスに限定する設定もよく行われます。例えば192.168.1.101からのアクセスだけ許可するなら、次のようにACLと組み合わせます。
(config)# access-list 1 permit host 192.168.1.101
(config)# snmp-server community Private01 rw 1
このようにACL番号を最後に付けることで、SNMPアクセスを制御できるのです。現場では必須の設定であり、試験でも「ACLを使ったSNMPアクセス制御」が狙われやすいポイントです。
SNMPトラップの基本設定
SNMPトラップは、ルータやスイッチがイベントを検知したときにSNMPマネージャへ通知する仕組みです。たとえばインターフェースのリンクダウンや電源異常が起きると、自動的に管理サーバへメッセージが送信されます。設定の基本形は次のとおりです。
(config)# snmp-server host address [ informs | traps ] [ version 1 | 2c | 3 auth | noauth | priv ] community-string type
ここで address はマネージャのIP、version はSNMPのバージョンを指定します。community-string にはSNMPv1・v2cならコミュニティ名、v3ならユーザ名を指定します。
また、トラップを有効化するには次のコマンドを使います。
(config)# snmp-server enable traps
このコマンドだけで全てのトラップが有効になりますが、必要な種類だけを指定するのが実運用では一般的です。例えばインターフェースのリンクダウンや起動時の状態変化などを指定することが多いです。試験では「snmp-server host」と「snmp-server enable traps」をセットで理解しているかが問われます。
トラップの実用的な例
たとえば、SNMPマネージャが192.168.1.101にある場合、全てのトラップをv2cで通知するなら次のように設定します。
(config)# snmp-server host 192.168.1.101 version 2c public01
(config)# snmp-server enable traps
さらに実際の現場では、次のように通知内容を細かく選ぶことも多いです。
(config)# snmp-server enable traps snmp authentication linkdown linkup coldstart warmstart
(config)# snmp-server enable traps envmon fan shutdown supply temperature status
(config)# snmp-server enable traps config
このように指定すると、重要なイベントだけが管理サーバに送られるので効率的です。ここは「試験対策というより実務的な知識」ですが、理解しておくと応用問題に強くなれます。
SNMPの補助的な設定
さらにSNMPでは管理しやすくするための追加設定も用意されています。例えば、トラップ送信に使うインターフェースを明示したり、トラップ再送間隔を変更したりできます。また、管理者名を記録する snmp-server contact、設置場所を示す snmp-server location なども設定可能です。これらは試験では頻出ではありませんが、ネットワーク運用ではよく活用されるので覚えておくと役立ちます。
まとめ
SNMPの学習で大切なのは、デフォルトでは無効化されていること、SNMPv1・v2cではコミュニティストリングを使って制御すること、トラップを送信するには snmp-server host と snmp-server enable traps の両方が必要なことです。この3つは特に試験で狙われやすいので、必ず理解しておきましょう。
SNMPv3の特徴と基本構成
SNMPv3は、従来のv1やv2cと比べてセキュリティ機能が大幅に強化されています。特に「ユーザベースの認証」「暗号化」「ビューによるアクセス制御」の仕組みがある点が重要です。試験では、v3特有のセキュリティレベル(noAuthNoPriv、authNoPriv、authPriv)や、ユーザ・グループ・ビューの関連性がよく問われるので、流れを理解しておくことが合格の近道です。
SNMPビューの設定
SNMPビューとは、MIB(管理情報ベース)の中からアクセス対象を絞り込むフィルタのようなものです。監視する範囲を決めて、不要なMIBを隠すことができます。コマンドは次の形式です。
(config)# snmp-server view name OID [ included | excluded ]
たとえば「READVIEW」という名前で、internet ツリーを監視対象にするなら以下のようにします。
(config)# snmp-server view READVIEW internet included
これで、後に定義するSNMPグループやユーザが、このビューを通してのみ情報を取得できるようになります。
SNMPエンジンIDの設定
SNMPv3では「エンジンID」という一意の識別子が使われます。デフォルトでは自動生成されますが、手動で設定することも可能です。特にリモートユーザを設定する場合には、先にリモートエンジンIDを登録しておかなければコマンドがエラーになります。
(config)# snmp-server engineID local 1234
(config)# snmp-server engineID remote 192.168.1.101 00000063000100a1c0b4011b
ここで「local」は自身の機器を、「remote」はSNMPマネージャを指します。試験では「リモートユーザ設定の前にエンジンIDを定義しなければならない」点が狙われやすいです。
SNMPグループの設定
SNMPv3では、ユーザはまず「グループ」に所属します。そしてグループにビューやセキュリティレベルを割り当てることで、アクセス権限が決まります。コマンドは次の通りです。
(config)# snmp-server group group-name v3 [ auth | noauth | priv ]
[ read readview ] [ write writeview ] [ notify notifyview ] [ access acl-number ]
セキュリティレベルは次の3段階です。
| レベル | 認証方法 | 暗号化 | 説明 |
|---|---|---|---|
| noAuthNoPriv | ユーザ名のみ | なし | 認証も暗号化もしない |
| authNoPriv | MD5/SHA | なし | 認証のみ行う |
| authPriv | MD5/SHA | DES/AES | 認証と暗号化を行う |
例えば、読み取り専用ビュー「READVIEW」をnoAuthで使わせるグループを作るなら次のようにします。
(config)# snmp-server group AUTHG v3 noauth read READVIEW
SNMPユーザの設定
ユーザは必ずグループに所属し、認証方式や暗号化方式を指定して作成します。コマンドは次のようになります。
(config)# snmp-server user username groupname [ remote address v3 ]
auth [ md5 | sha ] auth-password
[ priv [ des | 3des | aes [ 128 | 192 | 256 ] priv-password ] ]
例えば「CCIE」というユーザを作り、MD5認証を利用する場合は以下のように設定します。
(config)# snmp-server user CCIE AUTHG v3 auth md5 Cisco123
このユーザは「AUTHG」というグループに所属し、そのグループに割り当てられたビューやセキュリティレベルに従ってアクセスできるようになります。
SNMPv3でのトラップ設定
SNMPv3でもトラップは使用できます。基本構文は以下です。
(config)# snmp-server host address [ informs | traps ] version 3 [ auth | noauth | priv ] username type
ここで username は先ほど作成したSNMPユーザを指定します。セキュリティレベル(auth / noauth / priv)は、ユーザ作成時に設定したものと一致させる必要があります。
さらに、トラップを有効化するためには次のコマンドを入力します。
(config)# snmp-server enable traps
これで全てのトラップが有効になります。特定のイベントだけ通知したい場合は、後ろに種類を指定します。
設定例1:読み取り専用のSNMPv3環境
MIB全体を監視できるビューを作り、ユーザ「CCIE」が読み取り専用でアクセスできるようにする例です。
(config)# snmp-server view READVIEW internet included
(config)# snmp-server view READVIEW iso included
(config)# snmp-server group AUTHG v3 noauth read READVIEW
(config)# snmp-server user CCIE AUTHG v3 auth md5 Cisco123
この設定では、CCIEユーザは認証付きでアクセス可能ですが、暗号化は使いません。
設定例2:リモートホストを指定してトラップ通知
SNMPマネージャ(192.168.1.101)と連携する場合の例です。
(config)# snmp-server engineID remote 192.168.1.101 00000063000100a1c0b4011b
(config)# snmp-server group AUTHG v3 auth
(config)# snmp-server user authuser AUTHG remote 192.168.1.101 v3 auth md5 mypassword
(config)# snmp-server host 192.168.1.101 informs version 3 auth authuser config
(config)# snmp-server enable traps
ここでは「authNoPriv」で認証を行い、暗号化はしていません。実際の現場では、さらに暗号化(authPriv)を組み合わせるケースが多くなります。