Я читаю много тем сейчас, но моя проблема не может быть решена в достаточной мере:
Если запущен веб-сервер tomcat с бэкэндом с пружинным упором, должен должен быть способом ограничения возможных запросов в секунду / минуту / ... на основе, скажем, IP-адреса запрашивающего ,
Мои исследования привели к следующим возможностям:
- Используйте Guava RateLimiter или https://github.com/weddini/spring-boot-throttling и проверьте все запросы в preHandle. Но так как это не учитывает, какие IP-адреса в какое время запрашивались, было бы целесообразнее проверить что-то вроде хранилища REDIS (IP / время последнего доступа)
- Поместите более продвинутый веб-сервер перед tomcat, который предлагает эту функцию (например, apache2 или nginx)
Теперь мне не нравится первое решение, поскольку запросы уже попадают в само приложение, а второе решение создает дополнительный уровень, который, как я не могу поверить, необходим для такой основной проблемы.
Итак, мой вопрос: какие методы и решения мне здесь не хватает? Я читал кое-что о семафоре клапана Tomcat, но, похоже, он просто ограничивает общую скорость запросов.
Будет ли наиболее эффективно / возможно уже выполнять фильтрацию с некоторыми базовыми функциями, такими как iptables или fail2ban на порту 8443, и просто отбрасывать запросы по одному и тому же ip в заданный период времени?