Я работаю над сайтом, который будет разрешать загрузку пользователям, там будет около 2 000 000 файлов, которые можно будет скачать.
Мы хотим отговорить людей от сканирования и получения всех этих документов, поэтому хотели бы ограничить количество запросов, которые мы обслуживаем, содержащих шаблон URL, в течение определенного периода времени. Мы рады сканированию остальной части сайта, поэтому не хотим ограничивать это.
Мы помещаем исключение в robots.txt, чтобы предотвратить получение файлов сканерами. нас больше беспокоят злонамеренные или некорректно работающие сканеры.
Мы хотели бы использовать apache, чтобы ограничить количество загрузок документов примерно до 1 в минуту на каждый IP-адрес.
Есть ли лучший способ сделать это?
мы используем Centos с apache2.2
Есть много похожих вопросов, но большинство из них, похоже, сосредоточено на ограничении пропускной способности, чего я не хочу.
У вас должна быть возможность использовать mod_evasive, где вы можете ограничить количество запросов, которые IP-адрес может делать к определенному URI или сайту в определенный период времени.
Если IP-адрес превышает этот предел, он будет заблокирован на определенный период времени и получит ошибку 403, если пользователь снова попытается получить доступ к URI. Вы также можете рассылать письма или выполнять скрипт, когда IP-адрес превышает лимит.
Чтобы получить больше информации: http://www.zdziarski.com/blog/?page_id=442
Я не думаю, что существует модуль для ограничения количества подключений за раз на IP. Но тебе стоит немного поиграть с limitipconn и mod_cband ... наверное, вместе сможем это сделать. Или вы можете использовать limitipconn с iptables.
Для этого, вероятно, вам следует использовать iptables:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 1/minute -j ACCEPT
Я не проверял это правило, это всего лишь намек на то, что вам следует искать.
Если вы используете iptables, у вас должно быть 2 IP-адреса и разные виртуальные хосты для вашего основного сайта и раздела документов, чтобы ограничить только IP (виртуальный хост) для документов.
С уважением
Кажется, вы хотите сделать что-то похожее на то, что делают такие сайты, как RapidShare. Насколько мне известно, вы не можете сделать это в файлах конфигурации Apache; для этого потребуется как минимум сценарий на стороне сервера (вероятно, PHP) с небольшой базой данных, чтобы отслеживать запросы и обслуживать загрузки, если пользователь соответствует критериям.
Вот пример с PHP и MySQL, который необходимо немного адаптировать для вашей ситуации: http://www.web-development-blog.com/archives/limit-the-number-of-downloads-per-client/
Приведенный выше код ограничивает количество подключений до одной загрузки, но, как вы можете видеть, концепция может быть расширена, чтобы ограничить общее количество загрузок.