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

62

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

  • 0
    Я использую tc Linux на веб-сервере, потому что Red Hat 6 имеет только Apache 2.2.
Теги:
apache2
ddos

6 ответов

46
Лучший ответ

Лучший

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

а остальные

  • 10
    Я не мог найти ничего, чтобы ограничить количество подключений в день по IP-адресу. Я провел всю ночь в поисках, это позор.
  • 1
    Кто-нибудь знает, есть ли способ заставить mod_evasive смотреть на заголовок вместо IP, для работы за обратным прокси?
Показать ещё 8 комментариев
15

Как указано в этот блог, возможно, возможно использовать 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
    Это было идеально для меня, с уже запущенным modsec2. Просто нужно было добавить идентификаторы в правила для соответствия версии modsec, например, так: <LocationMatch "^ / somepath"> SecAction initcol: ip =% {REMOTE_ADDR}, pass, nolog, id: 10000001 SecAction ", фаза: 5, deprecatevar: ip.somepathcounter = 1/1, pass, nolog, id: 10000002 "SecRule IP: SOMEPATHCOUNTER" @gt 60 "" фаза: 2, пауза: 300, отказать, статус: 509, setenv: RATELIMITED, пропуск: 1, nolog, id: 10000003 Фаза "SecAction": 2, проход, setvar: ip.somepathcounter = + 1, nolog, id: 10000004 "Заголовок всегда установлен Retry-After" 10 "env = RATELIMITED </ LocationMatch>
  • 2
    Также обратите внимание, что вы можете изменить количество разрешенных исходных пакетных запросов, отредактировав «@gt 60», а также то, насколько быстро он «перезаряжает» ограничение, отредактировав бит ip.somepathcounter = 1/1. 1/1 позволяет один дополнительный запрос в секунду. 1/2 позволяет делать один дополнительный запрос каждые 2 секунды и т. Д.
Показать ещё 2 комментария
9

Существует множество способов, в том числе брандмауэры веб-приложений, но самая простая вещь для реализации при использовании модема 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/

  • 0
    этот работает только в старом apache2.2, не работает в apache2.4 +, не так ли?
5

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

5

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

  • 0
    Обратите внимание , что mod_dialup использует асинхронный SUSPENDED состояние, а не тратить на ожидание темы, в то время как mod_ratelimit, как сейчас, строго потоков за соединение. ср thread.gmane.org/gmane.comp.apache.cvs/20490
1

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

Непростая настройка - но мощная.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню