6. SNMP導入マニュアル

本書は X-MON を用いて監視を実施する際に使用するSNMPをLinux環境へインストールするマニュアルとなっております。

そのため、基本的なLinuxOSの一般的な操作、用語などについては知識をご理解の上でお読みください。

また、本稼働中のシステムへのインストール作業などは充分に検証を行ったうえで導入するようにしてください。

いかなるシステムへの影響が発生しても、弊社は責任を負いかねますのでご了承ください。

本書における解説環境
CentOS 7.3
CentOS 8.1
Ubuntu server 12.04
FreeBSD 8.3
インターネットへの接続環境

6.1. SNMPとは

SNMPとは X-MON を用いてリソース監視・性能監視を実施する際にLinux環境へインストールしておくエージェントソフトです。

■ SNMP監視

snmp_image

Linux環境へのSNMPのインストールですが、本書では以下の環境で解説します。
・CentOS 7、CentOS 8
・インターネットへの接続環境

また、作業についてはroot権限で行うよう、マニュアルでは記載しております。

root権限以外ではsudoを使用するなどroot権限でコマンドを発行できるようにしておいてください。

6.1.1. SNMPのバージョンについて

SNMPにはSNMP1、SNMPv2c、SNMPv3の3つのバージョンがあります。X-MONでは全バージョンに対応しております。

通常使用するのはSNMPv1、SNMPv2cで結構です。X-MONと監視ホストとの認証を暗号化するなどセキュリティを高める必要がある場合はSNMPv3を使用ください。

■ SNMPのバージョンによる認証の違い

snmp_version_diff

6.2. CentOSにSNMPをインストールする

CentOSを例に手順を解説いたします。他のサーバOSへのインストールは目次から確認してください。

パッケージのインストールはyumコマンドで実施します。

・net-snmp
・net-snmp-devel
・net-snmp-utils

を指定してインストールします。

# yum install net-snmp net-snmp-devel net-snmp-utils

インストールが完了したら

Complete!

と表示されます。

6.2.1. ハードウェアの情報を取得するには

X-MONではハードウェアのファンの状態やCPU温度などの情報をSNMPで取得する事が出来ます。しかし、通常のOSへのSNMPのままでは取得できません。

ハードウェアベンダーが提供している管理ソフトウェアのインストールをお願いします。DELLの場合、OpenManageServerAdministratorが該当します。

その他、HP、IBM、富士通、NECも同様の管理ソフトウェアがございます。

詳細については、ハードウェアベンダーへお問い合わせください。

6.3. SNMPを設定する

インストールしたSNMPを設定します。

SNMPでの設定項目は以下となります。

・community コミュニティ名
・com2sec セキュリティ名
・group グループ名
・view 範囲名
・SNMPの情報取得を許可するIPアドレス、もしくはネットワークアドレス

本マニュアルの解説では、以下を例として記載します。

項目名

内容

community

xtrans

com2sec

x-mon

group

x-mon-group

view

view_all

接続IP

192.168.19.201

作業ディレクトリへ移動し、設定ファイルのバックアップを取得します。

# cd /etc/snmp/
# ls
snmpd.conf snmptrapd.conf

# cp -vip snmpd.conf snmpd.conf.org
# ls
snmpd.conf snmpd.conf.org snmptrapd.conf

バックアップが取得出来たら設定を編集します。

# vi snmpd.conf

6.3.1. セキュリティ名とコミュニティ名を設定

■デフォルトの設定

# sec.name source community
com2sec notConfigUser default public

の部分が設定箇所になりますので、下記のように変更します。

■編集後

# sec.name source community
# com2sec notConfigUser default public
com2sec local localhost xtrans
com2sec x-mon 192.168.19.201 xtrans

デフォルトの部分に「#」を先頭行につけて無効にし、新しい設定をいれます。

サーバ自身のローカルホストからも接続を許可するので、セキュリティ名 local を定義して使用するコミュニティ名に「xtrans」を設定します。

同じようにX-MONサーバからの接続を許可するのでセキュリティ名 x-mon を定義し、接続元として「192.168.19.201」を指定、使用するコミュニティ名に「xtrans」を設定しています。

