[apache] Apache로 속도 제한을 어떻게 구현할 수 있습니까? (초당 요청)

Apache에서 강력한 속도 제한 (requests | bytes / ip / unit time)을 구현하는 데 사용할 수있는 기술 및 / 또는 모듈은 무엇입니까?



답변

최고

나머지


답변

이 블로그 게시물 에서 언급했듯이 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 입니다. certin DOS, Bruteforce 및 Slowloris 유형 공격에 대해 매우 효과적인 무료 모듈입니다. 이렇게하면 서버로드가 상당히 완화됩니다.

그것은 매우 강력 합니다.

mod_qos 모듈 의 현재 릴리스는 다음 을 관리하기위한 제어 메커니즘을 구현합니다.

  • 위치 / 리소스 (URL) 또는 가상 호스트에 대한 최대 동시 요청 수입니다.

  • URL에 대한 초당 최대 허용 요청 수 또는 다운로드 된 초당 최대 / 최소 KB와 같은 대역폭의 제한.

  • 초당 요청 이벤트 수를 제한합니다 (특수 요청 조건).

  • 정의 된 기간 내에 요청 이벤트 수를 제한합니다.
  • 또한 제한없이 또는 제한없이 웹 서버에 액세스 할 수있는 매우 중요한 사람 (VIP)을 감지 할 수 있습니다.
  • 무단 작업을 거부하는 일반 요청 라인 및 헤더 필터.

  • 본문 데이터 제한 및 필터링을 요청합니다 (mod_parp 필요).

  • 개별 클라이언트 (IP)에 대한 요청 이벤트 수를 제한합니다.

  • TCP 연결 수준에 대한 제한 (예 : 단일 IP 소스 주소 또는 동적 연결 유지 제어에서 허용되는 최대 연결 수).

  • 서버에 사용 가능한 TCP 연결이 부족할 때 알려진 IP 주소를 선호합니다.

이것은 당신이 그것을 사용할 수있는 샘플 구성입니다. 요구 사항에 맞는 수백 가지 구성이 가능합니다. 컨트롤에 대한 자세한 정보는 사이트를 방문하십시오.

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프리 포크가 아닌 구성에서 사용할 때 예상대로 작동하지 않습니다 (최근 아파치 설정은 주로 MPM 임).


답변

하나 더 옵션-mod_qos

구성이 간단하지는 않지만 강력합니다.

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


답변

속도 제한을 원하는 이유에 따라 다릅니다.

서버 과부하로부터 보호하려면 실제로 NGINX를 앞에 놓고 거기에 속도 제한을 구성 하는 것이 좋습니다. NGINX는 1 만 연결 당 몇 MB 정도의 리소스를 훨씬 적게 사용하기 때문에 이치에 맞습니다. 따라서 서버가 플러드되면 NGINX는 속도 제한 (미미한 양의 리소스 사용)을 수행하고 허용 된 트래픽 만 Apache로 전달합니다.

당신이 추구하는 것이 단순하다면 mod_evasive와 같은 것을 사용하십시오.

평소처럼 DDoS 또는 DoS 공격으로부터 보호하려면 속도 제한이있는 Cloudflare와 같은 서비스를 사용하세요.