本文件說明如何保護您的簡易網路管理通訊協定 (SNMP) 安全。
本文件沒有特定需求。
本檔案中的資訊是根據SNMP功能,例如Cisco IOS®軟體版本中引入的SNMP檢視和SNMP第3版(SNMPv3)。雖然某些組態範例和命令語法以Cisco IOS®為基礎,但核心SNMP安全概念也適用於較新的Cisco IOS XE平台。Cisco IOS和Cisco IOS XE版本之間的命令語法、支援的驗證和隱私演算法、平台功能以及管理平面保護功能可能有所不同。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
保護SNMP非常重要,因為未經授權的SNMP訪問可能暴露裝置資訊、在啟用讀寫訪問時允許配置更改,或者導致拒絕服務(DoS)條件。
早期的SNMP版本(例如SNMPv1和SNMPv2c)依賴社群字串進行存取控制。這些社群字串的運作方式與共用密碼類似,但以明文形式傳送,不提供強式驗證或加密。如果社群字串被重複使用、在配置檔案中公開或從網路中捕獲,則未經授權的使用者可以輪詢裝置資訊,或者在讀寫社群的情況下修改裝置設定。
一些最常見的SNMPv1/v2c安全限制包括:
對於安全部署,請使用支援身份驗證和隱私的SNMPv3。SNMPv3提供基於使用者的身份驗證和加密,有助於保護訪問控制和管理資料。此外,您可以限制對受信任管理站的SNMP訪問,避免不必要的讀寫訪問,並使用SNMP檢視限制可訪問的MIB對象。
附註:在生產網路上部署之前,驗證特定平台和軟體版本的確切命令列介面(CLI)配置、功能支援和驗證命令。
請勿使用眾所周知的社群字串,例如公用或私人。如果相容性需要SNMPv1或SNMPv2c,請使用唯一的、非明顯的社群字串,使用ACL限制它們,並避免讀取/寫入社群,除非有特定的操作要求。
附註:優先使用具備authPriv的SNMPv3進行安全部署。authPriv級別提供驗證和加密功能。身份驗證驗證SNMP消息是否來自有效的SNMPv3使用者,並且隱私加密SNMP負載,因此管理資料不會以明文傳送。
SNMP檢視限制對特定MIB子樹的訪問。將檢視應用於社群或SNMPv3組時,只能訪問所包含的MIB對象。未包含的MIB子樹將隱式拒絕。也可以從更廣泛的包含子樹中顯式排除特定子樹。
要建立或更新SNMP檢視條目,請使用snmp-server view global configuration命令。要刪除指定的SNMP伺服器檢視條目,請使用此命令的no形式。
snmp-server viewno snmp-server view {included | excluded}
語法說明:
myview-name — 更新或建立的檢視記錄的標籤。該名稱用於引用記錄。
oid-tree — 要包括在檢視中或從檢視中排除的抽象語法表示法1(ASN.1)子樹的對象識別符號(OID)。要標識子樹,請指定由數字(如1.3.6.2.4)組成的文本字串或單詞(如system)。用星號(*)萬用字元替換單個子識別符號以指定子樹系列;例如1.3.*.4。
included or excluded — 檢視型別。必須指定included或excluded。
舊版SNMP文檔(包括RFC 1447)引入了MIB檢視的概念,以控制MIB樹的哪些部分包含或排除在SNMP訪問之外。儘管RFC 1447及其基於參與方的SNMPv2安全模型已過時,但MIB檢視概念仍通過基於RFC 3415中定義的基於檢視訪問控制模型(VACM)在現代SNMP中保持相關。Cisco SNMP檢視使用此概念來限制對特定MIB子樹的訪問。SNMP檢視可以應用於SNMPv1/v2c社群或SNMPv3組。
此示例將建立一個檢視,其中包含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-II和Cisco專用MIB對象,但排除了atEntry表示的ARP表:
snmp-server view myview mib-2 included snmp-server view myview atEntry excluded snmp-server view myview cisco included snmp-server community C1sc03xample view myview RO 11 snmp-server community C1sc03xample2 view myview RW 11 snmp-server contact ciscouser@cisco.com
附註:其中一些示例可以引用來自Cisco IOS版本的較舊MIB對象,如atTable或atEntry。在較新的Cisco IOS XE平台上,等效資料可以使用不同的MIB對象或OID。
附註:部署SNMP檢視之前,請驗證MIB對象名稱或OID在目標平台和軟體版本中是否存在。使用SNMP物件導覽器以瞭解其他資訊。
如果需要SNMPv1或SNMPv2c,請使用ACL將每個社群字串限製為受信任的網路管理系統(NMS)地址。與SNMP社群關聯的ACL控制哪些源IP地址可以使用該社群字串向裝置傳送SNMP請求。
SNMP通訊通常包括兩種不同的流量型別:
對輪詢請求和陷阱通知使用不同的社群字串。如果發現一個團體字串,此分隔將限制曝光。例如,如果攻擊者從通知資料包獲取陷阱社群字串,則該字串不得同時允許SNMP輪詢訪問裝置。
access-list 10 permit
snmp-server community RO 10
snmp-server host version 2c
在此範例中:
如果設定了陷阱社群字串,請確認它不會無意中允許SNMP輪詢存取。在某些Cisco IOS軟體版本中,除非明確限制或停用,否則用於陷阱的社群字串也可可用於SNMP存取。
要防止使用陷阱社群字串進行輪詢訪問,請明確拒絕將其用作SNMP社群:
access-list 99 deny any
snmp-server community RO 99
除非有特定的操作要求,否則應避免配置讀/寫社群。如果需要讀寫訪問,請將其限製為專用管理站,使用單獨的社群字串,並應用限制性ACL。優先使用具有身份驗證和隱私的SNMPv3,以實現安全部署。
將SNMPv3與身份驗證和隱私配合使用,用於安全SNMP部署。SNMPv3提供基於使用者的身份驗證和加密,而SNMPv1和SNMPv2c則依賴社群字串。
對於安全部署,請使用SNMPv3 authPriv安全級別:
附註:演算法支援因思科平台和軟體版本而異。使用裝置支援的最強身份驗證和隱私演算法,例如用於身份驗證的SHA或SHA-2和用於隱私的AES。
SNMPv3配置步驟
確定允許哪個網路管理系統輪詢裝置。
示例值:
附註:必須只允許受信任的管理站訪問SNMP服務。
建立僅允許從受信任NMS訪問SNMP的ACL。
範例:
access-list 10 permit access-list 10 deny any log
此ACL會限制哪些源IP地址可以使用SNMPv3組。deny any log條目有助於識別系統日誌中的未授權SNMP訪問嘗試。
建立SNMP 檢視以限制SNMPv3使用者可以訪問哪些MIB對象。
範例:
snmp-server view mib-2 included
snmp-server view cisco included
此示例允許訪問MIB-II子樹和Cisco專用MIB對象。如果需要更嚴格的檢視,請明確排除敏感或不必要的MIB子樹。
範例:
snmp-server view excluded
附註:SNMP檢視通過允許NMS僅訪問監控所需的MIB對象來減少風險。
建立一個SNMPv3組,該組使用priv安全級別並引用SNMP檢視和ACL。
範例:
snmp-server group v3 priv read access 10
此指令執行三個重要事項:
附註:對於大多數監控使用情形,只讀訪問通常就足夠了。僅當存在特定操作要求時才配置寫訪問。
建立SNMPv3使用者,並將其分配給SNMPv3組。
範例:
snmp-server user v3 auth sha priv aes 256
此命令使用以下命令建立使用者:
附註:使用強大且唯一的密碼進行身份驗證和隱私。不要對兩個值重複使用相同的密碼。
附註:如果較新的平台支援更強大的選項(如SHA-2或更強的AES變體),請使用裝置和NMS支援的最強選項。
如果裝置需要向NMS傳送通知,請使用SNMPv3配置SNMP主機。
範例:
snmp-server host version 3 priv
陷阱和通知是從裝置傳送到NMS的通知。它們不同於輪詢請求,NMS會將SNMP查詢傳送到裝置。使用SNMPv3通知,這樣陷阱或通知流量也會從身份驗證和隱私中受益。
如果需要,還要配置陷阱源介面:
snmp-server trap-source
附註:使用一致的陷阱源可幫助NMS識別裝置,並允許防火牆或ACL匹配可預測的源地址。
如果不需要SNMPv1或SNMPv2c,請不要配置社群字串或移除未使用的社群字串。
範例:
no snmp-server community
附註:這可降低透過明文社群字串進行未授權SNMP存取的風險。
下一個配置片段顯示一個示例,該示例僅允許來自NMS 10.189.5.161的SNMPv3輪詢,限制具有SNMP檢視的可讀MIB對象,並要求身份驗證和加密。
Router#configure terminal
Router(config)#access-list 10 permit 10.189.5.161
Router(config)#access-list 10 deny any log
Router(config)#!
Router(config)#snmp-server view ciscoview mib-2 included
Router(config)#snmp-server view ciscoview cisco included
Router(config)#snmp-server view ciscoview ipNetToMediaEntry.2 excluded
Router(config)#snmp-server group myciscogroup v3 priv read ciscoview access 10
Router(config)#snmp-server user ciscouser myciscogroup v3 auth sha C1sc03xampl3 priv aes 256 C1sc03xampl32
使用以下命令驗證本地SNMP配置:
show snmp user
show snmp group
show snmp view
show snmp
show ip access-lists
show running-config |部分snmp
ISP-C#show snmp user
User name: ciscouser
Engine ID: 80000009030000A38EB6F800
storage-type: nonvolatile active
Authentication Protocol: SHA
Privacy Protocol: AES256
Group-name: myciscogroup
ISP-C#show snmp group
groupname: ILMI security model:v1
contextname: storage-type: permanent
readview : *ilmi writeview: *ilmi
notifyview:
row status: active
groupname: ILMI security model:v2c
contextname: storage-type: permanent
readview : *ilmi writeview: *ilmi
notifyview:
row status: active
groupname: myciscogroup security model:v3 priv
contextname: storage-type: nonvolatile
readview : ciscoview writeview:
notifyview:
row status: active access-list: 10
ISP-C#show snmp view
*ilmi system - included permanent active
*ilmi atmForumUni - included permanent active
cac_view pimMIB - included read-only active
cac_view msdpMIB - included read-only active
cac_view system - included read-only active
cac_view interfaces - included read-only active
cac_view ip - included read-only active
cac_view ospf - included read-only active
cac_view bgp - included read-only active
cac_view ifMIB - included read-only active
cac_view nhrpMIB - included read-only active
cac_view ipMRouteStdMIB - included read-only active
cac_view igmpStdMIB - included read-only active
cac_view pimStdMIB - included read-only active
cac_view mgmdStdMIB - included read-only active
cac_view ospfv3MIB - included read-only active
cac_view ipForward - included read-only active
cac_view ipTrafficStats - included read-only active
cac_view ospfTrap - included read-only active
cac_view sysUpTime.0 - included read-only active
cac_view ciscoPingMIB - included read-only active
cac_view ciscoPimMIB - included read-only active
cac_view ciscoBgp4MIB - included read-only active
cac_view ciscoIfExtensionMIB - included read-only active
cac_view ciscoEigrpMIB - included read-only active
cac_view ciscoCefMIB - included read-only active
cac_view ciscoNhrpExtMIB - included read-only active
cac_view ciscoIpMRouteMIB - included read-only active
cac_view ciscoDlcSwitchMIB - included read-only active
cac_view ciscoExperiment.101 - included read-only active
cac_view ciscoIetfIsisMIB - included read-only active
cac_view ifIndex - included read-only active
cac_view ifDescr - included read-only active
cac_view ifType - included read-only active
cac_view ifAdminStatus - included read-only active
cac_view ifOperStatus - included read-only active
cac_view snmpTraps.3 - included read-only active
cac_view snmpTraps.4 - included read-only active
cac_view snmpTrapOID.0 - included read-only active
cac_view snmpMIB.1.4.3.0 - included read-only active
cac_view lifEntry.20 - included read-only active
cac_view cciDescriptionEntry.1 - included read-only active
ciscoview mib-2 - included nonvolatile active
ciscoview cisco - included nonvolatile active
ciscoview ipNetToMediaEntry.2 - excluded nonvolatile active
v1default iso - included permanent active
v1default internet - included permanent active
v1default snmpUsmMIB - excluded permanent active
v1default snmpVacmMIB - excluded permanent active
v1default snmpCommunityMIB - excluded permanent active
ISP-C#show ip access-lists
Standard IP access list 10
10 permit 10.189.5.161 (26 matches)
20 deny any log (6 matches)
Extended IP access list meraki-fqdn-dns
ISP-C#show running-config | section snmp
snmp-server group myciscogroup v3 priv read ciscoview access 10
snmp-server view ciscoview mib-2 included
snmp-server view ciscoview cisco included
snmp-server view ciscoview ipNetToMediaEntry.2 excluded
您還可以對MIB-II系統樹執行SNMP路徑:
ciscouser@Desktop % snmpwalk -v3 -l authPriv -u ciscouser -a SHA -A 'C1sc03xampl3' -x AES -X 'C1sc03xampl32' 10.207.214.25 system
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software [Cupertino], ASR1000 Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 17.9.4, RELEASE SOFTWARE (fc5)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2023 by Cisco Systems, Inc.
Compiled Wed 26-Jul-23 10:29 b
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.9.1.2348
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (107487239) 12 days, 10:34:32.39
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING: ISP-C
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 78
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
下一個命令和輸出顯示無法獲取ipNetToMediaEntry.2組:
ciscouser@Desktop % snmpwalk -v3 -l authPriv -u ciscouser -a SHA -A 'C1sc03xampl3' -x AES -X 'C1sc03xampl32' 10.207.214.25 ipNetToMediaEntry.2
IP-MIB::ipNetToMediaPhysAddress = No Such Object available on this agent at this OID
下一個命令和輸出結果用於思科本地系統組:
ciscouser@Desktop % snmpwalk -v3 -l authPriv -u ciscouser -a SHA -A 'C1sc03xampl3' -x AES -X 'C1sc03xampl32' 10.207.214.25 .1.3.6.1.4.1.9.2.1
SNMPv2-SMI::enterprises.9.2.1.1.0 = STRING: "
17.15(4r)
"
SNMPv2-SMI::enterprises.9.2.1.2.0 = STRING: "LocalSoft"
SNMPv2-SMI::enterprises.9.2.1.3.0 = STRING: "ISP-C"
SNMPv2-SMI::enterprises.9.2.1.4.0 = ""
SNMPv2-SMI::enterprises.9.2.1.5.0 = IpAddress: 10.189.5.161
SNMPv2-SMI::enterprises.9.2.1.6.0 = IpAddress: 0.0.0.0
SNMPv2-SMI::enterprises.9.2.1.8.0 = INTEGER: -796648892
SNMPv2-SMI::enterprises.9.2.1.9.0 = INTEGER: 1646
SNMPv2-SMI::enterprises.9.2.1.10.0 = INTEGER: 1000
SNMPv2-SMI::enterprises.9.2.1.11.0 = INTEGER: 1557645
SNMPv2-SMI::enterprises.9.2.1.12.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.13.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.14.0 = INTEGER: 104
SNMPv2-SMI::enterprises.9.2.1.15.0 = INTEGER: 1200
SNMPv2-SMI::enterprises.9.2.1.16.0 = INTEGER: 1200
SNMPv2-SMI::enterprises.9.2.1.17.0 = INTEGER: 2500
SNMPv2-SMI::enterprises.9.2.1.18.0 = INTEGER: 2684018
SNMPv2-SMI::enterprises.9.2.1.19.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.20.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.21.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.22.0 = INTEGER: 600
SNMPv2-SMI::enterprises.9.2.1.23.0 = INTEGER: 900
SNMPv2-SMI::enterprises.9.2.1.24.0 = INTEGER: 900
SNMPv2-SMI::enterprises.9.2.1.25.0 = INTEGER: 2000
SNMPv2-SMI::enterprises.9.2.1.26.0 = INTEGER: 26757370
SNMPv2-SMI::enterprises.9.2.1.27.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.28.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.29.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.30.0 = INTEGER: 1536
SNMPv2-SMI::enterprises.9.2.1.31.0 = INTEGER: 900
SNMPv2-SMI::enterprises.9.2.1.32.0 = INTEGER: 899
SNMPv2-SMI::enterprises.9.2.1.33.0 = INTEGER: 1800
SNMPv2-SMI::enterprises.9.2.1.34.0 = INTEGER: 8891131
SNMPv2-SMI::enterprises.9.2.1.35.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.36.0 = INTEGER: 1
SNMPv2-SMI::enterprises.9.2.1.37.0 = INTEGER: 1
SNMPv2-SMI::enterprises.9.2.1.38.0 = INTEGER: 5024
SNMPv2-SMI::enterprises.9.2.1.39.0 = INTEGER: 100
SNMPv2-SMI::enterprises.9.2.1.40.0 = INTEGER: 100
SNMPv2-SMI::enterprises.9.2.1.41.0 = INTEGER: 300
SNMPv2-SMI::enterprises.9.2.1.42.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.43.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.44.0 = INTEGER: 1
SNMPv2-SMI::enterprises.9.2.1.45.0 = INTEGER: 1
SNMPv2-SMI::enterprises.9.2.1.46.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.47.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.48.0 = IpAddress: 0.0.0.0
SNMPv2-SMI::enterprises.9.2.1.49.0 = ""
SNMPv2-SMI::enterprises.9.2.1.51.0 = IpAddress: 0.0.0.0
SNMPv2-SMI::enterprises.9.2.1.52.0 = ""
SNMPv2-SMI::enterprises.9.2.1.56.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.57.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.58.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.59.0 = INTEGER: 4972
SNMPv2-SMI::enterprises.9.2.1.60.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.61.0 = STRING: "cisco Systems, Inc.
170 West Tasman Dr.
San Jose, CA 95134-1706
U.S.A.
Ph +1-408-526-4000
Customer service 1-800-553-6387 or +1-408-526-7208
24HR Emergency 1-800-553-2447 or +1-408-526-7209
Email Address tac@cisco.com
World Wide Web http://www.cisco.com"
SNMPv2-SMI::enterprises.9.2.1.62.0 = INTEGER: 18024
SNMPv2-SMI::enterprises.9.2.1.63.0 = INTEGER: 20
SNMPv2-SMI::enterprises.9.2.1.64.0 = INTEGER: 20
SNMPv2-SMI::enterprises.9.2.1.65.0 = INTEGER: 33
SNMPv2-SMI::enterprises.9.2.1.66.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.67.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.68.0 = INTEGER: 1
SNMPv2-SMI::enterprises.9.2.1.69.0 = INTEGER: 1
SNMPv2-SMI::enterprises.9.2.1.70.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.71.0 = INTEGER: 0
SNMPv2-SMI::enterprises.9.2.1.72.0 = IpAddress: 0.0.0.0
SNMPv2-SMI::enterprises.9.2.1.73.0 = STRING: "bootflash:asr1000-universalk9.17.09.04.SPA.bin"
SNMPv2-SMI::enterprises.9.2.1.74.0 = INTEGER: 3
介面ACL可用作額外的保護層,以限制哪些主機可以向裝置介面傳送SNMP流量。對於不支援更有針對性的控制平面保護功能(例如控制平面策略(CoPP)或管理平面ACL)的平台,它們尤其有用。
介面ACL可以在未經授權的SNMP資料包被裝置處理之前將其阻止,從而減少不必要的輪詢、暴力社群字串嘗試或來自不可信源的過量SNMP流量的風險。
注意:應用介面ACL時請小心。搭載ip access-group的ACL會過濾指定方向的流量,而且可能影響目的地為路由器的流量和中轉流量。在生產部署之前,始終包含所有必需的允許語句並在維護視窗或實驗室中驗證ACL。
ip access-list extended SNMP-MGMT-IN permit udp host host eq snmp deny udp any host eq snmp log permit ip any any
然後,必須使用以下配置命令將ACL應用到所有介面:
interface ip access-group SNMP-MGMT-IN in
在此範例中:
附註:您可以調整此範例以適應您的網路設計。如果該平台支援CoPP、iACL或管理平面ACL,則這些選項可以提供更有針對性的控制平面保護。對於配置了許多IP地址的裝置或需要與路由器通訊的許多主機,這並非總是可擴展的解決方案。保護您的核心:基礎架構保護存取控制清單檔案提供了ACL的准則和推薦的部署技術。
使用log關鍵字設定SNMP 社群ACL。監視系統日誌的失敗嘗試,如圖所示。
access-list 10 deny any log snmp-server communityRO 10
當有人嘗試使用社群公共內容存取路由器時,您會看到syslog類似以下內容:
%SEC-6-IPACCESSLOGS: list 10 denied 172.16.1.15 packet
此輸出表示存取清單10已拒絕來自主機172.16.1.15的五個SNMP封包。
使用show snmp命令定期檢查SNMP是否有錯誤,如下所示:
ISP-C#show snmp
Chassis: TKM21110169
186 SNMP packets input
0 Bad SNMP version errors 58 Unknown community name
0 Illegal operation for community name supplied
0 Encoding errors 115 Number of requested variables
0 Number of altered variables
2 Get-request PDUs
113 Get-next PDUs
0 Set-request PDUs
0 Input queue packet drops (Maximum queue size 1000)
126 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
Packets currently in SNMP process input queue: 0
SNMP global trap: disabled
SNMP logging: disabled
檢視突出顯示的計數器,瞭解可能表示嘗試利用這些漏洞的錯誤率意外增加。要報告任何安全問題,請參閱思科產品安全事件響應。
| 修訂 | 發佈日期 | 意見 |
|---|---|---|
4.0 |
14-Jul-2026
|
重新認證 — 更新的技術內容和格式。 |
3.0 |
14-Mar-2024
|
重新認證 |
2.0 |
16-Jan-2023
|
正確使用。修復CCW警報。重新認證。 |
1.0 |
22-Feb-2002
|
初始版本 |