配置 Linux 的 SNMP 服务

1. 安装 SNMP 服务

参考链接:https://blog.csdn.net/zhaomax/article/details/81085764
理想状况下安装,由于依赖较多,可考虑建立本地软件源进行安装
参考教程:https://www.cnblogs.com/diantong/p/10105805.html

2. 修改 SNMP 配置文件

1. 基本配置流程

  1. 配置文件路径:/etc/snmp/snmpd.conf
  2. 修改配置文件
  3. 重启 SNMP 服务
    snmp 服务名:snmpd.service
# 启动/停止/查看 snmp 服务
systemctl start/stop/status snmpd.service

# 开启/禁用 snmp 自启动服务
systemctl enable/disable snmpd.service

2. snmp.conf 中的配置项详解

参考资料:https://blog.csdn.net/qq_27204267/article/details/51316261
通用格式说明

  • 每一行为一条配置,不支持换行
  • 如果一行以#为开头,则这一行被注释掉了,不生效。去掉开头的#就能重新启用这行配置
  • 默认的配置文件有很多注释,如:【参数】的名称、说明、示例
  • 一行配置中通过空格对不同【参数】进行分隔(不要配置带空格的值,否则空格会被误认为是分隔符)
  • 【参数】的顺序是固定的,且没有特殊说明的情况下所有【参数】都要有【值】
    如果有允许留空的值,则会特殊说明(如写明可用 “”、none 等说明这个参数不指定值)

com2sec 配置

image.png

  1. **命令格式一: ****com2sec [-Cn context] sec.name source community**
    1. 功能:将实体 (community))字符串映射为安全名(securityName)。
      1. community 相当于 snmp 连接时的密码,secName 相当于配置文件中的用户名
      2. 接下来的其他所有的配置都用安全名来配置
    2. 参数说明:
      1. -Cn context:上下文。可选项,只在 snmp v3 版本中可用
      2. sec.name:安全名。配置文件内配置的用户名,字符串
      3. source: 可以访问的 ip 地址范围。默认值 default,即任何 ip 都可以访问。
        也可以限制 ip 地址范围,有两种方式:IP/MASK 和 IP/BITS
        1. IP + 子网掩码(IP/MASK): 10.10.10.0/255.255.255.0
        2. IP + 掩码位数(IP/BITS): 10.10.10.0/24 (24=子网掩码有24个1,相当于 255.255.255.0)
  2. 命令格式二:**com2sec6 [-Cn context] sec.name source community**
    1. 功能:针对 ipv6,其他和 com2sec 相同
  3. 命令格式三:**com2secunix [-Cn context] sec.name sockpath community**
    1. 功能:针对本地 socket 的配置,其他和 com2sec 相同

**举例:**定义一个共同体(community),安全名 mynetwork,mynetwork 的登录密码为 public

com2sec mynetwork default public

group 配置

image.png
命令格式:**group groupName securityModel sec.name**

  1. 功能: 将 sec.name 编入一个 group 中
    1. 相同 group 内的用户使用相同的 snmp 协议版本
    2. 在下面的 access 配置中,相同的 group 具有相同的读写 OID 地址的权限
    3. 同一 group 配置多种登录方式:配置多条 group,每条的 groupName 相同,但其他参数不停
  2. 参数说明
    1. groupName:组名
    2. securityModel:v1、v2c、usm、tsm、ksm
      1. v1 = 这个 group 中的用户,使用 SNMP V1 协议
      2. V2c = 这个 group 中的用户,使用 SNMP V2c 协议
    3. securityName:上面设置的安全用户名。关联登录信息(community,可理解为登录密码)

view 配置

image.png
命令格式:**view viewNam type oid[mask]**

  1. 功能:定义一个 view,view 可以指定 OID 的地址(以及子地址)。相当于【地址簿】
    不同 view 的 OID 地址可以相同
  2. 参数说明
    1. name:view 的名字(注意这个 name 与 secName 无关)
    2. type:有两个值 include 和 exclude
      1. exclude: OID 及其子地址的权限
      2. include:对应账户(name 指定)没有访问此 OID 及其子地址的权限
    3. oid:此 view 控制的 oid 的权限
    4. [mask]:对 oid 的 mask,可选项

