最近EdgeOne出了个请求数和流量皆无限且带境内节点的免费套餐,但中国站还在内测,于是找人要了个兑换码体验了下。

多要了两个,有需要的可以关注后找我领。

7年个人版用户发出尖锐爆鸣声

Boom

提一嘴国际站

如果你有护照或者别的什么,可以直接去国际站参加活动领取

国际站接入备案域名要实名,如果你只是接入未备案域名可以直接用国际站。


想起第一次被DDoS时的纠结,不用CDN被DDoS就完蛋,用CDN被CC刷流量就完蛋。

当时就十分羡慕海外有CloudFlare这种慈善厂商,想着国内什么时候也能有厂商跟进跟进,现在总算出了。

提到CloudFlare就不得不提一下他的Worker,EO的免费套餐其实也有这个东西,配额和Worker基本没差。

只要这个月没31号

好了回归正题。

使用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回源请求头

修改请求头

新增一个回源请求头字段,字段值用随机字符串,点击确认

设置新增的请求头kv

然后你就可以在你的应用中集成鉴权,判断请求来源是否为CDN回源节点。

例如在apisix系统中可以新建规则做判断,或者通过插件判断

apisix判断示例

再例如在golang的gin中可以通过中间件读取请求头,并对请求头不合要求的请求返回404(实际应用中可以把值设置为变量,从配置文件获取)

gin判断示例

最后修改:2025 年 08 月 14 日
如果觉得我的文章对你有用,请随意赞赏