我有一个基于Perl的CGI /快速CGI Web服务,并希望通过IP地址对客户端进行速率限制,以阻止侵略性客户端造成太多工作.
我查看了一些代码并在CPAN中找到了Algorithm :: TokenBucket,但这是针对客户端请求的; 它没有持久性,没有每用户配置,因此对服务器端速率限制没有用.
我正在寻找已经存在的东西的建议,否则我需要基于一些简单的持久性来自行推送,例如绑定到DB_File每IP地址和一些执行令牌管理的批处理作业.
我通过跟踪每个IP地址的命中率,使用Cache :: FastMmap进行速率限制.它是一个缓存,因此数据会随着时间的推移而过期,但如果您设置了大小和到期时间,这应该不是问题.
IP地址是散列键,散列值是时间戳数组.我有第二个数据结构(也由Cache :: FastMMap支持),它是被禁止的IP地址的哈希,根据第一个结构的数据更新.