답변:
Nginx 지시문을 limit_rate
사용하면 응답을 제한하려는 속도를 지정할 수 있습니다 (예 :
location / {
if ($slow) {
limit_rate 4k;
}
}
Nginx 문서는 여기에 있습니다 . (문서에서 백엔드가 결정을 내리고 Nginx가 클라이언트를 평가하도록 요청할 수 있음을 알 수 있습니다)
이 $slow
변수 세트 를 얻는 방법 은 구성에 따라 다릅니다. 가장 쉬운 방법은 geo
매핑 을 통해 설정하는 것입니다 .
geo $slow {
default 0;
1.2.3.0/24 1;
}
"Geo"매핑은 $slow
클라이언트 IP 주소 를 기반으로 하는 종속성입니다 . 기본적으로 0이며 클라이언트 IP 주소가 1.2.3.0/24
서브넷에 있는 경우 1 입니다. "geo"에 대한 Nginx 문서를 참조 하십시오.
"fail2ban"을 사용하는 것이이 전체 솔루션의 합리적인 발전입니다. "fail2ban"을 사용하여 비정상적인 활동을 자동으로 감지하고 Nginx에 대한 IP를 수집 한 다음 속도 저하 및 / 또는 차단해야하는 IP 주소 목록을 다시 읽도록 Nginx를 다시로드 할 수 있습니다.
문제가있는 사용자가 자신에게 여전히 눈에 띄지 않을 것이라고 생각하도록 속이려면 nginx의 요청 제한 모듈 ( http://wiki.nginx.org/HttpLimitReqModule )을 사용할 수 있습니다 .
먼저 요청 제한 영역을 정의하십시오.
http {
limit_req_zone $binary_remote_addr zone=spammers:1m rate=30r/m;
}
이 영역은 요청을 식별하여 분당 30 (1/2 초)로 제한하기 위해 가해자의 IP 주소를 사용합니다. 영역의 메모리 크기가 1MiB로 설정되어 요청 버킷 당 1MiB / 64 바이트 = 16384 개의 스패머 주소 (이 경우에는 과도한 문제 일 수 있음)를 처리 할 수 있습니다. 필요한 경우 각각 조정하십시오.
다음으로, 우리는 실제로 (불행하게도) 악의를 사용하여 리미터를 통해 범죄자를 라우팅하는 지시문을 정의합니다.
location / {
if ($remote_addr = 1.2.3.4) {
limit_req zone=spammer burst=5;
}
}
서버의 액세스 로그에서 노동의 결과를 볼 수 있습니다.
가해자가 IP를 변경할 때마다 구성 파일을 업데이트해야하기 때문에 (해당 경우 더 많은 IP를 포함 할 수 있음)이 해킹은 확장 성이 좋지 않지만 작동합니다.