SNMPネットワークデバイス管理の実践
目次簡易SNMP オープンソースパッケージNET-SNMP デーモンsnmpd 相互接続ネットワークの初期から、研究者はどのようにネットワーク環境下の各種設備(コンピュータ設備を含む)の管理を容易に行うかを計画し始め、これによって誕生した簡単なネットワーク管理プロトコル(SNMP-Simple Network Management Protocol)も第1版、第2版、第3版の発展過程を経験した.
↑TOP↑
1.SNMPの概要
1980年代後半、単純ゲートウェイ監視プロトコル(SGMP-Simple Gateway Monitor Protocol)に基づいて、当時Tennessee大学で働いていたJeff Case博士らがIETFのSNMP第1版SNMPv 1規格を発表した.モデルはネットワークデバイス上でSNMPエージェント(Agent)を実行し、ネットワーク管理ワークステーション(NMS)と協調してネットワークデバイスの管理を完了する.SNMPエージェントとNMSは162/udpポートでデータメッセージ交換を行い、フォーマットは以下の通りである.
SNMPバージョン番号
Community名
PDU
Communityは、通信双方がデータメッセージを交換する前に正しい「暗号」です.両方のCommunity名が「威虎山」に設定されていれば,SNMPエージェントとNMSは共通のCommunity名でSNMPデータメッセージ交換を行うことができる.このNMSは「乳頭山」をCommunity名とするSNMPエージェントを制御できない.座山彫と許大馬棒は2つの山の頭の人で、彼らが互いに軍情を探ることを禁止し、相手の派遣にも従わないに違いない.第1版のPDUには、次の5つのタイプがあります. Get-Request:NMSがエージェントに送信する要求は、パラメータテーブルまたはパラメータ値 を取得する. Get-Next-Request:NMSがエージェントに送信する要求は、パラメータテーブルの次のパラメータとその値 を発見するために使用される. Response:エージェントがNMSに送信した応答は、NMSの要求に答える である. Set-Request:NMSがエージェントに送信する要求は、パラメータ値 を変更する Trap:エージェントがNMSに送信する通知(Notification) 年代に入り、Case博士は自社のSNMP Research,Incを設立し、改良された第2版SNMPv 2を発表した.従来のベースでは、第2版では2つの新しいPDUタイプが追加されました. Get-Bulk-Request:効率を向上させるために設計され、Get-Next-Requestの多重再帰 を一度に完了する. Inform-Request:Trapと同様の機能を完了するが、応答メカニズムを増やして通知が成功することを確保する また、第2版は第1版のCommunityメカニズムを改善したが、残念ながら協議の各方面の普遍的な認可を得られなかった.従って、現在一般的に使用されているSNMP第2版は、SNMPv 2 cと呼ばれる第1版のCommunityメカニズムを保持している.
SNMPの第3版SNMPv 3は2000年以降に完成して、それはSNMPの安全を提供することを増加します×××:認証(authentication):データ・メッセージ・ソースの正確性を検証する 秘密保持(privacy):データメッセージ伝送中にシリアル変更や秘密漏洩がないことを保証する ↑TOP↑
2.オープンソースパッケージNET-SNMP
NET-SNMPは、SNMPv 1、SNMPv 2 c、SNMPv 3を同時にサポートするオープンソースパッケージで、C言語で書かれています.
1992年、それは春で、ある老人はSNMPv 2標準のSteve Waldbusserの起草に参加したことがある.当時、Carnegie-Mellon大学に勤めていたが、学校のためにCMU-SNMPパッケージを開発し始めた.その後、UC Davis大学のWes HardakerはCMU-SNMPをベースにさらに改善し、1995年に拡張可能なSNMPエージェントを完了し、新しいパッケージはUCD-SNMPと呼ばれている.その後、いくつかのボランティアが参加し、開発チームは絶えず大きくなり、2000年にNET-SNMPと名付けられた.
RedHatまたはCentOSは、net-snmp、net-snmp-utils、およびnet-snmp-libsパッケージをインストールする必要があります.
一方、Debianにはsnmp、snmpd、libsnmp-baseパッケージがインストールされ、MIBを手動でダウンロードします.
NET-SNMPパッケージをインストールすると、SNMPユーティリティが目の前に表示され、オンラインマニュアルではsnmpcmdを参照できます.
すべてのプログラムが起動すると、ファイルディレクトリ$MIBDIRSからプロファイル$MIBSが読み込まれます.次のコマンドは、環境変数$MIBDIRSと$MIBSの具体的な値を示します.
SNMPの世界では、各監視対象(Object)に識別OID(Object Identifier)が分類される.管理情報ベースMIB(Management Information Base)は、ツリー型の組織構造である、ルートノードの下に:ccitt (0) .iso (1) .joint(2)NET-SNMPの設計目標はMIBの管理である.iso.org.dod.インターネット(または.13.6.1)のサブツリー構造.
snmptranslateを実行すると、よりイメージ的なツリー構造が観測されます.
さらに表示します.iso.org.dod.internet.mgmt.mib-2.System(.1.3.6.1.2.1.1)部分のサブツリー構造:
↑TOP↑
3.デーモンプロセスsnmpd
snmpdはNET-SNMPの重要な構成部分であり、バックグラウンドで実行されるデーモンプロセスによって実現される.シンクホスト上でsnmpdは161/udpポートをリスニングし、受信したSNMPクエリに応答する.まず、プロファイルを設定します.
3つの異なるバージョンのSNMPクエリを同時にサポートするため、構成ファイルではSNMPv 1 SNMPv 2 cに対してcommunity名(rwcommunityまたはrocommunity)を設定したり、SNMPv 3に対してuser名(rwuserまたはrouser)を設定したりすることができます.SNMPv 3のuserには認証パスワード(authentication passphrase)と8ビット以上のパスワードが必要です.
snmpdを起動すると、/var/lib/net-snmp/snmpdが書き換えられます.confは,動的に構成されたすべてのユーザなどの情報をこのファイルに書き込む.
デーモンプロセスsnmpdが起動して実行された後、ホストからNET-SNMPユーティリティを実行し、snmpdがSNMPv 1またはSNMPv 2 cまたはSNMPv 3クエリー要求に応答できるかどうかをテストできます.ユーティリティを実行しながらtcpdumpを実行し、ローカルインタフェース(lo)のすべてのデータメッセージをリスニングできます.
SNMPv 1のユーティリティを実行し、この例ではtigerとしてcommunity名を渡します.モニタオブジェクトsysContactを問い合わせることができます.0、その値はsnmpd.confプロファイルで設定します.
SNMPv 2 cユーティリティを実行し、snmpdをテストすることもできます.
SNMPv 3ユーティリティを使用するには、tigerとその認証パスワードauthpassと暗号化パスワードprivpassのuser名を渡す必要があります.
認証のみを行い、データメッセージの暗号化を行わないこともできます.
もちろん、認証もデータメッセージも暗号化しないこともできます.このときのuser名はcommunity名と同じ機能になります.
ユーティリティの実行を簡素化するために、呼び出しパラメータを事前にプロファイルに配置できます.次のようになります.
同様に、以下のSNMPv 2 cプロファイルがあります.
【未完待機】
↑TOP↑
1.SNMPの概要
1980年代後半、単純ゲートウェイ監視プロトコル(SGMP-Simple Gateway Monitor Protocol)に基づいて、当時Tennessee大学で働いていたJeff Case博士らがIETFのSNMP第1版SNMPv 1規格を発表した.モデルはネットワークデバイス上でSNMPエージェント(Agent)を実行し、ネットワーク管理ワークステーション(NMS)と協調してネットワークデバイスの管理を完了する.SNMPエージェントとNMSは162/udpポートでデータメッセージ交換を行い、フォーマットは以下の通りである.
SNMPバージョン番号
Community名
PDU
Communityは、通信双方がデータメッセージを交換する前に正しい「暗号」です.両方のCommunity名が「威虎山」に設定されていれば,SNMPエージェントとNMSは共通のCommunity名でSNMPデータメッセージ交換を行うことができる.このNMSは「乳頭山」をCommunity名とするSNMPエージェントを制御できない.座山彫と許大馬棒は2つの山の頭の人で、彼らが互いに軍情を探ることを禁止し、相手の派遣にも従わないに違いない.第1版のPDUには、次の5つのタイプがあります.
SNMPの第3版SNMPv 3は2000年以降に完成して、それはSNMPの安全を提供することを増加します×××:
2.オープンソースパッケージNET-SNMP
NET-SNMPは、SNMPv 1、SNMPv 2 c、SNMPv 3を同時にサポートするオープンソースパッケージで、C言語で書かれています.
1992年、それは春で、ある老人はSNMPv 2標準のSteve Waldbusserの起草に参加したことがある.当時、Carnegie-Mellon大学に勤めていたが、学校のためにCMU-SNMPパッケージを開発し始めた.その後、UC Davis大学のWes HardakerはCMU-SNMPをベースにさらに改善し、1995年に拡張可能なSNMPエージェントを完了し、新しいパッケージはUCD-SNMPと呼ばれている.その後、いくつかのボランティアが参加し、開発チームは絶えず大きくなり、2000年にNET-SNMPと名付けられた.
RedHatまたはCentOSは、net-snmp、net-snmp-utils、およびnet-snmp-libsパッケージをインストールする必要があります.
root@centos:# yum -y install net-snmp net-snmp-utils net-snmp-libs
一方、Debianにはsnmp、snmpd、libsnmp-baseパッケージがインストールされ、MIBを手動でダウンロードします.
root@debian:# apt-get install snmp snmpd libsnmp-base
root@debian:# apt-get install snmp-mibs-downloader
root@debian:# download-mibs
NET-SNMPパッケージをインストールすると、SNMPユーティリティが目の前に表示され、オンラインマニュアルではsnmpcmdを参照できます.
$ man snmpcmd
DESCRIPTION
This manual page describes the common options for the SNMP commands:
snmpbulkget, snmpbulkwalk, snmpdelta, snmpget, snmpgetnext, snmpnetstat,
snmpset, snmpstatus, snmptable, snmptest, snmptrap, snmpdf, snmpusm ,
snmpwalk . The command line applications use the SNMP protocol to
communicate with an SNMP capable network entity, an agent. Individual
applications typically (but not necessarily) take additional parameters
that are given after the agent specification. These parameters are
documented in the manual pages for each application.
すべてのプログラムが起動すると、ファイルディレクトリ$MIBDIRSからプロファイル$MIBSが読み込まれます.次のコマンドは、環境変数$MIBDIRSと$MIBSの具体的な値を示します.
$ snmptranslate -Dinit_mib .1 2>&1 | grep MIB
init_mib: Seen MIBDIRS: Looking in '/user/.snmp/mibs:/usr/share/snmp/mibs'
for mib dirs...
init_mib: Seen MIBS: Looking in ':SNMPv2-SMI:SNMPv2-MIB:UCD-SNMP-MIB:
NET-SNMP-AGENT-MIB:NET-SNMP-EXTEND-MIB:NET-SNMP-VACM-MIB' for mib files...
SNMPの世界では、各監視対象(Object)に識別OID(Object Identifier)が分類される.管理情報ベースMIB(Management Information Base)は、ツリー型の組織構造である、ルートノードの下に:ccitt (0) .iso (1) .joint(2)NET-SNMPの設計目標はMIBの管理である.iso.org.dod.インターネット(または.13.6.1)のサブツリー構造.
$ more /usr/share/snmp/mibs/SNMPv2-SMI.txt
SNMPv2-SMI DEFINITIONS ::= BEGIN
org OBJECT IDENTIFIER ::= { iso 3 } -- "iso" = 1
dod OBJECT IDENTIFIER ::= { org 6 }
internet OBJECT IDENTIFIER ::= { dod 1 }
directory OBJECT IDENTIFIER ::= { internet 1 }
mgmt OBJECT IDENTIFIER ::= { internet 2 }
experimental OBJECT IDENTIFIER ::= { internet 3 }
private OBJECT IDENTIFIER ::= { internet 4 }
security OBJECT IDENTIFIER ::= { internet 5 }
snmpV2 OBJECT IDENTIFIER ::= { internet 6 }
mib-2 OBJECT IDENTIFIER ::= { mgmt 1 }
transmission OBJECT IDENTIFIER ::= { mib-2 10 }
snmptranslateを実行すると、よりイメージ的なツリー構造が観測されます.
$ snmptranslate -Tp .iso
+--iso(1)
|
+--org(3)
|
+--dod(6)
|
+--internet(1)
|
+--directory(1)
|
+--mgmt(2)
| |
| +--mib-2(1)
| |
| +--system(1)
| | |
| | +-- -R-- String sysDescr(1)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -R-- ObjID sysObjectID(2)
| | +-- -R-- TimeTicks sysUpTime(3)
| | | |
| | | +--sysUpTimeInstance(0)
| | |
| | +-- -RW- String sysContact(4)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -RW- String sysName(5)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -RW- String sysLocation(6)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -R-- INTEGER sysServices(7)
| | | Range: 0..127
| | +-- -R-- TimeTicks sysORLastChange(8)
| | | Textual Convention: TimeStamp
| | |
| | +--sysORTable(9)
| | |
| | +--sysOREntry(1)
| | | Index: sysORIndex
| | |
| | +-- ---- INTEGER sysORIndex(1)
| | | Range: 1..2147483647
| | +-- -R-- ObjID sysORID(2)
| | +-- -R-- String sysORDescr(3)
| | | Textual Convention: DisplayString
| | | Size: 0..255
| | +-- -R-- TimeTicks sysORUpTime(4)
| | Textual Convention: TimeStamp
| ...... ......
|
+--snmpV2(6)
|
+--snmpDomains(1)
| |
| +--snmpUDPDomain(1)
| +--snmpCLNSDomain(2)
| +--snmpCONSDomain(3)
| +--snmpDDPDomain(4)
| +--snmpIPXDomain(5)
さらに表示します.iso.org.dod.internet.mgmt.mib-2.System(.1.3.6.1.2.1.1)部分のサブツリー構造:
$ snmptranslate .iso.org.dod.internet.mgmt.mib-2.system
SNMPv2-MIB::system
$ snmptranslate -On .iso.org.dod.internet.mgmt.mib-2.system
.1.3.6.1.2.1.1
$ more /usr/share/snmp/mibs/SNMPv2-MIB.txt
SNMPv2-MIB DEFINITIONS ::= BEGIN
system OBJECT IDENTIFIER ::= { mib-2 1 }
sysDescr OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"A textual description of the entity. This value should
include the full name and version identification of
the system's hardware type, software operating-system,
and networking software."
::= { system 1 }
... ...
$ snmptranslate -Tp SNMPv2-MIB::system
+--system(1)
|
+-- -R-- String sysDescr(1)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- ObjID sysObjectID(2)
+-- -R-- TimeTicks sysUpTime(3)
| |
| +--sysUpTimeInstance(0)
... ...
↑TOP↑
3.デーモンプロセスsnmpd
snmpdはNET-SNMPの重要な構成部分であり、バックグラウンドで実行されるデーモンプロセスによって実現される.シンクホスト上でsnmpdは161/udpポートをリスニングし、受信したSNMPクエリに応答する.まず、プロファイルを設定します.
# vi /etc/snmp/snmpd.conf
sysContact admin
sysLocation wellington
rwcommunity tiger # Community String for SNMP v1 & v2c
rwuser tiger # User Name for SNMP v3
3つの異なるバージョンのSNMPクエリを同時にサポートするため、構成ファイルではSNMPv 1 SNMPv 2 cに対してcommunity名(rwcommunityまたはrocommunity)を設定したり、SNMPv 3に対してuser名(rwuserまたはrouser)を設定したりすることができます.SNMPv 3のuserには認証パスワード(authentication passphrase)と8ビット以上のパスワードが必要です.
# vi /var/lib/net-snmp/snmpd.conf
createUser tiger MD5 authpass DES privpass
snmpdを起動すると、/var/lib/net-snmp/snmpdが書き換えられます.confは,動的に構成されたすべてのユーザなどの情報をこのファイルに書き込む.
# service snmpd start
# lsof -i udp:snmp
デーモンプロセスsnmpdが起動して実行された後、ホストからNET-SNMPユーティリティを実行し、snmpdがSNMPv 1またはSNMPv 2 cまたはSNMPv 3クエリー要求に応答できるかどうかをテストできます.ユーティリティを実行しながらtcpdumpを実行し、ローカルインタフェース(lo)のすべてのデータメッセージをリスニングできます.
# tcpdump -i lo
$ snmpwalk -v1 -ctiger localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux linux 2.6.32-642.1.1.el6.x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (3224) 0:00:32.24
SNMPv2-MIB::sysContact.0 = STRING: [email protected]
SNMPv2-MIB::sysName.0 = STRING: centos-6
SNMPv2-MIB::sysLocation.0 = STRING: wellington
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (7) 0:00:00.07
SNMPv 1のユーティリティを実行し、この例ではtigerとしてcommunity名を渡します.モニタオブジェクトsysContactを問い合わせることができます.0、その値はsnmpd.confプロファイルで設定します.
$ snmpget -v1 -ctiger localhost sysContact.0
SNMPv2-MIB::sysContact.0 = STRING: admin
SNMPv 2 cユーティリティを実行し、snmpdをテストすることもできます.
$ snmpget -v2c -ctiger localhost sysLocation.0
SNMPv2-MIB::sysLocation.0 = STRING: wellington
SNMPv 3ユーティリティを使用するには、tigerとその認証パスワードauthpassと暗号化パスワードprivpassのuser名を渡す必要があります.
$ snmpget -v3 -lAuthPriv -aMD5 -Aauthpass -xDES -Xprivpass -utiger localhost sysUpTimeInstance
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (11641) 0:01:56.41
認証のみを行い、データメッセージの暗号化を行わないこともできます.
$ snmpget -v3 -lAuthNoPriv -aMD5 -Aauthpass -utiger localhost sysUpTimeInstance
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (11649) 0:01:56.49
もちろん、認証もデータメッセージも暗号化しないこともできます.このときのuser名はcommunity名と同じ機能になります.
# sed -i 's/rwuser tiger/rwuser tiger noauth/' /etc/snmp/snmpd.conf
# service snmpd restart
$ snmpget -v3 -lNoAuthNoPriv -utiger localhost sysUpTimeInstance
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (11655) 0:01:56.55
ユーティリティの実行を簡素化するために、呼び出しパラメータを事前にプロファイルに配置できます.次のようになります.
$ vi /etc/snmp/snmp.conf
defVersion 3
defSecurityLevel AuthPriv
defAuthType MD5
defAuthPassphrase authpass
defPrivType DES
defPassphrase privpass
defSecurityName tiger
$ snmpget localhost sysUpTimeInstance
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (11641) 0:01:56.46
同様に、以下のSNMPv 2 cプロファイルがあります.
$ vi /etc/snmp/snmp.conf
defVersion 2c
defCommunity tiger
【未完待機】