3、SNMP安全机制:Community字符串、v3用户认证与加密、ACL访问控制
聊到SNMP,很多人第一反应就是“简单”。没错,它名字就叫简单网络管理协议。但简单不代表可以裸奔。我在早期做网络运维时,就见过不少公司直接把SNMP的Community字符串设成“public”,结果被隔壁机房的实习生扫到,整个交换机配置被人看了个精光。
所以这一章,咱们重点聊聊SNMP怎么才能安全地跑起来。说白了,就是三件事:Community字符串别太弱、v3的认证加密用起来、ACL把访问范围锁死。
3.1 Community字符串:别再用public了
SNMP v1和v2c的安全机制,全靠一个Community字符串。它就像个明文密码,跟着报文在网络里到处跑。你想想看,如果有人在交换机上抓个包,你的Community字符串就暴露了。
我个人习惯,Community字符串至少要满足这几个条件:
- 长度不低于12位
- 包含大小写字母、数字和特殊字符
- 不要和任何系统密码重复
- 读写权限的字符串要分开设置
举个例子,别设成“switch123”这种,设成“Sw!tch_M0n1t0r_2024”会好很多。
配置示例(华为交换机):
#
snmp-agent community read cipher Sw!tch_M0n1t0r_2024
snmp-agent community write cipher Sw!tch_C0nfig_2024
#
注意:我曾经遇到过一家客户,所有交换机的Community字符串一模一样。结果一台设备被攻破,全网设备都暴露了。所以不同区域、不同安全等级的交换机,Community字符串一定要差异化配置。
3.2 SNMP v3:这才是正经的安全方案
v3和v1/v2c最大的区别是什么?它引入了用户概念,支持认证和加密。说白了,v3不再靠一个简单的字符串来验证身份,而是用用户名+密码+加密算法来保证安全。
v3提供了三个安全级别:
| 安全级别 | 认证 | 加密 | 适用场景 |
|---|---|---|---|
| noAuthNoPriv | 无 | 无 | 基本不推荐,除非测试环境 |
| authNoPriv | 有(MD5/SHA) | 无 | 只验证身份,数据明文传输 |
| authPriv | 有(MD5/SHA) | 有(DES/AES) | 生产环境首选,既认证又加密 |
我个人建议,生产环境直接上authPriv。别嫌麻烦,安全这东西,省一步就可能出大事。
配置示例(华为交换机):
#
snmp-agent sys-info version v3
snmp-agent group v3 MonitorGroup privacy
snmp-agent usm-user v3 monitor
snmp-agent usm-user v3 monitor authentication-mode sha
snmp-agent usm-user v3 monitor privacy-mode aes256
#
小技巧:配置完v3用户后,记得用测试工具验证一下。我习惯用MIB Browser或者snmpwalk命令行工具,指定v3参数测试连通性。命令大概是这样的:
snmpwalk -v3 -u monitor -a SHA -A "YourAuthPass" -x AES -X "YourPrivPass" 192.168.1.1
3.3 ACL访问控制:把门锁好
有了强密码和加密,是不是就万事大吉了?不是。你想想看,如果任何人都能访问你的SNMP服务,那再强的密码也扛不住暴力破解。
ACL(访问控制列表)就是用来限制哪些IP可以访问SNMP服务的。说白了,就是只允许NMS(网络管理系统)的IP来访问,其他IP一概拒绝。
我记得有一次,一个客户反馈说SNMP监控时不时断连。排查了半天,发现是ACL配置漏了一个NMS的IP。所以配置ACL时,一定要把所有的NMS IP都列全了。
配置示例(华为交换机):
#
acl number 2000
rule 5 permit source 192.168.10.100 0
rule 10 permit source 192.168.10.101 0
rule 100 deny source any
#
snmp-agent acl 2000
#
避坑指南:我曾经遇到过一个问题——ACL配置了,但SNMP还是能被外部访问。后来发现,ACL只对SNMP v1/v2c生效,v3的ACL需要单独配置。华为设备上,v3的ACL是在用户或组级别配置的:
snmp-agent group v3 MonitorGroup privacy acl 2000
3.4 综合配置建议
好了,三个安全机制都讲完了。实际部署时,我建议按这个顺序来:
- 先配ACL:把访问源锁死,只允许NMS IP访问
- 再配v3用户:用authPriv级别,SHA认证+AES256加密
- 最后配Community:如果必须兼容v2c设备,用强密码并绑定ACL
嗯,这里要注意一点:如果网络里既有老设备只支持v2c,又有新设备支持v3,那就得做兼容方案。我的做法是,老设备用v2c+强Community+ACL,新设备全上v3。等老设备逐步替换后,再统一升级到v3。
完整配置示例(华为交换机,v2c+v3混合环境):
#
# ACL配置
acl number 2000
rule 5 permit source 192.168.10.100 0
rule 100 deny source any
#
# SNMP v2c配置(兼容老设备)
snmp-agent community read cipher Sw!tch_M0n1t0r_2024 acl 2000
snmp-agent community write cipher Sw!tch_C0nfig_2024 acl 2000
#
# SNMP v3配置
snmp-agent sys-info version all
snmp-agent group v3 MonitorGroup privacy acl 2000
snmp-agent usm-user v3 monitor
snmp-agent usm-user v3 monitor authentication-mode sha
snmp-agent usm-user v3 monitor privacy-mode aes256
#
最后说一句,安全配置不是一劳永逸的。定期审计SNMP配置、更换密码、检查ACL规则,这些都应该纳入日常运维流程。我每季度都会做一次SNMP安全巡检,看看有没有“裸奔”的设备。
好了,这一章就到这里。下一章咱们聊聊SNMP的MIB库和OID,看看怎么从交换机里拿到我们想要的数据。