我有一个受密码保护的目录,其中 htpasswd 文件中有数百个用户。
我想允许在以下条件下下载文件:
- 检查用户名是否有效(已经完成)。
- 检查是否存在具有相同用户名的另一个连接。(有用于检查来自相同 IP 的连接是否存在的模块,但我没有找到任何基于用户名的模块)
- 如果 2 正确,请检查两个连接是否来自同一个 IP。
换句话说,如何限制每个用户同时只能从 1 个 IP 下载?
我已经看到数百篇关于如何根据 IP 限制连接数的文章和问题,但没有一篇基于User
。需要澄清的是,User
我指的是文件valid-user
中的a。htpasswd
举个例子:假设我有一个包含以下用户的 htpasswd:
simon:$apr1$oL5flt.H$ayy6GOm0TblhH3lJXqf9o0
john:$apr1$JLGdTKlz$72ImnSlauIsCRV4lkrqE3/
我已添加require valid-user
到 htaccess。
john
通过 1 个连接获取 file.zip192.168.2.8
。(允许)john
从 .(allow) 开始再建立 31 个连接,使连接总数达到 32 个(实际上可以是任意数字)192.168.2.8
[因为 ip 与已经活动的连接匹配]john
在关闭先前的连接之前,连接192.168.2.9
以获取任何文件。(拒绝)[因为活动连接具有不同的 IP]simon
连接来自192.168.2.8
(与活动连接相同的 IP),(允许)[没有来自 simon 的其他连接]john
192.168.2.8
下载完毕file.zip
john
来自192.168.2.9
想要下载文件(允许)。
提前致谢。
答案1
使用 iptables?下面的内容可能并不完美,但我希望它能为您指明正确的方向。如果您有多个虚拟主机,而您不希望受到此限制,则可能需要将其放在单独的 IP 上或稍微调整一下目标。
/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 1 -j REJECT --reject-with tcp-reset