NGinx를 구성하는 동안 다소 흥미로운 문제를 발견했습니다. 저는 NGinx 1.13.8을 사용하여 HTTPS를 통해 모든 것을 제공하는 작은 웹 서버를 운영하고 있습니다. 이러한 구성의 일반적인 경우와 마찬가지로 포트 80에서 수신 대기하고 이를 달성하기 위해 다음 구성 조각을 사용하여 동일한 URI를 사용하여 포트 443에 대한 모든 요청에 대한 포괄적 리디렉션을 발행합니다.
location / {
return 301 https://$server_name$request_uri;
}
이것은 그 자체로 내가 필요한 것에 잘 작동했습니다. 그러나 분명히 가짜이고 쉽게 식별할 수 있는 트래픽이 발생하기 시작했습니다(약 5분 동안 임의의 기간 동안 겉으로 보기에 임의의 IP에서 수천 개의 새로운 연결을 얻었으며 모두 User-Agent 헤더에 공통 접두사가 포함되어 있었습니다. 동일한 요청( HEAD / HTTP/1.1
), 모두 시간 초과될 때까지 연결을 열어두고 모두 리디렉션을 따르지 않습니다.
이상적으로는 낭비되는 리소스의 양을 최소화하기 위해 이러한 연결이 식별되는 즉시 닫고 싶습니다. 현재 이를 위해 수정된 구성 조각을 생각해 냈습니다.
location / {
return 301 https://$server_name$request_uri;
}
location = / {
if ($method = "HEAD") {
set $drop M;
}
if ($http_user_agent ~* "Dalvik/2.1.0 (Linux U ") {
set $drop "U${drop}";
}
if ($drop = "UM") {
return 444;
}
}
그러나 이것은 작동하지 않는 것 같습니다(로그에 여전히 301을 완전히 반환하는 이러한 트래픽 급증이 표시됨). 또한 첫 번째 위치 내에서 덜 구체적인 일치(User-Agent 헤더 또는 메서드의 포괄적인 일치)를 시도했습니다. 차단했는데 그것도 작동하지 않는 것 같습니다.
그래서 두 가지 질문이 있습니다.
- 왜 이것이 작동하지 않습니까?
- 방화벽에서 심층 패킷 검사를 수행하지 않고도 이 트래픽을 처리할 수 있는 더 좋은 방법이 있습니까?