例 1:最基本的 view

view myview exclude 1.3.6.1.2.1.4
  • name = myview,这个 view 的名字为 myview
  • exclude,表明此 view 要排除后面的 OID
  • oid = 1.3.6.1.2.1.4,即此 view 不包含 OID 为 1.3.6.1.2.1.4 开头的所有地址

例 2:带 mask 的 view

view all include 1.3.6.1.2.1.4 0xf0
  • name = all,这个 view 的名字为 all
  • include,表明此 view 是包含后面的 OID
  • mask = 0xf0 = 1111 0000,即此 view 只包含 OID 的前 4 位是 1.3.6.1 的所有地址

access 配置

image.png
命令格式:**access groupName context sec.model sec.level prefx read write notify**

  1. 功能:设置某个 group 对某一个 view 的权限
    相当于某个 group 中的用户,对 view 指定的地址,配置读/写等权限
    1. group 中包含了多个 secName(安全名),1 个 secName 对应 1 个 community(登录密码)
    2. view 中绑定了某个 OID(及其子 OID)的地址
    3. 要对一个 group 配置多个 view 权限:配置多条 access,每个 access 的 group 相同
  2. 参数说明
    1. groupName:控制存取权限的组名
    2. context:上下文,用于 snmp v3
      对于 snmp v1和 v2c 版本,context 必须设置为 “”
    3. sec.model:v1、v2c、usm、tsm、ksm、any
      1. v1 = 使用 SNMP V1 版本协议
      2. v2c = 使用 SNMP V2c 版本协议
      3. 最后 3 种是 SNMP v3 版本的授权模式
        1. usm(User-Based Security Model) = 默认授权模式
        2. tsm 用于 SSH or DTLS
        3. ksm 用于支持 erberos
      4. any:在 group 中定义的所有此 group 支持的协议
    4. sec.level:可以取3种值:noauth、auth、priv
      1. noauth:允许无权限访问(v1,v2c使用)
      2. auth:必须有权限才能访问
      3. priv:强制加密访问
    5. prefix:exact 或 prefix
    6. read、write、notify:指明此 group 中的用户,对某一个 view 指向的 OID 地址的权限(是否可以发送 GET*, SET*、TRAP/INFORM 等指令)
      1. 希望对某个 view 指向的地址有【读】权限,则在 read 位置填对应 view 的 name
        –> 相当于 SNMP 指令中的 GETWALK 指令
      2. 希望对某个 view 指向的地址有【写】权限,则在 write 位置填对应 view 的 name
        –> 相当于 SNMP 指令中的 SET 指令
      3. 允许接受某个 view 指向的地址的【主动消息】,则在 notify 位置填对应 view 的 name
        –> 相当于接收来自服务端的 SNMP TRAP 消息
      4. 如果对应位置不希望配置 view(相当于不分配此权限),则对应位置写上 none

3. 使用 SNMP 软件获取 服务器信息

1. SNMP 中比较重要的配置

  1. 读写设备的密码: 在 SNMP 中称为 读Community写Community
    若使用 SNMP v3 协议版本,则密码设置比较复杂,需要密码配对
  2. 被读取的内容 :类似于被读取的参数的寄存器/地址,在 SNMP 中称为 OID
    1. OID的描述方式:类似IP地址,如1.3.6.1.4.1.2021.1.1
  3. MIB文件:各厂商制作的,包含设备OID的配置文件
    1. 利用 SNMP 调试软件加载 MIB 文件,即可快速调试,读写设备的相关信息
    2. MIB 文件中包含丰富内容:参数、参数的描述(帮助/含义)、参数的类型(数据类型)、参数的 OID 地址等
    3. 不同厂商可根据自己设备的特点,修改 MIB 文件,以添加专属的可用于 SNMP 协议的参数
    4. 加载错误的 MIB 文件,则 MIB 文件中记录的 OID 可能在设备中查询不到返回值