今回はホストのIPアドレスで接続元を指定していますが、ネットワーク単位で接続許可をする場合は

com2sec x-mon 192.168.19.0/24 xtrans

とネットワークアドレスとプレフィックス表記でサブネットマスクを指定してください。

snmp_exclamation_mark接続IPアドレスがIPv6の場合

 デフォルトの設定を下記の様に変更します。

※X-MONからの接続IPアドレスを2001:db8::100とする

■編集後

# sec.name source community
# com2sec notConfigUser default public
agentaddress udp6:161
com2sec6 local localhost xtrans
com2sec6 x-mon 2001:db8::100 xtrans

6.3.2. グループ名とセキュリティ名を紐付る

続いてグループ名とセキュリティ名を紐付ます。グループはセキュリティモデル(SNMPのバージョン)をセキュリティ名で使用する定義をします。

■デフォルトの設定

# groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser

■編集後

# groupName securityModel securityName
# group notConfigGroup v1 notConfigUser
# group notConfigGroup v2c notConfigUser
group local-group v1 local
group local-group v2c local
group x-mon-group v1 x-mon
group x-mon-group v2c x-mon

デフォルトの部分に「#」を先頭行につけて無効にし、新しい設定をいれます。

local-groupにはセキュリティ名 local が所属し、SNMPバージョン v1、v2c を使うように記載されています。 同じように、x-mon-groupもSNMPバージョン v1、v2c を使い、セキュリティ名 x-mon が所属するようにします。

6.3.3. view定義をする

SNMPで取得可能な情報の範囲をview定義で設定します。

■デフォルトの設定

# 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

■編集後

# 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_view included .1 80

all_viewがviewの定義の名前、subtreeがどの範囲まで取得可能なのかをOIDで指定します。「.1」は全て取得可能です。

maskはオプションで16進数のマスクです。省略も可能です。「.1」で全てを取得する場合は「80」を指定します。

「80」の16進数を10進数に直すと「1000 0000」となります。一番左だけが有効の数字という考え方です。

例えば、viewの範囲を「1.3.4.1」とします。

その場合、4桁になるので、マスクは「1111 0000」となります。16進数に直すと「F0」です。

view all included .1.3.4.1 F0

6.3.4. accessでグループとビューを組み合わせてアクセスの制御ルールを作成する

最後の設定項目です。今まで設定したグループ、ビューを組み合わせ最終的な制御ルールを作成します。

■編集前

# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact systemview none none

■編集後

# 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_view none none
access x-mon-group "" any noauth exact all_view none none

各項目は下記表を参照ください。

項目名

内容

group

グループ名を指定

context

snmpv3で使用するので、v1、v2cの場合は空文字である""を指定

sec.model

セキュリティモデル。使用するsnmpのバージョンを指定します。
v1、v2c、usmを指定(usmはsnmpv3の事)を指定できるがanyを指定する。

sec.level

セキュリティレベル(認証設定)。
snmpv3で使用するのでv1、v2の場合はnoauthを指定します。

prefix

Contextマッチの方法。exactは厳密一致。
snmpv3で指定するコンテキストの一致条件。
v1、v2の場合はexactを指定します。

read

read(読み取り)権限を指定します。
事前に作成したall_view定義を指定し読み取り権限を与えます。

write

