![NGINX:如何處理發出無條件全面重定向的伺服器上明顯虛假的流量?](https://rvso.com/image/717735/NGINX%EF%BC%9A%E5%A6%82%E4%BD%95%E8%99%95%E7%90%86%E7%99%BC%E5%87%BA%E7%84%A1%E6%A2%9D%E4%BB%B6%E5%85%A8%E9%9D%A2%E9%87%8D%E5%AE%9A%E5%90%91%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8%E4%B8%8A%E6%98%8E%E9%A1%AF%E8%99%9B%E5%81%87%E7%9A%84%E6%B5%81%E9%87%8F%EF%BC%9F.png)
我在嘗試配置 NGinx 時遇到了一個相當有趣的問題。我運行一個小型 Web 伺服器,使用 NGinx 1.13.8 透過 HTTPS 提供所有服務。正如此類配置的典型情況,它還會偵聽連接埠 80,並使用相同的 URI 將所有請求全面重定向到連接埠 443,使用以下設定片段來實現此目的:
location / {
return 301 https://$server_name$request_uri;
}
這本身就可以很好地滿足我的需要。然而,我已經開始收到一些明顯偽造且易於識別的流量(大約5 分鐘的隨機時間段,我從看似隨機的IP 中獲得了上千個新連接,所有這些連接在用戶代理標頭中都有一個共同的前綴,所有這些都完全正確)相同的請求 ( 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 標頭或方法上進行全面匹配)塊,這似乎也不起作用。
所以,我有兩個問題:
- 為什麼這不起作用?
- 是否有更好的方法來處理這種流量,並且不會涉及防火牆中的深度資料包檢查?