什么是snmp?在Linux中安装和配置SNMP
SNMP(简单的网络管理协议)是用于远程检索服务器和基础架构组件的操作统计(当前状态)的Internet标准协议。
通常支持SNMP的设备包括路由器,交换机,工作站,防火墙等。
在本教程中,我们将通过Linux上的SNMP安装和简单配置(Centos 7,Ubuntu 16.04,Ubuntu 18.04,Ubuntu 20.04)。
SNMP基础知识概念
SNMP协议在网络堆栈的应用层上实现。
它是管理和监控网络元素的广泛接受的协议之一。
该协议被创建为以一致方式从非常不同的系统收集信息的方式。
通常,SNMP分布的网络将主要由包含SNMP代理商的设备组成。
代理是一个程序,可以收集有关一块硬件的信息,将其组织成预定义的条目,并使用SNMP协议响应查询。
在核心,SNMP管理系统中的远程设备中的读写操作参数。
这些参数称为OID(对象标识符)。
SNMP只需要几个基本组件来工作:
- SNMP管理器:是一个在网络上管理SNMP代理的应用程序。它可以是任何可以将查询请求发送到具有正确凭据的代理的机器。经理的关键功能是查询代理,获取代理的响应,在代理中设置变量并确认代理的异步事件。它可以是网络管理站(NMS)的一部分。 CACTI,MRTG,ZABBIX,ICinga,PRTG是一些可用作SNMP管理器的免费OpenSource监控工具。
- 代理:当管理器应用程序发送SNMP查询时,代理响应当前状态和统计信息。代理负责收集有关本地系统的信息,并以可以查询和更新称为管理信息库(MIB)的数据库的格式存储它们。
MIB是一个数据库,遵循经理和代理人遵守的标准。
每个代理都维护描述受管设备参数的信息数据库。
Manager应用程序使用此数据库来请求代理以获取特定信息,并根据网络管理系统(NMS)根据需要转换信息。
代理和管理器之间的该常用数据库称为MIB。
SNMP版本
目前,有3个版本可用。
SNMP版本1:这是SNMP的第一个版本。
它只支持32位计数器。
这提供了设备统计信息和错误报告,而不会消耗大量系统资源。
安全性仅限于社区字符串,如果在设备中配置的字符串匹配,则将执行请求。
基于查询服务器的IP地址访问控件。
它具有未加密的数据通信。
SNMP版本2:这被称为V2C,它为64位计数器添加了支持。
有能力进行大量查询,将更有效地加载响应数据包的数据。
SNMP版本3:此版本提供更大的安全性和远程配置功能。
由于介绍了用户名和密码,访问不限于只有只读和读/写访问的单个社区字符串。
它支持使用加密算法和身份验证机制。
SNMPv3选项,
3安全和隐私选项:
noauthnopriv(没有身份验证,无隐私)authnopriv(身份验证但无隐私)authpriv(身份验证和隐私)
两个身份验证机制:
MD5 SHA1
两个加密算法:
Des Aes.
1)在Linux上安装SNMP
在SNMP代理机器上,我们只需要SNMP守护进程(SNMPD)和Manager组件,我们可以在Ubuntu上安装"SNMP"包。
以下命令在Ubuntu和Debian派生系统上安装SNMP服务:
$sudo apt-get install -y snmpd snmp
在Centos.
$sudo yum install -y net-snmp net-snmp-utils
2)SNMP的配置
可以在"/etc/snmp/snmpd.conf"上找到SNMPD服务的配置文件。
在修改文件之前,通过以下命令制作文件的副本:
$sudo cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
请记住添加新的SNMP用户我们使用'/var/lib/net-snmp/snmpd.conf'文件。
以下是配置SNMP的基本配置参数。
- 设置社区字符串:它就像一个用户ID或者密码,允许访问设备的统计信息。客户端计算机使用此字符串来检索数据(生成监视图)。它可以被识别其中:我们将其中看到"狂犬我将"或者"rwCommunity"。 DefaultValue是"公共",不会被禁用。
- 听力地址:我们可以将代理配置为仅收听特定的IP地址,如下所示
AgentAddress UDP:IP_Address:161
。 SNMP侦听的默认端口为161.代理的默认行为是在所有接口上侦听标准UDP端口。 - 系统信息:它涉及个人信息,流程/磁盘监控,
- syslocation:这是系统的[通常是物理]位置。
- SYSCONTACT:这是管理员的联系信息。
- SNMP陷阱:有助于将陷阱(设备向下,接口向下等)发送到监控工具。
我们的修改信息应该如下,请注意,文件上有其他默认值在此处
Ubuntu上的示例代理配置文件:
# Listen for connections on all interfaces (both IPv4 *and* IPv6) agentAddress udp:161,udp6:[::1]:161 # ACCESS CONTROL #view all included .1.3.6.1.2.1.1 view all included .1.3.6.1.2.1.25.1 #rocommunity public localhost # Default access to basic system info rocommunity my_password default -V all # rocommunity6 is for IPv6 rocommunity6 my_password default -V all sysLocation theitroad sysContact Me <[email protected]> # ACTIVE MONITORING # # send SNMPv1 traps trapsink localhost public # send SNMPv2c traps trap2sink localhost public
CentOS上的示例代理配置文件:
# sec.name source community com2sec notConfigUser default my_comm # Make at least snmpwalk -v 1 localhost -c public system fast again. # name incl/excl subtree mask(optional) view systemview included .1.3.6.1.2.1 view systemview included .1.3.6.1.2.1.25.1 ## incl/excl subtree mask view all included .1 80 # variables through the snmpd.conf file: syslocation centos theitroad syscontact admin <admin@theitroad>
需要重新启动SNMP服务以进行任何配置更改(`/etc/snmp/snmpd.conf)。
以下将重新启动Linux上的服务,请务必使用sudo访问运行。
$sudo service snmpd restart
在Systemd Systems上,运行以下命令
$sudo systemctl restart snmpd.service
3)测试SNMP服务
我们可以使用SNMPWalk命令测试SNMP是否可以读取系统和接口MIB。
在Ubuntu.
$sudo snmpwalk -c my_password -v2c -O e 127.0.0.1 iso.3.6.1.2.1.1.1.0 = STRING: "Linux ubuntu-01 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2016 x86_64" iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10 iso.3.6.1.2.1.1.3.0 = Timeticks: (1544) 0:00:15.44 iso.3.6.1.2.1.1.4.0 = STRING: "me <me@theitroad>" iso.3.6.1.2.1.1.5.0 = STRING: "ubuntu-01" iso.3.6.1.2.1.1.6.0 = STRING: "theitroad" iso.3.6.1.2.1.1.7.0 = INTEGER: 72 iso.3.6.1.2.1.1.8.0 = Timeticks: (1) 0:00:00.01 iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.11.3.1.1 iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.15.2.1.1 iso.3.6.1.2.1.1.9.1.3.1 = STRING: "The MIB for Message Processing and Dispatching." iso.3.6.1.2.1.1.9.1.3.3 = STRING: "The Management Architecture MIB." iso.3.6.1.2.1.25.1.1.0 = Timeticks: (9971483) 1 day, 3:41:54.83 iso.3.6.1.2.1.25.1.2.0 = Hex-STRING: 07 E1 04 08 01 30 16 00 2B 00 00 iso.3.6.1.2.1.25.1.3.0 = INTEGER: 393216 iso.3.6.1.2.1.25.1.4.0 = STRING: "BOOT_IMAGE=/boot/vmlinuz-4.4.0-66-generic root=LABEL=cloudimg-rootfs ro console=tty1 console=ttyS0 " iso.3.6.1.2.1.25.1.5.0 = Gauge32: 1 iso.3.6.1.2.1.25.1.6.0 = Gauge32: 121 iso.3.6.1.2.1.25.1.7.0 = INTEGER: 0
在Centos.
$sudo snmpwalk -c my_comm -v1 -O e 127.0.0.1 SNMPv2-MIB::sysDescr.0 = STRING: Linux centos-01 3.10.0-514.6.1.el7.x86_64 #1 SMP Wed Jan 18 13:06:36 UTC 2016 x86_64 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (304) 0:00:03.04 SNMPv2-MIB::sysContact.0 = STRING: admin <admin@theitroad> (configure /etc/snmp/snmp.local.conf) SNMPv2-MIB::sysName.0 = STRING: centos-01 SNMPv2-MIB::sysLocation.0 = STRING: centos theitroad SNMPv2-MIB::sysORLastChange.0 = Timeticks: (8) 0:00:00.08 SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
验证SNMP正常工作后,我们可以配置SNMP统计信息收集软件,如MRTG以创建流量流的在线图。
此示例显示如何使用snmpwalk
命令验证用户身份验证。
$sudo snmpwalk -v 3 -l authPriv -u user01 -a MD5 -A password -x DES -X password localhost .1
与SNMPWalk类似,SNMPGet是命令行工具,以获取来自SNMP的设备的信息。
以下SNMPGet命令,验证SNMP服务器上的用户身份验证。
$sudo snmpget -u user01 -l authPriv -a MD5 -x DES -A password -X password remote_host 1.3.6.1.2.1.1.1.0
其中:
-u
:指定SNMP用户名
-L
:安全和隐私方法的类型
-a
:哪种认证机制
-x
:使用的加密算法类型
-a
:身份验证密码
-x
:加密密码