VACM基础

View Access Control Model 是 Net-SNMP 提供的更复杂的配置选项之一。

基础知识

检查手册页

snmpd.conf 手册页的 访问控制 部分讨论 VACM 设置,并包含最新信息。 先检查那里。

生活在拒绝中

回应“啊,这对我可怜的小脑袋来说太复杂了!” 我们收到的有关配置访问控制的消息类型,如果需求很简单,可以避免它。 因此,如果只想授予用户对整个 MIB 树的读取或写入权限,可以使用 rorw 配置选项,它们指定只读 (ro) 或读写 (rw) 访问权限 .

SNMPv1和SNMPv2 rocommunity/rwcommunity

这些指令允许访问基于团体的请求,可选择限制为特定范围的源 IP 地址和/或特定 OID。 有关详细信息,请参见 snmpd.conf 手册页,但一般形式为:

rocommunity COMMUNITY [SOURCE [OID]]
rwcommunity COMMUNITY [SOURCE [OID]]
rocommunity6 COMMUNITY [SOURCE [OID]]
rwcommunity6 COMMUNITY [SOURCE [OID]]

在 5.3 及更高版本中,该指令还可以限制对指定名称的视图的访问,使用语法

rocommunity COMMUNITY SOURCE -V VIEW
rwcommunity COMMUNITY SOURCE -V VIEW
rocommunity6 COMMUNITY SOURCE -V VIEW
rwcommunity6 COMMUNITY SOURCE -V VIEW

SNMPv3 rouser/rwuser

这些指令允许 SNMPv3 用户访问,可选地要求特定的访问级别并将用户限制为特定的 OID。 有关详细信息,请参见 snmpd.conf 手册页,但一般形式为:

rouser USER [noauth|auth|priv [OID]]
rwuser USER [noauth|auth|priv [OID]]

在 5.3 及更高版本中,该指令还可以限制对指定名称的视图的访问,使用语法

rouser USER noauth|auth|priv -V NAME
rwuser USER noauth|auth|priv -V NAME

特殊情况和示例

以下是一些更复杂配置的示例,包括根据 SNMPv3 用户的安全级别支持不同的视图。

VACM 视图,或如何限制对树中特定分支的访问

####
# 首先,将团体名称(COMMUNITY)映射为安全名称
# (local和custom_sec, 取决于请求来自哪里):

#       sec.name  source          community
com2sec local     localhost       secret42
com2sec custom_sec 192.168.1.0/24  public

####
# 其次,将安全名称映射为组名称:

#               sec.model  sec.name

group custom_grp v1         custom_sec
group custom_grp v2c        custom_sec

group incremental usm       myuser      # SNMPv3 用户名 == sec.name

####
# 第三,为我们创建一个视图,让组有以下权利:

#           incl/excl subtree                              mask
view all    included  .1

view custom_v excluded  .1
view custom_v included  sysUpTime.0
view custom_v included  interfaces.ifTable

view mini_view excluded .1 80
view mini_view included  sysUpTime.0

view if_view excluded .1 80
view if_view included  sysUpTime.0
view if_view included  ifTable


####
# 最后,授予组访问其视图的权限:

#                context sec.model sec.level match  read     write  notif
access MyRWGroup ""      any       noauth    exact  all      all    none
access custom_grp ""     any       noauth    exact  custom_v  none   none

access incremental ""    usm       noauth    exact  mini_view none  none
access incremental ""    usm       auth      exact  if_view   none  none
access incremental ""    usm       priv      exact  all_view  none  none

VACM 掩码,或如何限制对表中特定索引(行)的访问

使用 snmpd.conf 中的 view 指令,可以将用户限制在表中的一行。 为此,指定了可选的 mask 参数。 这是手册页的摘录:

      view NAME TYPE SUBTREE [MASK]
             定义命名视图。 TYPE是`included`或`excluded`。 MASK 是一个十六进制八位列表,用由“.”或“:”分隔。 如果未指定,则 MASK 默认为“ff”。

            使用掩码的原因是,它允许以相对简单的方式控制对表中一行的访问。 例如,作为 ISP,您能会考虑让每个客户访问他或她自己的接口:

             view cust1 included interfaces.ifTable.ifEntry.ifIndex.1 ff.a0
             view cust2 included interfaces.ifTable.ifEntry.ifIndex.2 ff.a0

             (interfaces.ifTable.ifEntry.ifIndex.1 == .1.3.6.1.2.1.2.2.1.1.1,
             ff.a0 == 11111111.10100000. 它很好地覆盖并包含行索引,但允许用户改变行的字段)

注意:掩码分隔符可以是“.” 或者 ”:”。

因此,为了更直观地了解它:

.1.3.6.1.2.1.2.2.1.1.1 == interfaces.ifTable.ifEntry.ifIndex.1 
 1 1 1 1 1 1 1 1 1 0 1 (00000) == (ff.a0)
               ^ ^ ^ ^
               | | | |-- the index
               | | |---- the column
               | |------ ifEntry
               |-------- ifTable

因此掩码中的每个位都指示相应的 OID 是否必须匹配。 在上面的示例中,OID 的除列之外的所有部分都必须匹配。 所以这个视图允许访问 ifTable 中第一行的任何列。 因此,与 ifTable 的exclude 行配对时,用户只能访问第 1 行。

现在,将它们与其他访问控制指令结合在一起。 假设有 2 个客户,每个客户只连接到一个特定的接口(例如客户 1 连接到 eth0,客户 2 连接到 eth1):

####
# 首先,将团体名称(COMMUNITY)映射为安全名称
# (local、cust1_sec 和cust2_sec, 取决于请求来自哪里):

#       sec.name  source          community
com2sec local     localhost       secret42
com2sec cust1_sec 192.168.1.0/24  public
com2sec cust2_sec 192.168.2.0/24  public

####
#其次,将安全名称映射为组名称:

#               sec.model  sec.name
group MyRWGroup v1         local
group MyRWGroup v2c        local

group cust1_grp v1         cust1_sec
group cust1_grp v2c        cust1_sec

group cust2_grp v1         cust2_sec
group cust2_grp v2c        cust2_sec

####
# 第三,为我们创建一个视图,让组有权:

#           incl/excl subtree                              mask
view all    included  .1

view cust1_v excluded  .1
view cust1_v included  sysUpTime.0
view cust1_v included  interfaces.ifTable.ifEntry.ifIndex.1 ff.a0

view cust2_v excluded  .1
view cust2_v included  sysUpTime.0
view cust2_v included  interfaces.ifTable.ifEntry.ifIndex.2 ff.a0

####
#最后,授予组访问其视图的权限:

#                context sec.model sec.level match  read     write  notif
access MyRWGroup ""      any       noauth    exact  all      all    none
access cust1_grp ""      any       noauth    exact  cust1_v  none   none
access cust2_grp ""      any       noauth    exact  cust2_v  none   none

重要的是要注意这是有效的,因为客户位于不同的网络上。 如果所有客户都在同一个网络上,那么需要注意的是,嗅探网络流量可能会将一个客户的“团体字符串”暴露给另一个客户,从而允许第二个客户通过 SNMP 查看第一个客户的接口统计信息。 在这种情况下,可能希望使用 SNMPv3 usm 用户提供的加密功能,而不是 SNMPv1 和 SNMPv2 团体字符串。

使用上下文

可以为 SNMPv1 和 SNMPv2 团体模拟 SNMPv3“上下文”,如 配置多个代理的此页面 中所述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值