4. 网络设备安全基线:交换机端口安全、VLAN隔离、ACL配置、SNMPv3安全配置
网络设备是工业物联网的“神经末梢”。交换机、路由器一旦失守,整个生产网络就像敞开了大门。我见过太多工厂,OT网络和IT网络之间就隔着一台傻瓜交换机,连密码都是默认的admin/admin。嗯,今天我们就来聊聊,怎么把这层防线扎紧。
4.1 交换机端口安全:别让陌生人插网线
你想想看,车间里随便一个工位,网口一插就能接入内网。这要是被恶意设备接进来,或者有人带了台笔记本偷偷连上,后果不堪设想。端口安全,说白了就是给每个物理端口绑定“身份证”。
我个人习惯,在工业交换机上至少做三层限制:
- MAC地址绑定:只允许指定的MAC地址通过该端口通信。
- 端口学习数量限制:限制一个端口最多能学到几个MAC地址,防止MAC泛洪攻击。
- 违规处理动作:发现非法MAC时,是丢弃报文、发出告警,还是直接shutdown端口。
我在项目中遇到过,某条产线的PLC频繁掉线。查了半天,发现是运维人员临时接了一台笔记本调试,忘了拔。笔记本的网卡MAC没在绑定列表里,端口直接被shutdown了。虽然虚惊一场,但说明策略生效了。
核心配置示例(Cisco-like语法):
interface GigabitEthernet0/1
switchport mode access
switchport port-security
switchport port-security maximum 2
switchport port-security mac-address sticky
switchport port-security violation shutdown
!
解释一下:sticky 关键字会把动态学到的MAC自动写入running-config,省得你一条条手动敲。但注意,重启后如果配置没保存,sticky的MAC会丢失。我建议你配完后一定 copy running-config startup-config。
避坑指南: 我曾经在一条老旧的产线上启用端口安全,结果发现PLC每隔几秒会发一个不同的源MAC(某些工业设备有虚拟MAC功能)。端口反复被shutdown,产线直接停了。后来我改成 violation restrict(只丢弃非法帧,不关端口),才解决问题。所以,先搞清楚你的设备行为,再选违规动作。
4.2 VLAN隔离:把生产网络“切”成小房间
VLAN不是新概念,但在工业场景里,很多人把它用成了“摆设”。我见过最夸张的,一个VLAN里跑了PLC、HMI、摄像头、办公电脑,还有打印机。这跟没隔离有什么区别?
我的建议是,按功能域和安全等级来划分VLAN:
| VLAN ID | 用途 | 包含设备 | 安全等级 |
|---|---|---|---|
| 10 | 控制层 | PLC、RTU、DCS控制器 | 最高 |
| 20 | 监控层 | HMI、SCADA服务器、工程师站 | 高 |
| 30 | 现场IO层 | 远程IO、变频器、智能仪表 | 中 |
| 40 | 管理/运维 | 运维笔记本、资产管理终端 | 低 |
| 99 | 访客/临时设备 | 外来调试设备、临时测试终端 | 最低(仅可访问特定服务) |
VLAN划分之后,别忘了配置Trunk端口。交换机之间、交换机和路由器之间,需要用Trunk来透传多个VLAN的流量。我个人习惯,Trunk端口上只放行必要的VLAN,不要用 allowed vlan all。你想想看,万一某个VLAN被攻破,攻击者就能顺着Trunk跳到其他VLAN,隔离就白做了。
小技巧: 在Trunk端口上配置 native vlan 时,一定要选一个不用的VLAN ID(比如999),并且把native VLAN的端口也shutdown掉。这样可以防止VLAN跳跃攻击(VLAN Hopping)。
4.3 ACL配置:给流量装上“安检门”
VLAN隔离是“物理分区”,ACL就是“门禁规则”。没有ACL,VLAN之间还是可以随便通信。我见过一个案例,攻击者从办公网跳到了控制VLAN,就是因为交换机上没配任何ACL,三层路由直接打通了。
ACL的核心原则:最小权限,显式拒绝。也就是说,只放行你明确需要的流量,其余全部拒绝。
工业场景里,我常用的ACL类型:
- 标准ACL:基于源IP过滤。适合粗粒度控制,比如“只允许工程师站访问PLC”。
- 扩展ACL:基于源IP、目的IP、协议、端口。适合细粒度控制,比如“只允许SCADA服务器通过Modbus TCP(端口502)访问PLC”。
- 基于VLAN的ACL(VACL):在VLAN内部过滤。适合控制同一VLAN内设备间的流量。
举个例子,假设我们只允许工程师站(192.168.10.100)通过SSH访问PLC(192.168.10.1),其他全部拒绝:
!
access-list 100 permit tcp host 192.168.10.100 host 192.168.10.1 eq 22
access-list 100 deny ip any any
!
interface Vlan10
ip access-group 100 in
!
注意,ACL的匹配顺序是从上到下。一旦匹配到某条规则,就不再往下检查。所以,deny ip any any 一定要放在最后。我曾经见过有人把deny规则放在前面,结果所有流量都被拒绝了,连自己都登不上交换机。
避坑指南: 工业协议很多是UDP的(比如EtherNet/IP、PROFINET)。写ACL时别忘了放行UDP端口。我遇到过有人只写了TCP规则,结果PLC之间的IO数据死活传不过去,查了半天才发现是UDP被deny了。
4.4 SNMPv3安全配置:别让网管协议“裸奔”
SNMP是网络管理的“眼睛”。但SNMPv1和v2c的社区字符串(community string)是明文传输的,抓个包就能看到。你想想看,攻击者拿到读写权限,直接改你交换机的配置,或者把流量镜像出去,多可怕。
所以,我强烈建议:工业网络里,只用SNMPv3。它提供了三个安全级别:
| 安全级别 | 认证 | 加密 | 适用场景 |
|---|---|---|---|
| noAuthNoPriv | 无 | 无 | 基本不推荐,跟v2c没区别 |
| authNoPriv | 有(MD5/SHA) | 无 | 只验证身份,不加密数据 |
| authPriv | 有(MD5/SHA) | 有(DES/AES) | 推荐!既验证又加密 |
我个人习惯,直接上 authPriv。认证用SHA,加密用AES-128。虽然会多消耗一点CPU资源,但现在的工业交换机完全扛得住。
配置示例(以Cisco交换机为例):
!
snmp-server group ADMIN v3 priv
snmp-server user admin ADMIN v3 auth sha MyAuthKey123 priv aes 128 MyPrivKey123
!
snmp-server host 192.168.10.100 version 3 priv admin
!
这里要注意:MyAuthKey123 和 MyPrivKey123 只是示例。实际部署时,密钥长度至少16位,包含大小写字母、数字和特殊字符。而且,密钥要定期更换。
小技巧: 如果你用的是第三方网管软件(比如SolarWinds、Zabbix),记得在网管端也配置相同的SNMPv3用户和密钥。我见过有人交换机配好了,网管端忘了配,结果告警全收不到。
4.5 知识体系总览
下面这张图,帮你理清本章的核心逻辑。从端口安全到VLAN隔离,再到ACL和SNMPv3,层层递进,构成完整的网络设备安全基线。
好了,网络设备这块的基线配置,基本就这些。记住,安全不是一锤子买卖。配完之后,定期审计、定期更换密钥、定期检查端口状态,才能让基线真正落地。