【RHEL 7】SNMP エージェント設定について

インフラサーバ

Net-SNMP

Red Hat Enterprise Linux 7 には、SNMP エージェントを含む Net-SNMP ソフトウェアスイートが含まれている。このエージェントと関連ユーティリティーを使用すると、多くのシステムからのパフォーマンスデータを SNMP プロトコルによるポーリングに対応する各種ツールに提供することができる。

Net-SNMP のインストール

Net-SNMP 関連のパッケージは以下がある。

  • net-snmp
    • SNMP Agent Daemon とドキュメント。このパッケージは、パフォーマンスデータをエクスポートするために必要
  • net-snmp-libs
    • netsnmp ライブラリと、同梱の MIB。このパッケージは、パフォーマンスデータをエクスポートするために必要
  • net-snmp-utils
    • snmpget や snmpwalk などの SNMP クライアント。このパッケージは、SNMP によりシステムのパフォーマンスデータをクエリするために必要
  • net-snmp-perl
    • mib2c ユーティリティおよび NetSNMP Perl モジュール。このパッケージは Optional チャンネルにより提供されることに注意
  • net-snmp-python
    • Python 向け SNMP クライアントライブラリ。このパッケージは Optional チャンネルにより提供されることに注意

net-snmp、net-snmp-libs、net-snmp-utils をインストールする場合は以下コマンドを実行する。

yum install net-snmp net-snmp-libs net-snmp-utils

Net-SNMP Daemon の起動

net-snmp パッケージには、SNMP Agent Daemon である snmpd が含まれている。

■サービス起動と停止

#サービス起動
systemctl start snmpd.service
#サービス停止
systemctl stop snmpd.service

■サービス有効化(自動起動設定)と無効化

#サービス有効化
systemctl enable snmpd.service
#サービス無効化
systemctl disable snmpd.service

■サービス再起動と設定の再読み込み

#サービス再起動
systemctl restart snmpd.service
#設定の再読み込み
systemctl reload snmpd.service

Net-SNMP の設定

Net-SNMP Agent Daemon の設定を変更するには /etc/snmp/snmpd.conf 設定ファイルを編集する。

アクセス制御の設定

アクセス制御設定は以下を材料に設定する。

  • グループの定義
    • セキュリティの定義を材料にする
  • ビューの定義

そのため上の各定義を先に作成してから、アクセス制御設定を行う。

セキュリティの定義

ホストとコミュニティの組の定義。次項のグループの定義で使用する。

  • com2sec NAME SOURCE COMMUNITY
    • NAME はセキュリティの識別名
    • SOURCE は許可対象となるホスト名、サブネット、または default を指定
      • default は任意のネットワーク (0.0.0.0) の意味
    • COMMUNITY はコミュニティ名
com2sec notConfigUser  default       public

グループの定義

SNMP バージョンとセキュリティの組。後述のアクセス許可の設定で使用する。

  • group NAME MODEL SECURITY
    • NAME はグループの識別名
    • MODEL は SNMP バージョンを指定
      • v1
      • v2c
      • usm ← v3 の意味
    • SECURITY は前項で定義したセキュリティの名前
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser

アクセス範囲(ビュー)の定義

次項のアクセス許可の設定で使用する。

  • view NAME TYPE SUBTREE [MASK]
    • NAME はビューの識別名
    • TYPE は included または excluded を指定
    • SUBTREE は MIB のオブジェクト ID を指定
    • MASK は 16 進数で指定。デフォルトは ff
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1

アクセス許可の設定

  • access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY
    • NAME は定義済みのグループの識別名を指定
    • CONTEXT は v1 または、v2c のアクセスの場合は空文字列(“”)を指定
    • MODEL は any、v1、v2c、または usm を指定
    • LEVEL は noauth、auth、または priv を指定
      • v1 または v2c アクセスの場合は noauth を指定
    • PREFX は exact または prefix を指定
    • READ は定義済みのビューの識別名を指定
    • WRITE は定義済みのビューの識別名を指定
    • NOTIFY は定義済みのビューの識別名を指定
access  notConfigGroup ""      any       noauth    exact  systemview none none

システム情報の設定

snmpwalk コマンドでデフォルト状態の system ツリーを表示すると以下のようになる。

# snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (464) 0:00:04.64
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)[出力は省略されています]

  • sysName(システム名)の設定
    • sysname system-name
    • デフォルトはホスト名
  • sysLocation(システムの場所)の設定
    • syslocation system-location
  • sysContact(システムの連絡先)の設定
    • syscontact system-contact

例:

syslocation Datacenter, Row 4, Rack 3
syscontact UNIX Admin <admin@example.com>

