Важной особенностью такого решения является то, что фактическая «блокировка» является очень недорогой с точки зрения ресурсов.Также важно правильно распознать злоумышленников и не забанить кого-то случайно, но также не будьте слишком открыты, так что вы уже потратили много ресурсов, прежде чем блокировать кого-либо.
Однако вы не первый, кто испытывает этопроблема.
Существует отличный модуль apache, называемый mod_evasive, который настроен именно на это.
Однажды я применил очень простую технику на сервере (потому что она работала лучше с этим приложением partuclar.) с потоком, подобным следующему:
Мое приложение подсчитывает переменную в локальном кэше apc с ключом, который был текущим часом дня, и IP-адресом пользователя и проверяет, достигнут ли лимит.
Если так, то адрес ip записывается в журнал заданий, где cronjob поднял его и добавил фильтр, используя iptables, чтобы пакеты из этого ip просто отбрасывались.
Таким образом, они даже не достигаютвеб-сервер и затраченные ресурсы минимальны.
Один раз в день добавленные правила очищаютсяд.