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

StackOverflow https://stackoverflow.com/questions/131681

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Лучшее

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

и остальное

Другие советы

Как сказано в этот блог пост кажется возможным использовать 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"

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

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

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

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

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

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

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

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

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

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

  • Ограничения на уровне соединения TCP, например, максимальное количество разрешенных подключений с одного адреса источника IP или динамического управления Heport-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/

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

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

Еще один вариант — mod_qos

Не простой в настройке, но мощный.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top