
前段时间我们一个部署在香港的数据服务平台频繁遭到海外流量探测和DNS投毒攻击,起初我们只做了常规的 Nginx 防护和 Fail2Ban 封禁,但发现攻击者通过解析泄露的真实 IP 持续绕过 CDN,甚至使用了自动化 Bot 工具进行 SSL 指纹识别。眼看 DNS 延迟飙升,回源带宽打满,我才意识到,单纯依靠服务器本地防护已难以应对日益复杂的网络威胁。
于是我开始着手将香港物理服务器与 Cloudflare 平台深度集成:不仅实现全球 DNS 加速,还通过“源站隐藏+协议防火墙”构建起多层隐匿与缓解机制。以下是我落地这一方案的全过程,希望对你有所启发。
一、整体目标与技术架构
实现目标
- 提升跨境 DNS 查询的解析速度,降低第一次访问的 TTFB。
- 隐藏香港源站的真实 IP,防止被主动探测与扫描打穿。
- 应对常见 HTTP Flood、DNS 投毒、恶意爬虫等攻击。
- 与自建防火墙、WAF、日志系统联动,实现安全闭环。
🧩 关键组件架构图(简化)
全球用户请求
↓
Cloudflare Anycast CDN (DNS + Web Proxy)
↓ ↑
香港高防服务器(真实源站) ← 安全策略限制仅允许 Cloudflare 回源
二、步骤一:将域名接入 Cloudflare 实现 DNS 加速
1. 选择 DNS 托管方式
如果你使用的是 .com/.net/.org 等通用顶级域名,强烈建议将 DNS 完全托管在 Cloudflare 上。
操作流程:
- 注册并登录 Cloudflare(免费套餐即可)。
- 添加你的域名,Cloudflare 会自动扫描当前解析记录。
- 替换原域名注册商的 NS 记录为 Cloudflare 提供的两个 NS(例如 logan.ns.cloudflare.com / rose.ns.cloudflare.com)。
- 等待 DNS 生效(通常 5-15 分钟)。
Cloudflare DNS 使用 Anycast 网络,节点遍布全球,特别在中国大陆和香港交界区域命中率高,有效降低解析 RTT。
2. 自定义解析记录(隐藏源站)
这里是第一层“资源隐匿”关键:
| 记录类型 | 主机记录 | 目标地址 | 代理状态 |
|---|---|---|---|
| A | @ | 真实香港服务器 IP | 启用代理 ☁️ |
| AAAA | @ | 如有 IPv6 可配置 | 启用代理 |
| CNAME | www | www.a5idc.com | 启用代理 |
注意:必须开启代理模式(橙色云朵),否则只是普通 DNS,不具备源站防护能力。
三、步骤二:设置防火墙规则限制源站访问
很多人配置了 CDN 却忘了这一步,结果 Cloudflare 被绕过,攻击者直接打源。
方法一:仅允许 Cloudflare IP 回源
1. 获取 Cloudflare 的全量回源 IP 段
官网:https://www.cloudflare.com/ips/
# 示例用法,iptables 限制仅允许 Cloudflare IP 回源
iptables -F
for ip in $(curl https://www.cloudflare.com/ips-v4); do
iptables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -s $ip --dport 443 -j ACCEPT
done
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
2. 或使用 Nginx 限制真实 IP 访问
# 放在 server 段开头
if ($remote_addr !~* (173\.245\.48\.0/20|103\.21\.244\.0/22|...)) {
return 403;
}
四、步骤三:启用 Cloudflare 安全防护机制
1. 防护等级设置(WAF + Bot 管理)
在 “安全性” → “WAF” 页面:
开启 Web 应用防火墙规则(OWASP 基线)
启用 Bot Fight Mode(对抗恶意爬虫)
可创建自定义防火墙规则,例如:
表达式:http.request.uri.path contains "/admin"
动作:Block 或 JS Challenge
2. 加强 TLS 安全性与隐匿性
在“SSL/TLS”栏目中:
- 启用 TLS 1.3
- 启用 HTTP/3 支持(配合香港 Nginx/QUIC 源站优化更佳)
- 使用“严格模式”,确保客户端与源站的证书一致性
- 强烈建议启用“启发式指纹保护”,规避 CDN 指纹识别绕过
五、步骤四:自定义缓存与页面规则优化性能
页面规则示例:
对于静态资源目录(如 /static/,/js/)设置强缓存:
URL: yourdomain.com/static/*
规则:缓存所有内容 + Edge 缓存 TTL 设置为 1 天
强制 HTTPS 重定向、Gzip 压缩等也可以通过页面规则完成,无需写 Nginx 配置。
六、补充建议:结合香港高防网关实现多层联动
如你有条件使用定制的香港高防服务器(如 A5数据支持 BGP 高防 + 自主 WAF 引擎),可进一步接入:
- 源站 Web 服务绑定高防网关出口,隐藏真实物理 IP
- 通过 BGP Anycast 引导攻击流量到最近清洗中心
- 利用本地防火墙或 IDS 联动 Cloudflare API 实时拉黑恶意 IP
七、常见问题与排查建议
| 问题描述 | 排查建议 |
|---|
| 域名解析慢 | 检查 DNS 是否生效、是否命中 Cloudflare 节点 |
| CDN 回源 403 | 检查源站防火墙是否未放行 Cloudflare IP |
| 实际 IP 泄露 | 查看是否有裸域、图片 URL 或 API 端点未代理 |
| TLS 报错 | 检查 SSL 模式是否匹配、证书是否更新及时 |
八、Cloudflare API 自动封禁与源站日志联动实战
当业务体量上来之后,手动封 IP 早已力不从心,而源站又经常能精准感知到异常访问行为(如 5xx 暴涨、频繁探测、UA 异常等)。这时,我们可以将源站日志分析结果反向推送给 Cloudflare 的防火墙 API,实现分钟级封锁动作,达到“智能屏蔽 + 云端同步”的效果。
1. 获取 Cloudflare API Token
进入 Cloudflare 用户中心:
进入【My Profile】→【API Tokens】→ 创建一个自定义 Token
权限仅需授予:
- Zone.Zone:Read
- Zone.Firewall Services:Edit
- 限定指定域名,复制下发的 Token 与 Zone ID 备用
2. 编写封禁脚本:Cloudflare API 动态黑名单(Python 示例)
import requests
import json
CLOUDFLARE_ZONE_ID = '你的Zone ID'
CLOUDFLARE_API_TOKEN = '你的API Token'
HEADERS = {
'Authorization': f'Bearer {CLOUDFLARE_API_TOKEN}',
'Content-Type': 'application/json'
}
def block_ip(ip_address, note='Auto block from HK server'):
url = f'https://api.cloudflare.com/client/v4/zones/{CLOUDFLARE_ZONE_ID}/firewall/access_rules/rules'
data = {
'mode': 'block',
'configuration': {
'target': 'ip',
'value': ip_address
},
'notes': note
}
response = requests.post(url, headers=HEADERS, data=json.dumps(data))
print(f"[+] 封禁 {ip_address}: {response.status_code} {response.text}")
3. 日志联动封禁:以 Nginx 日志为例
我们定期从 /var/log/nginx/access.log 中提取高频异常访问 IP:
# 找出一分钟内访问次数超过 200 次的 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | awk '$1>200 {print $2}' > bad_ips.txt
再通过 cron 每 5 分钟调用上面的 Python 脚本封禁:
while read ip; do
python3 block_cloudflare_ip.py "$ip"
done < bad_ips.txt
也可以结合 fail2ban 的 action 脚本,将触发的 IP 动态推送到 Cloudflare API,详见后续专题《基于 Fail2Ban 的 Cloudflare 联动自动封锁机制》。
4. 高级增强建议
| 能力 | 技术手段 |
|---|---|
| 对接 ELK / Graylog 分析日志 | 实时识别异常访问行为 |
| 使用 Redis 存储黑名单去重 | 避免重复 API 封禁 |
| 结合 CDN 防护评分(Bot Score) | 判断是否值得封锁 |
| 设置封禁时间(临时阻断) | 调用 PATCH 接口设定过期时间 |
5. 实战效果回顾
上线这个联动机制后,我们在一次来自越南区域的大规模 POST Flood 攻击中,源站在日志中5秒内检测到超过 1500 次异常 UA 的 POST 请求,立即触发 Cloudflare API 联动,将该段 C 类网段封锁。
Cloudflare 层直接拦截 96% 的异常连接,未传递到后端,极大减少了 WAF 的计算压力和服务器带宽占用。
传统防护机制依赖人工观察和手动封锁,早已跟不上自动化 Bot 攻击的频率。Cloudflare API + 源站日志分析提供了一种低成本、高效率的解决方案,能够在分钟级完成从“检测 → 判断 → 封锁”的闭环反应。
Cloudflare 不只是一个 CDN,它是连接互联网与源站之间的第一道防线。通过将香港服务器与 Cloudflare 深度集成,我们不仅获得了更快的 DNS 解析和更低的延迟,更重要的是让业务运行在一层“隐身斗篷”之下,对抗越来越复杂的网络风险。











