简介:一份面向等保2.0合规建设与测评整改的Cisco思科路由器专项检查表,适合网络运维、安全工程师及等级保护测评人员使用。资源为单个PDF文件,压缩包总大小约158KB,内容以表格化检查清单呈现,涵盖系统版本、Console口与密码加密、密码复杂度、Telnet远程ACL限制、VTY数量及超时退出等账号安全项,也覆盖日志管理、NTP时间同步、路由协议认证、设备冗余备份、访问控制、关闭CDP/HTTP/BOOTP及IP源路由防护等二十余项策略要求。每项均列出检查步骤或命令、是否符合、加固操作记录等字段,方便直接对照现网设备逐项自查与整改留痕。目前已有727人学习,适合需要快速落地等保2.0网络设备安全要求或准备测评检查的读者参考。
1. 等保2.0走进机房:Cisco路由器安全配置到底卡在哪
等保2.0测评组进机房,手里那张Cisco网络设备检查表,本质不是漏洞扫描清单,而是一组围绕身份鉴别、访问控制、审计、入侵防范的配置行为断言。做一次整改,如果只把路由器密码改成强口令,测评结论大概率仍然是不符合:VTY来源未限制、syslog没有时间同步、路由协议没开认证、CDP还在发报文,这些都会逐条被写进问题项。接下来直接把检查表逐条翻译成show命令和running-config里的判断条件,覆盖查什么、命令怎么敲、结果怎么判定、不符合时怎么加固。适合自己维护核心路由器的网络工程师,也适合准备等保测评整改的一线运维。
2. 账号口令与登录通道:Console/VTY/Enable 三个核查面
等保检查表里“设备基本情况及账号检查”不是只查密码,而是按资产身份、控制台口令、远程登录限制、enable秘钥四个层面逐项确认。实际测评中,我通常先做只读巡检,把所有相关输出保存下来再打勾。不先执行命令,只凭“我记得配置过”去应对,很容易漏掉某些line或接口下的配置。另外,测评师看running-config时只会看当前生效配置,不会听你说“之前加了又删了”,因此核查命令都必须基于设备当前状态。
2.1 设备版本与Console口口令核查
检查表第一条“设备品牌、设备类型、设备名称、系统版本信息收集”对应的是资产清点,命令本身很简单:
show version show running-config | section line console 0show version用于确认设备型号和IOS版本,在等保测评报告里要写进设备信息一栏,和资产台账不符会被记为不符合。版本过老或停止支持本身不一定算安全漏洞,但测评师会关注是否还有补丁维护渠道。show running-config | section line console 0只截取Console 0配置段,比show running-config全文翻页更高效。判断符合性的重点有三个:有没有login语句、有没有password、密码是不是密文存储。
如果看到password 7 08...,这只是Cisco Type 7弱混淆,不是加密,可以在几秒内被离线工具解出明文。可靠的做法是使用secret或外部AAA,同时开启service password-encryption,让配置文件中所有口令字段至少不是肉眼可读的明文。物理机柜加锁属于现场检查项,CLI无法查看,测评时需要在场人员配合确认机柜锁具与钥匙管理制度。
2.2 VTY数量、ACL来源限制与超时退出
VTY是远程登录的主要入口,等保核查重点不是有没有密码,而是“并发入口数量、来源IP、空闲超时、传输协议”四个维度。先看当前配置:
show running-config | section line vty如果输出是line vty 0 4,表示同时开启5条虚拟终端;如果是line vty 0 15,就是16条。检查表要求“VTY数量限制”,不是说数量越少越好,而是要与运维规模匹配。对边界和核心路由器,我一般保留0 4共5条,同时配上ACL只允许网管段访问。配置示例:
access-list 99 remark NMS-ONLY access-list 99 permit 192.168.10.0 0.0.0.255 access-list 99 deny any line vty 0 4 access-class 99 in transport input ssh exec-timeout 5 0access-class 99 in表示进入VTY时按ACL 99校验源IP,只放行10.10.1.0/24网段;transport input ssh关闭了Telnet明文通道,只保留SSH;exec-timeout 5 0表示用户连续5分钟没有任何操作就自动断开,其中5是分钟数、0是秒数。
注意:
exec-timeout 0 0在等保检查中直接判不符合,现网如果看到这个值,先确认业务影响,再在变更窗口改成5 0。
ACL只限制VTY访问还不够,建议把transport input telnet也关闭。若现网确实需要Telnet,至少配合transport input telnet ssh并加ACL,但等保测评对这种混合开放通常建议整改为SSH。管理员数量多于5人时,可把VTY扩展到0 7,并在access-class里区分两个网段,而不是简单粗暴扩到16条。
2.3 enable口令加密与密码复杂度验证
enable口令是设备进入特权模式的最后一道门,检查表第四条要求“查看是否启用PASSWORD加密功能、查看enable secret的使用”。核查命令组合:
show running-config | include enable show running-config | include service password-encryption show running-config | include security passwords第一句看有没有enable secret,第二句看全局密码混淆开关,第三句看是否配置了最小口令长度。如果输出里同时有enable secret 9 $9$...和service password-encryption,这项通常判定为符合。
Cisco IOS的security passwords min-length 8只强制最小长度,不限制字符类别。检查表“密码符合复杂度要求”这条,设备只能提供一部分证据。真正达到大小写、数字、特殊字符组合约束,需要配合口令管理制度,或者把登录认证指向ACS/TACACS+/Radius,由服务端下发密码策略。这是等保自查里容易被误解的地方:不要因为在设备上找不到复杂度算法就认为不符合,而应把最小长度配置和公司口令管理制度一起作为应答材料。
口令相关核查可以直接用下面这张表做自查底稿:
| 检查项目 | 使用的命令 | 符合条件 |
|---|---|---|
| 系统版本信息 | show version | 型号、版本与资产台账一致 |
| Console口口令 | show running-config | section line console 0 | 有login和password,无明文密码 |
| enable加密 | show running-config | include enable | 使用enable secret,无enable password明文 |
| VTY数量 | show running-config | section line vty | 条目数为5或匹配运维人数 |
| VTY来源限制 | show running-config | section line vty | 有access-class,ACL只放行管理网段 |
| 超时退出 | show running-config | section exec-timeout | 非0 0,建议5 0 |
| 密码复杂度 | show running-config | include passwords | 有最小长度配置,且制度佐证复杂度 |
这张表填的时候,“符合/不符合/加固操作记录”三列一定要留痕。尤其是不符合项,要写清楚实际输出和整改后的命令,否则测评组二次核查时会质疑你的整改有效性。
3. 日志、NTP与路由协议认证:把运行状态变成可追溯证据
等保2.0对审计的核查重点是三条:日志开关开了没有、日志时间准不准、关键交互是不是只发生在可信节点之间。Cisco设备很多logging命令存在,但没指定buffer或服务器,等于没做审计。下面按日志采集、时间同步、路由协议认证三个层面展开,正好对应检查表里的“日志管理”与“路由协议安全”。
3.1 syslog记录与日志要素核查
检查表要求“应对网络设备运行状况、网络流量、用户行为进行日志记录。syslog应包括时间的日期和时间、用户、事件类型”。先取当前日志配置:
show logging show running-config | section loggingshow logging顶部会显示Syslog logging: enabled/disabled和Log Buffer大小。若logging buffered和logging host都没有,平台级日志基本不可查,建议先补buffer:logging buffered 65536 informational。logging host 192.168.10.100是把日志转发到syslog服务器。两者都在时,本地buffer和远程服务器各存一份,设备重启后本地日志丢失,远程还有备份。
日志要素要与show logging的实际输出对照。如果时间戳是*Mar 1 00:00:10.001,说明系统时间没校准到实际时间,测评师会认为日志不能准确反映事件发生时刻。用户行为类日志通常由IOS自身产生,例如配置变更时的%SYS-5-CONFIG_I: Configured from console by admin,这类输出里能看到登录方式和用户名,正好满足“用户、事件类型”的要求。
如果设备配置了AAA服务器,show logging | include CONFIG_I可能显示from 192.168.10.20 by user,用户名可追溯到具体自然人。如果只靠设备本地用户名,也要确保每个管理员以独立账号登录,而不是多人共享一个admin账号,否则审计日志无法定位到人。
3.2 NTP同步与本地时区配置核查
时间不同步,日志再全也只是“到了不知道什么时候”。检查表“开启NTP服务,保证日志功能记录时间的准确性”通常这样落地:
show ntp status show ntp associations show clock符合条件很直接:show ntp status输出clock is synchronized,show clock时间接近当前时间。如果显示clock is unsynchronized,需要先查UDP 123放通状态及NTP服务器地址。配置客户端时,我偏向在管理面ACL里放行NTP流量,而不是在业务接口全局放开。
典型配置:
clock timezone CST 8 ntp server 192.168.10.1 iburstclock timezone CST 8把系统时钟设为东八区,避免日志使用UTC造成8小时偏差;ntp server指定上游时间源,iburst表示在开机时快速连发几个包缩短首次同步时间。内网没有可用NTP源时,可以用边界路由器做ntp master 3,让核心交换机同步它。ntp master 3表示设备自身作为NTP服务器,3是stratum层级,数值越小优先级越高。
如果上游NTP配置了ntp authentication-key,客户端还需要ntp authenticate和ntp trusted-key,这属于认证项,等保检查中是加分项。对多数企业,外层NTP同步链路不开放认证也能通过时间准确性核查,但日志审计要求严格时建议开启。
3.3 路由协议认证:防止伪造邻居与路由欺骗
检查表“启用动态路由协议(RIPV2/OSPF/EIGRP)时,启用路由协议的认证功能”是等保安全区域边界内容。原理上,没有认证的路由更新无法判断来源是否可信,攻击者只要接入链路上的一台设备,就能伪造LSA或路由更新,把流量引到恶意位置。启用认证后,双方共享密钥,不接受未通过校验的报文。
以OSPF为例,在两端的互联接口下配置:
interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.0 ip ospf message-digest-key 1 md5 OSPF-2024-KEY ip ospf authentication message-digestip ospf message-digest-key定义密钥链编号和MD5密钥,ip ospf authentication message-digest指定该接口使用MD5校验。两者必须同时存在,只配了key但不启用认证,不会发送认证字段;两边密钥不一致时邻居关系起不来。
验证命令:
show ip ospf neighbor show ip ospf interface GigabitEthernet0/0 show ip protocolsshow ip ospf neighbor中状态为FULL/ -表示邻接正常;若因为认证失败反复震荡,日志里会出现%OSPF-5-ADJCHG。show ip protocols用于确认OSPF进程下的Area配置,这也是检查表里show ip pro的实际用途。检查表原始命令是缩写的show ip pro,输出内容和show ip protocols一致。
对于RIPv2,接口下使用ip rip authentication mode md5和ip rip authentication key-chain;EIGRP则用ip authentication mode eigrp <AS> md5和ip authentication key-chain eigrp <AS> <name>。命令不同,但核查逻辑一样:有认证就查模式和密钥链两条。
| 检查项 | 核查命令 | 判定条件 |
|---|---|---|
| 日志记录 | show logging | buffered或remote已开启,非全部默认输出 |
| 时间同步 | show ntp status | clock is synchronized |
| OSPF认证 | show running-config | include ip ospf authentication | 每个启OSPF的接口都有authentication和key |
| RIPV2认证 | show running-config | include ip rip authentication | 模式md5且配置key-chain |
| EIGRP认证 | show running-config | include authentication mode eigrp | 模式md5且配置key-chain |
路由协议认证变更会中断邻居关系,生产环境务必在变更窗口内执行,并且一次改一对互连接口,避免全网路由振荡。
4. 访问控制与非必要服务收敛:一张表收掉一半风险
检查表最后的“其他内容”是最容易出不符合项的地方。原因是这些服务大多不是平时运维要用的,很多设备从上线起就保留厂商默认状态,而测评时工程师会逐条核对管理面和协议。收敛思路就一句话:凡是业务不需要的协议、服务、端口,全部关闭;凡是必须保留的管理面,全部加密、ACL、认证三件套。
4.1 登录警告banner与CDP/HTTP关闭
登录警告banner属于安全管理中的警示要求,show running-config | include banner可以看到是否配置了banner motd。banner的作用是让未授权访问者在登录前看到授权边界,内容通常是一句“仅授权人员可登录,所有行为将被记录”。配置示例:
banner motd ^C Unauthorized access prohibited. All activities logged. ^C^C是定界符,不是字符串;检查时要求banner必须出现在用户登录之前的提示阶段。有些设备把banner login和banner motd混用,一般建议配置motd就足够,banner exec留空。
CDP是思科专有协议,默认开启,会把主机名、IOS版本、VLAN、IP地址发给直连设备,等于向接入段广播设备指纹。检查表要求“关闭CDP服务”,常见做法是:
no cdp run执行后show cdp neighbors不再返回设备信息。如果网络监控依赖CDP发现拓扑,可保留cdp run,但在非必要接口下执行no cdp enable逐口关闭。等保测评通常不认可全局开放,建议至少边界设备全局关闭。
HTTP管理面关闭:
no ip http server no ip http secure-serverno ip http server关闭明文HTTP管理;no ip http secure-server关闭HTTPS管理。如果设备需要HTTPS做远端配置,不能全局关闭,就必须限制ACL来源并开启ip http authentication local,同时配置强口令。检查表的核查命令是show run | i http,输出中不应看到ip http server,只能看到no ip http server。
4.2 TCP/UDP Small Services与IP选项的批量收敛
TCP Small Services和UDP Small Services是老版本IOS上默认开启的一组诊断服务,包括chargen、echo、discard等端口。对外开放后会被扫描器发现,并可能参与流量放大攻击。同理,IP Source Route接受源路径选项,ip directed-broadcast会把广播作为定向包转发,两者都是老旧且危险的IP选项。加固配置可以一次性写入:
configure terminal no service tcp-small-servers no service udp-small-servers no ip source-route no ip directed-broadcast no ip bootp server end write memory这段配置里每一个no都对应检查表一个核查项:no service tcp-small-servers关闭TCP小服务,no service udp-small-servers关闭UDP小服务;no ip source-route禁止处理带源路由选项的报文;no ip directed-broadcast禁止转发定向广播;no ip bootp server关闭BOOTP服务,防止设备响应外部启动请求。write memory把配置写入startup-config,否则设备重启后回到旧的running-config,测评师下电验证时会发现配置丢失。
部分IOS新版本默认就没有service tcp-small-servers,此时running-config里不会出现对应配置。不要为了“看起来有加固动作”而硬塞一条no service tcp-small-servers,配置不存在时执行no命令不会报错,但会在配置文件里留下无意义条目。
提示:本次修改涉及的
no ip source-route和no ip directed-broadcast在部分业务场景下会影响组播或特殊转发,修改前先用show ip traffic观察该类报文计数,再决定是否统一关闭。
4.3 VTP密码与交换机扩展核查
检查表最后一项“SWITCH/VTP密码是否设置”虽然写在路由器的表上,但VTP是交换机功能,严格说纯路由器不适用,带交换模块的路由器才会出现。核查命令:
show vtp password show vtp statusshow vtp password查看VTP域口令,如果显示空或明文说明VTP没有启用密码保护;show vtp status确认VTP模式。检查表里写的show vtp pass是show vtp password的缩写,IOS命令只要唯一匹配就能执行,输入show vtp pass通常也可以,但为了报告可读性,我会用完整命令。
如果VTP工作模式是Transparent或Off,VLAN更新不向对等体传播,风险小很多。但运维上仍建议为VTP域配置密码,防止新接入设备误加入同域VTP并同步VLAN数据库。配置:
vtp password YourVtpPasswordVTP密码在当前IOS里以Type 7混淆显示,且所有同域设备必须一致,否则VTP无法正常工作。改VTP密码前要先评估是否为所有交换机设置相同密码,不能只在一台核心设备上孤军作战。
| 服务/协议 | 核查命令 | 符合条件 |
|---|---|---|
| Banner | show running-config | include banner | 有motd,且登入前显示 |
| CDP | show cdp neighbors | 空输出,或全局配置no cdp run |
| HTTP管理 | show running-config | include http | 只有no ip http server/no ip http secure-server |
| TCP小服务 | show running-config | include small-servers | 没有service tcp-small-servers |
| UDP小服务 | show running-config | include small-servers | 没有service udp-small-servers |
| Source Route | show running-config | include source-route | 有no ip source-route |
| Directed Broadcast | show running-config | include directed-broadcast | 有no ip directed-broadcast |
| Bootp | show running-config | include bootp | 有no ip bootp server |
| VTP密码 | show vtp password | 有非空口令且同域一致 |
5. 把等保策略检查表变成自动化基线:从show命令到diff报告
检查表里的“检查步骤/方法”“符合/不符合”其实是一份非常适合自动化的规则集。手动一台台敲命令,一台设备少说20分钟,设备一多,测评组进场前根本复查不完。我更愿意把表里的核查项固化成一个小脚本,每次巡检自动收集命令输出,再按正则做判定,最后留档。这样“加固操作记录”也有据可查,比事后补拍照片更可信。
5.1 用Python+Netmiko生成带快照的自查报告
脚本前先执行pip install netmiko安装依赖,然后用Netmiko连接Cisco IOS设备,执行只读命令,按预期正则输出PASS/FAIL,并写入文本报告:
#!/usr/bin/env python3 import re from datetime import datetime from netmiko import ConnectHandler CHECK_COMMANDS = { "version": "show version", "vty": "show running-config | section line vty", "logging": "show logging", "ntp": "show ntp status", "ospf_auth": "show running-config | include ip ospf authentication", "global_hardening": "show running-config | include no ip source-route|no ip directed-broadcast|no ip bootp server", } EXPECTATIONS = { "version": r"Cisco IOS Software", "vty": r"exec-timeout \d+ \d+", "logging": r"Log Buffer|Syslog logging: enabled", "ntp": r"clock is synchronized", "ospf_auth": r"authentication message-digest", "global_hardening": r"no ip source-route", } def main(): device = { "device_type": "cisco_ios", "ip": "192.168.10.1", "username": "ops_reader", "password": "secret", "secret": "enable_secret", "global_delay_factor": 2, } conn = ConnectHandler(**device) conn.enable() stamp = datetime.now().strftime("%Y%m%d_%H%M%S") with open(f"etc_check_{stamp}.txt", "w", encoding="utf-8") as f: for name, cmd in CHECK_COMMANDS.items(): out = conn.send_command(cmd) f.write(f"===== {name} =====\n{out}\n") ok = bool(re.search(EXPECTATIONS[name], out, re.I)) f.write(f"RESULT: {'PASS' if ok else 'FAIL'}\n\n") conn.disconnect() if __name__ == "__main__": main()global_delay_factor=2针对设备响应慢时增加命令间等待时间,真实设备上遇到大量ACL配置时能降低超时误判。conn.enable()进入特权模式,show running-config需要特权权限,如果只给巡检账号level 1,会直接报权限不足。脚本把命令输出原样落到文件,遇到正则没命中也只是标记FAIL,不会中断,保证一次性把所有检查项跑完。
想要长期跟踪配置漂移,可以把每次生成的etc_check_*.txt纳入版本管理,下次巡检后执行diff -u etc_check_20250701_120000.txt etc_check_20250708_120000.txt,只关注变化行。配置变更走了正式流程,diff里一定包含变更计划中的命令;如果diff里出现没人申请过的命令,基本可以判定为设备被未授权改动,应及时回滚并追日志。
本文还有配套的精品资源,点击获取