我想使用 squid 限制从单个 IP 获得的请求数量(假设我必须出于政治原因使用 squid),阻止那些在规定时间内发出过多请求的请求。
我正在考虑编写一个简短的 Perl 脚本和一个 external_acl_type,带有延迟池,但我不确定可以将哪些参数传递给辅助函数。
就像是:
external_acl_type rate_limit /usr/bin/squid-access-control dst
但我不确定这是否有效?
答案1
因此我想到了一个解决方案,我认为非常值得记录下来,如下所示:
- Squid 记录它收到的所有请求
- 对于 CDN 请求,squid 会遵循 X-forwarded-For 标头,将实际的客户端 IP 留在日志中
- Fail2ban 检查日志,记录客户端每分钟发出了多少个请求等
- 当客户端发出 X 个请求时,它将被放入蠕动IP 列表,其中重写请求以指向负载均衡器上的 Web 服务器。
- Squid 发现此问题后,拒绝该请求访问实际的网络服务器,并允许它们访问在负载均衡器上运行的 thttpd 服务器,该服务器托管一个“您被禁止了!”的网页。