浅谈如何防止网站的源站 IP 地址暴露

KasuganoSoras 发表于 2018-10-31 05:41:39 | 查看:815 | 运维


为了保护网站免受 DDoS、CC 攻击,很多人都会选择 CDN,在看似安全的 CDN 保护下,其实还是有可能让你的源站 IP 暴露的。

今天我们就来谈一谈,如何保护源站,防止源站 IP 暴露。

CDN 的全称是 Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN 系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。

其目的是使用户可就近取得所需内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度。

img

传统的网络架构是只有一台服务器,所有用户都访问这台服务器,一旦主服务器遭到攻击或者出现故障,所有用户都会无法访问。

而 CDN 的作用是,将用户的请求均匀分配到全国、全球的多个节点,然后再统一转发给后端服务器,一些非动态数据(例如 CSS、JS、图片等)就可以缓存在 CDN 节点上,这样就可以大大降低源站服务器的负载,同时如果源站发生故障,CDN 还可以将缓存过的数据临时展现给用户,而不至于完全无法访问。恶意攻击者如果试图攻击网站,那么他最多只能找到 CDN 节点的 IP 地址,而无法获得源站的 IP 地址,当然,本文的作用就是教你如何防止网站被攻击者找到源 IP。

也许大家都知道 CloudFlare 这个 CDN 服务商,这家服务商在国内很多人都用来做高防盾(实际上这玩意并不高防,上次群里有人试过,摸了一下就死了)

但是你知道 CrimeFlare 吗?CrimeFlare 是一个专门用来查 CloudFlare CDN 真实 IP 的网站,可以用来查询受 CloudFlare CDN 保护的网站的源站 IP。

一开始我也不太理解这个网站是怎么获得源站 IP 的(因为我试了一下查我另一个网站,真的能查到源站地址)后来上咕鸽搜了一下才知道。

那么,我们要如何防止网站的真实 IP 暴露呢?

一、禁止网站对外发包

网站程序对外发起连接请求往往是导致源站 IP 暴露的原因,例如很多论坛、博客或图床程序都有 “从 URL 上传图片” 的功能,当用户使用这个功能,提交了一个恶意 URL 时,网站程序就会去请求这个地址,然后后端真实 IP 就会被对方记录下了,因此导致源站 IP 泄露。

解决方法就是禁止网站的 “从 URL 上传图片” 这类功能,或者完全禁止网站对外发起连接,仅允许接受连接。

如果确实是因为业务需要,要从 URL 下载图片,我建议可以给网站程序挂上代理,例如 PHP Curl 的时候是可以设置 http 代理的,这样万一对方通过这个手段获取你的 IP,也只能获取到代理服务器的 IP,而不是获得网站的真实 IP(前提是你需要使用高匿代理,透明代理是可以查到代理源 IP 地址的,通过 X-Forwarded-For)。

如果一定要对外连接,例如异地分布式数据库,或者对接其他网关程序、API 等,在产品上线之前,一定要屏蔽网站的报错信息,PHP 可以用 error_reporting(0); 实现。

为什么呢?假如你的程序内部请求的另一台业务服务器挂了,导致网站程序连不上目标服务器,这时候一般就会报错,而报错往往就包含了域名、IP、脚本路径等详细信息,这样就会给网站带来很大的安全隐患,有可能对方就会获得你的业务服务器 IP 地址。

还有就是,DNS 污染的问题也不容忽视,如果网站服务器使用的 DNS 存在问题(DNS 污染等),有可能会导致你的业务请求域名解析到一个奇怪的 IP 上去,如果(只是如果)攻击者有足够的技术和权限,把你的 DNS 污染了,完全可以把你的业务域名指向到另一个 IP 去,从而获取到你的源站 IP,当然这只是其中一种可能性,现实中还是不太可能发生的…至少我没遇到过。

不过最好还是为网站服务器选择可靠、安全的 DNS,例如 114dns 或者 1.1.1.1(CloudFlare 和 APNIC 合作搞的 DNS)。

二、小心旁站地址暴露

很多人在 CDN 解析域名的时候,都会有些线路不走 CDN,有些线路走 CDN,这样就可能导致恶意攻击者可以通过扫描 DNS 记录来获得你的旁站 IP。

例如你给 www.example.comexample.com 挂上了 CDN,但是 dev.example.com 没有挂上 CDN,这样别人通过扫描 DNS 记录就可以得到 dev.example.com 的 IP 地址。

很多企业都会在产品上线之前先用一个子域名做网站临时测试,因为要调试等,一般不会挂上 CDN(因为 CDN 有缓存,会影响网站开发调试)

表面上看,这并没有什么不安全的,但是如果 dev.example.comwww.example.com 之间有联系(例如发起请求等),攻击者就有可能通过漏洞或者其他方式获得主站的 IP。

举个例子,早些时候我搞掉过一个用 CloudFlare 做防护的大人内容网站,那个网站在登录时会跳转到 account 这个子域,然后我发现每次在登录的时候都会卡一会儿(或许是他们的登录 API 的问题,响应过慢?)

