Cloudflare自定义安全规则配置

介绍

前言:如果你有网站或服务配置在cloudflare,一定免不了被扫描和恶意攻击,而配置Cloudflare的自定义安全规则可避免这些问题,

进入https://dash.cloudflare.com 官网,点击安全规则,选择创建规则,选择自定义规则,然后点击编辑表达式

1779538516785

下面是 3 套可直接复制粘贴配置 的 Cloudflare 自定义安全规则表达式


1:纯静态站(推荐动作:Block)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
(
http.request.method ne "GET"
and http.request.method ne "HEAD"
)
or
(
lower(http.request.uri.path) in {
"/.env" "/.env.local" "/.env.dev" "/.env.prod" "/.env.production"
"/.git/config" "/.git/HEAD" "/.git/index"
"/.svn/entries" "/.hg/store"
"/.ds_store" "/.htaccess" "/.htpasswd"
"/composer.json" "/composer.lock"
"/package.json" "/package-lock.json" "/yarn.lock" "/pnpm-lock.yaml"
"/id_rsa" "/id_rsa.pub"
"/phpinfo.php" "/server-status"
"/wp-login.php" "/wp-config.php" "/xmlrpc.php"
"/config.php"
}
)
or
(
starts_with(lower(http.request.uri.path), "/wp-admin")
or starts_with(lower(http.request.uri.path), "/wp-includes")
or starts_with(lower(http.request.uri.path), "/phpmyadmin")
or starts_with(lower(http.request.uri.path), "/pma")
or starts_with(lower(http.request.uri.path), "/admin")
or starts_with(lower(http.request.uri.path), "/cgi-bin")
or starts_with(lower(http.request.uri.path), "/.git")
or starts_with(lower(http.request.uri.path), "/.svn")
or starts_with(lower(http.request.uri.path), "/.hg")
)
or
(
lower(http.request.uri.path) contains "../"
or lower(http.request.uri.path) contains "..%2f"
or lower(http.request.uri.path) contains "%2e%2e%2f"
or lower(http.request.uri.path) contains "%2f..%2f"
or lower(http.request.uri.path) contains "%5c..%5c"
)
or
(
lower(http.user_agent) contains "sqlmap"
or lower(http.user_agent) contains "acunetix"
or lower(http.user_agent) contains "nikto"
or lower(http.user_agent) contains "masscan"
or lower(http.user_agent) contains "nmap"
or lower(http.user_agent) contains "zgrab"
or lower(http.user_agent) contains "gobuster"
or lower(http.user_agent) contains "dirbuster"
or lower(http.user_agent) contains "feroxbuster"
or lower(http.user_agent) contains "wpscan"
)
or
(
http.user_agent eq ""
or len(http.user_agent) lt 8
)

