SNMPネットワークデバイス管理の実践

11083 ワード

目次
  • 簡易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パッケージをインストールする必要があります.
    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

    【未完待機】