第248篇:禁用不安全协议:Telnet、SNMPv1/v2

关键词:Telnet 禁用、SNMPv1/v2 禁用、SSH、SNMPv3、明文协议、加密通信、协议升级、安全迁移

一、引言

在网络安全加固中,禁用不安全协议是最基础也是最有效的一项措施。Telnet 和 SNMPv1/v2c 作为早期网络管理协议,采用明文传输数据,密码、配置、设备状态等敏感信息在网络中"裸奔"。任何能够进行网络嗅探的攻击者,都可以轻松截获这些明文数据。

尽管这些协议的不安全性已广为人知数十年,但在现网中仍然广泛存在。原因包括:老旧网管系统仅支持 Telnet、监控平台仅支持 SNMPv2c、运维人员习惯性使用、迁移工作被认为"影响业务"等。本文将系统梳理这些不安全协议的风险,并提供平滑迁移到安全替代方案的完整指导。

二、不安全协议风险分析

2.1 Telnet vs SSH 对比

特性 Telnet SSH (Secure Shell)
传输端口 23 22
加密方式 无(明文) AES/3DES/ChaCha20 加密
认证方式 用户名/密码(明文传输) 密码/公钥证书(加密传输)
数据完整性 无校验 MAC 校验
防中间人 无 主机密钥校验
端口转发 不支持 支持(本地/远程/动态)
X11 转发 不支持 支持
安全评级 不安全 安全

2.2 SNMP 版本对比

特性 SNMPv1 SNMPv2c SNMPv3
社区字符串 明文 明文 加密(可选)
认证 无 无 MD5/SHA/HMAC
加密 无 无 DES/AES/3DES
访问控制 基于 Community 基于 Community 基于用户(USM)
防重放 无 无 工程 ID + 时间窗口
安全级别 无 无 noAuthNoPriv / authNoPriv / authPriv
安全评级 不安全 不安全 安全

2.3 明文协议攻击演示

明文协议攻击演示 - 图示

2.4 SNMPv1/v2c 社区字符串泄露

# 使用 tcpdump 捕获 SNMP 明文流量
tcpdump -i any port 161 -nn -X

# 典型 SNMPv2c 捕获结果:
# 14:30:22.123456 IP 10.10.100.20.54321 > 10.10.100.10.161:
#   SNMPv2c GET-BULK public NoBase
#   (Community string "public" 明文可见)

# 响应中:
# 14:30:22.234567 IP 10.10.100.10.161 > 10.10.100.20.54321:
#   SNMPv2c RESPONSE public NoBase
#   (设备信息、接口状态、路由表等全部明文)

三、迁移到安全协议

3.1 禁用 Telnet,启用 SSH

# ===== 华为设备:禁用 Telnet,启用 SSH =====

<HUAWEI> system-view
[HUAWEI] sysname Core-SW-secure

# 步骤 1:先配置 SSH(确保禁用 Telnet 后仍有管理通道)
[HUAWEI] rsa local-key-pair create
# Input the key bit number in range [384 ~ 4096]
# default value is 2048
2048

# 步骤 2:启用 SSH 服务器
[HUAWEI] ssh server enable
[HUAWEI] ssh server protocol version 2    # 仅允许 SSHv2
[HUAWEI] ssh server authentication timeout 60
[HUAWEI] ssh server maxstartups 10

# 步骤 3:配置 SSH 用户
[HUAWEI] aaa
[HUAWEI-aaa] local-user admin password cipher S3cur3@SSH2024
[HUAWEI-aaa] local-user admin privilege level 15
[HUAWEI-aaa] local-user admin service-type ssh terminal
[HUAWEI-aaa] quit

[HUAWEI] ssh user admin authentication-type password
[HUAWEI] ssh user admin service-type all stub network

# 步骤 4:配置 VTY 接口仅允许 SSH
[HUAWEI] user-interface vty 0 4
[HUAWEI-ui-vty0-4] authentication-mode aaa
[HUAWEI-ui-vty0-4] protocol inbound ssh    # 关键:仅允许 SSH
[HUAWEI-ui-vty0-4] user privilege level 15
[HUAWEI-ui-vty0-4] idle-timeout 10 0
[HUAWEI-ui-vty0-4] quit

# 步骤 5:验证 SSH 连通性
# 从管理终端测试:
# ssh admin@10.10.100.10

# 步骤 6:验证 Telnet 已被禁用
# 从管理终端测试:
# telnet 10.10.100.10
# 预期结果:连接被拒绝

# 步骤 7:关闭 HTTP 服务(仅保留 HTTPS)
[HUAWEI] undo http server
[HUAWEI] http secure-server

