Apache로 요금 제한을 구현하려면 어떻게해야합니까? (초당 요청)

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

  •  02-07-2019
  •  | 
  •  

문제

Apache에서 강력한 속도 제한 (요청 | 바이트/IP/단위 시간)을 구현하기 위해 어떤 기술 및/또는 모듈을 사용할 수 있습니까?

도움이 되었습니까?

해결책

최고

  • 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. Certin DOS, Bruteforce 및 Slowloris 유형 공격에 매우 효과적인 무료 모듈입니다. 이렇게하면 서버로드가 상당히 용이 해집니다.

매우 강력합니다.

현재의 출시 mod_qos 모듈은 관리 할 제어 메커니즘을 구현합니다.

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

  • URL에 대한 초당 최대 허용 요청 수 또는 초당 최대/최소의 최소/최소 값과 같은 대역폭의 제한.

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

  • 정의 된 기간 내에 요청 이벤트 수를 제한합니다.
  • 또한 제한 사항이 없거나 적은 제한없이 웹 서버에 액세스 할 수있는 매우 중요한 사람 (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 비 포크 구성에서 사용될 때 예상대로 작동하지 않습니다 (최근 Apache 설정은 주로 MPM입니다)

하나 더 옵션 -MOD_QOS

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

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

한도를 평가하는 이유에 따라 다릅니다.

서버에 과부하를 방지하는 경우 실제로 서버 앞에 Nginx를 넣고 구성하는 것이 합리적입니다. 요율 제한 거기. NGINX는 훨씬 적은 리소스를 사용하기 때문에 10 만 연결 당 MB와 같은 자원을 사용하기 때문에 의미가 있습니다. 따라서 서버가 침수되면 Nginx는 비율 제한 (무의미한 양의 리소스 사용)을 수행하고 허용 트래픽을 Apache로만 전달합니다.

당신이 뒤 따르는 것이 단순성이라면 mod_evasive와 같은 것을 사용하십시오.

평소와 같이 DDOS 또는 DOS 공격으로부터 보호하려면 CloudFlare와 같은 서비스를 사용하여 속도 제한이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top