Apache에서 강력한 속도 제한 (requests | bytes / ip / unit time)을 구현하는 데 사용할 수있는 기술 및 / 또는 모듈은 무엇입니까?
답변:
mod_evasive
많은 온라인 추천을 받고 있지만, 2017 년 중반에 자신의 블로그에서 이상하게도 모든 참조를 삭제 한 작성자 인 Jonathan Zdziarski에 의해 포기 된 것으로 보입니다 . 소스 코드는 여전히 업로드 로 사용할 수 있습니다 . 다른 프로젝트는 지난 6 년 (또는의 경우 15 년) 동안 업데이트되지 않았습니다 mod_limitipconn
.
이 블로그 게시물 에서 언급했듯이 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"
mod_security
로 Apache 프로젝트가 아닙니다.
웹 애플리케이션 방화벽을 포함한 다양한 방법이 있지만 Apache 모드를 사용하는 경우 구현하기 가장 쉬운 방법입니다.
제가 추천하고 싶은 모드 중 하나는 mod_qos 입니다. certin DOS, Bruteforce 및 Slowloris 유형 공격에 대해 매우 효과적인 무료 모듈입니다. 이렇게하면 서버로드가 상당히 완화됩니다.
그것은 매우 강력 합니다.
mod_qos 모듈 의 현재 릴리스는 다음 을 관리하기위한 제어 메커니즘을 구현합니다.
위치 / 리소스 (URL) 또는 가상 호스트에 대한 최대 동시 요청 수입니다.
URL에 대한 초당 최대 허용 요청 수 또는 다운로드 된 초당 최대 / 최소 KB와 같은 대역폭의 제한.
초당 요청 이벤트 수를 제한합니다 (특수 요청 조건).
무단 작업을 거부하는 일반 요청 라인 및 헤더 필터.
본문 데이터 제한 및 필터링을 요청합니다 (mod_parp 필요).
개별 클라이언트 (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.
Apache 2.4에는 mod_ratelimit 라는 새로운 스톡 모듈이 있습니다 . 모뎀 속도를 에뮬레이션하려면 mod_dialup 을 사용할 수 있습니다 . 왜 모든 것에 mod_ratelimit를 사용할 수 없었는지 모르겠습니다.
SUSPENDED
대기시 스레드를 낭비하지 않고 비동기 상태를 사용하는 반면, 현재 mod_ratelimit는 엄격하게 연결 당 스레드입니다. cf. thread.gmane.org/gmane.comp.apache.cvs/20490
속도 제한을 원하는 이유에 따라 다릅니다.
서버 과부하로부터 보호하려면 실제로 NGINX를 앞에 놓고 거기에 속도 제한을 구성 하는 것이 좋습니다. NGINX는 1 만 연결 당 몇 MB 정도의 리소스를 훨씬 적게 사용하기 때문에 이치에 맞습니다. 따라서 서버가 플러드되면 NGINX는 속도 제한 (미미한 양의 리소스 사용)을 수행하고 허용 된 트래픽 만 Apache로 전달합니다.
당신이 추구하는 것이 단순하다면 mod_evasive와 같은 것을 사용하십시오.
평소처럼 DDoS 또는 DoS 공격으로부터 보호하려면 속도 제한이있는 Cloudflare와 같은 서비스를 사용하세요.