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 임).
답변
답변
속도 제한을 원하는 이유에 따라 다릅니다.
서버 과부하로부터 보호하려면 실제로 NGINX를 앞에 놓고 거기에 속도 제한을 구성 하는 것이 좋습니다. NGINX는 1 만 연결 당 몇 MB 정도의 리소스를 훨씬 적게 사용하기 때문에 이치에 맞습니다. 따라서 서버가 플러드되면 NGINX는 속도 제한 (미미한 양의 리소스 사용)을 수행하고 허용 된 트래픽 만 Apache로 전달합니다.
당신이 추구하는 것이 단순하다면 mod_evasive와 같은 것을 사용하십시오.
평소처럼 DDoS 또는 DoS 공격으로부터 보호하려면 속도 제한이있는 Cloudflare와 같은 서비스를 사용하세요.