Кальмар, ограничивающий скорость
Я хочу ограничить количество запросов, которые мы получаем от отдельных IP-адресов, используя squid (предположим, я должен использовать squid по политическим причинам), блокируя те, которые делают слишком много запросов за определенный период времени.
Я подумывал написать короткий Perl-скрипт и external_acl_type с пулом задержек, но я не уверен, какие параметры я могу передать вспомогательной функции.
что-то вроде:
external_acl_type rate_limit / usr / bin / squid-access-control dst
но я не уверен, что это сработает?
1 ответ
Решение
Таким образом, решение, которое я придумал и которое, я думаю, вполне заслуживает документирования, заключается в следующем:
- Squid регистрирует все полученные запросы
- Для запросов CDN squid следует за заголовком X-forwarded-For, оставляя фактический IP-адрес клиента в журналах
- Fail2ban проверяет журналы, записывает, сколько запросов делают клиенты в минуту и т. Д.
- Когда клиент делает X запросов, он помещается в список IP-адресов Squirm, в котором запрос переписан так, чтобы указывать на веб-сервер в loadbalancer.
- Squid подхватывает это, отказывает этому запросу в доступе к реальным веб-серверам и предоставляет им доступ к серверу thttpd, работающему на loadbalancer, на котором размещена веб-страница "Вы забанены!"