apache如何限制每个用户的ip

apache如何限制每个用户的ip

我有一个受密码保护的目录,其中 htpasswd 文件中有数百个用户。

我想允许在以下条件下下载文件:

  1. 检查用户名是否有效(已经完成)。
  2. 检查是否存在具有相同用户名的另一个连接。(有用于检查来自相同 IP 的连接是否存在的模块,但我没有找到任何基于用户名的模块)
  3. 如果 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.zip 192.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 的其他连接]
  • john192.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

相关内容