关于 alibabacloud-cfw-acl-diagnosis
这是用于 Alibaba Cloud Cloud Firewall ACL 规则排障的只读技能,面向需要核实防火墙规则和流量表现的运维人员。它按防火墙类型检查规则、资产状态及流量日志,并限制诊断结论必须依据实际 CLI 查询结果。
主要功能
- 01只读 ACL 规则排查
- 02支持 Internet、NAT 和 VPC 防火墙
- 03依序核验规则、资产与启用状态
- 04条件满足时查询流量日志
- 05基于 CLI 结果生成诊断报告
适用场景
- 01调查规则未生效或流量被阻断
- 02核对受保护资产与规则匹配情况
- 03检查流量日志中的允许或拒绝结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-cfw-acl-diagnosis安装后在 Claude Code 中输入/alibabacloud-cfw-acl-diagnosis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/cfw_acl_knowledge.mdcli_commands.mdcli_traps.mdconfiguration_guide.mddiagnosis.mdexecution_standards.mdram-policies.mdsecurity_rules.md详细介绍
云防火墙 ACL 规则诊断(只读)
⚠️ 只读限制(最高优先级)
整个工作流中严格禁止:
- ❌ 永远不要执行 Create/Update/Delete API 调用或写入 CLI 命令
- ❌ 永远不要提供包含具体参数值、可执行的配置命令
- ❌ 永远不要在任何 CLI 命令中使用
--profile参数 - ❌ 永远不要运行
aliyun configure get或aliyun configure list - ❌ 永远不要伪造 CLI 输出——只能使用真实的 API 响应
- ❌ 至少有一条 CLI 查询成功之前,不要输出诊断报告
- ❌ 不要引用任何记忆、经验或外部知识——只能使用此 SKILL.md 和 CLI 输出
- ❌ 永远不要以任何方式创建文件——不要使用 write_file、create_file、Bash 重定向(
>、>>、tee)或任何其他文件写入方式
输出前硬性拦截自检(生成任何回复之前必须执行):
撰写任何回复之前,请在内部核实:我是否调用过 write_file、create_file 或任何 Bash 重定向?如果是 → 立即中止文件输出,并直接在对话中以 Markdown 文本形式打印内容。违反此规则将导致任务立即失败。
所有诊断报告都必须以以下内容开头:
⚠️ Disclaimer: This tool is a read-only diagnostic assistant. It only provides analysis and configuration suggestions, and does NOT perform any configuration changes.
仅允许以下查询:aliyun cloudfw describe-* | aliyun sls get-logs-v2 | aliyun actiontrail lookup-events
完整的禁止事项列表请参阅 references/security_rules.md。
触发条件与服务识别
意图分类(第一步——先确定路径,再执行其他操作)
| 用户意图 | 关键词 | 操作 |
|---|---|---|
| 配置查询 | “如何配置” / “配置步骤” / “如何设置” / “规则编写” / “配置指南” | → 配置路径:阅读 references/configuration_guide.md,直接在对话中输出步骤。不要运行 CLI 命令,不要查询防火墙。 |
| 诊断 / 故障排查 | “无法工作” / “无效果” / “已阻止” / “HitTimes=0” / “流量日志” / “排查” | → 诊断路径:立即根据已提供的信息开始步骤 0。不要等待更多输入。 |
| “安全组” | — | 不属于此技能(使用 aliyun ecs 命令) |
| 未注明具体类型的“防火墙” | — | 询问:是云防火墙还是安全组? |
配置路径输出规则:直接在对话中以文本形式输出配置步骤。内容请参阅 references/configuration_guide.md。不要运行任何 CLI 命令。
可观测性
此技能执行的所有阿里云服务调用都必须使用以下 User-Agent(UA)模板和会话 ID 规则,以便追踪每个诊断工作流。
User-Agent 模板
AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}
- 在运行时将
{{SESSION_ID}}替换为真实的会话标识符。 - 在文档和命令示例中必须保留占位符形式。
会话 ID 生成规则
- 在每个诊断工作流开始时,生成一个唯一的会话标识符。
- 格式:小写 UUIDv4(例如,
a1b2c3d4-e5f6-7890-abcd-ef1234567890)。 - 在该工作流中的所有阿里云服务 CLI 命令中使用同一个会话 ID。
- 不要在不同的工作流或不同的用户对话中重复使用会话 ID。
适用范围规则
- 阿里云服务 API 调用(例如,
aliyun cloudfw describe-*、aliyun sls get-logs-v2、aliyun actiontrail lookup-events)必须包含--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}"。 - 本地/系统命令,例如
which aliyun、aliyun version、aliyun plugin list和aliyun plugin update,不会调用阿里云服务 API,因此不得添加--user-agent。
设置
前提条件检查
which aliyun && aliyun version
aliyun plugin list # Confirm aliyun-cli-cloudfw installed
缺少插件时安装(执行前须获得用户明确确认):aliyun plugin install cloudfw
凭证:环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID / ALIBABA_CLOUD_ACCESS_KEY_SECRET。请参阅 references/ram-policies.md。
区域:始终使用 cn-hangzhou(Cloud Firewall 是一项全球服务,切勿询问用户区域)。
防火墙类型识别
| 场景 | 防火墙类型 | 关键参数 |
|---|---|---|
| 公网 IP、EIP、互联网入站/出站 | 互联网防火墙 | 无 FirewallId(全局) |
| VPC 间互访、CEN、专线连接 | VPC 边界防火墙 | VpcFirewallId |
| NAT 网关、SNAT/DNAT | NAT 边界防火墙 | NatFirewallId |
主要区别:
- 互联网防火墙:必须提供
--Direction <in|out>;资产级别的EngineMode(strict/loose) - NAT 防火墙:无
Direction;防火墙级别的StrictMode(0=宽松,1=严格);支持域名规则 - VPC 防火墙:无
Direction;无严格模式;无域名规则(仅第 4 层)
受保护资产识别:
- 入站(
in)→ 受保护资产 = 目标 - 出站(
out)→ 受保护资产 = 来源(公网 IP,而非内部 CIDR)
诊断流程(必须按顺序执行)
流程:Step 0 → Step 1 → Step 2 (3 checks) → [ANY FAIL: output conclusion, STOP] → Step 3 → Step 4 → Report
🔴 Step 2 完成前严禁:提及引擎模式、给出结论、建议解决方案或跳过任何 CLI 查询。
Step 0:识别受保护资产
从用户消息中提取——不要重复询问用户已提供的信息:
- 防火墙类型、方向(in/out)、目标 IP/域名
- 应用上述受保护资产逻辑
Step 1:查询规则(必须执行 CLI——不得编造)
| 防火墙 | 命令 |
|---|---|
| 互联网 | aliyun cloudfw describe-control-policy --Direction <in|out> --CurrentPage 1 --PageSize 50 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}" |
| NAT | aliyun cloudfw describe-nat-firewall-control-policy --NatFirewallId <ID> --CurrentPage 1 --PageSize 50 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}" |
| VPC | aliyun cloudfw describe-vpc-firewall-control-policy --VpcFirewallId <ID> --CurrentPage 1 --PageSize 50 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}" |
记录:Source、Destination、DestinationType、AclAction、Order、Release。
自检:如果尚未执行 CLI 命令,立即停止并执行,然后再继续。
第 2 步:预检查(必须按顺序完成全部 3 项,不得跳过或猜测)
检查 2.1:资产/防火墙状态
- Internet FW:
aliyun cloudfw describe-asset-list --CurrentPage 1 --PageSize 50 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}"ProtectStatus=open✅ | 其他值 ❌(规则不起作用最常见的原因)- 记录
EngineMode:strict/loose
- NAT FW:
aliyun cloudfw describe-nat-firewall-list --PageNo 1 --PageSize 50 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}"- 检查防火墙是否存在且状态正常;记录
StrictMode:0=宽松 /1=严格
- 检查防火墙是否存在且状态正常;记录
- VPC FW:
aliyun cloudfw describe-vpc-firewall-list --CurrentPage 1 --PageSize 50 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}"- 检查防火墙是否存在且状态正常
检查 2.2:策略与资产匹配
- 源/目标是否涵盖受保护资产;方向是否正确
- 如果用户的目标域名 ≠ 规则的域名 → 配置不匹配 — 必须明确指出
检查 2.3:规则已启用
Release=true✅ |Release=false❌
🔴 强制停止点 — 第 2 步分支关卡 — 必须停止
如果任一检查结果为失败:
- 立即停止 — 不得执行任何第 3 步或第 4 步 CLI 命令(如 describe-traffic-log 等)
- 禁止:此后调用任何其他 CLI 命令
- 直接跳转到“输出格式”部分并立即生成最终报告
- 检查失败后仍继续执行第 3/4 步属于严重违规,会导致任务失败
如果所有检查均通过 → 继续执行第 3 步。
权限被拒处理:记录受阻的检查,标记为 [Blocked - Permission Denied],继续其余检查(不要执行第 3/4 步)。在最终报告中列出所有受阻的检查。
第 3 步:查询流量日志(仅当第 2 步全部通过时)
# Internet FW
aliyun cloudfw describe-traffic-log --FirewallType InternetFirewall --Direction <in|out> \
--SourceCode yundun [--StartTime <unix>] [--EndTime <unix>] [--SrcIP <ip>] [--DstIP <ip>] \
--CurrentPage 1 --PageSize 10 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}"
# NAT FW
aliyun cloudfw describe-traffic-log --FirewallType NatFirewall --SourceCode yundun \
[--StartTime <unix>] [--EndTime <unix>] \
--CurrentPage 1 --PageSize 10 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-cfw-acl-diagnosis/{{SESSION_ID}}"
重要:必须使用 SourceCode=yundun。不要设置 FlowType(会导致无结果)。RuleResult:0=允许,2=拒绝。
用户提供时间/IP 参数时,必须将其包含在查询中;不要先查询全部结果再手动筛选。
第 4 步:详细诊断(仅当第 2 步全部通过时)
Internet FW:
EngineMode=loose+ 域名规则 → 域名未匹配 → 切换到严格模式strict+ 域名规则 → 使用curl/wget测试,不要使用telnet(telnet 无法触发域名识别)- 日志
AclPreState=app_unknown→ L7 预匹配,应用尚未识别
NAT FW:
StrictMode=0+ 域名规则 → 域名未匹配(可能是根本原因)- 确认 SNAT 后的实际源 IP;与 Internet FW 一样,适用相同的 L7 规则
完整诊断框架、L7 预匹配机制和故障排查清单请参见 references/diagnosis.md。
输出格式
严格格式要求 — 必须在写出任何内容之前阅读:
- 输出必须与下方模板完全一致 — 不得添加额外标题、问候语或背景段落
- 输出总计不得超过 30 行。如果内容超过 30 行,请自动截断:
- 诊断结论:最多 1 行
- 预检查结果表:不超过 5 行
- 修复建议:最多 3 个项目符号
- 验证方法:1 行
- 删除超出这些限制的所有解释性文字
- ❌ 永远不要将输出写入任何文件 — 直接在对话中以 Markdown 文本输出
⚠️ Disclaimer: This tool is a read-only diagnostic assistant. It only provides analysis and configuration suggestions, and does NOT perform any configuration changes.
## Diagnosis Conclusion
[One-sentence root cause, max 50 characters]
## Pre-check Results (Step 2)
| Check Item | Actual CLI Value | Status |
|-----------|------------------|--------|
| ProtectStatus | [from describe-asset-list] | PASS/FAIL |
| EngineMode / StrictMode | [value] | loose/strict |
| Traffic Direction | [in/out] | PASS/FAIL |
| Release | [true/false] | PASS/FAIL |
| Policy Match | [analysis] | PASS/FAIL |
## Remediation Suggestions
[Console operation steps, one per line, max 3 items]
Verification Method: [one-line description]
规则:
- ❌ 永远不要将输出写入任何文件 — 所有结果都必须直接在对话中以文本形式输出
- 报告中的每个 UUID/IP/值都必须从 CLI 输出中复制粘贴(不得凭记忆输入)
- 对发现进行分类:
[Verified](CLI 已确认)/[Unverified](理论推断)/[Blocked](权限被拒) - 如果
TotalCount > PageSize,在作出“所有资产”相关总结前查询所有分页结果
参考文件
| 文件 | 用途 |
|---|---|
references/cli_commands.md | 完整的 CLI 命令示例及关键响应字段 |
references/cli_traps.md | 常见的 CLI 陷阱和错误模式 |
references/diagnosis.md | 完整的诊断框架、L7 预匹配和检查清单 |
references/configuration_guide.md | 控制台配置指南(纯文本,供用户使用) |
references/security_rules.md | 完整的安全禁令和输出检查清单 |
references/ram-policies.md | 所需的 RAM 权限 |
references/cfw_acl_knowledge.md | ACL 知识库和常见问题 |