最近EdgeOne出了个请求数和流量皆无限且带境内节点的免费套餐,但中国站还在内测,于是找人要了个兑换码体验了下。
多要了两个,有需要的可以关注后找我领。
7年个人版用户发出尖锐爆鸣声
提一嘴国际站
如果你有护照或者别的什么,可以直接去国际站参加活动领取。
国际站接入备案域名要实名,如果你只是接入未备案域名可以直接用国际站。
想起第一次被DDoS时的纠结,不用CDN被DDoS就完蛋,用CDN被CC刷流量就完蛋。
当时就十分羡慕海外有CloudFlare这种慈善厂商,想着国内什么时候也能有厂商跟进跟进,现在总算出了。
提到CloudFlare就不得不提一下他的Worker,EO的免费套餐其实也有这个东西,配额和Worker基本没差。
好了回归正题。
使用CDN后为何还会泄露源站?
这里就不讲故事了,直接进正题。
HTTPS泄露
当你直接访问443端口时Nginx会使用第一个配置了SSL的站点或默认站点的证书来建立连接。
如果这个站点是你套CDN的网站那么你的源站就泄露了。
也许你想问,那我的IP他怎么知道的?他得知道我的IP才能直接访问我IP的443端口来获取证书吧?
其实他不用知道, 他只需要把所有IPv4地址的443都访问一遍全部记录下来,一查就知道了。
扫描全网耗时其实比你想象的要短。
套CDN前源站被扫描器采集
网上有不少扫描器在扫描全网,这类扫描结果你可以在fofa这类网站上找到。
如果你套CDN前和套CDN后用的是同一个IP,而他在你套CDN前就已经记录过你的域名解析记录,那么你源站IP就泄露了。
这个一般配合下一个一起使用,用于交叉确认。
带指定host扫描全网
倘若你设置了IP证书、套CDN后更换了IP,就轮到这个方法了。
依旧是扫描全网,但是这次是带着你的域名扫描,再判断响应。
如果某个IP的响应和你网站的响应对上了,或者HTTPS证书校验成功了,如果这个IP不属于任何一个CDN节点,那大概率是你的源站IP。
如何防护?
在源站新建IP站
这个很简单,你只需要新建IP站点,然后给这个站点挂上自签的IP证书即可。
完成后如果有人直接用HTTPS访问你的IP站他会返回IP证书而非其他网站的域名。
EO回源时使用自定义域名
一般情况下这里的加速域名和回源Host头填写的是相同域名,也就是带着你的域名去回源。
但EO可以带着你的域名回源,扫描脚本也可以带着你的域名去扫描全网尝试回源,也就是前面提到的"带指定host扫描全网"。
问题出在回源域名被人知道了,这就是设置自定义域名的原因。
设置自定义域名后,别人只知道你的网站域名不知道你的回源域名,即使使用你的回源域名访问源站也只会返回404或默认站点。
设置回源请求头
倘若你有多个域名,或者项目存在什么限制,可能需要通过http回源且没法校验回源host。
这时就需要判断请求是否由回源节点发出,大多数人第一时间想到的是将回源节点IP添加白名单。
但一是厂商可能不提供CDN回源节点IP列表,二是如果回源IP变动后未及时加白会影响访问,三是如果防火墙规则过多会对CPU造成压力。
所以防火墙加白IP不是最佳选择,在应用层下手会更好。
EO支持修改回源请求头,通过给请求头添加自定义字段,也可以达到判断请求是否来自CDN回源节点的效果。
首先,到规则引擎创建一条新的规则
给这条规则起个你喜欢的名字,然后修改host为你的域名,再点击操作
选择修改HTTP回源请求头
新增一个回源请求头字段,字段值用随机字符串,点击确认
然后你就可以在你的应用中集成鉴权,判断请求来源是否为CDN回源节点。
例如在apisix系统中可以新建规则做判断,或者通过插件判断
再例如在golang的gin中可以通过中间件读取请求头,并对请求头不合要求的请求返回404(实际应用中可以把值设置为变量,从配置文件获取)