SNMP v1,v2c,v3 的區別
SNMPv1 和 SNMPv2c:不安全!!!
SNMP 最初被開發時,包含稱為“社區字符串”的明文“密碼”。SNMP 協議的前兩個版本(SNMPv1 和 SNMPv2c)包含這些明文密碼,如以下屏幕轉儲所示:
# snmpget -d -v 2c -c demopublic test.net-snmp.org sysContact.0 Sending 47 bytes to UDP: [157.185.82.8]:161->[0.0.0.0]:0 0000: 30 2D 02 01 01 04 0A 64 65 6D 6F 70 75 62 6C 69 0-.....demopubli 0016: 63 A0 1C 02 04 78 8E 32 C9 02 01 00 02 01 00 30 c....x.2.......0 0032: 0E 30 0C 06 08 2B 06 01 02 01 01 04 00 05 00 .0...+......... Received 102 byte packet from UDP: [157.185.82.8]:161->[0.0.0.0]:47960 0000: 30 64 02 01 01 04 0A 64 65 6D 6F 70 75 62 6C 69 0d.....demopubli 0016: 63 A2 53 02 04 78 8E 32 C9 02 01 00 02 01 00 30 c.S..x.2.......0 0032: 45 30 43 06 08 2B 06 01 02 01 01 04 00 04 37 4E E0C..+........7N 0048: 65 74 2D 53 4E 4D 50 20 43 6F 64 65 72 73 20 3C et-SNMP Coders < 0064: 6E 65 74 2D 73 6E 6D 70 2D 63 6F 64 65 72 73 40 net-snmp-coders@ 0080: 6C 69 73 74 73 2E 73 6F 75 72 63 65 66 6F 72 67 lists.sourceforg 0096: 65 2E 6E 65 74 3E e.net> SNMPv2-MIB::sysContact.0 = STRING: Net-SNMP Coders <net-snmp-coders@lists.sourceforge.net>
這顯然是一個問題,因此后來開發了 SNMPv3 來保護協議。
SNMPv3:確保安全
RFCS 3410-3419中記錄了 SNMPv3,它定義了 SNMPv3 的模塊化方法。
這種模塊化方法很重要,因為它被設計為允許協議在將來需要或首選其他類型的安全性時進行適應。
SNMP V3的架構圖如下:
使用安全的SNMP
包括用於保護 SNMP 的選項,下面將詳細介紹:
SNMPv1或SNMPv2c | 完全不提供安全性。受到一切支持。 |
帶有USM的SNMPv3 | 原始SNMPv3安全模型。大多數設備支持。 |
帶有TLS或DTLS的SNMPv3 | 通過TLS和DTLS隧穿SNMP。希望很快會受到大多數設備的支持。 |
SSH上的SNMPv3 | 通過SSH建立SNMP隧道(Net-SNMP不支持100%) |
通過Kerberos的SNMP | 使用Kerberos保護SNMP(甚至更少支持) |
我們應該怎么選?
當然,選擇最適合的情況!建議如下:
- 如果完全使用 Net-SNMP 產品或支持TLS的產品:在(D)TLS上使用SNMPv3
- 如果與舊版 SNMPv3 設備通信:請使用SNMPv3 / USM
- 如果僅與 SNMPv1 / SNMPv2c 設備通信:使用 v1/v2c
帶有 USM 的 SNMPv3
原始的 SNMPv3 規范包括基於用戶的安全模型(USM: User-Based Security Model ),該模型通過允許管理員使用各種安全憑證定義“用戶”來保護協議。這對確保協議的安全起了很大的作用(盡管,Wes Hardaker(Net-SNMP的創始人)在博客條目中提供文檔,但 SNMPv3 / USM 仍然存在一些問題。運營商還發現,保護 SNMPv3 / USM 需要“另外”密碼數據庫來維護,這在操作上很麻煩。
SNMPv3 / USM 已被廣泛實施,大多數現代的“好的”設備都將支持它。
有關將 SNMPv3 / USM 與 Net-SNMP 工具包一起使用的詳細信息,請參見SNMPv3 / USM教程。
隧道SNMPv3
有關SNMP安全性的最新IETF活動已在SNMP集成安全模型(ISMS)工作組中完成。與其決定像USM那樣創建另一個安全系統,不如確定用戶希望在他們已經知道和理解的協議上建立SNMP隧道。這是通過創建以下新的RFC來完成的:
- RFC5590-用於簡單網絡管理協議的傳輸子系統
- RFC5591-簡單網絡管理協議(SNMP)的傳輸安全模型
- RFC5592-用於簡單網絡管理協議(SNMP)的安全Shell傳輸模型
- RFC5608-簡單網絡管理協議(SNMP)傳輸模型的遠程身份驗證撥入用戶服務(RADIUS)用法。
- RFC5953-簡單網絡管理協議(SNMP)的傳輸層安全性(TLS)傳輸模型
這些 RFC 提供了通過 SSH,TLS 和 DTLS 隧道傳輸 SNMPv3 數據包的框架。SSH 協議使用現有的 SSH 身份驗證和加密方法(例如 SSH 密鑰和/或用戶名和密碼)來保護其流量。TLS 和 DTLS 協議使用 X.509 證書來保護其流量。
Net-SNMP 5.6 包含對通過 TLS 和 DTLS 使用 SNMP 的強大支持。
有關在 TLS 和 DTLS 上設置和使用 SNMP 的詳細信息,請參見《使用TLS》教程。
Net-SNMP 5.6 還包含對在 SSH 上使用 SNMP 的最小支持,但是由於缺少可用的 SSH服務器端庫,因此支持受到限制,並且在連接到 OpenSSH sshd 服務器時通過專門的外殼“ hack”實現。
有一個關於使用可用 SSH 的性能影響的信息在這里。
Kerberos SNMPv3
Wes Hardaker 和 Ken Horstein 開始在 IETF 中工作,以為 SNMPv3 實現 kerberos 安全模型。盡管 Net-SNMP 包含此功能的原型實現,但該工作從未在 IETF 或 Net-SNMP 實現內完成,並且尚未為實際使用做好准備。