Как я могу реализовать ограничение скорости с помощью Apache? (запросы в секунду)

Какие методы и/или модули доступны для обеспечения надежного ограничения скорости (запросы | bytes/ip/unit time) в apache?

Ответ 1

Лучший

  • mod_evasive (больше внимания уделяется снижению воздействия DoS).
  • mod_cband (Лучше всего использовать "нормальный" контроль полосы пропускания)

а остальные

Ответ 2

Как указано в этот блог, возможно, возможно использовать Apache mod_security, чтобы реализовать ограничение скорости в секунду.

Конфигурация выглядит примерно так:

SecRuleEngine On

<LocationMatch "^/somepath">
  SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
  SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
  SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
  SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
  Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>

ErrorDocument 509 "Rate Limit Exceeded"

Ответ 3

Существует множество способов, в том числе брандмауэры веб-приложений, но самая простая вещь для реализации при использовании модема Apache.

Один такой мод, который я рекомендую, - mod_qos. Это бесплатный модуль, который очень эффективен против атак типа certin DOS, Bruteforce и Slowloris. Это упростит загрузку вашего сервера совсем немного.

Он очень мощный.

Текущая версия модуля mod_qos реализует механизмы управления для управления:

  • Максимальное количество одновременных запросов к местоположению/ресурсу (URL) или виртуального хоста.

  • Ограничение полосы пропускания, например, максимально допустимое количество запросов в секунду для URL-адреса или максимальное/минимальное количество загружаемых килобайт в секунду.

  • Ограничивает количество событий запроса в секунду (специальный запрос условий).

  • Ограничивает количество событий запроса в течение определенного периода времени.
  • Он также может обнаруживать очень важных лиц (VIP), которые могут получить доступ к веб-сервер без ограничений или с меньшим количеством ограничений.
  • Общий фильтр запросов и фильтр заголовков для отказа от несанкционированного доступа операции.

  • Запросить ограничение и фильтрацию данных тела (требуется mod_parp).

  • Ограничивает количество событий запроса для отдельных клиентов (IP).

  • Ограничения на уровне соединения TCP, например, максимальное количество разрешенные соединения с одного IP-адреса источника или динамического keep-alive.

  • Предпочитает известные IP-адреса, когда на сервере заканчивается бесплатный TCP соединения.

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

Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate                                 120

# limits the connections for this virtual host:
QS_SrvMaxConn                                     800

# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose                                600

# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP                                 50

# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP                    172.18.3.32
QS_SrvMaxConnExcludeIP                    192.168.10.

http://opensource.adnovum.ch/mod_qos/

Ответ 4

В Apache 2.4 есть новый складский модуль под названием mod_ratelimit. Для эмуляции скорости модема вы можете использовать mod_dialup. Хотя я не понимаю, почему вы просто не могли использовать mod_ratelimit для всего.

Ответ 5

К сожалению, mod_evasive не будет работать должным образом при использовании в конфигурациях без предварительного просмотра (последние настройки Apache в основном относятся к MPM)