什么是snmp?在Linux中安装和配置SNMP

时间:2020-03-05 15:29:41  来源:igfitidea点击:

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:加密密码