Apache로 요금 제한을 구현하려면 어떻게해야합니까? (초당 요청)
문제
Apache에서 강력한 속도 제한 (요청 | 바이트/IP/단위 시간)을 구현하기 위해 어떤 기술 및/또는 모듈을 사용할 수 있습니까?
해결책
다른 팁
언급 된 바와 같이 이 블로그 게시 할 수있는 것 같습니다 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.
Apache 2.4에는 새로운 재고 모듈이 있습니다. mod_ratelimit. 모뎀 속도를 에뮬레이션하려면 사용할 수 있습니다 mod_dialup. 왜 나는 당신이 모든 것에 mod_ratelimit을 사용할 수없는 이유를 알지 못하지만.
슬프게도, mod_evasive
비 포크 구성에서 사용될 때 예상대로 작동하지 않습니다 (최근 Apache 설정은 주로 MPM입니다)
한도를 평가하는 이유에 따라 다릅니다.
서버에 과부하를 방지하는 경우 실제로 서버 앞에 Nginx를 넣고 구성하는 것이 합리적입니다. 요율 제한 거기. NGINX는 훨씬 적은 리소스를 사용하기 때문에 10 만 연결 당 MB와 같은 자원을 사용하기 때문에 의미가 있습니다. 따라서 서버가 침수되면 Nginx는 비율 제한 (무의미한 양의 리소스 사용)을 수행하고 허용 트래픽을 Apache로만 전달합니다.
당신이 뒤 따르는 것이 단순성이라면 mod_evasive와 같은 것을 사용하십시오.
평소와 같이 DDOS 또는 DOS 공격으로부터 보호하려면 CloudFlare와 같은 서비스를 사용하여 속도 제한이 있습니다.