利用 fail2ban 来控制 Laravel 站点的异常流量

说明

最近这段时间 LK 经常遭遇异常流量。

何为异常流量:

  • 非主流搜索引擎的爬虫,算法垃圾,暴力爬取;
  • 渗透性测试的机器人,高并发;
  • 恶意获取站点内容的爬虫,暴力爬取。

以上三种请求 IP 池子都不小,人工去过滤 IP 不管用。这类似于 DDOS 了。

限流

  • Nginx 可开启配置 limit_req_zone 和 limit_conn_zone 参数,进行限流操作;
  • Laravel 添加限流,针对耗时的请求,调低请求阈值。

IP 黑名单

虽有 Laravel 限流,仍扛不住高并发的请求,因 Laravel 本身启动就会消耗大量的资源。

所以需要找一个工具,在 nginx 的请求还未迭代给 php-fpm 前,甚至在进入 nginx 之前,就将非法请求处理掉,这是最高效的。

最终选用 fail2ban 来处理恶意请求。

1. 安装和使用 fail2ban

这篇文章主要讲思路。安装和使用请参考以下两个文章:

2. Laravel 创建黑名单

Laravel 中的规则是,对特殊的 User Agent 或奇怪的请求 Query 进行匹配,发现异常的 IP 就响应到 418 状态码,这就相当于把 IP 加到黑名单了。

fail2ban 会自动解析 nginx 日志,发现 418 的就会对其 IP 进行访问限制。

结语

目前来讲效果不错,继续观察,还是不行就继续搞。

本作品采用《CC 协议》,转载必须注明作者和本文链接
摈弃世俗浮躁,追求技术精湛
本帖由系统于 8个月前 自动加精
Summer
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 22

:+1: :+1: :+1:

8个月前 评论

兵来将挡,水来土掩

8个月前 评论

应该算CC攻击吧

8个月前 评论

最近老是遇到短信接口被刷的情况,虽然做了外国ip拦截,但是还是不停的请求接口,基本都是一秒几条请求,看日志一天都2GB

8个月前 评论
PHP布道者 8个月前
人艰不拆 8个月前
wangbin (作者) 8个月前
wangbin (作者) 8个月前

上个免费的CloudFlare cdn也可以过滤很大一部分

8个月前 评论
xuchunyang 8个月前
Summer (楼主) 8个月前
小白要生发 2个月前

遇到了同样问题,免费站点,不注册就能看的

根据ua直接返回444,比如windows ce/98/2000, android [2-9]

国外的asn,各大云厂商的asn直接ban

后来发现还是不行,对方用了代理ip,都是国内正常家宽,开cf的5秒盾吧真的影响用户体验,而且挂了cf晚高峰国内基本无法访问,验证后返回内容也影响搜索引擎收录

8个月前 评论
Summer (楼主) 8个月前
晏南风 8个月前
随波逐流

是否可以使用 openresty + lua, 来控制黑名单呢

8个月前 评论
lovewei 8个月前

刚刷到有人反馈 站长就处理了,反应 :+1: :+1: :+1:

8个月前 评论

是看到什么证据发现有人在爬虫的?学习学习

8个月前 评论
小李世界 8个月前

前段时间被CC 攻击了 一个月 ,
服务器 物理机 DELL R740 双CPU 6148 算是超高配了 被攻击期间 服务器cpu 百分之百;
起初宝塔防火墙 由于宝塔防火墙 也是通过服务器来处理的 最终还是打到了 服务器上;
CF五秒盾牌无效~
最后解决 CF + 服务器检测到被攻击 则 自动python 加入到CF防火墙 拉黑IP 解决;
不要自己扛 用CDN拉黑IP
如果你也遇到此类状况 可以 使用的方式哈~

7个月前 评论

最近看到一个开源项目:

github.com/crowdsecurity/crowdsec

据称速度是 fail2ban 的 60 倍!!!

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!