真正的源站保护核心在于在源站服务器防火墙只放行 CDN 节点 IP,而不仅仅是在 CDN 控制台配置用户访问白名单。
先说结论:仅在 CDN 控制台设置 IP 白名单只能控制用户访问,无法防止源站 IP 暴露,必须在源站侧配置安全组或防火墙白名单。
- 先判断:确认源站 IP 是否已通过 DNS 历史记录或 SSL 证书暴露。
- 优先做:在源站服务器安全组或 Nginx 中只允许 CDN 服务商公布的 IP 段访问 80/443 端口。
- 再验证:使用非 CDN 节点 IP 直接请求源站 IP,确保返回连接拒绝或 403 状态码。
命令速用版
如果您使用 Nginx 作为源站 Web 服务器,可通过以下配置片段限制只允许特定 IP 段访问。请将 CDN 服务商提供的 IP 段替换到 allow 规则中,最后一条 deny all 不可省略。
server {
listen 80;
server_name example.com;
location / {
allow 1.1.1.0/24; # 替换为 CDN 厂商提供的 IP 段
allow 2.2.2.0/24;
deny all;
# 普通 Web 服务无需配置 proxy_pass,若为反向代理架构请自行添加
# proxy_pass http://backend;
}
}如果是云服务器,建议优先在控制台安全组层面配置,性能消耗更低且不易被软件配置错误覆盖。
云厂商安全组配置示例
不同云厂商的安全组配置逻辑类似,但 CLI 命令有所差异。以下是主流云厂商授权安全组入站规则的命令示例,请根据实际情况替换参数。
阿里云 (Aliyun CLI)
aliyun ecs AuthorizeSecurityGroup \ `--SecurityGroupId` sg-bp15ed6xe1yxeycg7*** \ `--IpProtocol` tcp \ `--PortRange` 80/80 \ `--SourceCidrIp` 1.1.1.0/24 \ `--Policy` Accept
腾讯云 (TencentCloud CLI)
tencentcloud-cli vpc AuthorizeSecurityGroupPolicies \ `--SecurityGroupId` sg-bp15ed6xe1yxeycg7*** \ `--PolicySet`.Policies 0.Protocol TCP \ `--PolicySet`.Policies 0.Port 80 \ `--PolicySet`.Policies 0.CidrBlock 1.1.1.0/24 \ `--PolicySet`.Policies 0.Action ACCEPT
AWS (AWS CLI)
aws ec2 authorize-security-group-ingress \ `--group-id` sg-bp15ed6xe1yxeycg7*** \ `--protocol` tcp \ `--port` 80 \ `--cidr` 1.1.1.0/24
为什么会这样
CDN 的本质是反向代理,用户请求先到达 CDN 节点,再由节点回源获取内容。如果在源站服务器上不做限制,任何知道源站 IP 的人都可以绕过 CDN 直接访问源站,导致 CDN 的防护功能(如 WAF、CC 防护)失效。部分 CDN 控制台提供的 IP 黑白名单功能是在边缘节点生效,用于控制用户能否访问 CDN 域名,但这无法阻止攻击者直接扫描并攻击源站 IP。
此外,不同 CDN 服务商对拦截请求的处理方式不同。例如阿里云 DCDN 配置 IP 黑名单后,请求仍会到达节点但返回 403 状态码;腾讯云 CDN 在匹配黑名单或未匹配白名单时可能返回 514 状态码。这些状态码仅表示边缘节点拦截,不代表源站已安全。
分步处理
第一步:获取 CDN 节点 IP 段
登录您的 CDN 服务商控制台,查找“回源 IP 段”或“节点 IP 列表”。主流服务商通常会提供公开的 IP 段文档或 API 接口。注意 IP 段可能会动态调整,需定期关注服务商公告。
部分厂商提供 API 直接获取,例如 AWS CloudFront 提供 JSON 格式 IP 列表:
curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq '.prefixes[] | select(.service=="CLOUDFRONT") | .ip_prefix'
第二步:配置源站防火墙白名单
在源站服务器的安全组或防火墙中,添加入站规则:协议 TCP,端口 80 和 443,源地址填写第一步获取的 CDN IP 段,策略为“允许”。同时添加一条默认规则,拒绝所有其他 IP 访问这两个端口。
第三步:配置 CDN 控制台访问控制(可选)
如果您需要限制特定用户 IP 访问网站,可在 CDN 控制台的“访问控制”或