Cloudflare-Block定时监控系统负载自动切换防御级别 时间: 2020-03-03 15:25 分类: 服务器 ###前言 好吧,最近网站又被同行恶意打爆了。 正所谓害人之心不可有,防人之心不可无。之前的我还是太过年轻了,才会导致频发的悲剧,这一次比较惨,由于是周末,服务器商那边的技术都放假了,我提交的工单被一个网页前台的客服给接了,问他什么时候能够解除限制,然鹅对方估计是屁都不懂,一直叫我停止攻击,然后重装系统。 看得我当场差点吐血,首先,是别人攻击我,叫我停止攻击这是个啥玩意? 然后就是重装系统,我一脸的黑脸问号。这是第一次碰到这种服务器被`DDOS`IP被挂起叫我重装系统解决的。 然后我就简单的用我那三毛钱英语给他解释了一下:这是别人在攻击我,不是我自己攻击自己;你叫我重装系统,没有网络我该如何备份数据。 邮件反复聊了几次,每次都是等个半个小时以上回复我一次,他们后台有个虚拟机的`VNC`网页版,又一次叫我到那上面去备份,What the fuck? 那不就是个局域网连进去的吗,再次被这个屁都不懂客服给气晕了。最后还给我来了个: > Unfortunately, it is not possible to remove the limits from your VPS without reinstalling. 好吧,这个时候我已经不抱任何希望了,完全可以确定这个客服就是个小白了。直接邮件让他们找个专业的技术人员来帮我处理这个问题,最后这个时候他才回复说把问题已经转交给了技术人员,第二天的上班时间将会处理。 唉,折腾我一晚上,最后第二天他们那边上班时间的前5分钟左右,技术人员立马就给我解除限制了。 ###防御 经过上面的惨痛教训,不得不对服务器做出相应的防御措施了。 首先,除了 ssh 端口关闭服务器上的所有其他端口,套上`Cloudflare`的免费`CDN`,当然,这个时候所有端口都关闭了,`Cloudflare`的`CDN`也是无法使用的,所以需要在防火墙里面将`Cloudflare`的 IP 地址段移除,下面是官方给的一些地址段,也可以用在获取用户的真实IP的配置里面,这里我就贴下`Nginx`里面的配置: ``` set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 2400:cb00::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29; real_ip_header CF-Connecting-IP; real_ip_recursive on; ``` 上面是Nginx用来获取用户真实IP的配置,上面的`IP`地址段可能会有所改变,可以到官网去查看最新的地址段: [https://www.cloudflare.com/ips/][1] 好了,现在即使对方知道你之前被攻击网站的真实IP,也无法直接对你发起攻击了,因为对方无法直接访问你的80或者443端口了,当然,这个时候如果`Cloudflare`的防御级别比较低的话,对方还是照样可以穿透`Cloudflare`的防御将你的服务器打爆,我的就是这样,如果防御级别没有设置成`I'm under attack!`,CPU 还是被对方打得满满的。 难道我们就一直要开着`5秒盾`?这对SEO非常的不友好,用户体验也不行,有很多用户不懂英文以为网站被黑了,还没等5秒就关闭了,搞不懂`Cloudflare`为什么不能自定义等待信息,哪怕给个中文的等待也行呀。 废话不多说,既然不能一直开着最高防御级别,那么我们首先想到的肯定就是定时任务了,定时监控`CPU`使用率来动态地调整防御级别,贴心的是,官方给我们提供了现成的脚本,`Github`地址如下: [https://github.com/Machou/Cloudflare-Block][2] 使用超级,简单,这里就不再过多赘述了。 使用的时候记得先测试好了再添加到定时任务里面去,不要一顿配置立马添加定时任务就不管了。 我在使用的时候就有这种问题:设置防御级别失败,原因是``zone_id`填写错误;脚本报错,`bc`命令没有安装。 所以先手动运行测试没问题之后再添加到定时任务里去,手动测试就是直接执行: > ./Cloudflare.sh 0 [1]: https://www.cloudflare.com/ips/ [2]: https://github.com/Machou/Cloudflare-Block 标签: 无