本文起因于“部署了CDN仍然被发现真实IP”,分为两个主题;一是如何安全的部署CDN,二是如何发现部署CDN之后的真实IP。
有点儿“自相矛盾”的味道了。
作者的服务器Ubuntu部署了腾讯云的CDN,并通过IP使用https回源,很意外的被发现有真实IP暴露的漏洞(这要感谢我们的团队研究员安全小蜘蛛)他发现是ssl证书泄露的真实IP,具体原因我自己也没有查明。
绕过CDN获取真实IP这个网站可以帮助到你
https://censys.io/ipv4?q=uosblog.top
显而易见,查到了我的真实IP(但这已经不那么重要了)
如何防御?
CDN部署时需要注意的安全问题
如上,作者的服务器是通过IP回源的,如果禁用IP访问 (不能保证安全性,攻击者仍然可以通过修改hosts文件指定某域名对应的真实IP,基于IP的控制就会被绕过) 则无法回源,所以要标识CDN流量以供apache识别。
回源HTTP请求头配置,大多数CDN厂商都有这个功能
apache配置:
SetEnvIf,根据客户端请求属性设置环境变量,支持正则表达式匹配请求头
详解>>https://developer.aliyun.com/article/451524
匹配请求头xcdn: Tencent,如果匹配就放开
Order allow,deny
SetEnvIf ^xcdn* ^Tencent.* local_ref=0
Allow from env=local_ref
被拦截的会返回403:
关于ssl导致真实IP暴露的问题,我查到一文章说:假如没有CDN,服务器配置了https,浏览器通过https访问,这没有问题。
但是,有CDN的情况下,服务端配置了https,CDN通过https回源,这还是没有问题;但,用户通过https访问CDN;CDN的证书会泄露源IP。