3.2 SNMPv1/v2c 迁移到 SNMPv3

# ===== 华为设备:SNMPv3 配置 =====

<HUAWEI> system-view
[HUAWEI] sysname Core-SW-secure

# 步骤 1:启用 SNMP 代理
[HUAWEI] snmp-agent

# 步骤 2:配置 SNMP 系统信息
[HUAWEI] snmp-agent sys-info version v3
[HUAWEI] snmp-agent sys-info contact admin@company.com
[HUAWEI] snmp-agent sys-info location Building-A-DC-Rack-05
[HUAWEI] snmp-agent sys-info name Core-SW-secure

# 步骤 3:创建 SNMPv3 用户(认证 + 加密)
# 用户 admin:最高安全级别(authPriv)
[HUAWEI] snmp-agent usm-user v3 admin auth-mode sha256 AuthP@ss2024! priv-mode aes128 PrivP@ss2024!

# 用户 monitor:只读(authNoPriv,仅认证不加密)
[HUAWEI] snmp-agent usm-user v3 monitor auth-mode sha256 MonAuth@2024

# 步骤 4:配置 SNMP 视图(控制可访问的 MIB 范围)
[HUAWEI] snmp-agent community read cipher R3adV1ew2024
[HUAWEI] snmp-agent community read cipher R3adV1ew2024 vlan 100    # 限制 VLAN

# 配置团体名对应的视图
[HUAWEI] snmp-agent community read cipher R3adV1ew2024
[HUAWEI] snmp-agent target-host trap address udp-domain 10.10.100.20
  params securityname R3adV1ew2024 v2-c

# 步骤 5:配置 Trap 目标(使用 SNMPv3)
[HUAWEI] snmp-agent target-host trap address udp-domain 10.10.100.20
  params securityname admin v3

# 步骤 6:配置 SNMP ACL(限制访问源)
[HUAWEI] acl number 2000
[HUAWEI-acl-basic-2000] rule 5 permit source 10.10.100.20 0    # NMS 服务器
[HUAWEI-acl-basic-2000] rule 10 permit source 10.10.100.30 0   # 监控服务器
[HUAWEI-acl-basic-2000] rule 999 deny source any
[HUAWEI-acl-basic-2000] quit

[HUAWEI] snmp-agent community read cipher R3adV1ew2024 acl 2000

# 步骤 7:禁用 SNMPv1/v2c(最终步骤,确认 v3 正常工作后执行)
# 注意:先确保所有 NMS 已迁移到 SNMPv3,再执行此步骤
# [HUAWEI] undo snmp-agent sys-info version v1
# [HUAWEI] undo snmp-agent sys-info version v2c

3.3 迁移检查清单

阶段 任务 完成标志
准备 统计现网 Telnet/SNMPv1/v2 使用情况 完成资产清单
准备 确认 NMS/监控平台支持 SSH/SNMPv3 兼容性验证通过
准备 生成设备 SSH 密钥对 所有设备密钥生成完毕
实施 先在单台设备试点 试点设备 SSH/SNMPv3 正常
实施 批量配置 SSH 和 SNMPv3 所有设备安全协议已启用
验证 验证 NMS 通过安全协议连接 NMS 监控数据正常
验证 验证运维人员通过 SSH 登录 运维操作正常
关闭 逐台禁用 Telnet display this | include telnet 无结果
关闭 逐台禁用 SNMPv1/v2c display snmp-agent 无 v1/v2c
确认 扫描确认无 Telnet/SNMPv2 端口开放 端口扫描无 23/161(v2) 响应

四、常见故障与排查

4.1 故障案例:禁用 Telnet 后无法管理

故障现象:运维人员在核心交换机上禁用 Telnet 后,发现自己当前的 Telnet 会话仍在继续,但新建会话无法连接。下班后离开时未关闭终端窗口。次日上班后尝试连接设备,SSH 一直提示 "Connection refused"。

排查过程:

# 通过 Console 口登录设备
<HUAWEI> display this | include protocol inbound
# 确认 VTY 配置为 protocol inbound ssh

<HUAWEI> display ssh server status
# SSH 服务器状态:Disabled
# 根因:设备重启后 SSH 服务未自动启用(配置未保存)

# 恢复 SSH 服务
[HUAWEI] ssh server enable
[HUAWEI] save force

根因分析:运维人员在禁用 Telnet 后,虽然设备上的 SSH 已配置,但由于未保存配置(save),设备重启后 SSH 服务未启用。同时,唯一的 Console 口无人值守,导致设备完全无法管理。