2. 使用的 MIB 文件

HOST-RESOURCE-MIB 和 UCD-SNMP
  1. HOST-RESOURCE-MIB用于查看主机(服务器)的基础状态信息
    主要包含.1.3.6.1.2.1.25中的信息,这部分内容大多数电脑、服务器都有
  2. UCD-SNMP-MIB Linux 和 Unix 系统通用的 MIB 描述文件
    主要包含.1.3.6.1.4.1.2021中的信息
  3. 以上文件在安装net-snmp软件时会同时安装,存储于/usr/share/snmp/mibs/路径下

3. 使用的 SNMP 软件


软件操作教程:https://www.bilibili.com/video/BV1nE411u7Xa

4. 常用的 OID 地址

https://blog.csdn.net/qq_41262248/article/details/89500802?spm=1001.2101.3001.4242.1&utm_relevant_index=4

4. 自定义 MIB 文件和 OID

  1. 在 Linux 系统的 net-snmp 服务中添加自定义的 OID,并使用软件制作包含自定义 OID 的 MIB 文件用于客户快速调试自定义的 OID
  2. 这里演示使用extend配置自定义的 OID 执行 bash 脚本
  3. 在 Linux 系统的 net-snmp 服务自定义 OID
    参考网址1-中文较简略:https://blog.csdn.net/nerissa/article/details/21297769
    参考网址2-redhat文档,胎教级:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/sect-system_monitoring_tools-net-snmp-extending#sect-System_Monitoring_Tools-Net-SNMP-Extending-Shell
    1. 编写测试小脚本,用于 SNMP 程序调用,输出第一个入参,返回值指定为 154
#!/bin/sh
# 脚本文件路径 /tmp/shtest/shtest3.sh
var_in=$1
echo this is file 3 # 输出固定文本
echo your input is: $var_in # 输出传入脚本的第一个参数
echo $(date -R) # 输出指令的执行结果
exit 154 # 这里的返回值范围 (0-255),更高的值可考虑用 echo 输出为字符串
  1. 在 snmp 配置文件中,添加以下内容
# 指令格式
extend 自定义OID地址 显示的描述 脚本执行语句
	
# 示例
# 自定义 OID = .1.3.6.1.4.1.2021.300
# 显示的描述 = testOID
# 执行脚本 /tmp/shtest1.sh haha
extend .1.3.6.1.4.1.2021.300 testOID /tmp/shtest1.sh haha
  1. 输出结果分析:使用 MIB Browser 获取.1.3.6.1.4.1.2021.300下的数据

    输入刚才在配置文件设置的 OID,我这里设置的是1.3.6.1.4.1.2021.300,搜索结果

    搜索过程中,如果出现以下提示,询问软件是否可以根据 OID 智能匹配已经导入数据库但没有被当前项目导入的 MIB 文件,选择“No To All”,表示不需要匹配(因为这里的 OID 是自定义的,官方自带的 MIB 文件肯定不能匹配,强制导入只会带来很多无用的信息)

    得到以下结果

    此结果实际是根据net-snmp软件中的NET-SNMP-EXTEND-MIB文件生成的数据,“挂载到”在自定义的 OID 上。
    由于这里指定了 OID,与文件定义的 OID 地址不同,因此 MIB Browser 无法解析,只能显示原始数据
    根据NET-SNMP-EXTEND-MIB文件的介绍,每一项表示的内容如下:
    对象与查询结果的对应关系:
    实际应用中,查询右侧对应的 OID,即可获取脚本执行基本信息、输出值、返回值
    3. 重启 snmp 服务,即完成配置
  2. 使用 MG-SOFT Mib Browser 制作包含自定义 OID 的 MIB 文件
    参考网址:https://blog.csdn.net/fuyuande/article/details/83349786
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值