$Date: 2012/03/21 10:28:12 $
SNMP (Simple Network Management Protocol) の設定を行うことにより、SNMP管理ソフトウェアに対してネットワーク管理情報のモニタと変更を行うことができるようになります。このときヤマハルーターはSNMPエージェントとなります。
ヤマハルーターはSNMPv1、SNMPv2c、SNMPv3による通信に対応しています。またMIB (Management information Base) として RFC1213 (MIB-II) とプライベートMIBに対応しています。プライベートMIBについては以下のURLから参照することができます。
SNMPv1およびSNMPv2では、コミュニティと呼ばれるグループの名前を相手に通知し、同じコミュニティに属するホスト間でのみ通信します。このとき、読み出し専用 (read-only) と読み書き可能 (read-write) の2つのアクセスモードに対して別々にコミュニティ名を設定することができます。
このようにコミュニティ名はある種のパスワードとして機能しますが、その反面、コミュニティ名は必ず平文でネットワーク上を流れるという特性があり、セキュリティ面では脆弱と言えます。よりセキュアな通信が必要な場合はSNMPv3の利用を推奨します。
SNMPv3では通信内容の認証、および暗号化に対応しています。SNMPv3はコミュニティの概念を廃し、新たにUSM (User-based Security Model) とVACM (View-based Access Control Model) と呼ばれるセキュリティモデルを利用することで、より高度なセキュリティを確保しています。
ヤマハルーターの状態を通知するSNMPメッセージをトラップと呼びます。ヤマハルーターではSNMP標準トラップの他にも、一部機能で特定のイベントを通知するため独自のトラップを送信することがあります。なお、これらの独自トラップはプライベートMIBとして定義されています。
トラップの送信先ホストについては、各SNMPバージョン毎に複数のホストを設定することができます。
SNMPv1およびSNMPv2cで利用する読み出し専用と送信トラップ用のコミュニティ名は、共に初期値が“public”となっています。SNMP管理ソフトウェア側も“public”がコミュニティ名である場合が多いため、当該バージョンの通信でセキュリティを考慮する場合は適切なコミュニティ名に変更してください。ただし、上述の通りコミュニティ名はネットワーク上を平文で流れますので、コミュニティ名にログインパスワードや管理パスワードを決して使用しないよう注意してください。
工場出荷状態では、各SNMPバージョンにおいてアクセスが一切できない状態となっています。また、トラップの送信先ホストは設定されておらず、どこにもトラップを送信しません。
ヤマハルーターでは、以下の機種およびファームウェアで、SNMPエージェント機能をサポートしています。
| 機種 | ファームウェア | ||
|---|---|---|---|
| SNMPv1 | SNMPv2c | SNMPv3 | |
| RTX810 | Rev.11.01.04以降 | ||
| NVR500 | Rev.11.00.06以降 | ||
| RTX1200 | Rev.10.01.07以降 | Rev.10.01.24以降 | |
| SRT100 | Rev.10.00.08以降 | ― | |
| RTX3000 | Rev.9.00.08以降 | ― | |
| RT107e | Rev.8.03.15以降 | ― | |
| RT250i | Rev.8.02.32以降 | ― | |
| RTX1100 | Rev.8.02.31以降 | ― | |
| RTX1500 | Rev.8.02.14以降 | ― | |
| RTV700 | Rev.8.00.23以降 | ― | |
| RTX2000 | Rev.7.00.08以降 | ― | |
| RTX1000 | Rev.7.00.04以降 | ― | |
| RT105e | Rev.6.02.14以降 | ― | |
| RT105p | Rev.6.02.14以降 | ― | |
| RT105i | Rev.6.02.04以降 | ― | |
| RT300i | Rev.6.00.10以降 | ― | |
| RTV01 | Rev.1.00.03以降 | ― | |
各SNMPバージョンの主な特徴とルーターの設定方針について以下に説明します。具体的な設定例については後述する「6. 設定例」をご覧ください。
コミュニティ名によりSNMPマネージャとエージェント間の認証を行います。 管理するルーターをコミュニティというゾーンで分割して管理を行います。
snmp hostコマンドで設定されたホストからsnmp communityコマンドで設定されたコミュニティ名でのアクセスを許可します。
snmp hostコマンドでホストアドレスのあとにコミュニティ名を設定すると、snmp communityコマンドで設定したコミュニティ名と異なる名称でアクセスが可能になります。
snmp trap hostコマンドで設定されたホストへルーターの状態を送信することが可能です。
snmp trap enable snmpコマンドでどのようなトラップを送信するか設定します。なお、snmp trap enable snmpコマンドは各SNMPバージョン共通で作用します。
SNMPv1と同様に、コミュニティ名によりSNMPマネージャとエージェント間の認証を行います。
snmpv2c communityコマンドでSNMPv2cによりアクセスするときに使用するコミュニティ名を設定します。
また、本バージョンから新たにGetBulkリクエストやInformリクエストに対応します。MIBオブジェクトをまとめて効率よく取得したり、ルーターからの通知パケットに対する応答確認を行うことができます。
snmpv2c hostコマンドで設定されたホストからsnmpv2c communityコマンドで設定されたコミュニティ名でのアクセスを許可します。
snmpv2c hostコマンドでホストアドレスのあとにコミュニティ名を設定すると、snmpv2c communityコマンドで設定したコミュニティ名と異なる名称でアクセスが可能になります。
snmpv2c trap hostコマンドで設定されたホストへルーターの状態を送信することが可能です。またコマンドの設定により送信メッセージの形式をトラップかInformリクエストかを選択することができます。Informリクエストでは相手に受信確認応答を要求します。
SNMPv3はSNMPv2までの全機能に加えてセキュリティ機能が強化されています。
ネットワーク上を流れるSNMPパケットを認証・暗号化することによって、SNMPv1、v2cでのコミュニティ名とSNMPマネージャのIPアドレスによるセキュリティ機能では実現できなかった盗聴、なりすまし、改竄、リプレイ攻撃などからSNMPパケットを守ることができます。
SNMPv3ではマネージャとエージェントをSNMPエンティティと表現しますが、ヤマハルーターではSNMPエージェントに相当する機能をサポートしています。
SNMPエンジンはSNMPメッセージの送受信、SNMPメッセージの認証と暗号化、管理対象オブジェクトへのアクセス制御のサービスを提供します。
SNMPエンティティには1つのSNMPエンジンを持ちます。snmpv3 engine idコマンドでSNMPエンジンIDを設定します。
SNMP内部に存在する複数のコンテキスト (MIB実装) から一意に識別するためにコンテキスト名 (contextName) を指定します。ただしルーター内部のコンテキストは常に1つです。
コンテキスト名はsnmpv3 context nameで設定します。
SNMPv3では以下のセキュリティ機能を提供します。
USMはメッセージレベルのセキュリティ確保を行うためのモデルで、共通鍵暗号に基づく認証と暗号化、メッセージストリーム改竄に対する防御を行います。
SNMPv3では、ユーザ毎に要求するセキュリティのレベルを指定することができます。セキュリティレベルは認証・暗号化の組み合わせで以下のように分類できます。
認証はデータの完全性 (改竄されていないこと) とデータの送信元の認証を行うための手続きでHMACを使用します。認証鍵でハッシュを取ることによりメッセージが改竄されていないことと送信者がユーザ本人であることを確認できます。
ハッシュアルゴリズムとしてHMAC-MD5-96とHMAC-SHA-96をサポートします。
SNMPv3では、管理情報の漏洩を防ぐ目的で、SNMPメッセージの暗号化を行います。暗号方式はDES-CBCとAES128-CFBをサポートします。
snmpv3 usm userコマンドで、ユーザ名とユーザ認証方式、暗号方式を設定することができます。認証設定の有無、および暗号設定の有無により、そのユーザに要求するセキュリティレベルが決まります。
VACMはSNMPメッセージのアクセス制御を行うモデルです。
VACMでは、後述のアクセスポリシーをユーザ毎ではなくグループ毎に定義します。
snmpv3 usm userコマンドのgroupオプションでユーザが所属するグループを設定します。ここで指定したグループ毎にアクセス可能なMIBビューを設定します。
ユーザグループに属さないユーザにはアクセス制御が適用されません。すべてのMIBオブジェクトへのアクセスが許可されます。
SNMPv3では、グループ毎にアクセスできるMIBオブジェクトの集合を定義できます。このときMIBオブジェクトの集合をMIBビューと呼び、MIBビューは、オブジェクトIDのツリーを表すビューサブツリーを集約することで表現されます。
snmpv3 vacm viewコマンドでMIBビューの設定を行います。ビューサブツリー毎にMIBビューに含めるか除外するかを選択できます。
VACMでは、グループ毎に読み込み、書き込みが許可されるMIBビューを設定します。
snmpv3 vacm accessコマンドで設定します。設定するMIBビューはsnmpv3 vacm viewコマンドで設定されているMIBビューとなります。
snmpv3 trap hostコマンドで設定されたホストへルーターの状態を送信することが可能です。トラップを送信するには、あらかじめsnmpv3 usm userコマンドでユーザを設定する必要があります。またコマンドの設定により送信メッセージの形式をトラップかInformリクエストかを選択することができます。Informリクエストでは相手に受信確認応答を要求します。
SNMPv1によるアクセスを許可するホストを設定する。
'any'を設定した場合は任意のホストからのSNMPv1によるアクセスを許可する。
IPアドレスでホストを指定した場合には、同時にコミュニティ名も設定できる。RW_COMMUNITYパラメータを省略した場合には、アクセスモードが読み書き可能であるアクセスが禁止される。RO_COMMUNITYパラメータも省略した場合には、snmp community read-onlyコマンド、およびsnmp community read-writeコマンドの設定値が用いられる。
Rev.7.01.12からコマンドの入力形式が拡張された。
SNMPv1によるアクセスモードが読み出し専用であるコミュニティ名を設定する。
SNMPv1によるアクセスモードが読み書き可能であるコミュニティ名を設定する。
SNMPv1トラップを送信するホストを指定する。コマンドを複数設定することで、複数のホストを同時に指定できる。トラップ送信時のコミュニティ名にはこのコマンドのCOMMUNITYパラメータが用いられるが、省略されている場合にはsnmp trap communityコマンドの設定値が用いられる。
Rev.7.00.26以降でCOMMUNITYパラメータが指定可能。
SNMPv1トラップの送信する際のコミュニティ名を設定する。
SNMPv2cによるアクセスを許可するホストを設定する。
'any'を設定した場合は任意のホストからのSNMPv2cによるアクセスを許可する。
IPアドレスでホストを指定した場合には、同時にコミュニティ名も設定できる。RW_COMMUNITYパラメータを省略した場合には、アクセスモードが読み書き可能であるアクセスが禁止される。RO_COMMUNITYパラメータも省略した場合には、snmpv2c community read-onlyコマンド、およびsnmpv2c community read-writeコマンドの設定値が用いられる。
SNMPv2cによるアクセスモードが読み出し専用であるコミュニティ名を設定する。
SNMPv2cによるアクセスモードが読み書き可能であるコミュニティ名を設定する。
SNMPv2cトラップを送信するホストを指定する。コマンドを複数設定することで、複数のホストを同時に指定できる。トラップ送信時のコミュニティ名にはこのコマンドのCOMMUNITYパラメータが用いられるが、省略されている場合にはsnmpv2c trap communityコマンドの設定値が用いられる。
TYPEパラメータで'inform'を指定した場合は、送信先からの応答があるまで、5秒間隔で最大3回再送する。
SNMPv2cトラップの送信する際のコミュニティ名を設定する。
SNMPエンジンを識別するためのユニークなIDを設定する。SNMPエンジンIDはSNMPv3通信で相手先に通知される。
SNMPコンテキストを識別するための名前を設定する。SNMPコンテキスト名はSNMPv3通信で相手先に通知される。
SNMPv3によるアクセスが可能なユーザ情報を設定する。
ユーザグループ番号を指定した場合はVACMによるアクセス制御の対象となる。指定しない場合、そのユーザはすべてのMIBオブジェクトにアクセスできる。
SNMPv3では通信内容の認証および暗号化が可能であり、本コマンドでユーザ名と共にアルゴリズムおよびパスワードを設定して使用する。なお、認証を行わず暗号化のみを行うことはできない。
認証や暗号化の有無、アルゴリズムおよびパスワードは、対向となるSNMPマネージャ側のユーザ設定と一致させておく必要がある。
groupオプションは、RTX1200は Rev.10.01.29 以降、NVR500は Rev.11.00.13 以降で指定可能。
SNMPv3によるアクセスを許可するホストを設定する。
HOSTパラメータに'any'を設定した場合は任意のホストからのSNMPv3によるアクセスを許可する。なお、アクセスのあったホストがHOSTパラメータに合致していても、USER_IDパラメータで指定したユーザに合致しなければアクセスはできない。
VACMによる管理で使用するMIBビューファミリを設定する。MIBビューファミリとは、アクセス権を許可する際に指定するMIBオブジェクトの集合である。
TYPEパラメータとOIDパラメータの組は、指定のオブジェクトID以降のMIBサブツリーを管理対象とする/しないことを意味する。また複数の組を指定した際に、それぞれ指定したオブジェクトIDの中で包含関係にあるものは、より下位の階層まで指定したオブジェクトIDに対応するTYPEパラメータが優先される。
RTX1200は Rev.10.01.29 以降、NVR500は Rev.11.00.13 以降で使用可能。
# snmpv3 vacm view 1 include 1.3.6.1 exclude 1.3.6.1.4.1
ユーザグループに対してアクセスできるMIBビューファミリを設定する。このコマンドで設定されたMIBビューファミリに含まれないMIBオブジェクトへのアクセスは禁止される。
RTX1200は Rev.10.01.29 以降、NVR500は Rev.11.00.13 以降で使用可能。
SNMPv3トラップを送信するホストを指定する。コマンドを複数設定することで、複数のホストを同時に指定できる。トラップ送信時のユーザ設定はsnmpv3 usm userコマンドで設定したユーザ設定が用いられる。
TYPEパラメータで'inform'を指定した場合は、送信先からの応答があるまで、5秒間隔で最大3回再送する。
SNMP送信パケットの始点IPアドレスを設定する。
MIB変数sysContactを設定する。空白を含ませるためには、パラメータ全体をダブルクォート (")、もしくはシングルクォート (') で囲む。
sysContactは一般的に、管理者の名前や連絡先を記入しておく変数である。
MIB変数sysLocationを設定する。空白を含ませるためには、パラメータ全体をダブルクォート (")、もしくはシングルクォート (') で囲む。
sysLocationは一般的に、機器の設置場所を記入しておく変数である。
MIB変数sysNameを設定する。空白を含ませるためには、パラメータ全体をダブルクォート (")、もしくはシングルクォート (') で囲む。
sysNameは一般的に、機器の名称を記入しておく変数である。
SNMP標準トラップを送信するか否かを設定する。
allを設定した場合には、すべての標準トラップを送信する。個別にトラップを設定した場合には、設定されたトラップだけが送信される。
authenticationFailureトラップを送信するか否かはこのコマンドによって制御される。
coldStartトラップについては、Rev.7.01.15以前のファームウェアでは、cold startコマンド投入時およびファームウェアリビジョンアップ後の再起動直前にcoldStartトラップを送信する。それ以外のファームウェアでは、電源投入、再投入による起動後およびファームウェアリビジョンアップによる再起動後にcoldStartトラップを送信する。
linkDownトラップについては、 snmp trap send linkdownコマンドによってインタフェース毎に制御できる。あるインタフェースについて、linkDownトラップが送信されるか否かは、snmp trap send linkdownコマンドで送信が許可されており、かつ、このコマンドでも許可されている場合に限られる。
Rev.7.00系およびRT300iでは、snmp enableauthentrapsコマンドを使用する。
MIB変数snmpEnableAuthenTrapsを設定してauthenticationFailureトラップを送信するか否かを制御する。
指定したインタフェースのlinkDownトラップを送信するか否かを設定する。
MIB変数yrIfPpDisplayAtMib2の値をセットする。このMIB変数は、PPインタフェースをMIB2の範囲で表示するかどうかを決定する。Rev.4以前と同じ表示にする場合には、MIB変数を"enabled(1)" に、つまり、このコマンドで'on'を設定する。
MIB変数yrIfTunnelDisplayAtMib2の値をセットする。このMIB変数はトンネルインタフェースをMIB2の範囲で表示するかどうかを決定する。Rev.4以前と同じ表示にする場合には、MIB変数を"enabled(1)"に、つまり、このコマンドで'on'を設定する。
NATを使用しない場合や、NATの外側アドレスとして固定のIPアドレスが指定されている場合には、IPCPで得られたIPアドレスはそのままPPインタフェースのアドレスとして使われる。この場合、SNMPでは通常のインタフェースのIPアドレスを調べる手順でIPCPとしてどのようなアドレスが得られたのか調べることができる。
しかし、NATの外側アドレスとして'ipcp'と指定している場合には、IPCPで得られたIPアドレスはNATの外側アドレスとして使用され、インタフェースには付与されない。そのため、SNMPでインタフェースのIPアドレスを調べても、IPCPでどのようなアドレスが得られたのかを知ることができない。
本コマンドを'on'に設定しておくと、IPCPで得られたIPアドレスがNATの外側アドレスとして使用される場合でも、SNMPではそのアドレスをインタフェースのアドレスとして表示する。アドレスが実際にインタフェースに付与されるわけではないので、始点IPアドレスとして、そのIPアドレスが利用されることはない。
各ポートのリンクがup/downしたときにトラップを送信するか否かを設定する。
snmp host 192.168.100.1 #...(1) snmp host 10.1.1.1 snmpv1host #...(2) snmp community read-only public #...(3) snmp trap host 192.168.100.1 #...(4) snmp trap community snmpv1trapname #...(5)
[解説]
| (1) | IPアドレスが192.168.100.1であるホストからのアクセスを許可 |
| (2) | IPアドレスが10.1.1.1、かつコミュニティ名が"snmpv1host"であるホストからの、読み出しのみのアクセスを許可 |
| (3) | 読み出し専用のコミュニティ名を"public"と設定 |
| (4) | トラップを送信するホストのアドレスを192.168.100.1に設定 |
| (5) | トラップのコミュニティ名を"snmpv1trapname"に設定 |
snmpv2c host 192.168.1.1 #...(1) snmpv2c host 10.1.1.1 snmpv2chost #...(2) snmpv2c trap host 192.168.1.1 #...(3) snmpv2c trap host 192.168.2.1 inform snmpv2cinform #...(4) snmpv2c trap community snmpv2ctrap #...(5)
[解説]
| (1) | IPアドレスが192.168.1.1であるホストからのアクセスを許可 |
| (2) | IPアドレスが10.1.1.1、かつコミュニティ名が"snmpv2chost"であるホストからの、読み出しのみのアクセスを許可 |
| (3) | トラップの送信先ホスト (IPアドレス192.168.1.1) を追加 |
| (4) | トラップの送信先ホスト (IPアドレス192.168.2.1) を追加。このホストに対しては、コミュニティ名を"snmpv2cinform"としてInformリクエストを送信 |
| (5) | トラップ送信時のデフォルトのコミュニティ名を"snmpv2ctrap"に設定 |
snmpv3 engine id 12345678 #...(1) snmpv3 usm user 1 yamaha1 group 1 sha authpass1 aes128-cfb privpass1 #...(2) snmpv3 usm user 2 yamaha2 group 1 sha authpass2 #...(3) snmpv3 host 192.168.1.1 user 1 2 #...(4) snmpv3 vacm view 1 include 1.3.6.1 #...(5) snmpv3 vacm view 2 include 1.3.6.1 exclude 1.3.6.1.2.1.1 #...(6) snmpv3 vacm access 1 read 1 write 2 #...(7) snmpv3 trap host 192.168.1.1 user 1 #...(8) snmpv3 trap host 10.1.1.1 inform user 2 #...(9)
[解説]
| (1) | SNMPエンジンIDを"12345678"に設定 |
| (2) | ユーザ"yamaha1"を登録。ユーザグループ1に所属し、認証方式としてHMAC-SHA1-96、暗号化方式としてAES128-CFBを使用する |
| (3) | ユーザ"yamaha2"を登録。ユーザグループ1に所属し、認証方式としてHMAC-SHA1-96を使用、暗号化は使用しない |
| (4) | ホストアドレスが192.168.1.1であり、かつユーザ名が"yamaha1"、"yamaha2"のいずれかである場合にアクセスを許可 |
| (5) | internetサブツリーをMIBビューファミリ1として登録 |
| (6) | systemサブツリーを除くinternetサブツリーをMIBビューファミリ2として登録 |
| (7) | ユーザグループ1の読み出し可能なMIBビューファミリと書き込み可能なMIBビューファミリを設定 |
| (8) | トラップの送信先ホスト (IPアドレス192.168.1.1) を追加。このホストに対しては、ユーザ"yamaha1"としてトラップを送信 |
| (9) | トラップの送信先ホスト (IPアドレス10.1.1.1) を追加。このホストに対しては、ユーザ"yamaha2"としてInformリクエストを送信 |
Rev.10.01.24以降、本機能において出力されるSYSLOGメッセージの一覧を以下に示します。なお、実際に出力される各メッセージの先頭には"[SNMPD] "というプレフィックスが付与されます。
| レベル | 出力メッセージ | 内容 |
|---|---|---|
| INFO | Can't start | SNMPエージェントの起動に失敗した |
| DEBUG | Send トラップ名 trap to IPアドレス (SNMPバージョン) | トラップを送信した |
| Send トラップ名 inform request to IPアドレス (SNMPバージョン/リクエスト番号) | Informリクエストを送信した | |
| Receive inform response from IPアドレス (SNMPバージョン/リクエスト番号) | 送信したInformリクエストの応答を受信した | |
| Send Engine Discovery to IPアドレス | 相手先のSNMPエンジン情報を取得するためにEngine Discoveryメッセージを送信した。 | |
| Send Engine Time Synchronization to IPアドレス | 相手先のSNMPエンジン情報を取得するためにEngine Time Synchronizationメッセージを送信した。 | |
| Invalid community 'コミュニティ名' | 不正なコミュニティ名でアクセスがあった | |
| Invalid engine ID: エンジンID(16進) |
不正なエンジンIDでアクセスがあった | |
| Invalid engine boots 'エンジンブーツ値' | 不正なエンジンブーツ値でアクセスがあった | |
| Invalid engine time 'エンジンタイム値' | 不正なエンジンタイム値でアクセスがあった | |
| Invalid user name 'ユーザ名' | 不正なユーザ名でアクセスがあった | |
| Failed to authenticate message | メッセージの認証に失敗した | |
| Failed to decrypt message | メッセージの復号に失敗した | |
| Failed to encrypt message | メッセージの暗号化に失敗した | |
| Invalid context engine: コンテキストエンジン(16進) |
不正なコンテキストエンジンでアクセスがあった | |
| Invalid context name: コンテキスト名(16進) |
不正なコンテキスト名でアクセスがあった | |
| Malformed message | メッセージフォーマットが不正である。 正しく復号できなかったことにより出力される場合もある |
[EOF]