防护规则
防护规则
1 脚本编辑
1.1 从日志进行快速处理
选中需要处理的特征值,打开开关 ”快捷加入规则“,选择后点击空白处即可。
1.2 选中特征值

1.3 自动创建规则脚本

当前可以针对一下数据进行识别:
主机
HOST
网址
URL
网站来路(referrer)
REFERER
用户代理(User-Agent)
USER_AGENT
访问方法
METHOD
访问COOKIES
COOKIES
访问BODY
BODY
请求端口
PORT
访客IP
SRC_IP
访客归属国家
COUNTRY
访客归属省份
PROVINCE
访客归属城市
CITY2 界面编辑
当前操作便捷性还不是太方便使用, 推荐使用脚本方式 
3 深度学习引擎
待开发
4 功能简介
防护规则是 SamWaf 的自定义防御能力,允许你针对某个受保护网站编写灵活的拦截逻辑。规则支持两种编辑方式:手工代码编排(脚本,首选) 与 界面编排。页面顶部提示:SamWaf 防御规则,可进行脚本(首选),界面编辑。
5 规则列表
进入“防护规则”页面后,可看到已配置规则的列表。
5.1 工具栏与搜索
- 新建规则:跳转到规则编辑页新增规则。
- 批量删除:勾选多条规则后一次性删除(无选中时不可用)。
- 清空所有:清空当前条件下的全部规则(会弹出二次确认)。
- 规则编排模式:设置自定义规则在检测链中的执行位置(详见 5.3)。
- 下方支持按 网站、规则名、规则编号 搜索,输入后点击 查询。
5.2 列表字段
| 字段 | 说明 |
|---|---|
| 网站 | 该规则生效的受保护站点 |
| 规则名 | 规则的名称 |
| 规则编号 | 规则的唯一编号(系统生成) |
| 规则版本 | 规则的版本号 |
| 规则状态 | 规则开关,已生效 / 已关闭,可在列表直接切换 |
| 更新时间 | 规则最近一次修改时间 |
| 创建时间 | 规则创建时间 |
| 操作 | 编辑、删除 |
5.3 规则编排模式
点击工具栏 规则编排模式,可设置自定义规则在整条检测链中的执行位置,从而决定规则的「放行 / 跳过」动作能跳过哪些检测。设置立即生效,无需重启。
| 模式 | 说明 |
|---|---|
| 默认编排(兼容旧版本) | 自定义规则排在 CC 检测之后。放行动作只能跳过其后的检测(AI/敏感词/OWASP/防盗链/CSRF/上传/验证码)。老用户行为不变。 |
| 规则优先(最新模式,推荐) | 自定义规则提前到黑名单之后、Bot/SQLI/XSS/CC 等之前执行。此时 RF.Allow("CC")、RF.Allow("SQLI") 等才能真正跳过这些前置检测,白名单/放行类规则更灵活。 |
6 规则编辑
点击 新建规则 或某条规则的 编辑 进入规则编辑页。
6.1 基本信息
| 字段 | 说明 |
|---|---|
| 规则名称 | 规则的可读名称 |
| 防护网站 | 选择规则生效的受保护站点 |
| 规则优先级 | salience 优先级数值,数值越大优先级越高 |
| 防护编排方式 | 选择 界面编排 或 手工代码编排 |
| 规则状态 | 规则开关,已生效 / 已关闭 |
6.2 界面编排
通过可视化方式逐条添加条件,无需手写脚本,适合不熟悉脚本语法的用户。
- 点击 新建 增加一个条件。
- 每个条件包含:作用域、判断、值;当判断为函数类(如包含/开头/结尾)时,还会出现 函数判断结果(true / false)。
- 多个条件之间可设置 关系:
并且(&&)/或者(||)。 - 编排过程中下方会实时显示 规则脚本内容 预览。
可选作用域包括:主机(HOST)、URL、网站来路(REFERER)、用户代理(USER_AGENT)、METHOD、访问 COOKIES、访问 BODY、请求端口(PORT)、访客 IP(SRC_IP)、访客归属国家(COUNTRY)、省份(PROVINCE)、城市(CITY),以及函数型:提取请求头某个 Key 的值 GetHeaderValue("HeaderKeyName")、获取 IP 失败次数 GetIPFailureCount(5)、判断是否安全 bot IsSafeBot()。
判断符号包括:等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=),以及函数型:包含(Contains)、开头(HasPrefix)、结尾(HasSuffix)。
6.3 手工代码编排(推荐)
直接编写规则脚本,能力最完整。编辑页右侧提供 系统变量、系统判断符号、系统关系符号 参考表,左侧代码编辑器支持自动补全(输入 . 或按 Ctrl+空格 会弹出字段/函数/动作提示,含中英文解释,无需记忆)。
基础脚本示例:
rule R80798f795d7947419ba6f593708b40d9 "禁止来自中国以外的访客访问" salience 10 {
when
MF.COUNTRY != "中国"
then
RF.Deny();
}提示
then 块里通过动作函数表达命中后的处理(RF.Deny() 拦截 / RF.Allow() 放行 / RF.Log() 仅记录,详见第 7 节)。老规则里的 Retract("Rxxx") 写法仍然兼容,等同于拦截。
常用函数示例(节选自界面内置示例):
MF.GetHeaderValue("Accept").Contains("text/plain") == true判断请求头MF.GetIPFailureCount(5) > 105 分钟内失败超过 10 次RF.IPInRange(MF.SRC_IP, "172.16.0.0", "172.20.255.254") == trueIP 区间判断RF.IPInRanges(MF.SRC_IP, "10.0.0.0/8", ...) == true多网段判断RF.IPInCIDR(MF.SRC_IP, "192.168.1.0/24") == trueCIDR 判断RF.In(MF.METHOD, "GET", "POST") == true取值判断RF.ContainsAnyIgnoreCase(MF.USER_AGENT, "bot", "spider", "crawler") == true字符串包含判断RF.EndsWithAny(MF.URL, ".php", ".asp") == true后缀判断
内置示例浏览器
编辑器下方提供示例浏览器,按四个分类整理了可直接复制或一键应用的规则示例:
- ⚡ 命中动作:拦截 / 放行 / 放行并跳过指定检测 / 完全放行 / 仅记录 各动作的写法。
- 🎯 实战场景:拦截海外访问、扫描器识别、登录暴力破解防护、WordPress 后台探测等常见场景。
- 🔗 组合条件:多条件
&&/||、salience 优先级配合等。 - 🧰 函数大全:每个规则函数(IPInRange / ContainsAny / EndsWithAny 等)的用法。
每个示例支持三种查看方式(卡片 / 表格 / 详解),点击 复制 复制脚本,点击 应用 直接填入编辑器(会自动把示例规则名替换为当前规则编号)。
6.4 测试规则
编辑页底部点击 测试规则,可在不影响线上的情况下模拟一次请求来验证规则是否命中。可填写:模拟 IP、模拟 Host、模拟 URL、模拟方法、模拟 User-Agent、模拟 Referer、模拟 Header、模拟 Cookies、模拟 Body。测试结果会显示 规则匹配(会被拦截) 或 规则不匹配(不会被拦截),并展示:生效动作(拦截/放行/仅记录)、命中的规则及其动作与跳过的检测模块、解析出的归属地(国家/省份/城市)。保存前点测试即可确认规则真实的生效动作。
提示
推荐从 日志详情 里一键选择特征值自动生成防御脚本(见本页第 1 节),比手写更快更准确。
7 命中动作(拦截 / 放行 / 仅记录)
规则命中后的处理动作,在手工代码编排的 then 块里用动作函数表达,或在界面编排的 命中动作 下拉中选择:
| 动作 | 脚本写法 | 说明 |
|---|---|---|
| 拦截 | RF.Deny(); | 命中即阻止请求并返回拦截页(默认动作,不写动作时等同拦截) |
| 放行 | RF.Allow(); | 命中后不被自定义规则拦截,但后续检测(SQLI/XSS/CC 等)仍会执行 |
| 放行并跳过指定检测 | RF.Allow("CC","AI"); | 放行并跳过括号内列出的检测模块 |
| 完全放行 | RF.AllowAll(); | 放行并跳过后续所有检测,直通后端 |
| 仅记录 | RF.Log(); | 命中只写日志、不拦截,常用于新规则灰度观察 |
界面编排模式下,当动作选择 放行 时会出现 跳过检测模块 多选,可选:全部、爬虫检测、SQL注入、XSS、扫描工具、远程命令执行、目录穿越、CC防护、AI检测、敏感词、OWASP、防盗链、CSRF、文件上传检测、验证码。选择「全部」等价于完全放行。
7.1 规则跳过(RF.Allow 可跳过的模块)
特定情况下我们想跳过某个内置检测,可以使用最新的 RF.Allow 来实现。
RF.Allow([模块...])| 模块名 | 说明 |
|---|---|
| BOT | 爬虫 / 机器人检测,识别自动化 UA、爬虫特征 |
| SQLI | SQL 注入检测(libinjection + 规则) |
| XSS | 跨站脚本(XSS)检测 |
| SCAN | 扫描器 / 漏扫工具指纹检测(sqlmap、nmap、awvs 等) |
| RCE | 远程命令 / 代码执行检测 |
| DIR | 目录穿越 / 路径遍历(../ 逃逸)检测 |
| CC | CC 攻击防护(频率限制 / 高频访问拦截) |
| AI | AI 智能异常请求检测(抓规则漏网的异常流量) |
| SENSITIVE | 敏感词 / 敏感信息检测 |
| OWASP | OWASP CRS 规则集(Coraza)检测 |
| ANTILEECH | 防盗链(Referer 校验,防资源被外站引用) |
| CSRF | 跨站请求伪造(CSRF)防护 |
| UPLOAD | 文件上传内容检测(multipart 上传的扩展名 / Webshell / 类型 / 大小) |
| CAPTCHA | 人机验证码校验 |
| ALL | 跳过以上全部检测,等价于 RF.AllowAll() |
用法说明:
- 模块名不区分大小写,
RF.Allow("cc")与RF.Allow("CC")等效。 - 可一次跳过多个模块,用逗号分隔:
RF.Allow("SQLI","XSS","CC"); - 不带参数的
RF.Allow()只表示「不被自定义规则拦截」,不跳过任何内置检测。 - 填写白名单以外的模块名会在保存/校验规则时报错。
示例:内网 IP 访问接口时跳过 CC 与 AI 检测
rule Rdemo_skip_cc_ai "内网IP跳过CC和AI检测" salience 100 {
when
RF.IPInCIDR(MF.SRC_IP, "192.168.1.0/24") == true
then
RF.Allow("CC","AI");
}注意
跳过检测模块只对「排在自定义规则之后」的检测生效。默认编排下规则排在 CC 之后,只能跳过 AI/敏感词/OWASP/防盗链/CSRF/上传/验证码;要跳过 Bot/SQLI/XSS/CC 等前置检测,需在 规则编排模式 中设为「规则优先」(见 5.3)。
多条规则同时命中且动作冲突时,salience 高者优先;salience 相同时按 拦截 > 放行 > 仅记录 取生效动作。
8 AI 生成规则与 AI 参数设置
在手工代码编排页顶部提供 AI 生成规则 面板:用一句话描述你想要的防护(例如「拦截非中国大陆 IP 访问 /admin 后台」),点击 生成规则,SamWaf 会调用你配置的 AI 生成规则脚本,服务端自动校验规则是否合法(不合法会自动修复并重试),校验通过后可一键 应用 到编辑器。
- AI 参数设置(面板右上角齿轮图标):配置 AI 接口,字段为 接口地址、模型名称、密钥(Token)。出于安全,密钥不会回显,留空表示保留原密钥。弹窗内内置常见 AI 服务商(DeepSeek、OpenAI、Kimi、智谱、通义千问、硅基流动、OpenRouter、Groq、Ollama 等)的接口地址与代表模型,点击即可一键填入;密钥需到对应服务商控制台自行申请。
- 复制 AI 提示词:若不想在本地配置 AI,可点击复制一段提示词,粘贴到任意外部 AI(ChatGPT / Claude / DeepSeek 等),在末尾填上网站信息与防护意图,让它生成规则文本后再粘贴回本页。
提示
AI 参数(接口地址 / 模型 / 密钥)也可在 系统配置 页配置对应的 gpt_url / gpt_model / gpt_token,与此处等价、实时同步。
提示
浏览器的请求超时可在右上角 系统设置 → 常规设置 里调整(仅当前浏览器生效)。AI 生成等长耗时请求会自动使用更长的超时,不受该值限制。
