とほほのSNMP入門
SNMPとは
SNMPの概要
- Simple Network Management Protocol の略です。
- 管理する側(SNMP Manager) と 管理される側 (SNMP Agent) 間の管理プトロコルです。
- SNMP-Get は Manager から Agent に対して入出力パケット数などの情報を要求し、Agent がこれに応答します。
- SNMP-Set は Manager から Agent に対してポートをダウンさせろなどの値を設定します。
- SNMP-Trap は Agent 側でポートがダウンしたなどの事象が発生した際に Agent が Manager に通知します。
- SNMP-Get には 160番の UDP ポートを使用します。
- SNMP-Trap には 161番の UDP ポートを使用します。
SNMPのバージョン
- SNMP の主なバージョンには v1, v2c, v3 があります。v2 もありますが殆ど使用されていません。
- v1 は平文のコミュニティ名のみで認証を行います。メッセージも平文です。
- v2c は v1 に対して
- v3 は認証プロトコルを用いてメッセージも暗号化されます。
MIB と OID
- MIB(Management Information Base) は、機器名、稼働時間、入出力パケット数など、様々な情報を含みます。
- MIB の名前は OID(Object IDentifier) で示されます。
- 例えば「機器名」の OID は iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysName(5).0 となります。
- 1.3.6.1.2.1.1.5.0 のように数値のみで表すこともあります。
- 先頭に . をつけて .1.3.6.1.2.1.1.5.0 の様に表すこともあります。
- 名前の重複が無ければ sysName.0 のように末尾の名前のみで指定することもあります。
インストール
# RHEL8系
# dnf -y install net-snmp net-snmp-utils
# systemctl start snmpd
# systemctl enable snmpd
snmpd.conf
/etc/snmp/snmpd.conf には下記のような設定項目があります。
# public というコミュニティ名に notConfigureUser というセキュリティ名をつける com2sec notConfigUser default public # SNMPv1 に対しては notConfigureUser を notConfigGroup に所属させる group notConfigGroup v1 notConfigUser # systemview というビューに MIB の 1.3.6.1.2.1.1 を加える view systemview included .1.3.6.1.2.1.1 # notConfigGroup に systemview へのアクセス権を与える access notConfigGroup "" any noauth exact systemview none none
snmpget
SNMPエージェントに対してMIB値を要求・取得するコマンドです。-v には SNMP のバージョン、-c にはコミュニティ名を指定します。snmpget では単一の MIB 値しか取得できません。
$ snmpget -v 2c -c public 192.168.100.101 1.3.6.1.2.1.1.1.0
snmpwalk
SNMPエージェントに対してMIB値を取得・要求するコマンドです。指定した MIB 配下の値をすべて取得することができます。
$ snmpwalk -v 2c -c public 192.168.100.101 1.3.6.1.2.1.1
snmptrapd
SNMPエージェントから SNMP-Trap を受け取り、ロギングします。161 番の UDP ポートで待ち受けし、デフォルトでは syslog に書き出します。
# RHEL8系
# dnf -y install rsyslog net-snmp net-snmp-utils
# echo "disableAuthorization yes" >> /etc/snmp/snmptrapd.conf
# systemctl start rsyslog
# systemctl enable rsyslog
# systemctl start snmptrapd
# systemctl enable snmptrapd
受信したトラップは /var/log/messages に出力されます。上記はすべてのコミュニティ名のトラップを受け付ける例です。特定のコミュニティ名(例:public)のみ受け付けるには /etc/snmp/snmptrapd.conf に下記の様に設定してください。
authCommunity log,execute,net public
snmptrap
SNMP Trapを疑似的に送信します。192.168.100.100 は送信先アドレス、'' は起動してからの経過時間ですが '' を指定すると自動的に補ってくれます。linkDown はネットワークインタフェースがダウンしたことを示すOID、ifIndex.3 は追加情報のOIDで、型はi(integer)、値は3(3番目のポート)がダウンしたことを示しています。
$ snmptrap -v 2c -c public 192.168.0.3 '' linkDown ifIndex.3 i 3 ifAdminStatus.3 i 1 ifOperStatus.3 i 2
MIB-Tree
MIB値を識別する識別子を OID(Object IDentifier) と呼びます。主な OID を下記に示します。
iso(1)
org(3)
dod(6)
internet(1)
mgmt(2)
| mib-2(1) ... 標準MIB
| system(1) ... システム情報
| sysDescr(1)
| sysObjectID(2)
| sysUpTime(3) ... 起動してからの時間
| sysContact(4) ... コンタクト先
| sysName(5) ... システム名
| sysLocation(6) ... 設置場所
| sysServices(7)
| sysORLastChange(8)
| sysORTable(9)
| interfaces(2) ... ネットワークインタフェース情報
| ifTable(2)
| ifEntry(1)
| ifIndex(1) ... インタフェース番号
| ifAdminStatus(7) ... あるべき状態
| ifOperStatus(8) ... 現在の状態
| ifInOctets(10) ... 受信オクテット数
| ifOutOctets(16) ... 送信オクテット数
| at(3) ... ARPテーブル情報
| ip(4) ... IP情報
| icmp(5) ... ICMP情報
| tcp(6) ... TCP情報
| udp(7) ... UDP情報
| egp(8) ... EGP情報
| transmission(10) ... 送受信情報
| snmp(11) ... SNMP情報
| rmon(16) ... RMON情報
| host(25) ... ホスト情報
| ifMIB(31) ... インタフェースMIB
experimental(3) ... 実験的なMIB
private(4)
| enterprise(1) ... ベンダ拡張MIB
| ibm(2)
| cisco(9)
| hp(11)
| hitach(116)
| nec(119)
| sony(120)
| fujitsu(211)
snmpV2(6)
snmpModules(3)
snmpMIB(1)
snmpMIBObjects(1)
snmpTrap(4)
snmpTrapOID(1)
snmpTraps(5)
coldStart(1)
warmStart(2)
linkDown(3)
linkUp(4)
authenticationFailure(5)
OID の末尾には、定義された OID の後にインスタンス番号をつけます。例えば 3番目のネットワークインタフェースのMIB値は iso(1).org(3)...(略)...ifInOctets(10).3 となります。1つしか無い値の場合は sysDescr(1).0 の様に 0 をつけます。