来源:网络技术联盟站
你好,这里是网络技术联盟站,我是瑞哥!
随着网络的迅速发展和设备的广泛使用,网络管理变得愈发重要。在这个领域,SNMP(Simple Network Management Protocol)一直是一种重要的协议,用于监控和管理网络设备。SNMP不断演变,产生了不同的版本,其中最主要的有SNMPv1、SNMPv2c和SNMPv3。本文将深入研究这三个版本,探讨它们的特点、安全性、功能以及适用场景,以便更好地了解何时选择哪个版本,以满足特定网络环境的需求。
目录:
-
SNMP
-
为什么需要SNMP?
-
SNMP基本组件
-
SNMP管理模型
-
MIB树型结构
-
SNMP操作
-
SNMP 端口
-
SNMP 版本
-
SNMP v1
-
基本命令
-
安全性问题与挑战
-
命令和操作的详解
-
SNMPv1 的现状和挑战
-
操作示例
-
SNMP v2
-
SNMPv2 的创新和改进
-
安全性挑战与限制
-
操作
-
操作示例
-
SNMP v3
-
关键元素介绍
-
安全性提升
-
配置复杂性
-
SNMPv3 与前身的差异
-
安全性超越 SNMPv2c
-
操作示例
-
安全模型
-
通知确认
-
VACM配置
-
使用VACM的安全GET操作
-
通用加密体系结构
-
SNMPv1、SNMPv2c和SNMPv3对比
SNMP
SNMP(Simple Network Management Protocol)是一种用于网络管理的标准协议,允许网络管理员监控网络上的设备、收集性能统计数据、配置设备以及处理网络中的故障。
SNMP为网络管理系统提供了一种标准的方式,通过该方式可以监控和管理连接到网络上的各种设备,如路由器、交换机、服务器等。
SNMP使用轮询机制,其中网络管理系统通过定期向设备发送请求(轮询)来获取设备的状态信息。这使得管理系统能够及时了解设备的状况。
SNMP提供了一组基本的功能,包括获取设备信息、设置设备配置、监控性能等。这使得它非常适合在小型、快速、低成本的网络环境中使用。
SNMP使用用户数据报协议(UDP)来传输其消息。UDP是一种无连接的协议,适用于一些对实时性要求较高、但对数据完整性要求较低的应用场景。SNMP的轻量级和基本功能使其适用于UDP。
由于采用了标准的UDP协议和基本功能集,SNMP受到了许多网络设备的广泛支持。这包括路由器、交换机、打印机、服务器等。
SNMP允许管理信息在任意两点之间传送,使得管理员可以从网络中的任何位置检索信息,有助于故障排查和性能监测。
为什么需要SNMP?
SNMP的存在和广泛应用是为了解决随着网络规模和复杂性的增加而产生的一系列管理挑战。
-
网络规模的增加: 随着时间的推移,网络中的设备数量呈指数级增长。这使得手动管理每个设备的状态和配置变得不切实际,需要一种自动化和标准化的方法。SNMP通过轮询机制,允许网络管理员在较大规模的网络中有效地监控和管理设备。
-
分布式网络的复杂性: 现代网络通常是分布式的,覆盖广泛的地理区域。在这样的网络中,实时监控和故障排查变得非常困难。SNMP提供了一种统一的管理接口,使得管理员可以从任何地方远程访问和管理设备,有效地解决了地理位置分散的管理难题。
-
多样化的设备类型: 不同厂商提供的网络设备拥有各自不同的管理接口和命令行语法。SNMP通过提供一个标准的管理协议,屏蔽了这些设备间的物理差异。这使得网络管理员无需学习每个设备的独特管理方式,从而简化了管理工作。
-
提高管理效率: SNMP允许管理员通过网络管理系统在网络上的任何节点执行信息查询、信息修改和故障排查等任务。这提高了管理的灵活性和效率,因为管理员可以远程操作设备,而无需物理接触设备。
-
统一管理: SNMP提供了一个统一的管理框架,使得可以使用相同的协议和方法来管理不同类型的设备。这降低了管理的复杂性,减少了管理成本。
-
设计简单、低运行代价: SNMP采用了简单的设计哲学,使其在设备上的实施相对轻量,不会对设备性能产生显著影响。这有助于确保网络设备能够顺利地支持SNMP,并且运行代价较低。
SNMP基本组件
-
网络管理系统(NMS):在网络中扮演管理者角色,用SNMP协议对网络设备进行管理/监视的系统,运行在NMS服务器上。 -
代理进程(Agent):被管理设备中的代理进程,维护设备信息数据,响应NMS的请求,并向NMS报告设备状态变化。 -
被管对象(Managed Object):设备中的硬件或在硬件、软件上配置的参数集合,每个设备可能包含多个被管理对象。 -
管理信息库(MIB):指明被管理设备维护的变量的数据库,包含设备的属性、状态、访问权限和数据类型等信息。
SNMP管理模型
-
NMS:扮演管理者角色,可以向Agent发出请求,查询/修改参数值,以及接收主动发送的Trap信息了解设备状态。 -
Agent:代理进程,维护设备信息并响应NMS请求,将管理数据报告给NMS。在设备故障或事件发生时,主动向NMS发送信息报告状态变化。 -
Managed Object:设备中的被管理对象,可以是硬件或配置的参数集合。 -
MIB:数据库,定义了被管理设备的属性,通过查询和修改MIB实现对设备状态的获取和设置。
MIB树型结构
MIB(Management Information Base)是一种结构化的数据库,用于存储和管理网络设备的信息。这些信息包括设备的配置、状态、性能等各种参数。MIB定义了被管理设备所支持的变量和对象,它们可以通过SNMP协议进行查询和设置。每个对象都有一个唯一的标识符,称为OID(Object Identifier)。
Agent是被管理设备上运行的代理进程,负责响应NMS的请求。当NMS通过SNMP发送请求时,Agent根据MIB的定义来执行相应的操作,包括提供状态信息、接收设置参数等。
MIB的功能:
-
查询(Get): NMS可以通过查询MIB获取被管理设备的当前状态信息,例如温度、带宽利用率等。 -
设置(Set): NMS可以通过修改MIB来设置设备的参数,例如修改路由表、调整设备配置等。
SNMP的MIB采用树型结构,其中树的每个节点代表一个管理对象。树的根没有名字,而每个节点都有一个唯一的OID标识符。通过这种结构,可以方便地组织和管理大量的管理对象。
MIB的树型结构也被称为对象命名树。每个节点都有一个数字和一个名称,形成从树的顶部到该节点的完整路径。例如,system的OID为1.3.6.1.2.1.1,interfaces的OID为1.3.6.1.2.1.2。
通过MIB,网络管理系统可以实现对网络设备的监视、配置和故障排除,从而提高网络的可管理性和效率。
SNMP操作
SNMP通过一系列的操作来实现网络管理:
-
GET操作:管理器向代理请求获取特定对象的信息。
-
SET操作:管理器向代理发送请求,以更改设备的配置或状态。
-
TRAP操作:代理主动向管理器发送警报,通知特定事件的发生。
SNMP 端口
SNMP使用不同的端口进行通信,主要是通过UDP协议。
-
代理进程接收请求信息:
-
协议: UDP -
端口号: 161 -
描述: 代理进程运行在被管理设备上,接收来自NMS(Network Management System)的SNMP请求,用于查询或修改设备的信息。 -
NMS与代理进程之间的通信:
-
协议: UDP -
端口号: 161 -
描述: NMS通过该端口与代理进程进行通信,向代理进程发送SNMP请求,查询或修改设备的参数。 -
NMS接收通知信息:
-
协议: UDP -
端口号: 162 -
描述: 代理进程在设备发生特定事件(如故障)时,通过该端口向NMS发送SNMP Trap通知信息,通知NMS设备的状态变化。 -
代理进程生成通知信息:
-
协议: 任何可用的端口 -
描述: 代理进程生成SNMP通知信息时,可以使用任何可用的端口进行传输。 -
接收请求信息(TLS/DTLS):
-
协议: TLS/DTLS -
端口号: 10161 -
描述: 当SNMP通信需要使用传输层安全性(TLS)或数据报传输层安全性(DTLS)协议时,代理进程接收NMS请求的端口号为10161。 -
接收通知信息(TLS/DTLS):
-
协议: TLS/DTLS -
端口号: 10162 -
描述: 当SNMP通信需要使用TLS或DTLS协议时,NMS接收代理进程发送的Trap通知的端口号为10162。
通过这些端口,SNMP实现了网络设备的监视和管理,以及在设备发生特定事件时向NMS发送通知。
SNMP 版本
-
SNMPv1是SNMP的最初版本,基于团体名认证(Community String Authentication)。安全性较差,因为使用简单的团体名来进行认证,容易受到安全威胁。返回报文的错误码相对较少。定义在RFC 1155和RFC 1157中。 -
SNMPv2c是SNMPv2的一个补充版本,引入了一些改进和扩展,包括GetBulk和Inform操作。提供更多的标准错误码信息。支持更多的数据类型。定义在RFC 1901,RFC 1905和RFC 1906中。 -
SNMPv3是SNMP的最新版本,为了提高安全性而引入了重大改进。提供基于USM(User Security Module)的认证和加密,以及基于VACM(View-based Access Control Model)的访问控制,使其成为迄今为止最安全的版本。定义在RFC 1905,RFC 1906,RFC 2571,RFC 2572,RFC 2574和RFC 2575中。
SNMPv3的引入解决了SNMPv1和SNMPv2c的安全性问题,为网络管理提供了更可靠和安全的解决方案。网络管理员通常倾向于使用SNMPv3以确保对网络设备的安全监控和管理。
下面我们来详细的了解一下这三个版本的SNMP。
SNMP v1
SNMPv1(Simple Network Management Protocol version 1)是 SNMP 协议的初始版本,于 1988 年首次引入,经过互联网架构委员会 (IAB) 于 1990 年批准,成为互联网标准。SNMP 的设计初衷是为了监控 TCP/IP 网络上的网络设备,提供了基本的网络管理功能。然而,随着网络安全意识的提高和技术的发展,SNMPv1 的一些局限性和安全性问题逐渐凸显出来。
基本命令
SNMPv1 作为早期的网络管理协议,引入了一系列基本命令,其中包括:
-
Get: 管理器向受管设备或代理发送“获取”请求,以检索特定 OID(对象标识符)的值。
-
GetNext: 类似于 Get,GetNext 命令从 MIB(管理信息库) 中的下一个 OID 检索值。
-
Set: 指示代理进行更改的命令,用于修改设备的配置或状态。
-
Trap: 代理主动发送到管理器的单向消息,用于通知特定事件,如设备状态变化或故障。
-
Response: 返回经理发起的查询的答案,包含请求的 OID 的值。
安全性问题与挑战
SNMPv1 在设计之初未考虑到现代网络中的安全需求,导致了一系列安全性问题:
-
社区字符串: SNMPv1 使用简单的社区字符串进行身份验证,而默认的字符串通常是“public”或“private”,这使得设备容易受到未经授权的访问。
-
明文传输: 通信过程中,包括社区字符串在内的信息都是以明文形式传输的,容易受到拦截和窃听的威胁。
命令和操作的详解
Get 和 GetNext
Get 命令用于获取特定 OID 的值,而 GetNext 用于获取 MIB 中下一个 OID 的值。这两个命令是数据轮询的基础,用于获取设备的状态和性能信息。
Set 命令
Set 命令允许管理器请求对设备进行更改,包括修改配置参数和状态。然而,由于安全性的问题,这也带来了潜在的风险,因为未经授权的更改可能会影响设备的正常运行。
Trap 通知
Trap 通知是代理主动发送给管理器的消息,用于通知管理器特定的事件,如设备状态的变化。这是 SNMPv1 的一种主动通知机制。
SNMPv1 的现状和挑战
尽管 SNMPv1 在一些简单网络环境中仍在使用,因其对资源的较低要求,但它面临着以下挑战:
-
安全性问题: SNMPv1 的基本安全机制不足以满足现代网络的安全需求。社区字符串以明文形式传输,易受攻击。
-
32 位计数器限制: 仅支持 32 位计数器,对于现代高吞吐网络可能会导致计数器溢出的问题。
操作示例
GET操作
请求:
snmpget -v1 -c public 192.168.1.1 sysDescr.0
响应:
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, C3560CX Software (C3560CX-UNIVERSALK9-M), Version 15.2(4)E6, RELEASE SOFTWARE (fc2)
SET操作
请求:
snmpset -v1 -c private 192.168.1.1 sysContact.0 s \\\"admin@example.com\\\"
响应:
SNMPv2-MIB::sysContact.0 = STRING: admin@example.com
TRAP操作
trap:
snmptrap -v1 -c public 192.168.1.2 \\\'\\\' 1.3.6.1.6.3.1.1.5.1 1.3.6.1.2.1.2.2.1.7.2 1
管理器接收到trap的通知。
SNMP v2
随着网络的迅猛发展和使用量的不断增加,SNMPv2(Simple Network Management Protocol version 2)成为 SNMP 协议的下一个里程碑。SNMPv2 引入了一系列改进,包括对64位计数器的支持、安全性的提升、更大的灵活性以及对管理信息库(MIB)的更简便发现。
SNMPv2 的创新和改进
-
64位计数器: SNMPv2 引入了对64位计数器的支持,使其能够更好地处理高速网络中的计数器溢出问题,满足了当时网络的发展需求。
-
安全性改进: SNMPv2 在安全性方面进行了改进,试图解决 SNMPv1 的一些安全性问题。然而,这个改进在实际应用中并不普及,后来更安全的版本得到了广泛采用。
-
分层管理结构: SNMPv2 提供了更大的灵活性,支持更多分层的管理结构,使网络管理更加可扩展和适应不断变化的网络环境。
-
新命令引入: SNMPv2 引入了新的命令以提高协议的灵活性。其中,“GETBULK”命令允许管理器在一条消息中向代理请求多个变量,而“INFORM”命令改变了在 SNMPv1 中 Traps 的工作方式,要求经理对代理的通知做出响应。
-
SNMPv2c: SNMPv2 具有三个不同的版本,分别是 SNMPv2c、SNMPv2u 和 SNMPv2。而 SNMPv2c 成为标准化版本,被广泛使用。
SNMPv2c 是 SNMPv2 的一个特定版本,它回归到了基于社区的身份验证方法,放弃了 SNMPv2 中尝试引入的新的安全系统。虽然在协议数据包类型、MIB 结构元素和传输映射等方面进行了改进,但其安全性仍然存在缺陷。
SNMPv2c 在安全性方面取得了一些改进,但其易用性和额外功能使得它在内部网络中仍然广泛使用。然而,由于安全缺陷,它通常仅限于内部网络使用。
安全性挑战与限制
-
身份验证系统: SNMPv2c 回到了基于社区字符串的身份验证,使得网络容易受到未经授权的访问。社区字符串仍然以明文形式传输,容易被窃听和攻击。
-
缺乏加密: SNMPv2c 在数据传输中没有引入加密机制,导致信息的隐私和完整性容易受到威胁。
-
限制于内部网络: 尽管 SNMPv2c 在内部网络中可能具有足够的安全性,但在公共或面向互联网的设备中,其身份验证系统的简单性以及缺乏加密功能,使得它不是最佳的选择。
操作
-
GET-BULK操作:引入GET-BULK操作,允许一次性获取大量数据,提高效率。
-
INFORM操作:引入INFORM操作,允许代理向多个管理器发送通知。
操作示例
GET-BULK操作
请求:
snmpbulkget -v2c -c public 192.168.1.1 2.1.2
响应:
IF-MIB::ifDescr.1 = STRING: GigabitEthernet1/0/1
IF-MIB::ifDescr.2 = STRING: GigabitEthernet1/0/2
...
INFORM操作
inform:
snmpinform -v2c -c private 192.168.1.2 \\\'\\\' 1.3.6.1.6.3.1.1.5.2
管理器接收到inform的通知。
SNMP v3
SNMPv3(Simple Network Management Protocol version 3)于 1998 年问世,旨在解决 SNMPv1 和 SNMPv2 中存在的安全性问题。通过引入三个关键元素:SNMP 视图、SNMP 组和 SNMP 用户,SNMPv3 在网络管理中取得了安全性的显著进步。
关键元素介绍
-
SNMP 视图: 允许定义用户可以访问的信息,有效限制了对网络上设备的访问,防止未经授权方读/写数据。
-
SNMP 组: 定义用户的访问类型(只读或读/写)和安全类型,规定了与设备交互时的安全级别。
-
SNMP 用户: 通过将 SNMP 用户添加到组中,定义了他们拥有的访问级别、身份验证和加密级别。每个用户都有独特的用户名和密码。
安全性提升
-
用户身份验证: 每次进行 SNMP 交互时,用户必须输入用户名和密码,增加了对信息访问的身份验证。
-
基于角色的访问控制: 管理员可以轻松实施基于角色的访问控制,因为可以生成的个人用户名数量没有限制,提高了灵活性。
-
加密方法: SNMPv3 引入了安全散列算法(SHA)、消息摘要算法(MD5)和数据加密标准(DES)等加密方法,有效防止数据篡改和窃听。
配置复杂性
尽管 SNMPv3 在安全性方面取得了显著进步,但它也引入了一些配置上的复杂性。管理员需要配置多个变量,包括用户名、密码、身份验证协议和隐私协议,以确保系统正常运行。配置错误可能导致安全性降低,因此需要谨慎处理。
SNMPv3 与前身的差异
在 SNMPv3 中,术语“管理器”和“代理”被替换为“SNMP 实体”。每个实体由一个 SNMP 引擎和一个或多个 SNMP 应用程序组成。这种变化并未引入新的操作,但强调了在安全模型下进行的管理和代理的角色。
安全性超越 SNMPv2c
SNMPv3 在安全性方面明显超越了 SNMPv2c。它是首选的网络管理协议,尤其适用于公共设备和面向互联网的设备。通过提供更高级别的身份验证、加密和访问控制,SNMPv3 成为当今网络环境中安全网络管理的不可或缺的工具。
操作示例
配置用户
配置:
snmpusm -v3 -u admin -l authPriv -a MD5 -A auth_password -x DES -X priv_password
用户admin配置成功。
安全GET操作
请求:
snmpget -v3 -u admin -l authPriv -a MD5 -A auth_password -x DES -X priv_password 192.168.1.1 sysDescr.0
响应:
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, C3560CX Software (C3560CX-UNIVERSALK9-M), Version 15.2(4)E6, RELEASE SOFTWARE (fc2)
安全模型
SNMP v3引入了三种安全模型,分别是:
-
User-based Security Model (USM):用户安全模型,用于定义用户的身份验证和加密参数。
-
View-based Access Control Model (VACM):基于视图的访问控制模型,用于定义用户对特定MIB对象的访问权限。
-
Common Cryptographic Architecture (CCA):通用加密体系结构,用于提供SNMP消息的机密性。
通知确认
SNMP v3引入了通知的确认机制,以确保通知的可靠性。以下是一个示例:
配置trap接收:
snmptrapd -Le -u admin -A auth_password -X priv_password
trap接收配置成功。
发送trap:
snmptrap -v3 -u admin -l authPriv -a SHA -A auth_password -x AES -X priv_password 192.168.1.2 \\\'\\\' 1.3.6.1.6.3.1.1.5.2
管理器接收到trap通知,并发送确认。
VACM配置
View-based Access Control Model (VACM) 允许管理员定义用户对MIB对象的访问权限,通过创建视图和相关规则来实现。以下是一个简单的示例:
定义视图:
snmpvacm -v3 -u admin -l authPriv -a SHA -A auth_password -x AES -X priv_password -s -n testView -t 1.3.6.1.2.1.2.2.1.7
视图testView定义成功。
使用VACM的安全GET操作
请求:
snmpget -v3 -u admin -l authPriv -a SHA -A auth_password -x AES -X priv_password -n testView 192.168.1.1 ifDescr.1
响应:
IF-MIB::ifDescr.1 = STRING: GigabitEthernet1/0/1
通用加密体系结构
SNMP v3支持通用加密体系结构 (Common Cryptographic Architecture, CCA) 以提供消息的机密性。以下是一个配置示例:
配置加密:
snmpconf -g -v3 -u admin -l authPriv -a SHA -A auth_password -x AES -X priv_password
加密配置成功。
安全GET操作带加密:
snmpget -v3 -u admin -l authPriv -a SHA -A auth_password -x AES -X priv_password 192.168.1.1 sysDescr.0
响应:
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, C3560CX Software (C3560CX-UNIVERSALK9-M), Version 15.2(4)E6, RELEASE SOFTWARE (fc2)
SNMPv1、SNMPv2c和SNMPv3对比
为了更加直观对比SNMPv1、SNMPv2c和SNMPv3,瑞哥这里整理成表格,方便大家记忆:
特性 | SNMPv1 | SNMPv2c | SNMPv3 |
---|---|---|---|
发布年份 | 1988 | 1993 | 1998 |
身份验证 | 社区字符串 | 社区字符串 | SNMPv3基于用户 |
安全性 | 低 | 中等 | 高 |
加密 | 无 | 无 | 是(DES,AES) |
64位计数器 | 无 | 是 | 是 |
基于视图的访问 | 无 | 无 | 是 |
基于用户的安全性 | 无 | 无 | 是 |
访问控制 | 基于社区 | 基于社区 | 基于用户,基于角色 |
Trap通知 | 是 | 是 | 是 |
消息完整性 | 无 | 无 | 是(SHA,MD5) |
配置 | 简单 | 简单 | 复杂 |
使用场景 | 传统网络,内部使用 | 内部网络 | 高安全性环境 |