山石防火墙CLI排错实战:策略/NAT/Debug三类高频问题诊断手册

发布时间:2026/10/6 22:07:51
山石防火墙CLI排错实战:策略/NAT/Debug三类高频问题诊断手册 简介本资源是山石网科Hillstone官方发布的《StoneOS 命令行用户手册全册》PDF文档面向网络安全工程师、防火墙运维人员及安全设备初学者系统讲解StoneOS 5.5R2版本的CLI操作体系与配置逻辑覆盖命令模式切换、提示符识别、缩写与自动补全机制、错误提示解析等核心实操要点。资源为单文件PDF格式共1个文件大小22.87MB内容结构完整含详细手册约定如『』标注WebUI控件、 标识界面元素、CLI基础介绍、执行/全局/子模块三级配置模式说明及目录索引便于快速定位命令语法与上下文关系。已有2382人学习下载读者可直接获取厂商原厂级CLI操作规范、典型配置路径与排错依据尤其适用于现场调试、命令行脚本编写及认证备考中的指令级能力强化。1. 山石防火墙用户手册全册不是PDF翻页工具而是你排查策略失效、定位登录异常、验证NAT规则是否生效的「现场诊断说明书」很多人拿到《山石防火墙用户手册全册》第一反应是——“哦又一本厚PDF”顺手丢进收藏夹吃灰。但真实场景里它其实是你在凌晨三点面对业务中断时唯一能快速查到show address-book为什么返回空、test security-policy-match为何始终不命中、debug flow日志里drop reason: no route到底卡在哪条路由上的可执行线索集。这不是给售前背PPT用的文档汇编而是给一线运维、安全工程师、等保整改实施人员准备的「命令行黑匣子解码器」。尤其当你刚接手一台运行 StoneOS 5.5R12 的 SG6000-X8500发现 Web 界面策略列表和 CLIget security-policy输出不一致或者想确认地址簿里的Internal-Server-Group是否真被某条策略引用——这时候翻手册比抓包更直接。本篇不讲概念定义只拆解手册里哪些章节必须打印出来贴在显示器边框上哪些 CLI 命令组合能三分钟定位 NAT 失败根源以及为什么你ping不通内网服务器手册第 372 页的flow debug开关顺序错了就永远看不到真实丢包点。2. 从手册结构反推操作路径为什么「CLI 命令索引」比「功能概述」重要十倍山石防火墙用户手册全册以 StoneOS 5.5R12 版本为基准共 1286 页但真正决定你能否在 5 分钟内解决问题的只有其中 3 类内容命令语法定义表、调试开关启用流程、配置上下文依赖说明。其他如产品架构图、合规条款、硬件规格统统可跳过。下面按实战优先级重排手册使用动线。2.1 先锁定你的 StoneOS 版本号get system info是所有操作的起点很多故障源于版本差异。手册中 CLI 命令行为在 5.0R10、5.5R8、5.5R12 间存在关键变化例如set security-policy在 R8 后新增source-zone必填项。务必先确认当前系统版本adminSG6000-X8500# get system info System Information: Model: SG6000-X8500 Serial Number: SHFWX8500XXXXXX Software Version: StoneOS 5.5R12 Build Date: 2023-11-28 14:22:03 System Uptime: 12 days, 3 hours, 47 minutes提示手册第 45 页明确标注「本手册适用于 StoneOS 5.5R10 及以上版本」若你看到get system info返回5.0R9请立即停止后续操作——R9 的debug flow命令参数与手册第 721 页描述完全不兼容强行执行会触发 CPU 占用率飙升至 99%。2.2 直奔「CLI 命令索引」附录手册 P1198–P1256用关键词倒查命令全貌新手常犯错误在 Web 界面配完策略后用show security-policy查看却只看到默认策略。原因手册 P1205 明确写show security-policy默认仅显示active状态策略而 Web 界面保存后策略实际处于pending状态需执行commit才生效。正确链路是adminSG6000-X8500# show security-policy | include pending # 无输出 → 说明未 commit adminSG6000-X8500# commit Commit successful. adminSG6000-X8500# show security-policy | include policy-id policy-id: 1001, name: Allow-Web-Access, status: active这里的关键是手册索引页对每个命令都标注了「生效前提」和「输出字段含义」。比如show address-book条目下注明“仅显示已绑定至策略或 NAT 规则的地址簿条目独立创建未引用的条目不会出现在此输出中”。这解释了为什么你明明在 Web 界面创建了DMZ-Servers地址簿show address-book却查不到——它还没被任何策略引用。2.3 调试类命令必须按「三层开关」启用手册 P712 的隐藏逻辑手册 P712 的debug flow章节常被误读为“输入命令就能出日志”。实际它依赖三个独立开关协同开关层级命令示例手册位置作用全局调试总开关set system debug enableP712 第 2 段控制整个设备 debug 功能是否允许开启流表匹配开关debug flow enableP712 表 7-1启用 flow 匹配过程跟踪不开启此步debug flow packet无输出具体协议/端口过滤debug flow packet destination-port 443P713 表 7-2缩小日志范围避免刷屏漏掉任一环debug flow packet都只会静默返回空行。这是手册里最易被忽略的「隐式依赖链」也是你反复执行命令却看不到日志的根本原因。3. 安全策略排错当test security-policy-match返回no match手册第 341 页告诉你该查哪 5 个地方test security-policy-match是策略排错第一工具但返回no match并不等于策略没配——它只说明「当前测试参数未命中任何 active 策略」。手册第 341 页的「策略匹配检查清单」列出了 5 个必须逐项验证的维度缺一不可3.1 源/目的 IP 必须落在地址簿有效范围内手册 P342 表 5-3地址簿支持 CIDR、FQDN、地理区域等多种类型但test命令只接受 IP 地址字面量。常见错误地址簿中配置的是www.example.comFQDN而测试时输入test security-policy-match source-ip 192.168.10.5 destination-ip 203.208.60.1——此时即使 DNS 解析成功策略匹配引擎也不会自动将 FQDN 解析结果代入计算。解决方法先用get address-book entry Web-Servers查看该条目实际解析出的 IP 列表再用这些 IP 进行测试。3.2 区域Zone名称大小写敏感且不可缩写手册 P343 注意栏手册 P343 明确警告“Zone 名称区分大小写且不支持trust→t类似缩写”。若策略中源区域设为Trust首字母大写而测试命令写成source-zone trust匹配必然失败。验证方式adminSG6000-X8500# get zone Available zones: Trust Untrust DMZ Management注意get zone输出即为合法 zone 名复制粘贴最安全。3.3 应用识别App-ID需显式指定不能依赖默认手册 P344 第 3 段当策略启用应用识别时test命令必须携带-application参数否则按any处理。例如策略要求application: ssl测试时若省略该参数# ❌ 错误未指定 application按 any 匹配 adminSG6000-X8500# test security-policy-match source-ip 10.1.1.10 destination-ip 172.16.1.20 destination-port 443 # ✅ 正确显式声明应用 adminSG6000-X8500# test security-policy-match source-ip 10.1.1.10 destination-ip 172.16.1.20 destination-port 443 -application ssl Matched policy: Allow-SSL-to-DB手册 P344 表 5-5 列出了所有内置应用标识符ssl、http、dns等均为小写且不支持通配符。3.4 时间对象Time-Range必须处于激活时段手册 P345 图 5-12策略若绑定时间对象Work-Hours周一至周五 09:00–18:00而你在周六 15:00 执行test结果必为no match。手册 P345 强调“时间对象状态由设备系统时间驱动与客户端本地时间无关”。验证当前时间对象是否激活adminSG6000-X8500# get time-range Work-Hours Name: Work-Hours Status: active # ← 关键字段若为 inactive则当前不生效 Valid Periods: Mon-Fri 09:00-18:003.5 策略状态必须为active手册 P346 第 1 段再次强调show security-policy中status: pending的策略test命令完全不可见。手册 P346 明确指出“test security-policy-match仅扫描内存中已提交committed且状态为 active 的策略条目”。4. NAT 规则验证为什么show nat-policy看不到你刚配的 SNAT手册第 528 页的「策略继承链」是答案SNAT源地址转换配置后ping不通外网show nat-policy却查不到规则这不是命令失效而是手册第 528 页揭示的「NAT 策略继承机制」在起作用山石防火墙的 NAT 规则不独立存在它必须依附于一条已存在的安全策略Security Policy才能生效。这是区别于传统 Cisco ASA 或 Palo Alto 的核心设计差异。4.1 NAT 规则本质是安全策略的「扩展属性」手册 P529 图 8-2手册 P529 的架构图清晰显示NAT 配置界面中所有选项源地址转换、目的地址转换、端口转换最终都作为set security-policy命令的子参数写入。例如 Web 界面配置的 SNAT源区域Trust目的区域Untrust源地址10.1.1.0/24转换为interface ip对应 CLI 实际生成set security-policy from Trust to Untrust source-address Internal-Network destination-address any service any action permit set security-policy from Trust to Untrust source-address Internal-Network destination-address any service any action permit nat source逻辑说明第二行nat source是附加指令它不创建新策略而是修改第一条策略的行为。因此show nat-policy命令手册 P530本身不显示独立 NAT 条目它只列出「启用了 NAT 的安全策略 ID」。正确查看方式是adminSG6000-X8500# show security-policy id 1001 policy-id: 1001, name: Trust-to-Untrust, status: active from zone: Trust to zone: Untrust source-address: Internal-Network destination-address: any service: any action: permit nat: source # ← 关键此处出现 nat 字样证明该策略启用了 SNAT4.2 SNAT 生效的 3 个硬性前提手册 P531 表 8-1手册 P531 用表格形式列出 SNAT 生效的全部条件缺一不可前提检查命令不满足现象手册页码策略方向与流量方向严格一致show security-policy id id确认from/tozone流量从 Untrust 进 Trust但策略是from Trust to Untrust→ 不触发 SNATP531 第 1 行源地址必须匹配策略中的source-addressget address-book entry Internal-Network确认 IP 范围客户端 IP 为10.1.2.5但地址簿定义为10.1.1.0/24→ 不匹配P531 第 2 行策略动作必须为permitshow security-policy id id查action字段动作为deny→ 即使配了nat source也不执行转换P531 第 3 行4.3 验证 SNAT 是否真正执行debug flow的精准过滤技巧手册 P725单纯看策略配置无法确认 SNAT 是否执行。手册 P725 提供终极验证法用debug flow捕获原始包和转换后包的对比。# 步骤1启用全局 debug adminSG6000-X8500# set system debug enable # 步骤2启用 flow debug关键 adminSG6000-X8500# debug flow enable # 步骤3过滤特定会话避免日志爆炸 adminSG6000-X8500# debug flow packet source-ip 10.1.1.100 destination-ip 203.208.60.1 protocol tcp # 步骤4从客户端发起连接如 curl https://www.google.com # 步骤5查看日志中关键字段 # - pre-nat: src10.1.1.100:52345 → 证明原始源 IP # - post-nat: src192.168.1.100:52345 → 证明 SNAT 已生效192.168.1.100 为接口 IP参数说明debug flow packet后的source-ip和destination-ip必须是实际通信的两端 IP不能是地址簿名称。手册 P725 强调“过滤条件越精确日志越聚焦CPU 占用越低”。5. 避坑5 条血泪经验来自手册第 120 页「注意事项」、第 387 页「限制说明」和第 1123 页「已知问题」这些坑不会导致设备宕机但会让你在客户现场反复折腾两小时最后发现是手册里白纸黑字写着的限制。以下每条均按「现象 → 原因 → 解决」结构还原真实排错现场。5.1 现象show log traffic查不到最近 5 分钟的会话日志原因手册第 120 页「日志存储限制」明确说明“Traffic 日志默认仅缓存最近 1000 条且不支持滚动覆盖超出后新日志直接丢弃不告警”。你看到的“空”不是没记录而是被挤掉了。解决立即执行clear log traffic清空缓冲区再复现问题或永久方案set log traffic enable后配置set log traffic server 10.10.10.10将日志实时转发至外部 syslog 服务器手册 P123。5.2 现象地址簿中添加 FQDNapi.example.comshow address-book显示status: resolving但 10 分钟后仍不更新 IP原因手册第 387 页「DNS 解析限制」规定“FQDN 条目默认每 30 分钟尝试解析一次且仅当有匹配的安全策略触发流量时才启动解析”。没有流量DNS 查询根本不会发出。解决手动触发解析——test dns resolve hostname api.example.com手册 P388或临时添加一条测试策略放行10.1.1.100 → api.example.com让流量经过触发解析。5.3 现象执行save命令后设备 Web 界面仍提示“配置未保存”get system config-status返回modified: yes原因手册第 1123 页「已知问题5.5R12」列出“当配置中包含中文注释如# 内网服务器组时save命令无法正确标记配置为已保存状态”。解决删除所有中文注释或改用英文# Internal Server Group再执行save。这是 R12 特定 bugR13 已修复。5.4 现象debug flow日志中大量出现drop reason: no route但get route显示路由表完整原因手册第 728 页「Flow Debug 限制」指出“debug flow仅跟踪 ingress 接口收到的包不跟踪路由查找失败后的处理no route表示设备认为该包应发往某接口但该接口未配置 IP 或物理 down”。解决先查接口状态get interface确认目标出接口如untrust的link-status: up且ip-address: 203.208.60.100/24已配置再查get route | include 203.208.60.0确认直连路由存在。5.5 现象通过set system admin-user修改 admin 密码后Web 登录失败CLI 却可用原因手册第 120 页「管理员账户说明」强调“admin是预置超级用户其密码修改必须通过set system admin-password命令而非set system admin-user后者用于创建普通管理员”。用错命令会导致 admin 密码未更新。解决立即执行set system admin-password newpass123手册 P121然后save。切记admin-user≠admin。6. 进阶技巧把手册变成你的「CLI 自动补全引擎」——用 Python 脚本解析 PDF 提取命令模板手册 PDF 本身不支持命令行补全但它的结构高度规范所有 CLI 命令均以set/get/show/debug开头后跟固定层级的关键词如set security-policy from zone to zone。我写了一个 83 行 Python 脚本从手册 PDF 中提取全部命令语法模板生成 Zsh 补全函数现在敲show secTab就自动补全security-policy、security-zone、security-profile——不用再翻 PDF。6.1 脚本核心逻辑PDF 文本分层提取基于手册 P1198–P1256 索引页手册索引页P1198–P1256采用标准表格格式第一列为命令第二列为功能描述第三列为所在章节。脚本利用pypdf提取该区域文本正则匹配命令行模式# extract_commands.py import re from pypdf import PdfReader def extract_cli_commands(pdf_path): reader PdfReader(pdf_path) index_page reader.pages[1197] # P1198 对应索引页0-based text index_page.extract_text() # 匹配命令行以 set/get/show/debug 开头后跟非换行字符 pattern r^(set|get|show|debug)\s[^\n] commands re.findall(pattern, text, re.MULTILINE) # 去重并标准化移除多余空格统一小写 cleaned set([re.sub(r\s, , cmd).strip().lower() for cmd in commands]) return sorted(cleaned) if __name__ __main__: cmds extract_cli_commands(StoneOS_User_Manual_5.5R12.pdf) for cmd in cmds[:10]: # 打印前10条验证 print(cmd)参数说明re.MULTILINE确保^匹配每行开头re.sub(r\s, , cmd)将多个空格压缩为单空格避免set security-policy这类格式干扰补全。6.2 生成 Zsh 补全函数实测兼容 macOS Monterey 及 Ubuntu 22.04脚本输出命令列表后用 Jinja2 模板生成 Zsh 函数# 生成的 ~/.zshrc 补全片段 _stoneos_cli() { local -a commands commands( set security-policy from TRUST to UNTRUST get address-book entry show nat-policy debug flow enable # ... 共 217 条 ) _describe command commands } compdef _stoneos_cli stoneos-cli落地效果在终端输入stoneos-cli show seTab立即补全为show security-policy输入show security-policy iTab补全为id。无需记忆show后接什么手册内容已变成你的肌肉记忆。6.3 为什么这个技巧比「背手册」高效十倍零延迟响应补全在敲击 Tab 时毫秒级返回比翻 PDF 快 20 秒/次防错机制show securit-policy这类拼写错误会被直接拦截补全只提供合法命令版本同步每次手册更新重跑脚本即可获得新命令无需人工整理。我坚持这个习惯三年经手 47 台 SG6000 设备没再因为show后该接address-book还是address-group卡住。手册不是用来读完的是用来拆解、喂给工具、最终长进你手指里的。希望帮到你。本文还有配套的精品资源点击获取