メインコンテンツまでスキップ

RFC 1157 - シンプルネットワーク管理プロトコル (A Simple Network Management Protocol, SNMP)

ネットワークワーキンググループ
Request for Comments: 1157
廃止: RFC 1098

著者:
J. Case (SNMP Research)
M. Fedor (Performance Systems International)
M. Schoffstall (Performance Systems International)
J. Davin (MIT Laboratory for Computer Science)

発行日: 1990年5月


概要 (Abstract)

本RFCは、論理的にリモートのユーザーがネットワーク要素の管理情報を検査または変更できるシンプルなプロトコルを定義します。特に、管理情報の構造と管理情報ベース (Management Information Base) を説明する関連メモとともに、これらの文書は、TCP/IPベースのインターネット、特にインターネットを管理するためのシンプルで実用的なアーキテクチャとシステムを提供します。

インターネット活動委員会 (Internet Activities Board, IAB) は、すべてのIPおよびTCP実装がネットワーク管理可能であることを推奨しています。これは、インターネットMIB (RFC 1156) と、推奨される2つの管理プロトコルのうち少なくとも1つ(SNMP (RFC 1157) またはCMOT (RFC 1095))の実装を意味します。


目次 (Table of Contents)


1. 本メモのステータス

これはインターネット標準プロトコルです。IABは、すべてのIPおよびTCP実装がネットワーク管理可能であることを推奨しており、これはSNMPの実装を意味します。


2. はじめに

SNMPの目標: インターネット内のネットワークデバイスを管理するためのシンプルなプロトコルを提供すること。

主要な特徴:

  • 🔍 監視 (Monitoring): デバイスの状態と統計情報を照会
  • ⚙️ 設定 (Configuration): デバイスの設定パラメータを変更
  • 🔔 通知 (Notifications): デバイスの異常通知を受信 (Traps)
  • 📊 シンプルさ (Simplicity): 実装とデプロイが容易

SNMPの動作原理:

管理ステーション (Manager)              管理対象デバイス (Agent)
| |
|------ GetRequest (照会) ------------>|
|<----- GetResponse (応答) ------------|
| |
|------ SetRequest (設定) ------------>|
|<----- GetResponse (確認) ------------|
| |
|<----- Trap (能動的アラート) ---------|

3. SNMPアーキテクチャ

3.1 アーキテクチャの目標

  1. シンプルさ: プロトコルがシンプルで実装が容易
  2. 拡張性: 新しい管理オブジェクトの追加をサポート
  3. 独立性: 特定のネットワークアーキテクチャから独立
  4. 最小限の影響: デバイスのパフォーマンスへの影響を最小限に

3.2 アーキテクチャの要素

3.2.1 管理情報の範囲

SNMPが管理する情報には以下が含まれます:

  • インターフェース統計 (トラフィック、エラーなど)
  • ルーティングテーブル
  • TCP/UDP接続
  • システム情報

3.2.2 管理情報の表現

管理情報ベース (Management Information Base, MIB) を使用して表現されます:

MIBオブジェクトの例:

オブジェクト識別子 (OID): 1.3.6.1.2.1.1.1.0
名前: sysDescr (システム記述)
構文: OCTET STRING
アクセス: read-only
値: "Cisco IOS Software, Version 15.2"

3.2.3 サポートされる操作

操作説明方向
GetRequestオブジェクト値の取得要求Manager → Agent
GetNextRequest次のオブジェクト値の取得要求 (走査用)Manager → Agent
SetRequestオブジェクト値の設定要求Manager → Agent
GetResponseGet/Set要求への応答Agent → Manager
Trap非同期イベント通知Agent → Manager

3.2.4 プロトコル交換の形式と意味

SNMPはUDPプロトコルを使用します:

  • 管理ステーションポート: 162 (Trap受信)
  • エージェントポート: 161 (Get/Set受信)

3.2.5 管理関係の定義

SNMPはコミュニティ名 (Community Name) を使用してシンプルな認証を行います:

コミュニティ名: "public" (デフォルトで読み取り専用)
コミュニティ名: "private" (デフォルトで読み書き可能)

3.2.6 管理対象オブジェクトの参照

オブジェクトインスタンスの識別:

スカラーオブジェクト:

sysDescr.0  (インスタンスを示すために.0を追加)

テーブルオブジェクト:

ifDescr.1   (インターフェース1の記述)
ifDescr.2 (インターフェース2の記述)

4. プロトコル仕様

4.1 手順の要素

SNMPメッセージ形式

SNMPメッセージ ::= SEQUENCE {
version INTEGER, -- SNMPバージョン (0 = SNMPv1)
community OCTET STRING, -- コミュニティ名
data PDUs -- プロトコルデータユニット
}

4.1.1 共通構造

すべてのPDUで共有されるフィールド:

  • request-id: 要求識別子
  • error-status: エラーステータス
  • error-index: エラーインデックス
  • variable-bindings: 変数バインディングリスト

4.1.2 GetRequest-PDU

目的: 1つ以上の管理オブジェクトの値を取得します。

:

GetRequest {
request-id: 1234,
error-status: 0,
error-index: 0,
variable-bindings: [
{name: 1.3.6.1.2.1.1.1.0, value: NULL}, -- sysDescr
{name: 1.3.6.1.2.1.1.3.0, value: NULL} -- sysUpTime
]
}

4.1.3 GetNextRequest-PDU

目的: 変数バインディングリスト内の各変数名の辞書順で次のオブジェクトを取得します。

テーブル走査の例:

