目的:防止DDoS、扫描与直接访问导致的指纹泄露。总体流程:把域名指向CDN(CNAME),在源站仅允许CDN出口IP访问→关闭直接A记录→配置源站校验(secret header/mTLS)→调整服务器指纹→测试并监控。
结果预期:只有通过CDN的流量能到达源站,直接访问IP会被阻断或拒绝,从而保护源站免受流量攻击和探测。
步骤:1) 在DNS提供商将网站的A记录改为由CDN提供的CNAME,删除所有直接指向源站的A记录;2) 在CDN控制台设置源站地址(可以填写源站IP或域名,若用域名建议使用私有域名);3) 开启CDN的“隐藏源站”/“源站保护”选项。
注意:若必须保留A记录用于邮件或其他子服务,使用子域分别管理并确保核心网站通过CNAME前缀接入CDN;记录更改后等待TTL生效并验证解析指向CDN。
获取CDN出口IP段:在CDN控制台或通过API下载其IP列表(定期同步)。在Linux服务器上用防火墙只允许这些IP访问:示例iptables规则(需root):
先清空旧规则并默认拒绝:iptables -P INPUT DROP && iptables -F;然后允许本地回环和已有连接:iptables -A INPUT -i lo -j ACCEPT;iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT;接着循环添加CDN IP:for ip in $(cat cdn_ips.txt); do iptables -A INPUT -s $ip -p tcp --dport 80 -j ACCEPT; iptables -A INPUT -s $ip -p tcp --dport 443 -j ACCEPT; done;最后保存规则(不同系统用iptables-save或firewalld)。
AWS/GCP/Aliyun等云平台:在安全组或防火墙规则中仅允许CDN出口IP访问80/443,拒绝0.0.0.0/0的入站http/https。步骤:创建入站规则源为CDN IP段→应用到负载均衡或实例。
自动化:用脚本定期拉取CDN IP列表并调用云API更新安全组(例如使用aws-cli的 authorize-security-group-ingress/revoke)。
方法A:Secret Header。配置CDN在回源请求中注入自定义HTTP头(如 X-From-CDN:
方法B:mTLS。生成客户端证书并在CDN回源时使用该证书,源站nginx配置ssl_client_certificate / ssl_verify_client on; 仅接受带有受信任客户端证书的连接。mTLS更安全但需CDN支持客户端证书上传。
关闭服务器和应用默认banner:nginx中 server_tokens off; 并自定义响应头或删除Server头(在nginx可用more_clear_headers 'Server',或在应用层移除)。
证书SAN和域名:确保证书不包含源站IP或不必要的裸域。若证书里存在源站域名,考虑用内部私有域名和私有CA或让CDN提供证书管理功能。
基础验证:1) 从外部网络使用dig或nslookup确认域名解析到CDN CNAME/IP;2) 尝试直接用源站IP访问网站:curl -H "Host: yourdomain.com" http://<源站IP> 应返回403或连接被拒绝;3) 使用traceroute确认流量路径经过CDN。
深度扫描:用nmap扫描源站IP端口,确认80/443端口关闭或仅接受CDN IP;用Shodan/Censys搜索域名和IP,确保没有历史泄露记录。
自动化:写脚本定期同步CDN IP并更新防火墙/安全组(crontab + API)。日志:集中记录CDN回源日志和源站access/error,监控异常回源来源与流量增幅。
应急:保留备用源站IP并制定快速更换流程(更新CDN源站配置、更新白名单),并在遭受攻击时临时启用WAF、流量限速或更严格的geo-block规则。
问:如何判断我的源站IP是否仍然被公开或被爬到?
答:检查历史DNS解析记录(DNS历史服务),使用Shodan/Censys搜索源站IP和域名,运行curl -v直接访问源站IP并看响应头是否含域名或证书,若能访问并返回页面则说明未被完全隐藏。
问:攻击者可能伪造来源IP或HTTP头伪装成CDN,我如何防护?
答:仅依赖HTTP头不够安全,应结合IP白名单+mTLS(优选)或短期动态secret。mTLS能验证客户端证书,IP白名单防止伪造源IP,WAF规则与速率限制可减缓伪造带来的影响。
问:这些隐藏源站的措施会不会导致访问延迟增加或运维复杂化?
答:通常影响很小:CDN本身减低源站负载并能提升响应速度;增加的复杂度主要在证书管理和IP同步脚本,建议通过自动化脚本、CDN托管证书与API同步来降低运维成本,mTLS需额外配置但安全收益高。
