Как я могу реализовать ограничение скорости с Apache? (запросов в секунду) - PullRequest
75 голосов
/ 25 сентября 2008

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

Ответы [ 7 ]

52 голосов
/ 25 сентября 2008

Лучшие

  • mod_evasive (больше внимания уделяется снижению DoS-облучения)
  • mod_cband (Лучше всего подходит для «нормального» управления пропускной способностью)

и остальные

18 голосов
/ 03 декабря 2013

Как указано в этом блоге пост, представляется возможным использовать 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"
10 голосов
/ 13 февраля 2015

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

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

Это очень мощный .

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

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

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

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

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

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

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

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

  • Предпочитает известные 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/

6 голосов
/ 16 июля 2013

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

5 голосов
/ 20 декабря 2013

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

2 голосов
/ 08 августа 2013

Еще одна опция - mod_qos

Не просто настроить - но мощный.

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

1 голос
/ 25 сентября 2018

Зависит от того, почему вы хотите оценить ограничение.

Если это необходимо для защиты от перегрузки сервера, на самом деле имеет смысл поставить NGINX перед ним и настроить ограничение скорости . Это имеет смысл, потому что NGINX использует гораздо меньше ресурсов, что-то вроде нескольких МБ на десять тысяч соединений. Таким образом, если сервер загружен, NGINX выполнит ограничение скорости (используя незначительное количество ресурсов) и передаст только разрешенный трафик в Apache.

Если все, что вам нужно, это простота, тогда используйте что-то вроде mod_evasive.

Как обычно, если это необходимо для защиты от DDoS или DoS-атак, используйте службу типа Cloudflare, которая также имеет ограничение скорости.

...