apache как ограничить на пользователя ip
У меня есть защищенный паролем каталог с сотнями пользователей в файле htpasswd.
Я хочу разрешить загрузку файлов на следующих условиях:
- проверьте правильность имени пользователя (уже сделано).
- проверьте, существует ли другое соединение с тем же именем пользователя. (существуют модули для проверки соединения с того же ip, но я не нашел ни одного на основе имени пользователя)
- если 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