经验教训: 1. 永远先启用并验证 SSH,再禁用 Telnet,不要同时操作 2. 配置变更后立即 save force 3. 变更期间保留至少一条管理通道 4. 涉及核心设备的协议切换,应在有人值守的时段进行

4.2 故障案例:SNMPv3 迁移后监控数据中断

故障现象:将核心交换机 SNMP 从 v2c 迁移到 v3 后,Zabbix 监控系统收不到该设备的数据。

# 排查步骤

# 1. 测试 SNMPv3 连通性
snmpwalk -v 3 -u monitor -l authNoPriv -A MonAuth@2024 10.10.100.10 sysDescr.0
# 返回:Timeout: No Response from 10.10.100.10

# 2. 检查设备 SNMP 配置
display snmp-agent usm-user
# 用户 monitor 配置正确

# 3. 检查 SNMP 版本配置
display snmp-agent sys-info version
# 仅显示 v3,v2c 已禁用(正确)

# 4. 检查 NMS 侧配置
# 发现 Zabbix 使用的认证协议为 MD5,但设备配置为 SHA256
# 认证协议不匹配导致认证失败

# 修复:在设备上创建兼容 MD5 的用户(过渡方案)
snmp-agent usm-user v3 zabbix_monitor auth-mode md5 MonAuth@2024

# 最终方案:升级 Zabbix 使用 SHA256 认证

根因分析:SNMPv3 的认证算法(MD5/SHA/SHA256)必须在设备端和 NMS 端完全匹配。迁移时仅关注了版本升级,忽略了认证算法的一致性。

4.3 故障案例:遗留系统仍需 Telnet

故障现象:某老旧网管系统(2010 年部署)仅支持 Telnet 协议管理设备。禁用 Telnet 后,该网管系统无法再采集设备数据。

解决方案:

# 方案 1:部署 SSH 到 Telnet 代理网关
# 在防火墙或专用服务器上配置端口转发 + 协议转换
# 推荐方案:使用 ssh2telnet 代理

# 方案 2:在设备上保留 Telnet 但严格限制访问
[HUAWEI] user-interface vty 0 4
[HUAWEI-ui-vty0-4] protocol inbound ssh telnet    # 同时允许 SSH 和 Telnet
[HUAWEI-ui-vty0-4] acl 2001 inbound                # 使用独立 ACL

[HUAWEI] acl number 2001
[HUAWEI-acl-basic-2001] rule 5 permit source 10.10.100.50 0    # 仅旧网管系统 IP
[HUAWEI-acl-basic-2001] rule 999 deny source any
[HUAWEI-acl-basic-2001] quit

# 方案 3:升级或替换旧网管系统(推荐长期方案)

经验教训:在禁用不安全协议前,必须进行全面的资产和依赖调研。对于确实无法升级的遗留系统,采用"最小范围保留 + 严格 ACL 限制"的过渡方案,同时制定升级计划。

五、安全协议迁移扩展指南

5.1 Telnet→SSH 迁移方案

迁移阶段 操作步骤 风险控制 时间计划
第一阶段:评估 排查现网Telnet使用情况 不影响现网 1-2周
第二阶段:准备 升级设备SSH功能、生成密钥 不影响现网 1周
第三阶段:灰度 选取10%设备试点迁移 随时回退Telnet 1-2周
第四阶段:推广 分批迁移剩余设备 监控SSH连接稳定性 2-4周
第五阶段:封禁 全局禁用Telnet服务 确认无遗留Telnet连接 1周
第六阶段:审计 定期审计SSH配置安全 持续监控 长期
# 步骤1:生成RSA密钥对(华为VRP)
rsa local-key-pair create output rsa_output_key.pem rsa_input_key.pem 2048

# 步骤2:启用SSH Server
ssh server enable
ssh user admin authentication-type password
ssh user admin service-type stelnet

# 步骤3:设置SSH版本和算法
ssh server version v2
ssh server key-exchange-algorithm diffie-hellman-group14-sha256
ssh server symmetric-cipher-algorithm aes-256-cbc
ssh server mac-algorithm hmac-sha2-256

# 步骤4:验证SSH连通性
# 从管理终端测试
ssh -v admin@10.0.0.1

# 步骤5:关闭Telnet服务
telnet server disable

5.2 SNMPv3 安全级别配置对比

