апач, как ограничить на пользовательский IP

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

я хочу позволить загрузку файлов на этих условиях:

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

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

я видел сотни статей и вопросов о том, как ограничить количество Соединений на основе IP. но ни один на основе User. разъясниться a User я обращаюсь к a valid-user в htpasswd файл.

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

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

и я добавил require valid-user к htaccess.

  • john подключения для получения file.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 как активные соединения), не (позвольте) [никакие другие соединения от simon]
  • john от 192.168.2.8 загрузка концов file.zip
  • john от 192.168.2.9 хочет загрузить файл (позволяют).

заранее спасибо.

0
задан 9 August 2014 в 14:33
1 ответ

Использовать iptables? Возможно, это не идеально, но я надеюсь, что это укажет вам правильное направление. Если у вас несколько виртуальных хостов, где вы не хотите этого ограничения, вам, возможно, придется разместить его на отдельном IP или немного поиграть с назначением.

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 1 -j REJECT --reject-with tcp-reset
0
ответ дан 5 December 2019 в 13:34

Теги

Похожие вопросы