说明

  • 非 GET/HEAD 拦截块
    • 目的:把“写入型攻击面”从边缘层直接砍掉。静态站正常只读;出现 POST/PUT/DELETE 等,通常是扫描器在试:上传、RCE、框架路由、表单打点、CORS/OPTIONS 探测等。
    • 拦截方向:阻断自动化探测 + 阻断尝试写入/提交的攻击流量。
  • 敏感文件精确命中块(in {...}
    • 目的:阻断信息泄露类探测。.env(密钥/配置)、/.git//.svn//.hg(源码与历史)、依赖锁文件(版本指纹)、phpinfo.php/server-status(环境指纹)、WP 关键入口(被大规模字典扫描)。
    • 拦截方向:阻断扫描字典命中 → 防止后续被精准利用。
  • 高风险目录前缀块(starts_with
    • 目的:挡“后台/面板/版本库目录级探测”。/admin/wp-admin/phpmyadmin/cgi-bin/.git* 这类路径是扫描器的默认清单。
    • 拦截方向:阻断爆破前置入口探测与面板探测。
  • 目录穿越块(contains 运算符)
    • 目的:挡路径穿越/LFI 探测(读系统文件、读配置、读源码)。由于没正则,覆盖的是最常见形态(含部分编码)。
    • 拦截方向:阻断“读敏感文件”的探测流量。
  • 扫描器 UA / 空 UA 块
    • 目的:快速降噪。大量自动化工具会带明显 UA(sqlmap、wpscan 等);空/极短 UA 也常见于脚本与探测器。
    • 拦截方向:阻断低成本扫描器与脚本请求,降低压力与日志噪声。

注意

  • 只要你的静态站有任何表单提交、Webhook、API,第一段会误杀:这种站不要用本规则,改用“混合站 / 内容站规则”。

规则 2:混合站(同域名:静态 + /api + /admin;推荐动作:Managed Challenge)

这套是“实战最常用”的:静态区严、API 区按协议约束、后台区挑战,整体误杀低。

可直接复制的表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
(
(not starts_with(lower(http.request.uri.path), "/api/"))
and (not starts_with(lower(http.request.uri.path), "/admin"))
and (http.request.method ne "GET" and http.request.method ne "HEAD")
)
or
(
starts_with(lower(http.request.uri.path), "/api/")
and not (http.request.method in { "GET" "POST" "PUT" "PATCH" "DELETE" "OPTIONS" })
)
or
(
starts_with(lower(http.request.uri.path), "/api/")
and (http.request.method in { "POST" "PUT" "PATCH" })
and not (lower(http.request.headers["content-type"][0]) contains "application/json")
)
or
(
starts_with(lower(http.request.uri.path), "/admin")
and not cf.client.bot
)
or
(
lower(http.request.uri.path) in {
"/.env" "/.env.local" "/.env.dev" "/.env.prod" "/.env.production"
"/.git/config" "/.git/HEAD" "/.git/index"
"/.svn/entries" "/.hg/store"
"/.ds_store" "/.htaccess" "/.htpasswd"
"/composer.json" "/composer.lock"
"/package.json" "/package-lock.json" "/yarn.lock" "/pnpm-lock.yaml"
"/id_rsa" "/id_rsa.pub"
"/phpinfo.php" "/server-status"
"/wp-login.php" "/wp-config.php" "/xmlrpc.php"
"/config.php"
}
)
or
(
starts_with(lower(http.request.uri.path), "/wp-admin")
or starts_with(lower(http.request.uri.path), "/phpmyadmin")
or starts_with(lower(http.request.uri.path), "/pma")
or starts_with(lower(http.request.uri.path), "/cgi-bin")
or starts_with(lower(http.request.uri.path), "/.git")
or starts_with(lower(http.request.uri.path), "/.svn")
or starts_with(lower(http.request.uri.path), "/.hg")
)
or
(
lower(http.request.uri.path) contains "../"
or lower(http.request.uri.path) contains "..%2f"
or lower(http.request.uri.path) contains "%2e%2e%2f"
or lower(http.request.uri.path) contains "%2f..%2f"
or lower(http.request.uri.path) contains "%5c..%5c"
)
or
(
lower(http.user_agent) contains "sqlmap"
or lower(http.user_agent) contains "acunetix"
or lower(http.user_agent) contains "nikto"
or lower(http.user_agent) contains "masscan"
or lower(http.user_agent) contains "nmap"
or lower(http.user_agent) contains "zgrab"
or lower(http.user_agent) contains "gobuster"
or lower(http.user_agent) contains "dirbuster"
or lower(http.user_agent) contains "feroxbuster"
or lower(http.user_agent) contains "wpscan"
)
or
(
http.user_agent eq ""
or len(http.user_agent) lt 8
)
or
(
cf.threat_score gt 20
)

说明

  • 静态区方法锁(第一块)
    • 只对“非 /api 且非 /admin”的页面区生效:静态页面只允许 GET/HEAD。
    • 价值:既保护静态区不被乱 POST,又不会误伤 API/后台这种本来就需要 POST 的区域。
    • 拦截方向:阻断静态区写入探测、框架路由探测、上传尝试。
  • API 方法白名单(第二块)
    • 只允许常规 REST 方法,阻断 TRACE/CONNECT/PROPFIND 等非常规方法探测。
    • 拦截方向:阻断网关/代理差异探测与奇技淫巧的探测请求。
  • API 写操作强制 JSON(第三块)
    • 你的 API 写入若规范化为 JSON,这块可以过滤掉大量垃圾表单提交、multipart 上传探测。
    • 拦截方向:阻断“非预期内容类型”的低成本攻击脚本。
  • 后台区挑战(第四块)
    • not cf.client.bot 的作用是让已识别的“好 Bot”不被挑战;其余访问后台触发挑战/拦截。
    • 拦截方向:显著提高爆破与扫描成本,兼顾真人可用性(比纯 Block 更稳)。
  • 敏感文件/高危目录/穿越/UA/威胁分数(后续块)
    • 这是全站“防扫描外壳”,核心目标是:敏感泄露入口、版本库入口、面板入口、穿越探测、明显扫描器、威胁分数高的请求。
    • 拦截方向:压制扫描字典与自动化攻击前置流量,减少后端负载与日志。

注意

  • 如果你的 API 支持 application/x-www-form-urlencodedmultipart/form-data,第三块会误杀;那就删掉第三块或加白名单路径。

3:WordPress 站(推荐动作:Managed Challenge)

这套不靠正则,专打 WP 常见爆破/探测入口,配置后立即见效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
(
lower(http.request.uri.path) in {
"/wp-config.php"
"/wp-login.php"
"/xmlrpc.php"
"/.env" "/.env.local" "/.env.prod" "/.env.production"
"/.git/config" "/.git/HEAD" "/.svn/entries"
}
)
or
(
starts_with(lower(http.request.uri.path), "/wp-admin")
or starts_with(lower(http.request.uri.path), "/wp-includes")
)
or
(
starts_with(lower(http.request.uri.path), "/phpmyadmin")
or starts_with(lower(http.request.uri.path), "/pma")
)
or
(
lower(http.request.uri.path) contains "../"
or lower(http.request.uri.path) contains "%2e%2e%2f"
or lower(http.request.uri.path) contains "%2f..%2f"
)
or
(
lower(http.user_agent) contains "wpscan"
or lower(http.user_agent) contains "sqlmap"
or lower(http.user_agent) contains "acunetix"
or lower(http.user_agent) contains "nikto"
or lower(http.user_agent) contains "gobuster"
or lower(http.user_agent) contains "dirbuster"
)
or
(
http.user_agent eq ""
or len(http.user_agent) lt 8
)
or
(
cf.threat_score gt 20
)

说明

  • WP 核心敏感入口块(wp-login/xmlrpc/wp-config
    • /wp-login.php:爆破入口核心命中点。
    • /xmlrpc.php:历史上被大量用于爆破与放大类调用(是否 Block 取决于你是否需要 Jetpack/APP)。
    • /wp-config.php:正常永远不该被访问到,命中几乎等同“明确恶意”。
    • 拦截方向:打掉爆破与敏感配置探测。
  • wp-admin/wp-includes 前缀块
    • 后台目录与核心代码目录探测,常见于漏洞利用前置探测。
    • 拦截方向:提高后台被暴露与被爆破的门槛。
  • phpMyAdmin/pma 前缀块
    • WP 站经常被顺带扫描数据库面板;正常不应公网可达。
    • 拦截方向:阻断面板探测与弱口令爆破入口。
  • 穿越块 + 扫描器 UA + 威胁分数
    • 进一步压制“批量扫描 + 注入探测 + 目录枚举”组合流量。
    • 拦截方向:减少被持续扫描的强度与频率。