ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

bsnmpd で VACM を設定する

検索用キーワード:bsnmp snmpd.config vacm View-based Access Controol

クリスマスなので、地獄みたいな呪詛を残しておくよ!

net-snmp だと、vacm の設定の仕方ちょいちょい出てくるけど、
bsnmp の場合の設定が全然出てこないので、試行錯誤した結果。

ネットの海をさまよっても何もないので、RFC とか読んだり、
結局ソースコードを読んだ。結構地獄や。。。

結論として、bsnmpd はほんとにいろいろ実装されてない。

  • com2sec に相当する機能はない

代わりに、community 名と security model (v1 とか v2c とか) を使って、
sec.name とマッチするグループを検索する。

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。

これは……独自拡張?追加を提案する 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

うーん、うーん……いい加減捨てない?