外观
SNMP 协议详解
一、 SNMP 协议的作用与架构组成
1. SNMP 协议的作用
- 目的:在 IP 网络中为不同厂商设备提供统一的管理平面,实现批量监视、配置与故障定位。
- SNMP 是基于 UDP 的应用层协议。UDP 端口 161用于网络管理系统(NMS)与代理进程之间的通信,包括发送查询或设置命令以及接收代理进程的响应。而UDP 端口 162用于代理进程向 NMS 发送通知信息,如 Trap 信息,这些信息用于告知管理进程设备端出现的情况。
SNMP 协议为什么使用 UDP,而不是 TCP?
因为大部分需要监控的设备是在在内部局域网,与管理服务器不在同一网段中。以及监控设备通常较多,为了减少网络和管理服务器的负载,所以使用了更高效和节约资源的 UDP 协议进行收发数据。
2. SNMP 架构组成
2.1 SNMP 架构图
2.2 SNMP 组件详解
| 缩写 | 中文 | 所在位置 | 核心功能 |
|---|---|---|---|
| NMS | 网络管理系统 | 运维服务器、自动化平台 | 下发 Get/GetNext/GetBulk/Set,接收 Trap/Inform,编译 MIB,提供 CLI/GUI |
| Agent | 代理进程 | 交换机/路由器/服务器 snmpd | 维护本地 MIB 视图;监听 161;事件触发时发 Trap |
| MIB | 管理信息库 | 设备内存(虚拟) | 以 OID 树形结构组织所有 Managed Object;由 SMI 定义语法与访问权限 |
| SMI | 管理信息结构 | MIB 之上层规范 | 定义 OID 命名规则、数据类型(INTEGER、Counter64 等)、状态列 |
| Managed Object | 被管对象 | MIB 的叶子节点 | 具体指标,如 ifInOctets.3、cpuUsage、sysUpTime |
2.3 MIB 图
可以使用 MIB Browser 可视化查找 OID

3. SNMP 版本对照
| 版本 | 概述 | 主要区别(相比上一版) |
|---|---|---|
| SNMPv1 (1988) | 首个实用化标准,定义 5 种 PDU | • 社区名明文鉴权(极弱) • 无批量操作,轮询效率低 |
| SNMPv2c (1993) | 社区名不变,协议增强 | • 新增 GetBulk ,一次取大块数据 • 新增 INFORM , NMS 之间可互相确认告警 • 引入 64 位计数器(解决高速接口回绕) |
| SNMPv3 (2002→2025 现行) | 引入 User-based Security Model 和 View-based Access Control Model | • 用户级认证(HMAC-MD5/SHA)+ 加密(DES/AES) • 分离「消息处理」「安全」「访问控制」三子系统,可插拔 • 支持引擎时间、密钥本地化,防重放、防篡改 |
二、 SNMP 数据交互逻辑
1. SNMP 日常轮询流程详解
2. 日常轮询和 Agent 设备主动告警对比
- 谁发消息,谁就随机开一个临时进程端口(ephemeral 需要大于等于 1024)做源端口;消息里带的“目的端口”是对方长期监听的那个。
- Trap 信息是 Agent 主动向 NMS 发出的信息,告知管理进程设备端出现的情况。
- InformRequest 也是被管理设备向 NMS 主动发送告警。与 Trap 告警不同的是,被管理设备发送 Inform 告警后,需要 NMS 回复 InformResponse 来进行确认。
三、 snmp 服务配置文件详解和 snmpwalk 命令
1. snmpd服务配置文件/etc/snmp/snmpd.conf详解
bash
[[email protected] ~]# grep ^[a-zA-Z] /etc/snmp/snmpd.conf
com2sec notConfigUser public
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
view all included .1
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
access notConfigGroup "" any noauth exact all none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
#### snmpd.conf配置文件参数解释
# 第一段:把“社区名”映射成“安全名”(community → security name)
# 安全名 来源地址 社区字串
com2sec notConfigUser default public
# 含义:任何来源(default)只要说对“public”,就被当成 notConfigUser 身份。
####
# 第二段:把安全名塞进“组”里,方便统一授权
# 组名 协议版本 安全名
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
# 现在 notConfigUser 既能走 SNMPv1 也能走 SNMPv2c。
####
# 第三段:定义“视图”——让组只能看哪些 OID 树
# 视图名 包含/排除 子树起点
view all included .1 # “all”=整棵OID树,这个属于测试新加的
view systemview included .1.3.6.1.2.1.1 # system组(名称、位置、联系人)
view systemview included .1.3.6.1.2.1.25.1.1 # Host-Resources组(CPU、内存、磁盘)
# 注意:这里虽然定义了 systemview,但下一段实际给的是“all”,所以默认等于**全开**!
####
# 第四段:真正授权——给组分配读写权限
# 组名 上下文 模型 安全级 匹配方式 读视图 写视图 陷阱
access notConfigGroup "" any noauth exact all none none
# 当前效果:notConfigGroup 可对“all”视图**读写**,且无需任何认证!1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2. 常见snmpd.conf配置文件安全修改操作
- 改团体字 + 限制来源
bash
# 原行注释掉
#com2sec notConfigUser default public
# 新增只读/读写两条,限定网段
com2sec roUser 192.168.10.0/24 STr0ngROpass
com2sec rwUser 192.168.10.100/32 STr0ngRWpass1
2
3
4
5
6
2
3
4
5
6
- 完全禁用 v1,仅保留 v2c
bash
# 删除或注释
#group notConfigGroup v1 notConfigUser1
2
2
- 定义视图,提高可访问指标
bash
# 新增
view all included .1 # “all”=整棵OID树,就是定义了一个名为all的视图,然后开发了根为.1的所有oid指标1
2
2
3. snmpwalk 命令测试连通性
格式:
bashsnmpwalk -v 1或2c -c SNMP密码 IP地址 OID1- -v:指定 SNMP 的版本,1 或 2c。
- -c:指定连接设备的 SNMP 密码。
- IP:指定要查询的设备的 IP 地址。
- OID:要获取的设备指标的 OID(可选)。
bash
# 访问系统名称
[[email protected] ~]# snmpwalk -v 2c -c public 10.101.143.150 1.3.6.1.2.1.1.5.0
SNMPv2-MIB::sysName.0 = STRING: cernet.ai1
2
3
2
3
如果遇到`Timeout: No Response from 10.101.143.151`报错怎么办?
那就排查团体字、监听地址、防火墙
bash
# 首先查看服务状态是否正常
systemctl status snmpd
# 1. 查看团体字,也就是snmp密码是否正确
grep ^[a-zA-Z] /etc/snmp/snmpd.conf
# 2. 查看监听地址是否正确,是否是161端口。若只看到 127.0.0.1:161 → 只能本机访问
ss -unlp | grep 161 # 看监听地址
# 3. 查看防火墙是否正常开放。
firewall-cmd --list-all1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
注意:除了系统本身的防护墙,还需要注意 NMS 和 Agent 之间是否有其他防火墙设备,在高校或者公司内部一般都会有第三方安全设备进行流量拦截,切记!切记!!