1、前言
SNMP,即简单网络管理协议,是目前广泛采用的一种,实现对IT基础设施进行统一监控、管理的一种网络协议。随着诸如机房、数据中心等建设日益复杂,对IT设备的统一管理成为必须所具备的一个模块,因此为解决这个需求,SNMP出现在大家的视野中。本文将从Linux+SNMP+zabbix这样的一个简单实验来阐述SNMP的一些基础知识。
2、SNMP基本概念
2.1、SNMP分类
2.1.1、按照版本划分
SNMP分为v1、v2c和v3三个版本,这三个版本主要是管理的粗细程度和SNMP客户端与服务端之间验证方式的区别,可以用以下列表概括:
- SNMPv1:适用于较小规模网络,基于团体字进行明文验证,安全性较低,支持错误码少;
- SNMPv2c:适用于较大规模网络,基于团体字进行明文验证,安全性较低,在v1基础上扩充更多错误码;
- SNMPv3:适用于不同规模网络,基于安全用户名或安全上下文进行加密验证,安全性较高,错误码支持较多。
目前在实际环境内,考虑到运维难度等方面的原因,使用v2c版本的情况是最多的。
2.1.2、按照SNMP模块类型划分
- agent:运行在被管理设备上的一个SNMP代理模块;
- NMS:管理IT设备的网络管理系统,如:zabbix、weAdmin和华为eSight等。
2.2、SNMP协议中PDU报文的交互
【本小节内容来源:华为AR接入路由器产品文档】
- get-request:从代理进程处提取一个或多个参数值。
- get-next-request:从代理进程处提取紧跟当前参数值的下一个参数值。
- set-request:设置代理进程的一个或多个参数值。
- get-response:返回的一个或多个参数值。这个操作是由代理进程发出的,它是对前面3种操作的响应。
- trap:代理进程主动发出的报文,通知管理进程有某些事件发生
前面3种操作由NMS向Agent发出,后面2种操作由Agent向NMS发出。
2.3、MIB基本介绍
MIB,即管理信息数据库,是由agent维护的,用于被NMS读取的一些数据对象。通常情况下,NMS所展现出的,例如CPU、内存占用率等数值都是读取自MIB。
MIB是一种树状的数据结构,它包含不同标准组织所定义数据对象,较为完整的树状图如下所示:
通常情况下,我们以对象后面的数字来定义某一个数据对象,这被称为OID。SNMP协议所管理的对象,是图中internet节点(表示为1.3.6.1或iso.3.6.1)的下面所有部分(图中阴影部分),这一点可以在运行SNMP的Linux设备中,通过snmpwalk命令体现出来,而对于其他设备,例如运行SNMP的路由交换设备,则可以用wireshark工具查看SNMP协议交互的PDU报文体现,如下图所示:
站在SNMP运维的角度,MIB可分为公有MIB和私有MIB两大部分,公有MIB是绝大多数IT设备都必须支持的标准,而私有MIB则定位在MIB树状结构的private(1.3.6.1.4)部分,如1.3.6.1.4.1.2代表的是IBM公司的私有节点,1.3.6.1.4.1.9代表的是思科公司的私有节点。
2.4、带外管理和带内管理
在对IT设备进行管理的方式上,大体上分为带外管理和带内管理两种。其中带外管理指的是管理流量业务流量物理隔离,走不同的网络链路;而带内管理指的是管理流量和业务流量共同使用同一条网络链路。
绝大多数情况下,采用的方式都是带外管理,带外管理的优点在于管理流量不会占用业务的网络带宽资源,另外在业务网络中断的情况下,独立的带外管理链路可以作为远程维护的一个“逃生通道”。
3、实验
3.1、实验拓扑与zabbix官方安装方法链接
本文将采用三台Linux服务器来进行实验,其中一台Linux服务器已经部署了zabbix,另外两台是被zabbix管理的Linux服务器,具体的部署步骤可以参阅zabbix官网,并根据实际的Linux发行版进行安装步骤,相关链接为:https://www.zabbix.com/cn/download 。
3.2、配置SNMPv2c(以UOS企业版/Ubuntu/debian为例)
(1)输入“sudo apt install snmpd
”命令,在debian系Linux上安装snmpd;
(2)输入“sudo vim /etc/snmp/snmpd.conf
”命令编辑配置文件,进行下列修改:
找到agentaddress
字段,将IP地址从127.0.0.1
修改为0.0.0.0
找到“view systemonly included
”字段,根据实际情况添加所需要监控的OID数值,通常情况下,为方便配置,都是在该位置添加view systemonly included .1
这样的配置”
(3)SNMP的配置文件修改完成后,输入命令“systemctl restart snmpd
”重启SNMP服务,重启完成后,配置生效;
(4)通过命令”snmpwalk -v 2c -c public 192.168.68.139 .1
”测试SNMP的MIB能否通过192.168.68.139
这个地址读取到,如果读取到,则说明SNMP配置无误;
(5)登录zabbix,选择“配置—>主机”,然后选择“创建主机”;
(6)随后,在弹出的对话框的“主机”选项卡中,根据实际情况填入如下信息
(7)在对话框的模板选项卡中添加Linux的SNMP模板,并保存;
(8)等待一段时间后,发现“SNMP”标志变为绿色后,则表示SNMP所有配置完成并对接成功;
3.3、配置SNMPv3(以UOS欧拉版、龙晰版/openEuler/CentOS为例)
(1)输入命令“sudo yum install net-snmp-utils net-snmp
”安装SNMP服务;
(2)输入命令“systemctl stop snmpd
”确保SNMP的服务处于停止的状态;
(3)输入命令“net-snmp-create-v3-user -ro -A authpasswd -a MD5 -X privpasswd -x DES yanmuhuan
”设置SNMPv3的密码、完整性校验方式、加密密钥、加密方式和安全用户名等(需注意的是,debian系Linux的SNMP并不带有net-snmp-create-v3-user
命令,如要使用,则需要通过命令“sudo apt install libsnmp-dev
”额外安装libsnmp-dev);
(4)”net-snmp-create-v3-user
”命令配置成功的反馈如下:
(5)输入命令“systemctl start snmpd
”重新启动SNMP服务;
(6)输入命令“snmpwalk -v 3 -u yanmuhuan -a MD5 -A authpasswd -x DES -X privpasswd -l authPriv 192.168.68.136
”,验证SNMP是否配置成功,如果配置成功,则会表现如下:
(7)配置zabbix的部分和配置SNMPv2c的部分大体相同,只不过在添加主机时,弹出的对话框应选择SNMPv3,并做如下配置,注意模板仍旧选择Linux的SNMP模板:
上图中,zabbix面板出现了安全级别这样的一个选项,该项有三个选项可供选择,分别为noAuthNoPriv(不认证不加密)、authNoPriv(认证但不加密)和authPriv(既认证又加密),此处我们选择authPriv。
(8)所有配置完成后,等待一段时间,直到SNMP标志变为绿色。
4、注意事项
4.1、通用环境下
(1)在根据zabbix官方网站安装zabbix时,应该尽可能使用新的普通版本或新的LTS版本,否则将很可能出现zabbix和数据库版本不一致的情况,从而安装失败。这是因为所有Linux公网上的软件仓库都是该Linux发行版的最新版本,此时如果使用旧版zabbix,就会因为数据库版本过新而不兼容;
(2)配置SNMPv3的密码时,位数默认不要少于8位数,否则将出现以下错误:
(3)要保证被管理设备的161端口可以正常访问。
4.2、针对部分最小化安装的Linux发行版(如UOS企业版)在内网环境且没有软件仓库的情况下
针对这样的情况,通行的做法是,使用另一台同CPU架构且可以连接互联网的主机,安装同版本操作系统后,来拉取SNMP的安装包和依赖。需要注意的是,部分Linux发行版(如UOS企业版)在选择最小化安装和基本安装两种方式下,系统所自带的依赖是不同的,因此,如果需要在最小化安装的Linux系统上离线安装SNMP,那么用于在线拉取的Linux也应该是最小化安装,否则在最小化系统上进行离线安装时,将出现依赖不全的情况。