2008-09-25 7 views
66

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

+0

Я использую для Linux [дц] (http://www.lartc.org/howto/lartc.qdisc.classless.html#AEN690) на веб-сервере, так как Red Hat 6 имеет только Apache 2.2. – ceving 2014-05-19 12:17:18

ответ

48

Лучший

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

и отдыха

+10

Я не мог найти ничего, чтобы ограничивать соединения в день по IP-адресу. Я всю ночь искал, это позор. – Greg 2009-06-08 12:56:37

+1

Кто-нибудь знает, есть ли способ получить mod_evasive, чтобы посмотреть на заголовок вместо IP, если он работает за обратным прокси-сервером? – 2010-11-15 17:57:49

+1

@StavrosKorokithakis Может быть, это поможет? http://stderr.net/apache/rpaf/ Я полагаю, что это сделает IP-адрес X-Forwarded таким, как если бы он был исходным IP-адресом для всех модулей apache, загруженных после него. – Eli 2011-10-25 21:32:27

5

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

15

Как указано в this blog пост представляется возможным использовать для 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" 
5

К сожалению, mod_evasive не будет работать, как ожидалось при использовании в конфигурации без PreFork (недавние расстановок Апач в основном MPM)

9

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

Один такой мод, который я рекомендую, является mod_qos. Это бесплатный модуль, который очень эффективен против сертификатов 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/