Назад | Перейти на главную страницу

Ограничение количества запросов к определенному набору URL-адресов по IP-адресу

Я работаю над сайтом, который будет разрешать загрузку пользователям, там будет около 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/

Приведенный выше код ограничивает количество подключений до одной загрузки, но, как вы можете видеть, концепция может быть расширена, чтобы ограничить общее количество загрузок.