8.

SNMPとは|v1/v2c/v3・MIB/OID・Trap通知のしくみ

編集
この記事の要点
  • SNMP (Simple Network Management Protocol) はネットワーク機器・サーバを監視・管理するための業界標準プロトコル
  • ポートは UDP 161 (Manager→Agent ポーリング) と UDP 162 (Agent→Manager Trap 通知) を使用
  • バージョンは v1 / v2c (Community 認証) / v3 (ユーザ認証 "authPriv"・暗号化対応)
  • 管理対象の情報は MIB (Management Information Base) というツリー構造で定義され、OID (1.3.6.1.2.1...) で参照
  • 代表的な監視ツール: Zabbix / Nagios / PRTG / Cacti / LibreNMS。コマンドラインでは snmpwalk / snmpget
  • 現代の代替: ストリーミング型の Telemetry / gNMI (gRPC ベース) が大規模ネットワークで採用増

SNMP とは

SNMP (Simple Network Management Protocol) は、ルータ・スイッチ・サーバ・UPS・プリンタなど、ネットワーク上の機器の状態を取得したり設定を変更したりするための標準プロトコルです。1988 年の RFC 1067 で初めて定義され、現在もネットワーク監視の事実上の標準として使われています。

OSI 参照モデルではアプリケーション層 (第 7 層)に位置し、トランスポート層には UDP を使います。

構成要素

要素役割
SNMP Manager監視サーバ。Agent に問い合わせ、Trap を受信して可視化・アラートを発報 (Zabbix Server など)
SNMP Agent監視される側に常駐するソフト。MIB から値を読み取り Manager に応答 (Net-SNMP の snmpd など)
MIB (Management Information Base)取得可能な情報のスキーマ定義。テキストファイル (.mib) で配布される
OID (Object Identifier)MIB ツリー内の特定項目を一意に指すドット区切り識別子 (例 1.3.6.1.2.1.1.5.0 = sysName)
Community / Userv1/v2c は "community" 文字列 (実質パスワード)、v3 はユーザ名+認証鍵+暗号鍵

ポートと通信モデル

ポート方向用途
UDP 161Manager → Agentポーリング (定期取得)。GET / GETNEXT / GETBULK / SET
UDP 162Agent → ManagerTrap / Inform (イベント通知)。リンクダウン・温度異常など即時通知

UDP なので信頼性は低いですが、軽量で広く流せます。Trap が確実に届かないと困る用途では SNMPv2c 以降の Inform (ACK あり) を使います。

主要オペレーション

操作用途
GET指定 OID の値を 1 つ取得
GETNEXT指定 OID の「次」を取得。テーブル走査の基本
GETBULK (v2c+)複数 OID をまとめて取得。大量行のテーブルで高速
SETOID に値を書き込む (機器設定変更)
TRAPAgent から非同期通知
INFORM (v2c+)ACK 付きの TRAP

SNMP のバージョン

認証暗号備考
v1 (1988)Community (平文)なしレガシー。新規採用非推奨
v2c (1996)Community (平文)なしGETBULK / 64bit カウンタ追加。現在も主流
v3 (1999)USM (User-based Security Model)DES / AESnoAuthNoPriv / authNoPriv / authPriv の 3 レベル。本番推奨

v1/v2c はcommunity 文字列が平文で UDP に乗るため、インターネット越し利用は厳禁です。閉域でも管理用 VLAN への ACL を必ず付けてください。

MIB と OID の構造

OID はツリー構造の数字列です。主要な枝:

1            : iso
1.3          : org
1.3.6        : dod (米国国防総省)
1.3.6.1      : internet
1.3.6.1.2.1  : mgmt → mib-2 (RFC 1213 標準 MIB)
  .1         : system     (sysDescr, sysName, sysUpTime)
  .2         : interfaces (ifTable - 各 NIC の統計)
  .4         : ip
  .6         : tcp
1.3.6.1.4.1  : private.enterprises
  .9         : Cisco
  .2636      : Juniper
  .8072      : Net-SNMP
  .311       : Microsoft

代表的な 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.1.5.0       sysName    (ホスト名)
  1.3.6.1.2.1.2.2.1.10.X  ifInOctets (NIC X の受信バイト数)
  1.3.6.1.2.1.2.2.1.16.X  ifOutOctets(NIC X の送信バイト数)

Linux サーバを Agent にする

# RHEL / Rocky / Alma 系
sudo dnf install net-snmp net-snmp-utils
sudo systemctl enable --now snmpd

# Debian / Ubuntu 系
sudo apt install snmpd snmp libsnmp-dev
sudo systemctl enable --now snmpd