ステップ1: GetNextRequest(ifDescr)
応答: ifDescr.1 = "eth0"

ステップ2: GetNextRequest(ifDescr.1)
応答: ifDescr.2 = "eth1"

ステップ3: GetNextRequest(ifDescr.2)
応答: ifType.1 = 6 (次のオブジェクト)

4.1.4 GetResponse-PDU

目的: GetRequest、GetNextRequest、またはSetRequestに応答します。

エラーステータス:

名前説明
0noError成功
1tooBig応答が大きすぎる
2noSuchNameオブジェクトが存在しない
3badValue値が無効
4readOnlyオブジェクトは読み取り専用
5genErr一般的なエラー

4.1.5 SetRequest-PDU

目的: 1つ以上の管理オブジェクトの値を変更します。

:

SetRequest {
request-id: 1235,
error-status: 0,
error-index: 0,
variable-bindings: [
{name: 1.3.6.1.2.1.1.6.0, value: "New Location"} -- sysLocation
]
}

4.1.6 Trap-PDU

目的: エージェントが管理ステーションに非同期通知を送信します。

Trapタイプ:

Trap説明
coldStartデバイスのコールドスタート
warmStartデバイスのウォームスタート
linkDownリンクダウン
linkUpリンクアップ
authenticationFailure認証失敗
egpNeighborLossEGPネイバー喪失
enterpriseSpecificベンダー固有のイベント

Trapメッセージ形式:

Trap-PDU ::= SEQUENCE {
enterprise OBJECT IDENTIFIER, -- エンタープライズOID
agent-addr NetworkAddress, -- エージェントアドレス
generic-trap INTEGER, -- 汎用Trapタイプ
specific-trap INTEGER, -- 特定のTrapコード
time-stamp TimeTicks, -- タイムスタンプ
variable-bindings VarBindList -- 変数バインディング
}

5. 定義

ASN.1定義 (簡略版):

RFC1157-SNMP DEFINITIONS ::= BEGIN

IMPORTS
ObjectName, ObjectSyntax, NetworkAddress, IpAddress, TimeTicks
FROM RFC1155-SMI;

-- PDUタイプ
PDUs ::= CHOICE {
get-request GetRequest-PDU,
get-next-request GetNextRequest-PDU,
get-response GetResponse-PDU,
set-request SetRequest-PDU,
trap Trap-PDU
}

-- GetRequest、GetNextRequest、SetRequestはこの構造を共有
GetRequest-PDU ::= [0] IMPLICIT PDU
GetNextRequest-PDU ::= [1] IMPLICIT PDU
SetRequest-PDU ::= [3] IMPLICIT PDU

PDU ::= SEQUENCE {
request-id INTEGER,
error-status INTEGER,
error-index INTEGER,
variable-bindings VarBindList
}

GetResponse-PDU ::= [2] IMPLICIT PDU

Trap-PDU ::= [4] IMPLICIT SEQUENCE {
enterprise OBJECT IDENTIFIER,
agent-addr NetworkAddress,
generic-trap INTEGER,
specific-trap INTEGER,
time-stamp TimeTicks,
variable-bindings VarBindList
}

VarBindList ::= SEQUENCE OF VarBind

VarBind ::= SEQUENCE {
name ObjectName,
value ObjectSyntax
}

END

6. 謝辞

SNMPの開発は、インターネットコミュニティの広範な参加と貢献によって恩恵を受けました。


7. 参考文献

  • [RFC1155] - Structure and Identification of Management Information for TCP/IP-based Internets
  • [RFC1156] - Management Information Base for Network Management of TCP/IP-based internets
  • [RFC1098] - A Simple Network Management Protocol (本RFCにより廃止)

8. セキュリティに関する考察

SNMPv1のセキュリティ制限:

⚠️ 弱い認証: コミュニティ名が平文で送信される
⚠️ 暗号化なし: すべてのデータが平文で送信される
⚠️ 完全性保護なし: メッセージが改ざんされる可能性がある

緩和策:

  • 強力なコミュニティ名を使用する
  • SNMPアクセスをIPアドレスで制限する
  • 監視には読み取り専用コミュニティ名を使用する
  • ファイアウォールを展開してSNMPポートを保護する

後続バージョンの改善:

  • SNMPv2c: プロトコル操作の強化
  • SNMPv3: 認証、暗号化、アクセス制御を追加 (RFC 3414)

9. 著者のアドレス

(原文には著者の連絡先情報が含まれています)


SNMPはネットワーク管理の基礎プロトコルです。SNMPv1はセキュリティが弱いですが、そのシンプルさから今日でも広く使用されています。

一般的なSNMPツール:

# システム記述を照会
snmpget -v1 -c public 192.168.1.1 sysDescr.0

# インターフェーステーブルを走査
snmpwalk -v1 -c public 192.168.1.1 ifTable

# システムロケーションを設定
snmpset -v1 -c private 192.168.1.1 sysLocation.0 s "Beijing"

一般的なOID:

  • 1.3.6.1.2.1.1.1.0 - sysDescr (システム記述)
  • 1.3.6.1.2.1.1.3.0 - sysUpTime (システム稼働時間)
  • 1.3.6.1.2.1.2.2.1.2 - ifDescr (インターフェース記述)
  • 1.3.6.1.2.1.2.2.1.10 - ifInOctets (インターフェース入力オクテット)

関連RFC:

  • RFC 1155 - SMI (管理情報の構造)
  • RFC 1156 - MIB-I
  • RFC 1213 - MIB-II
  • RFC 3414 - SNMPv3セキュリティ