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

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

7 ответов


лучшие

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

а остальные


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

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

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

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

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

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

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

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

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

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

  • ограничивает количество событий запроса для отдельных клиентов (ИНТЕЛЛЕКТУАЛЬНАЯ СОБСТВЕННОСТЬ.)

  • ограничения на уровне 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/


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


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


еще один вариант - mod_qos

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

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


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

Если это для защиты от перегрузки сервера, на самом деле имеет смысл поставить NGINX перед ним и настроить