Total Pageviews

Sunday, 19 January 2020

使用CloudFlare的免费cdn隐藏你的服务器的ip

隐藏ip原理

未使用cdn时,你的域名和ip是绑定的,ping你的域名即可得到你的ip。
使用cdn后,你的域名不再直接与你的服务器ip绑定,而是与cdn的某一台服务器的ip绑定,然后通过cdn的这台服务器再绑定到你的服务器ip上,所以ping你的域名,只能看到cdn的ip,看不到你服务器的ip,这样就能隐藏
你的服务器的ip了(换句话说,因为域名绑定的不是你自己服务器的ip,所以即使你的服务器ip被和谐了,也能正常使用,因为你可以通过cdn的ip出墙,然后再到达你的服务器)。

注册步骤

首先注册并登录CloudFlare网站。
然后添加你的域名(比如你的域名叫www.example.com,那么你输入example.com就行了。
点击下一步。
选择第一个0元的,点击确定。
点击确定。
这里是添加域名解析的,可以先不添加,直接点继续。
这里是告诉你,在你注册域名的那个服务商后台修改dns服务器为CloudFlare的服务器。
上一步点击继续之后,就来到这个页面,这个页面也是告诉你要在你注册域名的那个服务商后台修改dns服务器为CloudFlare的服务器。
如果你的域名是在阿里云注册的,那么点击阿里云域名列表最后的“管理”按钮,
然后选择左侧的“DNS修改”,点击右侧的“修改DNS服务器”,把上边CloudFlare的两个域名服务器填进去,然后点击“同步”,然后需要一定的时间才能生效10几分钟或一小时,你只能等。
当域名服务商(阿里云或Freenom或其他的)那边修改的DNS服务器生效后,再来看这个“Overview”它会显示“Great news! Cloudflare is now protecting your site”。
另外Crypto这里要选择“Full”。
通过以上操作,现在你可以在“DNS”里添加解析了(解析到你的服务器)。
添加后,注意要把这些云朵都点亮,这样才会有cdn功能,否则只是做dns解析,而不做cdn。
当然这些解析都需要一定的时间(24小时内,因为是免费的,不过实际上不会要24小时,差不多10和20分钟,或者一两小时就可以了,阿里云会比较慢,但也可以成功的),当成功后你会收到一封邮件。
刷新这个“Overview”会显示以下界面:
“great new.cloudflare is now protecting your site".
当上图出现后说明已经成功了,现在ping你的域名看是否能ping的通,ping的通就成功了(会显示指向的ip并不是你服务器的ip,而是CloudFlare的cdn的ip)。注意,你的电脑很可能有DNS缓存,所以ping的时候ping不通,可以试试用这个在线ping
或者也可以刷新一下你电脑的DNS缓存,Mac刷新DNS缓存:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Bash
Windows刷新DNS缓存:
ipconfig /flushdns
Bash
这里提一下,如果你是在freenmon注册域名,需要开全程全局代理,并且你注册时填的国家地区邮编等地址信息,要与你代理服务器所在地相近才行,比如我美国代理,那地址就要填美国,更具体一点,我是LA的代理,那么地址我就网上找一个LA的地址/邮编,这样的成功率比较高,手机号可以随便写,不会像国内一样发验证码检查的。
------------

三个步骤隐藏服务器的IP 


使用Cloudflare(CDN)隐藏服务器真实IP

CloudFlare是一个国外著名的免费CDN网站加速服务公司。Content Delivery Network,简称CDN,内容分发网络,是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。查看CDN更多资讯
这里我推荐使用Cloudflare,免费版本基本可以满足一个小站需求。

步骤一 一些必要的检查

除非你一开始就使用了CDN,不然你铁定泄露了。如何知道你的服务器IP是否已被扫描,查看

cdn下,源站ip泄露检测-Censys.io;如果已经被扫描并被记录,这时候你要做的先将域名解析(一般你的解析是在域名服务商下)迁移至Cloudflare下,之后再做服务器迁移。


步骤二 使用Cloudflare解析你的网站

网站很简单,基本上不用什么参考。注册即可用。
记住这个黄色小Logo,添加解析记录时务必保持这个颜色(而不是灰色)。(迁移服务器后,把ip替换即可)

步骤三 更换服务器

备份并更换你的服务器;各个VPS都应该是提供服务器迁移的(自然不同的数据中心,分配的IP也不一样,IP有地理位置属性)。我所在用的VPS服务商linode,从东京数据中心迁移到费里蒙特也就半个小时左右,还是很便利的。
迁移服务器成功后,将Cloudflare上的解析IP更换即可。
基本上,套了Cloudflare之后,真实服务器IP铁定隐藏好了。(本文附录还有个防扫描脚本)
因为用户所有请求均由Cloudflare转发,所以很大程度来讲,在Cloudflare做好防火墙规则即可抗住DDoS。

附录

禁止扫描机扫描脚本,即拒绝除Cloudflare外的所有IP对源站(40/443)端口扫描。
#!/bin/bash  # Name  : Anti IP Leakage  # Author: Zhys  # Date  : 2019    # 禁止来自IPv4的所有HTTP/S访问请求  iptables -I INPUT -p tcp --dport 80 -j DROP  iptables -I INPUT -p tcp --dport 443 -j DROP    # 对Cloudflare CDN IPv4地址开放HTTP/S入站访问  for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -s $i -p tcp --dport 80 -j ACCEPT; done  for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -s $i -p tcp --dport 443 -j ACCEPT; done    # 禁止来自IPv6的所有HTTP/S访问请求  ip6tables -I INPUT -p tcp --dport 80 -j DROP  ip6tables -I INPUT -p tcp --dport 443 -j DROP    # 对Cloudflare CDN IPv6地址开放HTTP/S入站访问  for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -s $i -p tcp --dport 80 -j ACCEPT; done  for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -s $i -p tcp --dport 443 -j ACCEPT; done    # 保存iptables配置  iptables-save  ip6tables-save    # 注意:80/443为默认HTTP/S协议通讯使用端口,若实际应用使用非80/443端口进行,请依葫芦画瓢自行修改脚本  # Ubuntu系统可以使用UFW则类似:for i in `curl https://www.cloudflare.com/ips-v4`; do ufw allow proto tcp from $i to any port 80; done  # 基于Linux系统兼容性考虑脚本使用iptables配置系统防火墙,请自行根据各自系统、防火墙不同做相应配置调整实施

附录

必用的基本页面规则:

通过实施安全域连接来提高安全性和性能
通过定义域的规范版本来保护您的 SEO
通过高级缓存功能降低带宽使用量和服务器负载
通过 HTTP/2 和积极的缓存策略优化性能。
-------------------------

高级DDoS防护和缓解
参考:https://www.cloudflare.com/zh-cn/ddos/
这是一些非常有用的官方知识;一定要看;下面摘引两个,也是我认为很重要的两个知识点,所有套餐未计量,即不计流量;I’m Under Attack 模式不会阻止搜索引擎抓取工具或您现有的 Cloudflare 白名单。

未计量的 DDoS 缓解以保持性能和可用性
分散式拒绝服务(DDoS)攻击的频率与强度日益升高。由于有数以百万计不安全的物联网(IoT)设备太容易让人入侵,如今要建立僵尸网路来发动高度分布式巨流量攻击,不仅较以往更容易,受影响的范围也更大。除了攻击量变大,攻击者还逐渐将攻击目标从网路层和传输层转往应用程式层(第 7 层)。应用程式层攻击在结构上更为复杂,而且通常只需要较少的资源就可以让网站或应用程式无法正常运作,进而使得操作中断,造成更大的影响。

DDoS 攻击通过降低网站和应用程序的性能和可用性来破坏正常的业务运营,有时甚至完全脱机。基础设施故障导致的平均停机成本为每小时 100,000 美元。这种性质的攻击可能导致客户流失,品牌退化和业务损失。

网站和应用程序需要可扩展网络的弹性和智能来对抗最大和最新的攻击。防范威胁不应该降低由安全引起的延迟导致的性能,并且安全服务必须易于配置,以消除可引入新漏洞的错误配置。

不影响爬虫

参考:https://developers.cloudflare.com/firewall/known-issues-and-faq/#how-do-i-create-an-exception-to-exclude-certain-requests-from-being-blocked-or-challenged

访问者在经自动测试确认是正当使用者后,就能自由浏览您的网站。为了进行测试,以及记录正确通过测试这一事实,需要JavaScript 和 Cookie。可以完全定制 IUAM 模式下访问者看到的页面,以便反映您的品牌。I’m Under Attack 模式不会阻止搜索引擎抓取工具或您现有的 Cloudflare 白名单。

知识库非常有必要看一下,我这里不再一一罗列 
DDoS业务详细介绍:
https://www.cloudflare.com/zh-cn/ddos/ 
https://support.cloudflare.com/hc/zh-cn
------------------------

使用CloudFlare CDN加速的经验技巧分享


CloudFlare(后文简称CF)是什么,怎么设置我这里就不赘述了,大家可以网上搜下CF的详细使用教程,有非常多的网友、博主分享了图文并茂的教程。下面主要是记录、分享一下张戈博客在使用CF中发现的一些经验或技巧,希望给在用或将要用CF的同学提供一些参考。

一、CNAME接入方式

了解过CF的同学可能知道了,CF免费套餐只能通过NS方式接入。这个方式用起来不够灵活、生效很慢,而且最重要的问题是没法在解析的时候手工解析到CF节点IP地址。
要实现CF的CNAME接入方式也很简单,这里使用第三方的CF管理平台即可,比如:BNXB:https://cdn.bnxb.com 。这类平台通过CF的API来操作域名,所以他们把CF的所有功能选项都本地化、中文化了,极大的降低了国内用户的使用门槛!当然,最吸引我的还是可以使用CNAME接入方式。


接入很简单,注册平台账号并参考提示绑定CF的API账号,即可在平台进行接入操作。这里可以直接选择CNAME接入方式。
如果觉得描述理解费劲,不知道怎么填写,其实也可以先选择DNS接入方式,然后在平台可以再次转换为CNAME方式。这个平台可以随时在CNAME和DNS接入方式之间互相转换。
接入完成后,我们可以参考网络上前人分享的一些经验,优化一下配置(都是中文的,这里我就不一一介绍了),平台会给出一个可用的CNAME记录。

二、指定节点解析

如上文图6最后所示,接入CF之后,CF会给域名分配一个入口IP,一般是美西洛杉矶那边的。这个IP其实是采用的AnyCast技术,当用户访问到时候,会就近分配一个真实的节点IP,以加快访问速度。所以,通过ping工具去探测出来的IP都只是AnyCast入口IP,并不能展示真实的节点IP地址是多少。
不过,要查看真实节点的IP的方法也很简单,CF每一个节点都有一个trace接口,访问方式为:http://{节点IP/域名}/cdn-cgi/trace。
通过实测发现,目前国内用户访问默认还是会走美西节点,只有移动和教育网会走香港节点。因此国内用CF的效果仍然不够乐观。如此一来,就会有同学奇思妙想了,既然能找到真实节点,那是不是我可以固定解析到一些速度快的节点呢?比如香港节点。答案是肯定的!!
有了上面CNAME接入的前提条件,我们就可以在域名解析那里任意解析到节点IP了。反之,使用NS方式接入就不能这么任性了。
CF的具体节点IP这里就不公布了,感兴趣的自己去谷歌、百度搜下看看。
这样一来,电信和联通2个大户,本来是走美西慢出翔,现在就可以走两个相对高速的节点了,速度得到极大提升!而默认线路使用CF默认分配的AnyCast入口IP,一是移动运营商用户可以走香港线路,二是为了兜底。说到兜底,这里不得不再分享一个dnspod的使用技巧——D监控.
dnspod的D监控功能,可以探测站点是否可用,若不可用可以自动切换到可用的IP。所以在图7,我给电信和联通都设置了2个IP(免费套餐最多2个)。也就是说,当D监控发现手工指定的CF节点宕机,则可以自动切换到另外2个IP(包括默认的AnyCast IP),也就又多了一层保障:


三、强制缓存配置

当我接入CF之后,我发现虽然我在cache等配置里面设置了缓存,实际上页面并没有缓存到CDN节点。最终,通过官网的帮助文档,发现CF默认并不会缓存html页面(文档地址: https://support.cloudflare.com/hc/en-us/articles/202775670),而需要设置自定义的Page Rules,这个和百度云加速那个自定义规则其实一模一样!所以说,百度云加速其实就是『借鉴』CF来设计的。


还是和百度云加速一样(或者说百度云加速和CF一样),免费套餐只能设置3条规则,因此不愿意花钱的我们也就只能如图设置了:除了后台和评论分页不缓存,其他一律缓存。如图所示,其中还有个最关键的地方,Edge Cache TTL这个选项必须要设置一下,否则依然不会缓存的哦!
虽然有些粗放,但是对于个人博客是可以接受的,除非有什么特殊页面也要求不缓存时,可能无法满足。当然,如果你确实需要更多规则,也可以花5刀/月额外购买5条:
另外,我从CF帮助文档看到,Page Rules其实是可以根据cookies来配置页面规则的,当时我没找到,应该是收费版本才有。就是不知道5刀购买的5条规则是否可用通过cookie实现更加灵活点配置。描述如下:
How do you specify cookie names for Bypass Cache Cookie or Cache on Cookie?
Note that Bypass Cache on Cookie is available only on Business and Enterprise plans & Cache on Cookie is Enterprise only.
You can specify multiple cookie names by using the OR “|” operator. For example, to match cookie1cookie2, or cookie3, you would write: cookie1|cookie2|cookie3. You can also use the wildcard “.*” operator, i.e. cookie1.*.
如果可以通过cookie来配置,那就非常强大了.
--------

CloudFlare Page Rules

https://support.cloudflare.com/hc/en-us/articles/218411427

CloudFlare Page Rules主要是用来方便你更加精准地控制好网站的某一个页面适用CloudFlare的CDN或者缓存规则,免费用户有3条规则可以添加。
从我个人的使用体验来看,CloudFlare Page Rules比较实用的功能有实现页面301跳转、控制某些经常更新的页面不生成缓存、调整特定的页面的安全防护等级等