private tips

プログラミングとその他諸々の備忘録。

Net-SNMP の設定について

所要でNet-SNMPの設定を行う機会があったので、備忘録。

 

***** Net-SNMP *****

以下ディレクティブ群は基本的に全て、

/etc/snmp/snmpd.conf にて設定する項目となる。

 

アクセス及びセキュリティに関する項目

■com2sec (アクセス制御に関する項目)

書式 :
# sec.name source community
com2sec <security-name> <source> <community-name>

●例
com2sec testLocal01 localhost testCommunity01
com2sec testNetwork01 192.168.x.x/24 testCommunity01

説明 :

セキュリティを定義する部分。

ローカルホスト 及び 192.168.x.x/24 に属するホストからの

snmpwalk コマンドによる情報の取得を許可する。

コミュニティ名は任意だが、概念的に言うと所謂「パスワード」のようなものなので、

推測が容易な名前にするのはセキュリティ上、よろしくない。

複雑で推測が困難な名前にするべきである。

 

■group (グループの定義)

書式 :
# groupName securityModel securityName
group <group-name> <snmp-version> <security-name>

●例
group localGroup v1 testLocal01
group localGroup v2c testLocal01
group localGroup usm testLocal01
group networkGroup v1 testNetwork01
group networkGroup v2c testNetwork01
group networkGroup usm testNetwork01

説明 :
グループを定義する部分。

com2sec で定義したセキュリティ名に対して、

「どのバージョンのsnmp通信を許可するか」を定義する部分。

バージョンは securityModel で指定し、それぞれが以下のように対応する。

SNMP version1 : v1
SNMP version2 : v2c
SNMP version3 : usm

 

グループ名は任意だが、接頭辞として

"ro(Read Only)" や "rw(Read Write)" のついた名前をよく見かけるので、つけるのが一般的?

つけると分かりやすくていいですね。

 

■view (SNMP で取得可能な情報の範囲を指定)

書式 :

# name incl/excl subtree mask(optional)

view <view-name> <type> <subtree> <hex mask value>

 

●例

view testView01 include .1.3.6.1.2.1.1

説明 :

MIB ツリーの取得範囲を決定する部分。ビュー名は任意。

"subtree" 列で指定したオブジェクトID を基準に情報を取得するよう定義する。

"type" を「included」とすると "subtree" で指定したOIDを含む範囲の指定となり

「excluded」とすると、"subtree" で指定したOIDの範囲外の指定となる。

"mask" は16進数で指定するマスク値の事で、8bitごとに":"で区切って指定する。

 

※例 : TCP に関する情報のみを取得したい場合

OID = 1.3.6.1.2.1.6 (MIB tree 参照) となる。

上記OIDのみ許可するため、マスクはOIDの数値の数だけ"1"をたてる。

1.3.1.6.1.2.1.6 = 1.1.1.1.1.1.1 = 1111 1110 = 0xfe となり

上記の例を用いると、結果的に以下のようになる

view testView01 include .1.3.6.1.2.1.6 0xfe

この状態で snmpwalk コマンドを発行すると、

TCPに関する情報のみが得られるようになる。

 

以下、実行結果例

# snmpwalk -v 2c -c testCommunity01 localhost .
TCP-MIB::tcpRtoAlgorithm.0 = INTEGER: other(1)
TCP-MIB::tcpRtoMin.0 = INTEGER: 200 milliseconds
TCP-MIB::tcpRtoMax.0 = INTEGER: 120000 milliseconds
TCP-MIB::tcpMaxConn.0 = INTEGER: -1
TCP-MIB::tcpActiveOpens.0 = Counter32: 60995
TCP-MIB::tcpPassiveOpens.0 = Counter32: 59025
...

MIB ツリーに関する記事は別の機会に。

 

 

access (アクセス許可に関する設定)

書式 :

# group context sec.model sec.level prefix read write notify

access <group-name> <context> <snmp-ver> <sec-level> <condition> <view-name> <view-name> <view-name>

●例

access localGroup "" any noauth exact testView01 none none

access networkGroup "" any noauth exact testView01 none none

 

※ v1 又は v2 を使用した場合、<context>, <sec-level>, <condition> は指定不可となるため、「"" any noauth exact」はほぼお決まり。

 

説明 :

事前に定義した group 情報や view の定義を用いて最終的にアクセスに関する設定を行う部分。

各パラメタ及び詳細については以下のようになる。

"group" : group 定義部で定義したグループ名を指定。

このグループ単位でアクセスの許可を定義することになる。

"context" : SNMP v3 を使用する場合のみ、事前に定義したコンテキストを指定する。

v1, v2 の場合は空文字""を指定。

"sec.model" : 使用するSNMPのバージョン。「v1」「v2c」「usm」「any」のいずれかを指定する。

"sec.level" : model が「usm」の時のみ「auth」又は「priv」を指定可能。

v1 及び v2 の場合は「noauth」となる。

"prefix" : 「exact」又は「prefix」のいずれかを指定。

「exact」はコンテキストとの厳密な一致(完全一致)を指し、「prefix」は部分一致?

"read" : 読み取りに関して事前に定義したビュー名を指定。

"write" : 書き込みに関して事前に定義したビュー名を指定。なければ「none」を指定。

"notify" : 通知に関して事前に定義したビュー名を指定。なければ「none」を指定。

 

 

システム情報に関する項目

■syslocation (システムの場所)

説明 :

syslocation <location>

の書式で記述する。例として、データセンターの2階、4号室内の

6列目のラックに格納された上から3番目の物理サーバを指す場合、

syslocation Datacenter2F, room03, Rack 6, Row 3

のようになる。

■syscontact (システムの連絡先)

説明 :

syscontact <contact information>

の書式で記述する。担当者が田中一郎氏の場合、例として下記の様な記載となる。

syscontact Ichiro.Tanaka <ichiro.tanaka@example.com>

■sysname (システム名)

説明 :

システム名に関する記載。指定が無い場合、ホスト名が設定される。書式は下記。

system <system-name>

 

 

以上。

MIBツリーの構造などその他細かい部分については、またの機会に。