安全级别 认证 加密 适用场景 配置复杂度
noAuthNoPriv 无 无 仅内部调试,不建议生产使用 低
authNoPriv MD5/SHA 无 监控只读数据,内部网络 中
authPriv MD5/SHA DES/AES 生产环境读写操作 高
# SNMPv3 安全级别 authPriv 配置(华为VRP)
snmp-agent
 # 创建安全组(对应安全级别)
 snmp-agent group v3 sec-group-a authpri

 # 创建用户
 snmp-agent usm-user v3 monitor-user sec-group-a
  authentication-cipher-mode SHA256 AuthPass@2024
  privacy-cipher-mode AES128 PrivPass@2024
 quit

 # 配置VACM访问控制
 snmp-agent community rw cipher R@wCommunity@2024
  ip-address 10.1.1.0 0.0.0.255
  read-view sysview
  write-view sysview

 # 启用SNMP Trap(v3)
 snmp-agent target-host trap address udp-domain 10.1.1.100
  params securityname monitor-user v3
  security-level priv
 quit
quit

5.3 不安全协议迁移检查清单

序号 检查项 检查方法 达标标准
1 Telnet服务状态 display telnet server 已禁用
2 SSH版本 display ssh server 仅v2
3 SSH算法强度 display ssh server 禁用弱算法
4 SNMP版本 display snmp-agent 仅v3
5 SNMP安全级别 display snmp-agent usm-user authPriv
6 SNMP社区字符串 无v1/v2c配置 无明文community
7 网管系统兼容性 测试网管连接 全部支持SSH/SNMPv3
8 监控平台兼容性 测试数据采集 全部支持SNMPv3
9 运维工具兼容性 测试自动化脚本 全部使用SSH
10 防火墙策略 检查端口策略 23端口已关闭
# 防火墙策略:封堵Telnet和SNMPv1/v2端口
security-policy
 rule name Block-Telnet-External
  source-zone untrust
  destination-zone trust
  service telnet
  action deny
  log enable
 quit
 rule name Block-SNMPv1v2-External
  source-zone untrust
  destination-zone trust
  service udp-161 udp-162
  action deny
  log enable
 quit
quit

5.4 自动化迁移脚本示例(Python)

#!/usr/bin/env python3
"""
网络设备不安全协议批量迁移脚本
功能:SSH连接设备,禁用Telnet,启用SNMPv3
"""
import paramiko
import time

DEVICES = [
    {"ip": "10.0.0.1", "user": "admin", "key": "/root/.ssh/id_rsa"},
    {"ip": "10.0.0.2", "user": "admin", "key": "/root/.ssh/id_rsa"},
    # ... 更多设备
]

SNMPV3_CONFIG = """
snmp-agent
 snmp-agent group v3 sec-group authpri
 snmp-agent usm-user v3 monitor sec-group
  authentication-cipher-mode SHA256 AuthPass123
  privacy-cipher-mode AES128 PrivPass123
 quit
"""

def migrate_device(device):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(device["ip"], username=device["user"],
                   key_filename=device["key"])
    # 禁用Telnet
    client.exec_command("telnet server disable")
    # 启用SNMPv3
    stdin, _, _ = client.exec_command("system-view")
    time.sleep(1)
    for line in SNMPV3_CONFIG.split("\n"):
        stdin.write(line + "\n")
        time.sleep(0.5)
    stdin.write("return\n")
    time.sleep(1)
    client.close()
    print(f"[OK] {device['ip']} 迁移完成")

if __name__ == "__main__":
    for device in DEVICES:
        try:
            migrate_device(device)
        except Exception as e:
            print(f"[FAIL] {device['ip']}: {e}")

六、总结

维度 要点
Telnet 风险 所有通信(含密码)明文传输,可被嗅探截获
SNMPv1/v2c 风险 Community String 明文传输,无认证无加密
替代方案 Telnet → SSHv2;SNMPv1/v2c → SNMPv3
迁移顺序 先启用安全协议 → 验证连通性 → 再禁用不安全协议
验证方法 端口扫描确认 23/161(v2) 端口关闭
遗留系统 最小范围保留 + ACL 限制 + 制定升级计划
合规要求 等保三级要求"通信保密性",明文协议不符合要求

核心结论:禁用不安全协议是网络安全加固的"零成本高效益"措施。SSH 和 SNMPv3 在现代网络设备和管理平台上已得到全面支持,迁移的技术障碍已基本消除。迁移过程中的关键在于:先验证再禁用、保留管理通道、关注遗留系统兼容性。

思考

  1. 如果现网中有一台老旧交换机(不支持 SSH,仅支持 Telnet),应该如何处理?有哪些可选方案?

  2. SNMPv3 有 noAuthNoPriv、authNoPriv、authPriv 三种安全级别,企业监控场景应该选择哪种?为什么?

  3. 在大规模网络(数百台设备)中,如何高效地批量完成 Telnet 到 SSH 的迁移?

下篇预告:第249篇:安全基线检查清单——网络设备安全的标准化核查