小规模的CC攻击对于东灵君这样的贫穷小站长来说也是很恶心人的。没啥流量,但却搞的网站很慢。
从网上找来一个方法,Cloudflare自动拉黑恶意IP到防火墙和自动切换5秒盾脚本防CC攻击
https://wzfou.com/cloudflare-cc/
原理可行,只可惜自己试了代码跑不通。分析原因后发现这一版是给Apache写的。Nigix日志的时间格式比较另类,想改成我们习惯的 %Y-%m-%d %H:%M:%S形式比较麻烦。
本着能少改就少改的原则,我们不动日志格式,改改代码好了。
参考“将某个时间段的nginx的access.log日志进行收集”处理日志的方法
https://blog.csdn.net/weixin_43934170/article/details/106595967
代码修改为这样,上传可行,挺好用的。
鼓捣这段代码都踩了哪些坑?
1、时间要搞清楚
2、window编辑的脚本上传服务器后会出报错。务必保存为unix格式的。editplus可以在这里设置。
3、cloudflare,先用challenge看看跑起来的效果比较好。一上来就block,可能会误伤真人。
题外话
此方法看似很鸡肋,因为瞬时CC攻击会导致服务器饱和,卡死,然后这个脚本就不会执行,也就不会把ip提交给防火墙。
但是如果此方法配合“负载均衡”,再弄一台服务器,对抗小规模的攻击就很有效了。对于买不起高防ip,又总遭人攻击的小网站来说,还是个相当廉价的解决方案。
nigix显示真实ip
上面那个程序执行后发现一个坑,宝塔面板安装nigix日志显示的是cloudflare代理的ip。自己屏蔽自己有卵用。需要nigix配置
cloudflare官方给了一个方法,试了一下不管用,可能这个版本太老了。
https://support.cloudflare.com/hc/en-us/articles/200170786-How-do-I-restore-original-visitor-IP-with-Nginx
万能百度google,nginx.conf中加上这两段代码就可以了。
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
改好了,保存,重新加载配置项。检查日志,好了。
这个需要开启realip模块
宝塔默认是装好的,检查一下装没装可以用这个语句
/nginx -V为了防止直连ip访问的,还可以设置仅允许Cloudflare CDN的IP访问(这个有风险,我没用)。
参考这个https://www.daniao.org/4221.html
如果我们仅允许Cloudflare CDN的IP访问网站,我们可以直接在nginx配置中将Cloudflare CDN的IP添加到允许的范围内。
- #直接加入
- # https://www.cloudflare.com/ips
- # IPv4
- allow 103.21.244.0/22;
- allow 103.22.200.0/22;
- allow 103.31.4.0/22;
- allow 104.16.0.0/12;
- allow 108.162.192.0/18;
- allow 131.0.72.0/22;
- allow 141.101.64.0/18;
- allow 162.158.0.0/15;
- allow 172.64.0.0/13;
- allow 173.245.48.0/20;
- allow 188.114.96.0/20;
- allow 190.93.240.0/20;
- allow 197.234.240.0/22;
- allow 198.41.128.0/17;
- # IPv6
- allow 2400:cb00::/32;
- allow 2405:8100::/32;
- allow 2405:b500::/32;
- allow 2606:4700::/32;
- allow 2803:f800::/32;
- allow 2c0f:f248::/32;
- allow 2a06:98c0::/29
添加了一堆被阻止的ip的cloudflare你还需要会批量把这些ip删掉,不容光吃不拉会死人。
cloudflare api 介绍文档
https://api.cloudflare.com/#user-properties
移除黑名单参考这篇文章https://stackoverflow.com/questions/35625592/removing-aged-ip-blocks-from-cloudflare-with-cloudflare-api-and-php
这里面有坑,直接用无效。怎么改呢?