apache как ограничить на пользователя ip

У меня есть защищенный паролем каталог с сотнями пользователей в файле htpasswd.

Я хочу разрешить загрузку файлов на следующих условиях:

  1. проверьте правильность имени пользователя (уже сделано).
  2. проверьте, существует ли другое соединение с тем же именем пользователя. (существуют модули для проверки соединения с того же ip, но я не нашел ни одного на основе имени пользователя)
  3. если 2 правильно, проверьте, оба ли соединения приходят с одного и того же IP.

другими словами, как ограничить каждого пользователя скачивать только с 1 IP одновременно?

Я видел сотни статей и вопросов о том, как ограничить количество соединений на основе IP. но никто не основан на User, уточнить User я имею в виду valid-user в htpasswd файл.

Пример: допустим, у меня есть htpasswd со следующими пользователями:

simon:$apr1$oL5flt.H$ayy6GOm0TblhH3lJXqf9o0
john:$apr1$JLGdTKlz$72ImnSlauIsCRV4lkrqE3/

и я добавил require valid-user чтобы получить доступ.

  • john подключается, чтобы получить файл.zip из 192.168.2.8 с 1 подключением. (разрешать)
  • john делает еще 31 соединение на общую сумму 32 (или любое число на самом деле) из 192.168.2.8. (разрешить)[потому что ip соответствует уже активным соединениям]
  • john соединяется с 192.168.2.9 получить любой файл перед закрытием прежних подключений. (запретить)[потому что у активных подключений разные ip]
  • simon соединяется с 192.168.2.8 (тот же IP, что и у активных подключений), (разрешить)[других подключений от симона нет]
  • 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
Другие вопросы по тегам