検索用キーワード:bsnmp snmpd.config vacm View-based Access Controol
クリスマスなので、地獄みたいな呪詛を残しておくよ!
net-snmp だと、vacm の設定の仕方ちょいちょい出てくるけど、
bsnmp の場合の設定が全然出てこないので、試行錯誤した結果。
ネットの海をさまよっても何もないので、RFC とか読んだり、
結局ソースコードを読んだ。結構地獄や。。。
結論として、bsnmpd はほんとにいろいろ実装されてない。
- com2sec に相当する機能はない
代わりに、community 名と security model (v1 とか v2c とか) を使って、
sec.name とマッチするグループを検索する。
- access の検索
group と context が一致する acl を検索する。
この時、match のフラグが memcmp の第3引数に入ってる??
これ先頭一文字しか見ないのでは……?
- view は 1 つしかサブツリーを設定できない
net-snmp だと 1 つの view に複数のサブツリーを設定できるので、
「ここ以下とここ以下ね」という設定ができるけど、
bsnmp ではそれ無理。community からここまで一直線なので、
サブツリーを複数設定したければ community をたくさん作ることに?
- view の mask 設定は無視
ifInOctets.1 と inOutOctets.1 を設定。みたいなこともできない?
- source による設定も無理
com2sec がないから当然だよね。
- 認証とか権限のエラーは応答なし
エラーメッセージくらい送り返してほしい。
snmpwalk するときつらいんだ。
- テーブルの構造で行を追加するときは、Status に 4 を代入する
man より。4 は CreateAndGo。
- community に対して R/O R/W のパーミッションがある
これは……独自拡張?追加を提案する send-pr は見つけたけど……
うーん、なかなかしんどそう。
というわけで、苦労した結果は以下。
begemotSnmpdCommunityString.0.3 = "mrtg.ifXEntry" begemotSnmpdCommunityString.0.4 = "mrtg.diskIOEntry" begemotSnmpdCommunityString.0.5 = "mrtg.laLoadInt" begemotSnmpdCommunityString.0.6 = "mrtg.dskEntry" begemotSnmpdCommunityString.0.7 = "mrtg.systemStats" begemotSnmpdCommunityString.0.8 = "mrtg.memory" begemotSnmpdCommunityPermission.0.3 = 1 # read only begemotSnmpdCommunityPermission.0.4 = 1 # read only begemotSnmpdCommunityPermission.0.5 = 1 # read only begemotSnmpdCommunityPermission.0.6 = 1 # read only begemotSnmpdCommunityPermission.0.7 = 1 # read only begemotSnmpdCommunityPermission.0.8 = 1 # read only vacmSecurityToGroupStatus.$(securityModelSNMPv2c)."mrtg.ifXEntry" = 4 vacmSecurityToGroupStatus.$(securityModelSNMPv2c)."mrtg.diskIOEntry" = 4 vacmSecurityToGroupStatus.$(securityModelSNMPv2c)."mrtg.laLoadInt" = 4 vacmSecurityToGroupStatus.$(securityModelSNMPv2c)."mrtg.dskEntry" = 4 vacmSecurityToGroupStatus.$(securityModelSNMPv2c)."mrtg.systemStats" = 4 vacmSecurityToGroupStatus.$(securityModelSNMPv2c)."mrtg.memory" = 4 vacmGroupName.$(securityModelSNMPv2c)."mrtg.ifXEntry" = "mrtg.ifXEntry" vacmGroupName.$(securityModelSNMPv2c)."mrtg.diskIOEntry" = "mrtg.diskIOEntry" vacmGroupName.$(securityModelSNMPv2c)."mrtg.laLoadInt" = "mrtg.laLoadInt" vacmGroupName.$(securityModelSNMPv2c)."mrtg.dskEntry" = "mrtg.dskEntry" vacmGroupName.$(securityModelSNMPv2c)."mrtg.systemStats" = "mrtg.systemStats" vacmGroupName.$(securityModelSNMPv2c)."mrtg.memory" = "mrtg.memory" vacmViewTreeFamilyStatus."mrtg.ifXEntry".10.1.3.6.1.2.1.31.1.1.1 = 4 vacmViewTreeFamilyStatus."mrtg.diskIOEntry".11.1.3.6.1.4.1.2021.13.15.1.1 = 4 vacmViewTreeFamilyStatus."mrtg.laLoadInt".10.1.3.6.1.4.1.2021.10.1.5 = 4 vacmViewTreeFamilyStatus."mrtg.dskEntry".9.1.3.6.1.4.1.2021.9.1 = 4 vacmViewTreeFamilyStatus."mrtg.systemStats".8.1.3.6.1.4.1.2021.11 = 4 vacmViewTreeFamilyStatus."mrtg.memory".8.1.3.6.1.4.1.2021.4 = 4 vacmAccessStatus."mrtg.ifXEntry"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = 4 vacmAccessStatus."mrtg.diskIOEntry"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = 4 vacmAccessStatus."mrtg.laLoadInt"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = 4 vacmAccessStatus."mrtg.dskEntry"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = 4 vacmAccessStatus."mrtg.systemStats"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = 4 vacmAccessStatus."mrtg.memory"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = 4 vacmAccessReadViewName."mrtg.ifXEntry"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = "mrtg.ifXEntry" vacmAccessReadViewName."mrtg.diskIOEntry"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = "mrtg.diskIOEntry" vacmAccessReadViewName."mrtg.laLoadInt"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = "mrtg.laLoadInt" vacmAccessReadViewName."mrtg.dskEntry"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = "mrtg.dskEntry" vacmAccessReadViewName."mrtg.systemStats"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = "mrtg.systemStats" vacmAccessReadViewName."mrtg.memory"."".$(securityModelSNMPv2c).$(noAuthNoPriv) = "mrtg.memory"
うーん……地獄か???
MRTG からネットワークの通信量を監視するときはターゲットをこう書く。
.1.3.6.1.2.1.31.1.1.1.6.1&.1.3.6.1.2.1.31.1.1.1.10.1:mrtg.ifXEntry@your.host.name:::::2
MRTG が SNMPv3 に対応してないのも泣きそう。
IPv6 に対応してないのも泣きそう。UTF-8 に対応してないのも泣きそう。
いい加減乗り換えるか……
そう、このままだと、HostName とか UpTime が取得できない
(2つのサブツリーを同一の community で公開できない)ので、
MRTG の設定にこれを書く。
NoMib2: Yes
うーん、うーん……いい加減捨てない?