write(書き込み)権限を指定します。
事前に作成したview定義はありませんのでnoneにします。
(通常書き込み権限は付与させません

notif

通知対象を指定します。トラップ通知をするための
view定義を指定しますが作成しないためnoneにします。
(通常は設定しませんのでnoneで結構です)

このaccessでは

・local-groupグループには読み取り権限がview定義で指定した範囲に与えられる
・x-mon-groupグループには読み取り権限がview定義で指定した範囲に与えられる

となります

以上で設定は終了ですので、保存してください。

6.3.5. SNMPを起動させる

設定が出来ましたので、SNMPを起動させます。

# service snmpd start

エラーが出る場合は設定項目に誤りがありますので確認してください。

6.3.6. X-MONから監視ホストへのアクセス制御

監視ホストでiptablesのアクセス制御を行っている場合は、X-MONサーバからSNMPプロトコルの接続を許可してください。

SNMPはUDPポート番号161番を使用します。

X-MONサーバのIPアドレスが192.168.19.201の場合は下記のルールとなります。

-A INPUT -p udp --dport 161 -s 192.168.19.201 -j ACCEPT

インタフェースの指定は各環境に合わせて調整ください。

6.3.7. DISK監視を行う場合

X-MONからSNMPを用いてDISKを監視する際は設定の追記が必要です。

# vi snmpd.conf

■デフォルトの設定

「disk checks」というセグメントの部分があります。

デフォルトではコメント付になっています。

# disk checks
#
~中略~
# Check the / partition and make sure it contains at least 10 megs.

#disk / 10000

「/var」を監視する場合は以下のように追記します

# disk checks
#
~中略~
# Check the / partition and make sure it contains at least 10 megs.

#disk / 10000
disk /var

設定が出来ましたので、SNMPを再起動させます。以上で設定は完了です。

# service snmpd restart

二つ以上のパーティションを指定する場合は連続して追記してください。

# disk checks
#
~中略~
# Check the / partition and make sure it contains at least 10 megs.

#disk / 10000
disk /var
disk /home
disk /usr

6.3.7.1. DISK監視で監視出来るパーティションについて

DISK監視で監視できるパーティションはマウントポイントでマウントされているデバイスとなります。

# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvda2 ext3 1.5G 310M 1.1G 23% /
/dev/xvda7 ext3 3.4G 238M 3.0G 8% /var
/dev/xvda6 ext3 487M 11M 451M 3% /home
/dev/xvda3 ext3 1.5G 686M 691M 50% /usr
/dev/xvda1 ext3 99M 21M 74M 22% /boot

このような状態の場合、「Mounted on」に表示されているパーティションが監視可能となります。

6.3.8. プロセス監視を行う場合

X-MONからSNMPを用いてプロセスを監視する際は設定の追記が必要です。

# vi snmpd.conf

■デフォルトの設定

「Process checks.」というセグメントの部分があります。

デフォルトではコメント付になっています。

####################################################################
# Process checks.
#
# The following are examples of how to use the agent to check for
# processes running on the host. The syntax looks something like:
~中略~
# Make sure mountd is running
#proc mountd

「httpd」を監視する場合は以下のように追記します

####################################################################
# Process checks.
#
# The following are examples of how to use the agent to check for
# processes running on the host. The syntax looks something like:
~中略~
# Make sure mountd is running
#proc mountd
proc httpd

設定が出来ましたので、SNMPを再起動させます。以上で設定は完了です。

# service snmpd restart

二つ以上のプロセスを指定する場合は連続して追記してください。

####################################################################
# Process checks.
#
# The following are examples of how to use the agent to check for
# processes running on the host. The syntax looks something like:
~中略~
# Make sure mountd is running
#proc mountd
proc httpd
proc rsyslogd

6.3.8.1. 指定するプロセス名について

proc行に記載するプロセス名はサーバにて「ps -e」コマンドで出力されるプロセス名を指定します。

例として、rsyslogの場合は

# ps -e | grep rsyslog
1005 ? 00:00:00 rsyslogd

となりますので、指定するのは「rsyslogd」となります。

6.4. X-MONからSNMPを確認する

X-MONサーバから監視ホストにSNMPが正常に応答するか確認してみましょう。

確認はX-MONサーバのコマンドラインから実施しますのでサーバにログインしてください。

■構文

# snmpwalk -v [snmpのバージョン] -c [コミュニティ名] [IPアドレス] [取得するOID(省略で全て取得)]

■例文

SNMPのバージョンは2c
コミュニティ名はxtrans
監視ホストのIPアドレスは192.168.19.120
OIDは1分間のロードアベレージを取得する「.1.3.6.1.4.1.2021.10.1.3.1」

・発行例

# snmpwalk -v 2c -c xtrans 192.168.19.120 .1.3.6.1.4.1.2021.10.1.3.1

UCD-SNMP-MIB::laLoad.1 = STRING: 0.01

値が返ってきました。「0.01」というのが1分間のロードアベレージの値です。

正常に値が取得できていますので、X-MONの管理画面から設定が可能です

6.5. UbuntuにSNMPをインストールする

debパッケージを使用しているUbuntuにSNMPをインストールする手順です。

apt-getコマンドで
・snmp
・snmpd
を指定してインストールします。

# apt-get install snmp snmpd

インストールが完了したら

Complete!

* Starting network management services:

トリガを処理しています ...

ldconfig deferred processing now taking place

と表示されます。

設定ファイルの保存場所や設定方法はCentOSと同じです。

設定できれば

# /etc/init.d/snmpd start

で起動できます。

外部からアクセスできるように、ポートの設定等も行ってください。

6.6. FreeBSDにSNMPをインストールする

FreeBSDにSNMPをインストールする手順です。

6.6.1. コマンドでインストールする場合

portinstallコマンドで
・net-snmp
を指定してインストールします。

# portinstall net-snmp

6.6.2. ソールからインストールする場合

ソースからインストールする場合はmake installします。

# cd /usr/ports/net-mgmt/net-snmp/
# pwd
/usr/ports/net-mgmt/net-snmp
# make install clean

インストールが完了すると、/usr/local/share/snmp/ に設定ファイルがあります。

コマンド類は/usr/local/bin/ にあります。

デフォルトでは、/usr/local/share/snmp/snmpd.confがないのでサンプルファイルである/usr/ports/net-mgmt/net-snmp/snmpd.conf.exampleをリネームして使用できます。

基本的な設定方法はCentOSと変わりません。

サンプルファイルをリネームする以外では/usr/local/bin/snmpconfコマンドで作成する方法があります。

# /usr/local/bin/snmpconf -i -g basic_setup

************************************************
*** Beginning basic system information setup ***
************************************************

Do you want to configure the information returned in the system MIB group (contact info, etc)? (default = y): y

The location of the system: [ホストのシステム名ホスト名(省略はエンター)]

The contact information: [システム管理者のMAILアドレス(省略はエンター)]

Do you want to properly set the value of the sysServices.0 OID (if you don't know, just say no)? (default = y): y

Configuring: sysservices
Description:
The proper value for the sysServices object.
arguments: sysservices_number

does this host offer physical services (eg, like a repeater) [answer 0 or 1]: 0

does this host offer datalink/subnetwork services (eg, like a bridge): 0

does this host offer internet services (eg, supports IP): 0

does this host offer end-to-end services (eg, supports TCP): 0

does this host offer application services (eg, supports SMTP): 0

Finished Output: sysservices 0

**************************************
*** BEGINNING ACCESS CONTROL SETUP ***
**************************************

Do you want to configure the agent's access control? (default = y): y

**SNMPv3読み書き可能なユーザの設定**

Do you want to allow SNMPv3 read-write user based access (default = y): y

Configuring: rwuser
Description:
a SNMPv3 read-write user
arguments: user [noauth|auth|priv] [restriction_oid]

The SNMPv3 user that should have read-write access: [ユーザ名]

The minimum security level required for that user [noauth|auth|priv, default = auth]: [認証方式]

The OID that this community should be restricted to [if appropriate]: (空白でエンター)

Do another rwuser line? (default = y): n (他のユーザは作成しないのでn)

Do you want to allow SNMPv3 read-only user based access (default = y): n(読み取り専用ユーザを作成する場合はy)

**SNMPv1,v2c読み書き可能なユーザの設定**

Do you want to allow SNMPv1/v2c read-write community access (default = y): y

Enter the community name to add read-write access for: [コミュニティ名]

The hostname or network address to accept this community name from [RETURN for all]:(空白でエンター)

The OID that this community should be restricted to [RETURN for no-restriction]:(空白でエンター)

Do another rwcommunity line? (default = y): n(他のユーザは作成しないのでn)

Do you want to allow SNMPv1/v2c read-only community access (default = y):n(読み取り専用ユーザを作成する場合はy)

****************************************
*** Beginning trap destination setup ***
****************************************

Do you want to configure where and if the agent will send traps? (default = y): n(snmptrapを使用する場合はy)

****************************************
*** Beginning monitoring setup ***
****************************************

Do you want to configure the agent's ability to monitor various aspects of your system? (default = y): n

The following files were created:

/usr/local/share/snmp/snmpd.conf.bakというファイル名で作成されるので、リネームして使用する。

SNMPを起動させるには/etc/rc.confに下記を追記します。

#snmp
snmpd_enable="YES"
snmpd_flags="-a"

追加後、

# /usr/local/etc/rc.d/snmpd start

で起動できます。

外部からアクセスできるように、ポートの設定等も行ってください。

6.7. SNMPをソースでインストールする

SNMPをソースでインストールする手順です。手順は共通ですが環境により異なる場合もございますので注意してください。

ソースのダウンロードは
から行います。
本セクション内の環境は
・CentOS 7.3
・net-snmp-5.7.2
です。

ソースをダウンロードし、解凍します。

# tar zxvf net-snmp-5.7.2.tar.gz

configureを実行します。

# cd net-snmp-5.7.2
# ./configure

configure中に対話式の質問が出てきますが、全てエンターで問題ありません。

Default version of SNMP to use (3):

System Contact Information (@@no.where):

System Location (Unknown):

Location to write logfile (/var/log/snmpd.log):

Location to write persistent information (/var/net-snmp):

configureが終わると下記のような表示が出ます。

Net-SNMP configuration summary:

---------------------------------------------------------

SNMP Versions Supported: 1 2c 3

Building for: linux

Net-SNMP Version: 5.7.2

Network transport support: Callback Unix Alias TCP UDP IPv4Base SocketBase TCPBase UDPIPv4Base UDPBase

SNMPv3 Security Modules: usm

Agent MIB code: default_modules => snmpv3mibs mibII ucd_snmp notification notification-log-mib target agent_mibs agentx disman/event disman/schedule utilities host

MYSQL Trap Logging: unavailable

Embedded Perl support: disabled

SNMP Perl modules: building -- embeddable

SNMP Python modules: disabled

Crypto support from: internal

Authentication support: MD5 SHA1

Encryption support: DES AES

Local DNSSEC validation: disabled

---------------------------------------------------------

configureが完了すれば、makeしてインストールします。

# make
# make test
# make install

インストールが完了すると

/usr/local/share/snmp/ に設定ファイルが /usr/local/bin/ にコマンドがインストールされます。

設定ファイルはサンプルからコピーして使用するか、FreeBSDでの解説にあるsnmpconfコマンドでも作成出来ます。 サンプルファイルは解凍したディレクトリの net-snmp-5.7.2/EXAMPLE.conf になりますので、 /usr/local/share/snmp/snmpd.conf にコピーして使用してください。

設定ファイルの設定についてはパッケージでの設定方法と同じです。

起動スクリプトはnet-snmp-5.7.2/dist/snmpd-init.dにありますので、 /etc/rc.d/init.d/snmpd にコピーして使用してください。パーミッションは755にしてください。

SNMPは下記コマンドで起動します。

# /etc/init.d/snmpd start

6.8. SNMPv3を設定する

認証の暗号化が出来るSNMPv3の設定方法です。高度な設定になりますので、通常監視ではv1,v2cのご利用をおすすめします。また設定方法は各サーバOSで共通ですが異なる場合もございます。

6.8.1. 環境

SNMPv3ではユーザ名を使ってSNMPの情報を取得するための認証を行います。また認証を暗号化する事も可能です。

本セクション内での環境は
・CentOS 7.3
・net-snmp-5.7.3
です。

6.8.2. 設定項目

認証に使用するユーザを作成します。また、ユーザのパスワードと暗号用パスワードも設定します。手順書では下記のように準備します。

項目名

内容

ユーザ名

SNMPv3user

認証用パスワード(8文字以上)

ABCDqwer

暗号化用パスワード(8文字以上)

QWERabcd

設定ファイルをバックアップし、編集します。

設定ファイルは/etc/snmp/snmpd.confです。

# cp –vip /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.YYYYMMDD
# vi /etc/snmp/snmpd.conf

下記内容をファイルの末尾に追記します。

# snmpv3 auth setting
rwuser SNMPv3user priv

項目の意味は下記となります。

項目名

内容

rwuser

書き込み読み込み権限のあるユーザです。
読み取り専用にする場合はrouserを指定します。

SNMPv3user

ユーザ名です。

priv

priv・・・認証方式です。
privはパスワード認証と暗号化両方行います。
noauthはパスワード認証・暗号化ともに行わず、
authは暗号化のみ行います。

認証方式の後にOIDを指定する事も出来ますが、全てのOIDを取得するようにしますので記載はしません。

また、v1、v2cと同じくview定義とaccessで制限する場合は下記のように記載します。

# グループ定義。コミュニティ名を指定していた部分にユーザ名を記載する
# group notConfigGroup v2c notConfigUser
group snmpv3group usm SNMPv3user
# view定義
#view systemview included .1.3.6.1.2.1.25.1.1
view all_snmpv3 included .1 80
# access定義
#access notConfigGroup "" any noauth exact systemview none none
access snmpv3group "" any priv exact all_snmpv3 none none
# snmpv3 auth setting
rouser SNMPv3user

続いて認証パスワードと暗号化パスワードを設定します。

ディストリビューションによって設定ファイルの場所が異なります。

項目名

内容

CentOS6.3

/var/lib/net-snmp/snmpd.conf

ubuntu12.04

/var/lib/snmp/snmpd.conf

FreeBsd8.3

/var/net-snmp/snmpd.conf

ソース

/var/net-snmp/snmpd.conf(デフォルト)

それぞれの環境で読み替えてください。

また、設定を追加する際はSNMPのプロセスを止める必要があります。

# service snmpd stop

プロセスを止めたうえで、設定ファイルのバックアップを取り、編集します。

# cp –vip /var/net-snmp/snmpd.conf /var/net-snmp/snmpd.conf.YYYMMDD

# vi /var/net-snmp/snmpd.conf

ファイルの中断に下記内容を記載します。

createUser SNMPv3user SHA ABCDqwer AES QWERabcd

各項目の意味は表を参照ください。

項目名

内容

SNMPv3user

ユーザ名です

SHA

暗号化方式。MD5も使用できます。

ABCqwer

認証用パスワードです。

AES

暗号化する規格です。DESも使用できます。

QWERabcd

暗号化パスワードです。
省略した場合は認証用パスワードが使用されます。

記載が出来たらSNMPを起動させます。

# service snmpd start

起動出来たら設定ファイルを確認します。

# less /var/lib/net-snmp/snmpd.conf

usmUser 1 3 0x80001f888047eb2b6ebd2e8a50 0x736e6d7076337573657200 0x736e6d7076337573657200 ~後略~

usmUserから始まる行が出来ており、ハッシュされたパスワードが記載されています。

これで設定は完了です。

6.8.3. X-MONから確認する

X-MONサーバからSNMPの値が取得できるか確認してみましょう。

■ 構文

# snmpwalk -v [snmpのバージョン] -u [ユーザ名] –l [認証方式] –a [暗号化方式SHAorMD5] –A [認証用パスワード] –x [暗号化方式AESorDES] –X [暗号化パスワード] [IPアドレス] [取得するOID]

・認証方式
認証だけを行う場合:authNoPriv
認証と暗号化を両方行う場合:authPriv

■ 発行例

本セクション内の設定を例に、SNMPを取得するサーバが192.168.10.120である場合に1分間のロードアベレージを取得する。

# snmpwalk -v 3 -u SNMPv3user -l authPriv -a SHA -A ABCDqwer -x AES -X QWERabcd 192.168.19.120 .1.3.6.1.4.1.2021.10.1.3.1

UCD-SNMP-MIB::laLoad.1 = STRING: 0.00

正常に取得できました。設定で認証と暗号化をするようにしていますので、authPrivをauthNoPrivで発行するとエラーになりますので気を付けてください。

以上でSNMPv3の解説は終了です。