CDN源站隐藏,不让别人直接访问源服务器IP
CDN源站隐藏的核心目标是让攻击者即使知道你的域名,也无法通过解析或扫描直接找到源服务器IP并发起攻击。
只要源站IP暴露,CDN的防护和加速效果就会大打折扣。
准备工作:先确认你的源站暴露风险
动手前先检查源站IP是否已经泄露。
常见暴露途径包括:
- 域名历史解析记录(某些DNS查询网站可查)
- 源站SSL证书信息中包含的IP或域名
- 服务器上其他服务(如邮件、FTP)返回的IP
- 子域名未接入CDN,直接解析到源站
建议操作:使用 ping 或在线DNS查询工具查看域名当前解析IP。
如果返回的是CDN节点IP,说明CDN已生效;
如果返回源站真实IP,则需要先修正解析。
另外,确保源站服务器只开放必要端口(如80、443),关闭不用的服务。
核心操作:让源站只接受CDN节点访问
隐藏源站不是单纯接入CDN就完事,关键是通过防火墙限制源站只允许CDN回源IP访问。
第一步:获取CDN服务商的回源IP段
不同CDN服务商的回源IP段不同,通常在官方文档中提供。
例如:
- 阿里云CDN回源IP段可在控制台“域名管理”->“回源配置”中查看
- 腾讯云CDN回源IP段在“回源设置”页面有说明
- Cloudflare的回源IP段可参考官方IP列表
注意:回源IP段可能会更新,建议定期检查并同步防火墙规则。
第二步:配置防火墙只放行回源IP
以Linux服务器使用 iptables 为例,假设回源IP段为 1.2.3.0/24,源站Web服务端口为80和443:
# 清空现有规则(谨慎操作,建议先备份)
iptables -F
iptables -X
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许CDN回源IP访问80和443
iptables -A INPUT -s 1.2.3.0/24 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 1.2.3.0/24 -p tcp --dport 443 -j ACCEPT
# 允许你的管理IP访问SSH(替换为你的IP)
iptables -A INPUT -s 你的管理IP -p tcp --dport 22 -j ACCEPT
# 拒绝其他所有访问80和443的请求
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
# 保存规则(不同系统命令可能不同)
service iptables save
如果你使用宝塔面板,可以在“安全”->“防火墙”中添加规则:放行CDN回源IP段,拒绝其他IP访问80/443端口。
重要:配置防火墙前务必确保你的管理IP已放行SSH,否则可能把自己关在门外。
第三步:启用回源鉴权(可选但推荐)
部分CDN支持回源鉴权,即CDN回源时携带特定密钥,源站验证通过才响应。
这样即使攻击者知道了源站IP,也无法直接请求。
以Nginx为例,可以在源站配置中校验请求头:
server {
listen 80;
server_name yourdomain.com;
location / {
if ($http_x_cdn_secret != "你的密钥") {
return 403;
}
proxy_pass http://后端服务;
}
}
然后在CDN控制台设置回源请求头,添加 X-CDN-Secret: 你的密钥。
具体参数以CDN服务商文档为准。
避坑指南:这些细节容易忽略
- 不要只依赖CDN隐藏:如果源站IP已经暴露过,攻击者可能直接攻击IP。建议更换源站IP或使用高防IP。
- 子域名也要处理:很多网站主域名接入了CDN,但
mail.example.com、ftp.example.com等子域名直接解析到源站,成为突破口。要么全部接入CDN,要么关闭不用的子域名解析。 - SSL证书:如果源站使用自签名证书或包含源站IP信息,可能被扫描发现。建议源站也使用有效证书,或关闭源站的HTTPS,只让CDN处理SSL。
- 邮件服务:如果源站运行邮件服务,邮件头中可能包含源站IP。建议将邮件服务分离到独立服务器。
- 防火墙规则顺序:
iptables规则按顺序匹配,确保放行CDN的规则在拒绝规则之前。 - CDN回源IP更新:定期检查CDN服务商公告,及时更新防火墙白名单。
验证隐藏效果:确认源站IP无法直连
配置完成后,需要验证源站是否真正隐藏。
- 从外部网络测试:使用另一台不在白名单内的服务器,执行
curl -I http://源站IP,应该返回超时或连接拒绝。 - 检查域名解析:使用
dig或在线工具查询域名,确认返回的是CDN节点IP。 - 测试网站访问:通过域名正常访问网站,确保CDN回源正常,页面加载无误。
- 检查日志:查看源站Web日志,应该只看到CDN回源IP的请求,没有其他IP的直接访问记录。
如果验证时发现源站仍可直连,优先检查防火墙规则是否生效、CDN回源IP是否填写正确。
常见疑问
问:配置防火墙后网站打不开了怎么办?
先临时放行所有IP访问80/443,排查是CDN回源IP填错还是规则顺序问题。
恢复访问后,再逐步收紧规则。
问:CDN回源IP段很多,一个个添加太麻烦怎么办?
可以使用 ipset 工具将IP段合并为一个集合,再在 iptables 中引用集合,简化管理。
具体命令可参考 ipset 官方文档。
问:源站IP已经暴露,换IP后需要重新备案吗?
如果域名已备案,更换服务器IP通常需要更新备案信息中的IP地址,具体以接入商和管局要求为准。
建议更换前咨询服务器提供商或备案服务商。
问:用了CDN还需要在源站安装SSL证书吗?
如果CDN回源使用HTTPS,源站需要配置SSL证书。
如果CDN回源使用HTTP,源站可以不配。
但为了安全,建议源站也启用HTTPS,并使用与CDN相同的证书或自签名证书(需CDN支持忽略证书验证)。
完成以上步骤后,你的源站IP将只对CDN节点可见,有效降低被直接攻击的风险。
如果遇到异常,优先回看避坑和高频问题部分。