Nginx 서버가 느리게 응답하도록하십시오


8

내 사이트에 스패머가 있습니다. '거부'를 사용하여 IP를 차단할 수는 있지만 IP를 변경하면 고양이와 마우스를 계속 재생해야합니다.

대신, nginx가 자신의 IP에 더 느리게 응답하도록 구성하는 방법이 있는지 궁금합니다.

그렇게하면 그는 사이트가 올바르게 작동하지 않고 나를 내버려 두게 될 것입니다.

감사

답변:


7

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를 다시로드 할 수 있습니다.


5

문제가있는 사용자가 자신에게 여전히 눈에 띄지 않을 것이라고 생각하도록 속이려면 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를 포함 할 수 있음)이 해킹은 확장 성이 좋지 않지만 작동합니다.


1
내 대답을 Alexander Azarov의 지리 블록과 결합하여 더 확장 가능하게 만들 수도 있습니다!
Panagiotis PJ Papadomitsos

2

이 스패머를 처리하는 가장 좋은 방법은 fail2ban을 올바르게 설치하고 구성하는 것입니다. Fail2ban은 로그 파일에서 패턴을 검색하고 사이트를 스팸으로 만드는 모든 IP를 차단합니다. 물론 적절한 패턴을 검색하도록 구성해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.