根据 IP 地址限制对特定 URL 集的请求数

根据 IP 地址限制对特定 URL 集的请求数

我正在开发一个网站,该网站将允许用户下载,大约有 2,000,000 个文件可供下载。

我们希望阻止人们抓取并窃取所有这些文档,因此希望在一定时间内限制我们处理的包含 URL 模式的请求数量。我们很高兴网站的其他部分被抓取,因此不想对此进行限制。

我们在 robots.txt 中设置了排除项,以阻止爬虫获取文件。我们更担心恶意或行为不当的爬虫。

我们希望使用 apache 将文档的下载数量限制为每个 IP 地址每分钟约 1 个。

有没有最佳实践方法可以做到这一点?

我们正在使用带有 apache2.2 的 Centos

有很多类似的问题,但大多数似乎都集中在带宽限制上,这不是我想要的。

答案1

我认为不存在限制每个 IP 每次连接的模块。但你应该尝试一下limitipconnmod_cband... 可能一起可以做到这一点。或者您可以将 limitipconn 与 iptables 一起使用。

要做到这一点你可能需要使用 iptables:

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 1/minute -j ACCEPT

我没有测试过这个规则,只是对你应该看的内容提供一个提示。

如果您使用 iptables,您应该为您的主站点和文档部分设置 2 个 ip 和不同的虚拟主机,以仅限制文档的 ip(虚拟主机)。

问候

答案2

您应该能够使用 mod_evasive,它可以限制某个 IP 地址在特定时间段内对特定 URI 或站点发出的请求数量。

如果某个 IP 地址超出此限制,则会被阻止一段时间,如果用户再次尝试访问该 URI,则会收到 403 错误。您还可以在 IP 地址超出限制时发送邮件或执行脚本。

了解更多信息: http://www.zdziarski.com/blog/?page_id=442

答案3

您似乎希望做一些类似于 RapidShare 等网站所做的事情。据我所知,您无法在 Apache 的配置文件中执行此操作;它至少需要服务器端脚本(可能是 PHP)和一个小型数据库来跟踪请求并在用户满足条件时提供下载。

下面是一个使用 PHP 和 MySQL 的示例,需要稍加调整才能适合您的情况:http://www.web-development-blog.com/archives/limit-the-number-of-downloads-per-client/

上述代码将连接数限制为单次下载,但正如您所见,这个概念可以扩展为限制总下载次数。

相关内容