SNMP(Simple Network Management Protocol)はネットワーク管理用に設計されたプロトコルです。SNMPを使って定期的にネットワーク・ルータやスイッチなどネットワーク機器、サーバ等の状態を観察すれば、障害やトラブル発生を事前策を打つことができます。
SNMPには以下3つのバージョンがあります。
- SNMPバージョン1 RFC1157
- SNMPバージョン2 RFC1441
- SNMPバージョン3 RFC3411
最も普及しているのはSNMPバージョン1です。SNMPは「マネージャ」「エージェント」の2要素から構成されます。マネージャからはSNMPに対応した様々な機器の情報や設定を集中管理出来ます。当記事では主にマネージャ側について説明します。
目次
MIB・OID
エージェント側の情報はMIB(Management Information Base)という既定の分類がなされています。MIBにはデータ項目(MIB変数)と、それらに対して出来る処理が決められています。
MIB分類には、system(ホストやルータの名称などシステムの情報), interface(個々のネットワークインタフェース情報), at, ip icmp, tcp, udp, egp, snmp, privateなどがあります。
MIBは沢山のオブジェクトから構成されます。それぞれのオブジェクトにはOIDというピリオドと数字を連続させた番号が設定されています。
個々のMIBには更に、サブツリーがさらに紐づきますが、詳細はここでは割愛します。
SNMPのコミュニティ名
SNMPでは、コミュニティというパスワードを使用します。コミュニティごとに役割や権限を設定できます。
CentOSでSNMPインストール
CentOSでのSNMP機能は、オープンソースのnet-snmpをインストールする事で使用出来るようになります。SNMPには先述の通り「マネージャ」「エージェント」の2要素がありますが、当記事では主にマネージャ側について説明します。マネージャの機能を使用するためには、net-snmp-utilsもインストールする必要があります。
インストールコマンドは以下の通りです。
1 2 |
# yum -y install net-snmp # yum -y install net-snmp-utils |
初期設定
snmpの設定ファイルは以下です。今回はloacalhostからしか受け付けない設定としていますので、設定は適宜変更してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# vi /etc/snmp/snmpd.conf # sec.name source community #com2sec notConfigUser default public # 削除(コメントアウト) com2sec localgroup localhost local_community # ここを追加 # localhost以外からも受け付ける場合はここに追加する(localhostを指定のネットワークに) # groupName securityModel securityName #group notConfigGroup v1 notConfigUser # 削除(コメントアウト) #group notConfigGroup v2c notConfigUser # 削除(コメントアウト) group local_group v1 localgroup # ここを追加 group local_group v2c localgroup # ここを追加 group local_group usm localgroup # ここを追加 # Make at least snmpwalk -v 1 localhost -c public system fast again. # name incl/excl subtree mask(optional) #view systemview included .1.3.6.1.2.1.1 # 削除(コメントアウト) #view systemview included .1.3.6.1.2.1.25.1.1 # 削除(コメントアウト) view all included .1 80 # ここを追加(全てのMIBツリーへのアクセスを許可) # group context sec.model sec.level prefix read write notif #access notConfigGroup "" any noauth exact systemview none none # 削除(コメントアウト) access local_group "" any noauth exact all none none # ここを追加 |
com2sec
com2sec は、SNMPマネージャに対して、セキュリティグループを決める設定です。エージェントはマネージャをIPとコミュニティ名で識別します。
1 |
com2sec <group name> <manager ip> <community> |
以下はdefaultというローカルのSNMPマネージャからコミュニティ名publicでアクセスしてきた場合委はセキュリティグループnotConfigUserとして扱う。という設定です。グループの設定は後述します。
1 |
com2sec notConfigUser default public |
外部からエージェントとして接続を許可する場合は、publicのような文字列をそのまま使用するのは不適切です。予測可能なコミュニティ名をそのまま使用すると、外部からシステムの重要な情報を盗み取られる原因となります。
group
セキュリティグループに対して、セキュリティモデルを設定します。
1 |
group <group name> <model> <security> |
- v1:SNMPバージョン1で使用する
- v2:SNMPバージョン2cで使用する
- usm:SNMPバージョン3で使用する
view
MIBツリーをどこまで参照許可させるかの設定です。
1 |
view <view name> <view type> <subtree> <mask> |
access
snmpへのアクセス制限を設定します。設定は、com2sec group view を組み合わせで行います。
1 |
access <group name> <context> <model> <level> <prefix> <read> <write> <notify> |
SNMPの起動・自動起動設定(CentOS7)
1 2 |
# systemctl start snmpd # systemctl enable snmpd |
動作確認
正常に動作するか確認してみます。コマンドは後述しますが、以下のコマンドでサブツリー情報が大量に表示されれば正常に起動しています。
1 |
# snmpwalk -v1 localhost -c local_community ucdavis |
サブツリー情報が表示されれば問題ありません。以下のメッセージが表示された場合は、コミュニティ名の間違いやバージョンの許可情報の誤りなどを疑ってみてください。
1 |
Timeout: No Response from localhost. |
SNMPマネージャのコマンドリスト
主なSNMPマネージャのコマンドは以下の通りです。
snmpget
1 |
snmpget [-<snmpversion>] <AgentIP> -c <Community> <OID>... |
1 |
snmpgetは[AgentIP]で指定したSNMPエージェントにリクエストを送り、[OID]の値を取得します。[snmpversion]にはv1,v2c,v3のそれぞれ指定することが出来ますが、省略した場合はv3がデフォルト設定となります。 |
snmpgetコマンド例
1 2 |
# snmpget -v1 localhost -c local_community system.sysName.0 SNMPv2-MIB::sysName.0 = STRING: hogehoge.com |
snmpgetnext
1 |
snmpgetnext [-<snmpversion>] <AgentIP> -c <Community> <OID>... |
1 |
基本的にはsnmpgetと同様です。OIDにインデックスまで指定した場合は、次のオブジェクトに相当するものが表示されます。インデックスの指定が無ければ、当該オブジェクトの最初のインデックスが表示されます。 |
snmpgetnextコマンド例
1 2 3 4 |
# snmpgetnext -v1 localhost -c local_community system.sysDescr SNMPv2-MIB::sysDescr.0 = STRING: Linux hogehoge.com 3.10.0-327.3.1.el7.x86_64 #1 SMP Wed Dec 9 14:09:15 UTC 2015 x86_64 # snmpgetnext -v1 localhost -c local_community system.sysDescr.0 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 |
snmpwalk
1 |
snmpwalk [-<snmpversion>] <AgentIP> -c <Community> <OID> |
1 |
<OID>以下のSNMPサブツリーの全情報を取得します。こちらも<snmpversion>を指定できますが、省略した場合はv3がデフォルト設定となります。 |
snmpwalkコマンド例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# snmpwalk -v1 localhost -c local_community system SNMPv2-MIB::sysDescr.0 = STRING: Linux hogehoge.com 3.10.0-327.3.1.el7.x86_64 #1 SMP Wed Dec 9 14:09:15 UTC 2015 x86_64 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (80725) 0:13:27.25 SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf) SNMPv2-MIB::sysName.0 = STRING: hogehoge.com SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf) SNMPv2-MIB::sysORLastChange.0 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup SNMPv2-MIB::sysORID.9 = OID: SNMP-NOTIFICATION-MIB::snmpNotifyFullCompliance SNMPv2-MIB::sysORID.10 = OID: NOTIFICATION-LOG-MIB::notificationLogMIB SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching. SNMPv2-MIB::sysORDescr.2 = STRING: The management information definitions for the SNMP User-based Security Model. SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB. SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP. SNMPv2-MIB::sysORDescr.9 = STRING: The MIB modules for managing SNMP Notification, plus filtering. SNMPv2-MIB::sysORDescr.10 = STRING: The MIB module for logging SNMP Notifications. SNMPv2-MIB::sysORUpTime.1 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.2 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.3 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.4 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.5 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.6 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.7 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.8 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.9 = Timeticks: (3) 0:00:00.03 SNMPv2-MIB::sysORUpTime.10 = Timeticks: (3) 0:00:00.03 |
snmpdelta
1 |
snmpwalk [-<snmpversion>] <AgentIP> -c <Community> -Cp <Nsec> <OID> |
1 2 |
snmpdeltaは<OID>の情報を取得し、その差分情報を表示します。 整数値を持つSNMPオブジェクトのOIDでなければ指定できないので注意が必要です。 |
snmpdeltaコマンド例
1 2 3 4 5 6 7 8 9 |
# snmpdelta -v1 localhost -c local_community -Cp 3 sysORDescr.1 SNMPv2-MIB::sysORDescr.1 /3 sec: 0 SNMPv2-MIB::sysORDescr.1 /3 sec: 0 SNMPv2-MIB::sysORDescr.1 /3 sec: 0 SNMPv2-MIB::sysORDescr.1 /3 sec: 0 SNMPv2-MIB::sysORDescr.1 /3 sec: 0 SNMPv2-MIB::sysORDescr.1 /3 sec: 0 SNMPv2-MIB::sysORDescr.1 /3 sec: 0 SNMPv2-MIB::sysORDescr.1 /3 sec: 0 |
整数値以外のOIDを指定すると以下のようにエラーとなります。
1 2 |
# snmpdelta -v1 localhost -c local_community -Cp 3 sysORID Failed object: SNMPv2-MIB::sysORID |
1 |