不知道网站管理员怎么想的,account 子域居然没有挂 CDN,查出来是美国洛杉矶的一个 IP,于是我试了下 CC 攻击这个 account 子域,没一会 account 子域就挂了,然后报错 502 Bad Gateway,Can’t connect to loginapi.xxxxx.com(这个应该就是他们的登录接口了)。

然后我再查了一下 loginapi 这个子域,服务器也是美国的,但是 IP 不同,把这个 IP 发给了我一个 D 阔朋友,他马上送了 20G 的 UDP 流量过去,loginapi 这个子域就打不开了。

再去看看他们的首页,变得要等很久才能进去,但是点开任何一个子页面都提示 CloudFlare 错误页,说明源站已经挂了,看来 www 主域源站和 loginapi 就在同一台服务器上。

所以一定要切记,网站要就全部挂上 CDN,然后要把错误信息屏蔽,不能让攻击者获得任何有用的信息。

三、及时挂上 CDN 防护

很多网站刚上线的时候是不挂 CDN 的,因为可能需要进行调试或者其他原因,这样的话你的网站在此期间可能会被搜索引擎收录,或者被 CrimeFlare 记录下 IP,这样的话,你后面再挂上 CDN 也毫无作用了,直接就可以查询到源站地址(不要小看 CrimeFlare,他们的爬虫速度比 Google 还要快,一下就爬上来了)

如果因为特殊情况需要短暂关闭 CDN 防护,请尽量在 2 小时内将 CDN 防护重新打开,因为在此期间可能有用户会访问,DNS 服务器会记录下你的网站 IP 的变化,有专门的网站可以查询 DNS 历史解析记录的,这样很容易导致源站 IP 暴露。

如果你想要挂着 CDN 的同时进行网站调试开发,最好的办法就是直接修改自己电脑的 Hosts,把域名直接指向源站,这样既不会影响你调试网站,也不会影响网站安全性。

四、防止邮件泄露源站 IP

一般的网站都会有 “找回密码” 或者 “注册验证” 之类的功能,需要邮件验证,但是请注意,邮件有可能就会暴露源站的 IP。

在你发送邮件的时候,你的服务器 IP 会附带在邮件的 Header 里,随着邮件一同发送到对方的邮箱,而这就会导致你的源站 IP 泄露。

解决方法很简单,用第三方的邮件发送平台,或者用其他服务器发送邮件,或者在发信时给服务器挂上代理,通过代理发送也可以。

你还可以使用 RiSMTP:https://bbs.zerodream.net/thread/53

五、没什么卵用的奇技淫巧

首先,你可以通过 Http 服务器日志,获得 CDN 节点请求你的服务器时所用的 IP,然后将这些 IP 加入到防火墙白名单中,其余 IP 地址的请求一律屏蔽(别忘了把你自己的 IP 加上去,不然到时候你连不上自己服务器了别怪我2333),这样攻击者就算获得了源站 IP,也基本上无法攻击(前提是你的防火墙是硬件防火墙而不是软件防火墙,软防遇到 DDoS 基本上没什么作用),当然,你可能会说可以伪造 IP 之类的,那个就没什么办法了,靠硬防吧。

如果你的服务商支持屏蔽 UDP 流量,并且你的网站不涉及需要 UDP 请求的业务时,你可以把 UDP 流量屏蔽掉,因为 UDP 攻击可以利用反射轻松将流量放大几千、几万倍,如果攻击者有一台发包机,以及一个比较好的 IP 列表,可以轻松打出上百 G 的流量(我那个 D 阔朋友上次试过最高打出了 400G),而如果你屏蔽了 UDP 流量,基本上就不用太担心了,然后把 NTP 服务禁止,SSDP 禁止,只允许 TCP 请求,基本上你只需要 30~100G 防御就可以了,目前我在国内没看到有多少个大佬能打出 100G 的 SYN 攻击的,打的出来的估计都进去了。

如果你的服务商支持屏蔽国外访问,且你的网站是面向国内用户,国外用户少到几乎没有的那种,你可以打开这个功能,因为国外的法律在国内不适用,攻击者在国外可以肆意攻击你在国内的网站而不用担心触犯法律,所以你会很吃亏,如果屏蔽了国外的访问,那么就只有来自国内的流量了,而大天朝敢打这么高 SYN 流量攻击的真的少到几乎没有,除了个别胆大或者作死的。

以上就是我的一些关于如何防止网站源站地址暴露的方法了,希望对各位站长有所帮助,文章写的可能不是很好,请谅解。

KasuganoSoras 在 2018-12-18 04:50:09 编辑了帖子


img


帖子评分

评分是对作者的一种鼓励,您可以在评论框输入 /cs score 分数 附言 对帖子进行评分。

最少 1 分,最大 5 分,评分会消耗自己的积分,不能给自己的帖子评分。

评分者评分附言评分时间
zxc7895531 2 白嫖网站服务器的表示233 10 个月前

发表你的评论

回帖时请注意遵守论坛发言规定,请勿恶意灌水。

  回帖倒序排列   匿名回复 您还可以输入 2000  


欢迎来到 ZeroDream 论坛!

您还没有登录噢 :P

登陆以后就可以发帖和回复啦~


系统主题选项

在线人数:Loading...

WebSocket 状态:Loading...