本文档提供有关保护简单网络管理协议(SNMP)的信息。 保护您的SNMP非常重要,尤其是当SNMP的漏洞可被重复利用以产生拒绝服务(DoS)时。
本文档没有任何特定的要求。
本文档中的信息基于以下软件和硬件版本:
SNMP视图 — Cisco IOS®软件版本10.3或更高版本。
SNMP第3版 — 思科IOS软件版本12.0(3)T中引入。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
将公共用作只读,将私有用作读写社区字符串并不是一种好做法。
Setup SNMP view命令可以阻止仅具有对有限管理信息库(MIB)访问权限的用户。 默认情况下,不存在SNMP视图条目。此命令在全局配置模式下配置,并首次在Cisco IOS软件版本10.3中引入。它与access-list类似,如果某些MIB树上有任何SNMP视图,其他树就会莫名其妙地被拒绝。但是,序列并不重要,它在停止之前会通过整个列表查找匹配。
要创建或更新视图条目,请使用snmp-server view全局配置命令。要删除指定的SNMP服务器视图条目,请使用此命令的no形式。
语法:
snmp-server view view-name oid-tree {included | excluded} no snmp-server view view-name
语法说明:
view-name — 要更新或创建的视图记录的标签。名称用于引用记录。
oid-tree — 要包含在视图中或从视图中排除的抽象语法表示法1(ASN.1)子树的对象标识符。要标识子树,请指定由数字(如1.3.6.2.4)或单词(如系统)组成的文本字符串。用星号(*)通配符替换单个子标识符以指定子树系列;例如1.3.*.4。
包括 | excluded — 视图类型。必须指定包括或排除。
当需要视图时,可以使用两个标准预定义视图,而不是定义视图。一是一切,表示用户可以看到所有对象。另一个是受限,表示用户可以看到三个组:system、snmpStats和snmpParties。RFC 1447中对预定义视图进行了说明。
注意:您输入的第一个snmp-server命令启用两个版本的SNMP。
本示例创建一个视图,该视图包括MIB-II系统组中除sysServices(系统7)外的所有对象和MIB-II接口组中接口1的所有对象:
snmp-server view agon system included snmp-server view agon system.7 excluded snmp-server view agon ifEntry.*.1 included
这是一个完整的示例,说明如何应用带社区字符串的MIB和带有view的snmpwalk的输出。此配置定义了拒绝地址解析协议(ARP)表(atEntry)的SNMP访问并允许其访问MIB-II和Cisco专用MIB的视图:
snmp-server view myview mib-2 included snmp-server view myview atEntry excluded snmp-server view myview cisco included snmp-server community public view myview RO 11 snmp-server community private view myview RW 11 snmp-server contact pvanderv@cisco.com
以下是MIB-II系统组的命令和输出:
NMSPrompt 82 % snmpwalk cough system system.sysDescr.0 : DISPLAY STRING- (ascii):Cisco Internetwork Operating System Software IOS (tm) 2500 Software (C2500-JS-L), Version 12.0(1)T,RELEASE SOFTWARE (fc2) Copyright (c) 1986-1998 by cisco Systems, Inc. Compiled Wed 04-Nov-98 20:37 by dschwart system.sysObjectID.0 : OBJECT IDENTIFIER: .iso.org.dod.internet.private.enterprises.cisco.ciscoProducts.cisco2520 system.sysUpTime.0 : Timeticks: (306588588) 35 days, 11:38:05.88 system.sysContact.0 : DISPLAY STRING- (ASCII):pvanderv@cisco.com system.sysName.0 : DISPLAY STRING- (ASCII):cough system.sysLocation.0 : DISPLAY STRING- (ASCII): system.sysServices.0 : INTEGER: 78 system.sysORLastChange.0 : Timeticks: (0) 0:00:00.00 NMSPrompt 83 %
以下是本地思科系统组的命令和输出:
NMSPrompt 83 % snmpwalk cough lsystem cisco.local.lsystem.romId.0 : DISPLAY STRING- (ASCII): System Bootstrap, Version 11.0(10c), SOFTWARE Copyright (c) 1986-1996 by cisco Systems cisco.local.lsystem.whyReload.0 : DISPLAY STRING- (ASCII):power-on cisco.local.lsystem.hostName.0 : DISPLAY STRING- (ASCII):cough
以下是MIB-II ARP表的命令和输出:
NMSPrompt 84 % snmpwalk cough atTable no MIB objects contained under subtree. NMSPrompt 85 %
当前最佳实践建议将访问控制列表(ACL)应用于团体字符串,并确保请求团体字符串与通知团体字符串不相同。当与其他保护措施结合使用时,访问列表提供进一步保护。
本示例将ACL设置为社区字符串:
access-list 1 permit 1.1.1.1 snmp-server community string1 ro 1
对请求和陷阱消息使用不同的团体字符串可降低攻击者发现团体字符串时进一步攻击或危害的可能性,无论是通过危害远程设备还是通过在未经授权的情况下从网络中嗅探陷阱消息。
使用团体字符串启用陷阱后,某些Cisco IOS软件中可能会为SNMP访问启用该字符串。您必须明确禁用此社区。
例如:
access-list 10 deny any snmp-server host 1.1.1.1 mystring1 snmp-server community mystring1 RO 10
SNMP第3版最初在Cisco IOS软件版本12.0中引入,但目前在网络管理中并不常用。要配置SNMP第3版,请完成以下步骤:
为SNMP实体分配引擎ID(可选)。
定义属于组组的用户userone,并将noAuthentication(no password)和noPrivacy(no encryption)应用于此用户。
定义属于组组组2的用户usertwo,并将noAuthentication(no password)和noPrivacy(no encryption)应用于此用户。
定义属于组组3的用户userthree,并将Authentication(密码为user3passwd)和noPrivacy(无加密)应用于此用户。
定义属于组groupfour的用户userfour,并将Authentication(密码为user4passwd)和Privacy(des56加密)应用到此用户。
使用用户安全模型(USM)V3定义组、组、组,并在v1默认视图(默认)上具有读取权限。
使用USM V3定义组、组2,并在视图myview上具有读取权限。
使用USM V3定义组groupthree,在v1默认视图(默认)上具有读访问权限,并使用身份验证。
使用USM V3定义组groupfour,在v1默认视图(默认)上具有读访问权限,并使用Authentication和Privacy。
定义一个视图myview,该视图提供对MIB-II的读访问,并拒绝对专用Cisco MIB的读访问。
由于已定义社区字符串“只读公用”,show running输出为组public提供了其他行。
show running输出不显示用户3。
示例:
snmp-server engineID local 111100000000000000000000 snmp-server user userone groupone v3 snmp-server user usertwo grouptwo v3 snmp-server user userthree groupthree v3 auth md5 user3passwd snmp-server user userfour groupfour v3 auth md5 user4passwd priv des56 user4priv snmp-server group groupone v3 noauth snmp-server group grouptwo v3 noauth read myview snmp-server group groupthree v3 auth snmp-server group groupfour v3 priv snmp-server view myview mib-2 included snmp-server view myview cisco excluded snmp-server community public RO
以下是使用用户userone的MIB-II系统组的命令和输出:
NMSPrompt 94 % snmpwalk -v3 -n "" -u userone -l noAuthNoPriv clumsy system Module SNMPV2-TC not found system.sysDescr.0 = Cisco Internetwork Operating System Software IOS (TM) 4500 Software (C4500-IS-M), Version 12.0(3)T,RELEASE SOFTWARE (fc1) Copyright (c) 1986-1999 by cisco Systems, Inc. Compiled Tue 23-Feb-99 03:59 by ccai system.sysObjectID.0 = OID: enterprises.9.1.14 system.sysUpTime.0 = Timeticks: (28208096) 3 days, 6:21:20.96 system.sysContact.0 = system.sysName.0 = clumsy.cisco.com system.sysLocation.0 = system.sysServices.0 = 78 system.sysORLastChange.0 = Timeticks: (0) 0:00:00.00 NMSPrompt 95 %
以下是使用用户用户2的MIB-II系统组的命令和输出:
NMSPrompt 95 % snmpwalk -v3 -n "" -u usertwo -l noAuthNoPriv clumsy system Module SNMPV2-TC not found system.sysDescr.0 = Cisco Internetwork Operating System Software IOS (TM) 4500 Software (C4500-IS-M), Version 12.0(3)T,RELEASE SOFTWARE (fc1) Copyright (c) 1986-1999 by cisco Systems, Inc. Compiled Tue 23-Feb-99 03:59 by ccai system.sysObjectID.0 = OID: enterprises.9.1.14 system.sysUpTime.0 = Timeticks: (28214761) 3 days, 6:22:27.61 system.sysContact.0 = system.sysName.0 = clumsy.cisco.com system.sysLocation.0 = system.sysServices.0 = 78 system.sysORLastChange.0 = Timeticks: (0) 0:00:00.00
以下是使用用户userone的Cisco本地系统组的命令和输出:
NMSPrompt 98 % snmpwalk -v3 -n "" -u userone -l noAuthNoPriv clumsy .1.3.6.1.4.1.9.2.1 Module SNMPV2-TC not found enterprises.9.2.1.1.0 = "..System Bootstrap, Version 5.2(7b) [mkamson 7b], RELEASE SOFTWARE (fc1)..Copyright (c) 1995 by cisco Systems, Inc..." enterprises.9.2.1.2.0 = "reload" enterprises.9.2.1.3.0 = "clumsy" enterprises.9.2.1.4.0 = "cisco.com"
以下是命令和输出,显示您无法使用用户用户2获取思科本地系统组:
NMSPrompt 99 % snmpwalk -v3 -n "" -u usertwo -l noAuthNoPriv clumsy .1.3.6.1.4.1.9.2.1 Module SNMPV2-TC not found enterprises.9.2.1 = No more variables left in this MIB View NMSPrompt 100 %
此命令和结果输出用于自定义tcpdump(SNMP第3版支持和printf附录的补丁):
NMSPrompt 102 % snmpget -v3 -n "" -u userone -l noAuthNoPriv clumsy system.sysName.0 Module SNMPV2-TC not found system.sysName.0 = clumsy.cisco.com
ACL 功能为防范 IP 欺骗等类型的攻击提供了安全措施。ACL 可以应用到路由器的传入或传出接口。
在没有使用接收ACL(rACL)选项的平台上,可以允许用户数据报协议(UDP)流量从具有接口ACL的受信任IP地址发往路由器。
以下扩展访问列表可适用于您的网络。本示例假设路由器的接口上配置了IP地址192.168.10.1和172.16.1.1,所有SNMP访问都限制到IP地址为10.1.1.1的管理站,并且管理站只需与IP地址192.1通信68.10.1:
access-list 101 permit udp host 10.1.1.1 host 192.168.10.1
然后,access-list必须使用以下配置命令应用于所有接口:
interface ethernet 0/0 ip access-group 101 in
在UDP端口上直接与路由器通信的所有设备都需要在上述访问列表中明确列出。Cisco IOS软件使用49152到65535范围内的端口作为出站会话(如域名系统(DNS)查询)的源端口。
对于配置了许多IP地址的设备或需要与路由器通信的许多主机,这可能不是可扩展的解决方案。
对于分布式平台,从Cisco 12000系列千兆位交换路由器(GSR)的Cisco IOS软件版本12.0(21)S2和Cisco 7500系列的版本12.0(24)S开始,rACL可能是一个选项。接收访问列表可在流量影响路由处理器之前保护设备免受有害流量的影响。接收路径ACL也被视为网络安全最佳实践,应被视为对良好网络安全的长期补充,以及针对此特定漏洞的解决方法。CPU负载被分配给线卡处理器,并帮助减轻主路由处理器上的负载。题为GSR的白皮书:接收访问控制列表将帮助识别和允许到您设备的合法流量并拒绝所有不需要的数据包。
虽然阻止流经网络的流量通常很困难,但仍然可以识别永远不允许以您的基础设施设备为目标的流量,并在网络边界阻止该流量。基础设施ACL(iACL)被视为网络安全最佳实践,应被视为对良好网络安全的长期补充以及针对此特定漏洞的解决方法。题为“保护您的核心:基础设施保护访问控制列表提供了iACL的准则和建议的部署技术。
ip permit列表功能限制从未授权的源IP地址到交换机的Inbound Telnet和SNMP访问。当发生违规或未经授权的访问时,支持系统日志消息和SNMP陷阱通知到管理系统。
Cisco IOS软件安全功能的组合可用于管理路由器和Cisco Catalyst交换机。需要建立安全策略,以限制能够访问交换机和路由器的管理站的数量。
有关如何提高IP网络安全性的详细信息,请参阅提高IP网络安全性。
使用log关键字配置SNMP社区ACL。监控系统日志以查找失败尝试,如下所示。
access-list 10 deny any log snmp-server community public RO 10
当有人尝试使用社区公共设备访问路由器时,您会看到类似以下的系统日志:
%SEC-6-IPACCESSLOGS: list 10 denied 172.16.1.15packet
此输出意味着access-list 10已拒绝来自主机172.16.1.1的5个SNMP数据包。
通过执行show snmp命令定期检查SNMP是否有错误,如下所示:
router#show snmp Chassis: 21350479 17005 SNMP packets input 37 Bad SNMP version errors** 15420 Unknown community name** 0 Illegal operation for community name supplied 1548 Encoding errors** 0 Number of requested variables 0 Number of altered variables 0 Get-request PDUs 0 Get-next PDUs 0 Set-request PDUs 0 SNMP packets output 0 Too big errors (Maximum packet size 1500) 0 No such name errors 0 Bad values errors 0 General errors 0 Response PDUs 0 Trap PDUs
观察标记为**的计数器,以了解可能表示尝试利用这些漏洞的错误率的意外增加。要报告任何安全问题,请参阅思科产品安全事件响应。