# /etc/snmp/snmpd.conf の最小設定 (v2c)
rocommunity public 192.0.2.0/24        # 監視サーバ側のサブネットだけ許可
syslocation "Tokyo DC Rack 5"
syscontact  "noc@example.com"

# v3 ユーザ追加 (推奨)
sudo systemctl stop snmpd
sudo net-snmp-create-v3-user -ro -A AuthPass1234 -X PrivPass1234 \
     -a SHA -x AES monitor
sudo systemctl start snmpd

snmpwalk / snmpget による疎通確認

# v2c で sysName を取得
snmpget -v2c -c public 192.0.2.10 1.3.6.1.2.1.1.5.0

# v2c で system 配下を一括取得
snmpwalk -v2c -c public 192.0.2.10 system

# v3 (authPriv)
snmpwalk -v3 -l authPriv -u monitor \
  -a SHA -A AuthPass1234 -x AES -X PrivPass1234 \
  192.0.2.10 system

# NIC 統計 (ifTable) を見る
snmpwalk -v2c -c public 192.0.2.10 ifTable

# MIB 名 → OID の対応をロードして読みやすくする
snmpwalk -v2c -c public -M +/usr/share/snmp/mibs -m ALL 192.0.2.10 ifInOctets

主要監視ツールとの組み合わせ

ツール特徴
ZabbixOSS。テンプレートが豊富、SNMP Trap 受信も標準対応。エンタープライズで多用
Nagios / Icinga古参の OSS。プラグイン (check_snmp) で柔軟
PRTG商用。GUI が分かりやすく中小規模で人気
CactiRRDtool ベースのグラフ化に特化
LibreNMSObservium 派生の OSS。自動検出が強力
SolarWinds NPM商用。大規模ネットワークオペレーションセンタで定番

SNMP Trap の受信

# Manager 側で snmptrapd を起動
sudo apt install snmptrapd
sudo systemctl enable --now snmptrapd

# /etc/snmp/snmptrapd.conf
authCommunity log,execute,net public
disableAuthorization yes        # テスト時のみ

# Trap を送る側 (Agent からテスト)
snmptrap -v2c -c public 192.0.2.1 '' \
  1.3.6.1.6.3.1.1.5.3 \
  ifIndex i 2 \
  ifAdminStatus i 2 \
  ifOperStatus  i 2

# Manager の syslog で受信を確認
journalctl -u snmptrapd -f

セキュリティ運用の勘所

  • community 文字列 public / private はそのまま使わない。必ず変更
  • v1/v2c は読み取り専用 (rocommunity) のみに。書き込み (rwcommunity) は v3 + ACL 必須
  • UDP 161 は管理用セグメントから IP 制限。Firewall / Security Group で絞る
  • v3 は authPriv (SHA + AES) を選択。noAuthNoPriv は研究室用途のみ
  • SNMP Trap は UDP で信頼性が無い → 重要イベントは Inform (ACK 有り) か Syslog/Webhook 併用

現代の代替: Streaming Telemetry / gNMI

ポーリング型の SNMP は大規模ネットワーク (数千台)サブ秒粒度の可視化には向きません。代替として、Cisco IOS-XR / Juniper / Arista が推す Streaming Telemetry (gRPC + Protocol Buffers, gNMI) が普及しています。

観点SNMPgNMI / Telemetry
方式Pull (ポーリング)Push (Subscribe)
粒度30 秒〜5 分1 秒以下も可
トランスポートUDPgRPC over TLS
データモデルMIB (機器ごとに独自拡張)OpenConfig YANG (ベンダ共通)
普及度★★★★★ (枯れた標準)★★★ (大規模事業者中心)

とはいえ、サーバ・プリンタ・UPS・産業用機器などSNMP しか喋らない機器はまだ大量にあり、当面は両方共存が現実解です。

FAQ

Q: snmpwalk の応答が遅い・タイムアウトする
A: GETBULK が使える v2c 以降を使い、-Cr50 で取得行数を増やしてください。それでも遅い機器は、対象 OID をピンポイントの snmpget に絞る運用が良いです。

Q: 監視サーバから OID が取れるのに値が空になる
A: 取れた値が NULL なのか、表示側のフォーマット (Counter64 を 32bit で読んでいる) なのかを切り分けてください。snmpwalk -On で OID を数値表示し、snmptranslate -Td <OID> で型を確認できます。

Q: SNMPv3 の community 相当はどう設計する?
A: read-only ユーザ (監視用) と read-write ユーザ (設定変更用) を分け、authPriv 必須、認証鍵と暗号鍵は異なる値を使ってください。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. HTTP
  2. HTTPS
  3. DNS
  4. FTP
  5. TFTP
  6. DHCP
  7. SMTP
  8. SNMP
  9. POP3
  10. Telnet
  11. NTP
  12. SSH

最近更新/作成されたページ