とほほのSNMP入門

目次

SNMPとは

SNMPの概要

SNMPのバージョン

MIB と OID

インストール

# 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 をつけます。