上の変更後、設定を再読み込みした後の snmpwalk コマンドの実行結果は以下の通り。

# systemctl reload snmp.service
# snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (35424) 0:05:54.24
SNMPv2-MIB::sysContact.0 = STRING: UNIX Admin <admin@example.com>
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain
SNMPv2-MIB::sysLocation.0 = STRING: Datacenter, Row 4, Rack 3[出力は省略されています]

SNMP コミュニティの設定

先述のアクセス制御設定の代わりの方法として、以下の方法で SNMP v1/v2c コミュニティの設定を行うことができる。

SNMP のコミュニティを設定するには、/etc/snmp/snmpd.conf 設定ファイルで rocommunity または rwcommunity ディレクティブを使用する。

  • rocommunity community [source [OID]]
  • rwcommunity community [source [OID]]
    • community は コミュニティ名
    • source はクエリを許可するアクセス元 IP アドレスまたはサブネット
    • OID は アクセスを提供する SNMP ツリー(アクセス許可範囲)

例:ローカルマシンに対して、コミュニティ名 「redhat」 を使用して system ツリーへの読み取り専用のアクセスを与える場合は以下の設定とする

rocommunity redhat 127.0.0.1 .1.3.6.1.2.1.1

SNMP トラップ送信設定

Net-SNMP で送信することができるトラップは以下の4種類。

  • ColdStart
    • SNMP エージェントが初期化され起動したとき
  • LinkDown
    • ネットワークインターフェースが Up から Down になったとき
  • LinkUp
    • ネットワークインターフェースが Down から Up になったとき
  • AuthentificationFailure
    • 認証違反を検出したとき

デフォルトではトラップを送信しない。トラップを送信させるためには以下設定が必要。

  • trapsink ディレクティブでコミュニティと送信先の設定
  • 各種類のトラップに対応したディレクティブでトラップ送信を有効化する設定
    • ColdStart については必ず送信される

trapsink ディレクティブ設定

  • trapsink destination-ip community-name [port]
    • destination-ip はトラップ送信先 IP アドレス
    • community-name はコミュニティ名
    • port は送信先ポート番号。デフォルト 162/udp

LinkDown / LinkUp トラップ設定

LinkDown と LinkUp をまとめて有効化する場合は以下のように linkUpDownNotifications ディレクティブを使用する。

linkUpDownNotifications yes

LinkDown と LinkUp それぞれを個別に設定する場合は、以下のように notificationEvent ディレクティブと monitor ディレクティブを使用する。

#LinkDown トラップ設定例
notificationEvent  linkDownTrap  linkDown ifIndex ifAdminStatus ifOperStatus
monitor -r 60 -e linkDownTrap "Generate linkDown" ifOperStatus == 2

#LinkUp トラップ設定例
notificationEvent linkUpTrap linkUp ifIndex ifAdminStatus ifOperStatus
monitor -r 60 -e linkUpTrap "Generate linkUp" ifOperStatus != 2

  • monitor ディレクティブの -r 60 の部分で監視間隔 (秒) を設定している模様

設定の反映

設定ファイルの変更を反映させるには以下コマンドで設定の再読み込みを行う。

systemctl reload snmpd.service

MIB ツリーの確認

アクセス制御やコミュニティの設定で使用する OID を確認する方法として、snmptranslate -Tp コマンドがあります。このコマンドで MIB ツリーを確認できます。

#  snmptranslate -Tp
+--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
            |     |
            |     +--interfaces(2)
            |     |  |
            |     |  +-- -R-- Integer32 ifNumber(1)
            |     |  |
            |     |  +--ifTable(2)
            |     |     |
            |     |     +--ifEntry(1)
#(略)

参考資料

SNMPトラップの送信条件、トラップ抑止方法について | SIOS Tech. Lab
SNMPトラップの送信条件、トラップ抑止方法について|こんにちは。サイオステクノロジーOSSサポート担当何敏欽です。SNMPトラップの種別net-snmp
LinkUp/Down の snmptrap を送信する。 - Qiita
何さsnmpd起動してんのにLinkupおよびLinkDownのsnmptrapが送出されなかったんで頑張った。環境#cat/e…
Net-SNMP
Net-SNMP
net-snmpの設定 - Qiita
はじめにnet-snmpの設定のうち、アクセス制御とシステム情報について記述します。net-snmpの設定アクセス制御com2secセキュリティの定義を行います。「NAME」には、セキュ…
ドキュメント 01
スタイルが適用されてないドキュメントのひな形です。

―――――――――――――

タイトルとURLをコピーしました