SNMP とは|Cisco ルーターの設定手順と SNMPv3 移行のポイント

  • URLをコピーしました!
目次

はじめに

ネットワーク機器やサーバーの稼働状況を把握し、安定したシステム運用を維持するための標準的な通信プロトコルが SNMP(Simple Network Management Protocol)です。一方で、コミュニティ名を平文でやり取りする古いバージョンが現役で残っていることや、2025 年に Cisco 機器の SNMP 実装で実際に悪用された脆弱性が公表されたことから、「設定できること」だけでなく「安全に運用すること」までを押さえておきたいテーマでもあります。

この記事でわかること
  • SNMP の基本構造(マネージャーとエージェント)と仕組み
  • v1 / v2c / v3 の違いと、SNMPv3 を推奨する理由
  • Cisco ルーターにおける SNMP エージェント設定(snmp-server community と SNMPv3)
  • Linux 環境からの動作確認手法(snmpwalksnmptrapd
  • Cisco IOS/IOS XE の SNMP 脆弱性 CVE-2025-20352 のリスクと対処

SNMP はメーカーの異なる機器を共通規格で監視できる点が強みですが、v1/v2c はコミュニティ名が暗号化されないため、本番環境では認証・暗号化に対応した SNMPv3 の利用が推奨されます。また、2025 年 9 月に公表された CVE-2025-20352 は SNMP のすべてのバージョンが影響を受け、実際の攻撃も確認されているため、修正版の適用とアクセス制限が現時点での基本的な対処になります。本記事では基礎から設定・確認、最新の脆弱性対応までを順に整理します。

SNMP とは?基本の仕組みとバージョン

SNMP は、メーカーの異なるネットワーク機器やサーバーを共通の規格で監視するために設計されたプロトコルです。その仕組みは大きく分けて 3 つの要素で構成されています。

SNMP マネージャーとエージェントの役割

SNMP による監視は、情報を収集する側と提供する側の 2 つのコンポーネントによって成り立っています。

SNMP マネージャー

ネットワーク上の機器の情報を一元的に収集し、管理・監視を行うサーバーです(Zabbix などの監視ソフトウェアがこれに該当します)

SNMP エージェント

ルーター、スイッチ、サーバーなどの監視対象機器内で動作し、自身の稼働状況(CPU 使用率、トラフィック量など)をマネージャーに提供するプログラムです。

状態を取得するポーリングと、異常を通知する Trap・Inform

マネージャーとエージェント間の通信には、用途に応じた方式があります。

ポーリング(Polling)

マネージャーからエージェントに対して、定期的に現在の状態を問い合わせて情報を取得する方式です。通信には UDP の 161 番ポートを使用します。

トラップ(Trap)

インターフェースのダウンや機器の再起動など、予期せぬイベントや異常が発生した際に、エージェント側から自発的にマネージャーへアラートを通知する方式です。通信には UDP の 162 番ポートを使用します。

ここで実務上注意したいのが、Trap は UDP ベースの「送りっぱなし」通信であり、到達確認(ACK)がない点です。重要なアラートの取りこぼしを避けたい場合は、確認応答を伴う Inform を選択肢に入れるとよいでしょう。Inform は到達保証が得られる代わりに、エージェント側の処理負荷とトラフィックがやや増えるトレードオフがあります。

監視項目を定義する MIB と OID の概念

エージェントが保持している機器のステータス情報(通信量、温度、稼働時間など)は、ツリー状の階層構造を持つデータベースとして整理されています。これを MIB(Management Information Base)と呼びます。

この MIB の中にある無数の情報に対し、それぞれを一意に特定するための識別番号が OID(Object Identifier)です。マネージャーは特定の OID を指定してエージェントに要求を送ることで、欲しい情報をピンポイントで取得(ポーリング)します。

SNMP のバージョンの違い(v1 / v2c / v3)

SNMP には v1、v2c、v3 の 3 系統があり、特にセキュリティ面で大きな差があります。v1/v2c は「コミュニティ名」と呼ばれる文字列をパスワード代わりに用いますが、この文字列は暗号化されずにネットワーク上を流れます。

参考: 7 Common SNMP Security Vulnerabilities(Atera)
“SNMPv1 and SNMPv2c do not support encryption”
(SNMPv1 と SNMPv2c は暗号化をサポートしていない)
https://www.atera.com/blog/common-snmp-security-vulnerabilities/

そのため、パケットキャプチャでコミュニティ名を傍受されるリスクがあり、v1/v2c は基本的に信頼できる閉じた管理ネットワーク内での利用にとどめるのが無難です。一方の SNMPv3 は、認証(MD5/SHA)と暗号化(DES/3DES/AES)による機密性・完全性の確保、ユーザー単位のアクセス制御に対応しており、本番環境では SNMPv3 の採用が推奨されます。

項目SNMPv1SNMPv2cSNMPv3
認証方式コミュニティ名(平文)コミュニティ名(平文)ユーザー認証(MD5/SHA)
暗号化なしなしあり(DES/3DES/AES)
アクセス制御簡易簡易ユーザー・ビュー単位で詳細に設定可
主な用途レガシー環境閉じた管理 LAN本番・セキュリティ要件が高い環境

なお、Cisco 機器では v2c と SNMPv3 を併存させることもできるため、レガシー機器は v2c のまま、新規機器から段階的に SNMPv3 へ移行する運用も現実的です。

SNMP を活用するメリットと関連技術の比較

ネットワーク機器やサーバーの監視において、SNMP はデファクトスタンダードとして広く利用されています。ここでは、その利点と関連する監視技術との使い分けを整理します。

MRTG などのツールを用いたリソースやトラフィックの可視化

SNMP の大きなメリットは、ベンダー(メーカー)を問わず統一された規格でネットワーク機器から情報を取得できる点です。取得したデータを蓄積・グラフ化することで、システムの利用状況を視覚的に把握できます。

古くから利用されているトラフィック監視ツールの代表例が MRTG(Multi Router Traffic Grapher)です。MRTG は SNMP を用いてルーターやスイッチから定期的に通信量(トラフィック)を取得し、Web ブラウザ上で閲覧可能なグラフを生成します。現在では Zabbix などの統合監視ツールが主流ですが、SNMP を介して通信状態を可視化するというインフラ運用の基礎的な役割は変わっていません。

Windows 環境における監視手法(WMI と SNMP の違いと使い分け)

サーバー監視の文脈で対象が Windows サーバーの場合、WMI(Windows Management Instrumentation)と SNMP のどちらを採用すべきかという技術選定が発生します。

SNMP は OS を問わず利用できる汎用性が強みですが、Windows 固有の詳細なプロセスの状態やイベントログの取得には限界があります。一方、WMI は Microsoft 独自の管理機能であり、Windows 環境の深層データ(CPU コアごとの詳細な負荷や特定サービスのステータスなど)を豊富に取得できます。

実務においては、ネットワーク機器や Linux サーバーを含めて一元的に監視・管理する場合は SNMP、Windows サーバー単体の深いパフォーマンス分析が必要な場合は WMI、といった要件に基づく使い分けが推奨されます。

【実践】Cisco ルーターにおける SNMP エージェント設定

SNMP の仕組みを理解した上で、実際のネットワーク機器(本例では Cisco C891FJ ルーター)を SNMP エージェントとして機能させるための設定手順を解説します。なお、CLI コマンドは Cisco の公式リファレンスで構文を確認したものを記載しています。

snmp-server community コマンドを用いた基本設定(v2c)

まず、SNMP マネージャーからのアクセスを許可するためのコミュニティ名(パスワードのような役割を果たす文字列)を設定します。設定モード(conf t)に移行し、以下のコマンドを実行します。

# 読み取り専用 (RO) 権限でコミュニティ名を設定する場合
Router(config)# snmp-server community <推測されにくい文字列> RO

参考: Configure SNMP Community Strings(Cisco)
“An SNMP community string permits read-only access to all objects.”
(SNMP コミュニティ文字列は、すべてのオブジェクトへの読み取り専用アクセスを許可する)
https://www.cisco.com/c/en/us/support/docs/ip/simple-network-management-protocol-snmp/7282-12.html

セキュリティの観点から、単なる監視用途であれば RO(Read-Only)を指定することが運用上推奨されます。また、public はデフォルトでよく使われる文字列ですが、本番環境では推測されにくい独自の文字列に変更することをおすすめします。

ACL による送信元の制限

コミュニティ名の変更に加えて、SNMP にアクセスできる送信元 IP を ACL で限定すると、平文通信のリスクを大きく下げられます。これは後述する CVE-2025-20352 の緩和策とも整合する、重要な対策です。

# SNMP マネージャー (192.168.1.100) のみからのアクセスを許可する場合
Router(config)# access-list 10 permit 192.168.1.100
Router(config)# snmp-server community <推測されにくい文字列> RO 10

トラップ送信先(SNMP マネージャー)の指定と有効化

次に、ルーター側に異常が発生した際、どのサーバー(SNMP マネージャー)へ自発的に Trap を送信するかを指定し、Trap 機能を有効化します。

# SNMP Trap の送信を有効化
Router(config)# snmp-server enable traps

# Trap の送信先 IP アドレスと、使用するバージョン・コミュニティ名を指定
Router(config)# snmp-server host 192.168.1.100 version 2c <コミュニティ名>

これらの設定を投入し、特権 EXEC モードに戻って show snmp コマンドでステータスを確認することで、Cisco ルーターが SNMP エージェントとして情報を送受信する準備が整います。

より安全な SNMPv3 の設定例

本番環境では、平文の v2c に代えて SNMPv3 の利用が推奨されます。SNMPv3 では「グループ(セキュリティレベル)」と「ユーザー(認証・暗号化情報)」を組み合わせて設定します。以下は、認証に SHA、暗号化に AES-128 を用いる読み取り用ユーザーの最小構成例です。

# priv (認証 + 暗号化) レベルのグループを作成
Router(config)# snmp-server group MONITOR-GROUP v3 priv

# グループに所属するユーザーを作成 (認証: SHA、暗号化: AES-128)
Router(config)# snmp-server user monitoruser MONITOR-GROUP v3 auth sha <認証パスワード> priv aes 128 <暗号化パスワード>

参考: Cisco IOS SNMP Support Command Reference — snmp-server user(Cisco)
“snmp-server user abcd public v3 encrypted auth sha-2 512 pass1234 priv aes 128 priv1234”
(snmp-server user コマンドで、SHA-2 認証と AES-128 暗号化を指定する例)
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/snmp/command/nm-snmp-cr-book/nm-snmp-cr-s5.html

設定後は show snmp user でユーザーの認証・暗号化設定を確認できます。パスワードは英数字で 15 文字未満程度にすると、特殊文字による予期しない挙動を避けやすくなります。

SNMP マネージャー(Linux)側での動作確認

エージェント側の設定が完了したら、SNMP マネージャーとなる Linux サーバー側から、正しく通信ができているか(MIB 情報の取得と Trap の受信)を確認します。

snmpwalk コマンドによる MIB 情報の取得テスト

マネージャー側からエージェントに対してポーリングを行い、MIB ツリーの情報を一括取得できるかをテストします。Linux 環境では net-snmp-utils パッケージなどに含まれる snmpwalk コマンドを使用します。

# バージョン 2c、指定したコミュニティ名で対象の IP アドレスにポーリングを実行
$ snmpwalk -v 2c -c <コミュニティ名> 192.168.1.254

コマンド実行後、エージェント(ルーター)のシステム情報やインターフェースのステータスなどが出力されれば、SNMP プロトコルを介した情報の取得(UDP 161 番ポートの通信)は成功しています。SNMPv3 で確認する場合は、 以下のように認証・暗号化オプションを付与します。

snmpwalk -v3 -l authPriv -u <ユーザー名> -a SHA -A <認証パスワード> -x AES -X <暗号化パスワード> 192.168.1.254

snmptrapd を用いた Trap の受信確認(受信設定が必要)

次に、エージェント側から自発的に送信される Trap(UDP 162 番ポートの通信)を、マネージャー側で受信できるかを確認します。ここで注意したいのが、net-snmp 5.3 以降は受信通知にアクセス制御が適用され、設定なしで snmptrapd を起動しても Trap は処理されない点です。

参考: snmptrapd.conf manual(Net-SNMP)
“access control checks will be applied to incoming notifications”
(受信する通知に対してアクセス制御チェックが適用される)
https://www.net-snmp.org/docs/man/snmptrapd.conf.html

そのため、/etc/snmp/snmptrapd.conf にアクセス制御の設定が必要です。検証用に手早く全 Trap を受信したい場合は、以下のように認可チェックを無効化します(本番運用では推奨されないため、検証後は元に戻すことをおすすめします)。

# /etc/snmp/snmptrapd.conf (検証用: すべての Trap を受信)
disableAuthorization yes

特定のコミュニティ名の Trap のみをログ記録したい場合は、次のように指定します。

# /etc/snmp/snmptrapd.conf (コミュニティ名 public の Trap をログ記録)
authCommunity log public

設定後に snmptrapd サービスを起動し、ログを監視します。

# メッセージログの末尾をリアルタイムで監視
$ sudo tail -f /var/log/messages

なお、Trap がどこに記録されるかは snmptrapd の起動オプション(ロギング設定)に依存します。RHEL 系の標準的なサービス設定では syslog 経由で /var/log/messages に出力されることが多いですが、環境によってはログの出力先を明示的に指定する必要があります。

この状態で対象の Cisco ルーターにログインして設定変更(インターフェースの shutdown など)を行うと、ルーターから Trap が送信されます。Linux 側のログファイルに通知メッセージ(ルーターの IP アドレスや発生したイベントの OID 情報など)が記録されれば、異常検知の仕組みが機能していることを確認できます。

Cisco IOS/IOS XE の SNMP 脆弱性 CVE-2025-20352 と対処

SNMP を有効化した Cisco 機器を運用するうえで、見落とせないのが 2025 年 9 月に Cisco が公表した脆弱性 CVE-2025-20352 です。これは Cisco IOS Software および Cisco IOS XE Software の SNMP サブシステムにおけるスタックオーバーフローに起因する脆弱性で、CVSS スコアは 7.7(High)とされています。

参考: CVE-2025-20352 — Cisco Security Advisory(cisco-sa-snmp-x4LPhte)
“due to a stack overflow condition in the SNMP subsystem”
(SNMP サブシステムにおけるスタックオーバーフロー状態に起因する)
https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-snmp-x4LPhte

この脆弱性のポイントは次のとおりです。

影響範囲

SNMP のすべてのバージョン(v1/v2c/v3)が対象で、SNMP が有効なすべての IOS/IOS XE 機器が影響を受けます。

想定される影響

低権限の認証済み攻撃者は機器をリロードさせて DoS(サービス停止)を引き起こせ、高権限の攻撃者は root 権限で任意コードを実行できる可能性があります。

攻撃手法

IPv4 または IPv6 経由で細工した SNMP パケットを送信することで悪用されます。

状況

実際の悪用が確認されており、CISA の KEV(既知の悪用脆弱性)カタログにも登録されています。

対処としては、Cisco の公開している修正版へのアップデートが基本となります。回避策(ワークアラウンド)は提供されていないため、修正版の適用が現実的な対応です。アップデートが直ちに難しい場合は、ACL で SNMP アクセスを信頼できるマネージャーに限定する、SNMP を外部ネットワークに公開しない、可能であれば認証・暗号化を備えた SNMPv3 を優先する、といった緩和策が案内されています。前述の ACL による送信元制限や SNMPv3 への移行は、この脆弱性への備えとしても有効です。

なお、自機器が影響を受けるかどうかは IOS/IOS XE のバージョンによって異なるため、Cisco が提供する Software Checker などで対象バージョンを確認することをおすすめします。

まとめ

本記事では、SNMP の基本的な仕組みやバージョンごとの違い、Cisco ルーターでの設定・確認手順、そして最新の脆弱性 CVE-2025-20352 への対処までを解説しました。SNMP は機器の稼働状況を可視化する基盤である一方、古いバージョンには暗号化がなく、実際に悪用される脆弱性も存在するため、設定とあわせて安全性の確保が重要になります。

  • SNMP は機器の稼働状況を共通規格で監視する標準プロトコル
  • ポーリングで定期取得し、Trap で異常を自発的に通知する。
  • v1/v2c はコミュニティ名が平文のため SNMPv3 の利用を推奨。
  • Cisco では ACL で送信元を絞り、RO 権限を基本とする。
  • Linux 側は snmptrapd の受信設定がないと Trap を処理しない。
  • CVE-2025-20352 は悪用が確認され、修正版の適用が基本対処。
  • SNMP は外部公開せず、信頼できるネットワークに限定するのが安全

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次