如何利用Linux日誌分析、Nginx限流及Blazor Server配置抵禦高頻請求攻擊
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1102
我發現服務器遭遇大量針對 /_blazor
的 POST 請求,攻擊導致資源耗盡。以下是我如何利用日誌分析與防禦配置進行調查和解決的簡要過程。
日誌分析
統計 POST 請求:
grep -i "POST" /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
統計來源 IP:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
統計請求 URL:
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
Nginx 限流配置
在 /etc/nginx/nginx.conf
的 http
區塊中添加:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
然後在 /etc/nginx/sites-enabled/v2knowBlazor
的 /_blazor
location 中加上:
location /_blazor {
limit_req zone=one burst=10 nodelay;
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
SignalR Hub 防護
在 Program.cs
中配置 SignalR Hub 選項:
builder.Services.Configure<HubOptions>(options =>
{
options.ClientTimeoutInterval = TimeSpan.FromSeconds(30);
options.KeepAliveInterval = TimeSpan.FromSeconds(15);
options.HandshakeTimeout = TimeSpan.FromSeconds(10);
options.MaximumReceiveMessageSize = 32 * 1024; // 32 KB
});
這些調整有效阻止了攻擊流量,保護了服務器穩定運行。
為何這麽做?
以下簡要說明我採用日誌分析、Nginx 限流和 SignalR Hub 配置的原因:
日誌分析
這幾條命令可以讓我快速了解:
- 哪些接口被頻繁訪問(POST 請求統計)。
- 哪個 IP 發送了最多請求(來源 IP 統計)。
- 哪些 URL 被過度訪問(URL 統計)。
這有助於確定攻擊目標和攻擊來源。
Nginx 限流配置
-
全局限流(limit_req_zone):限制每個 IP 每秒最多 10 個請求,防止單一來源暴力請求。
-
Location 限流(limit_req):針對
/_blazor
添加 burst 和 nodelay 設定,當請求超出規定速率時,立即拒絕多餘請求,減少後端資源占用。
這樣可以在流量異常時第一時間過濾掉惡意請求,保護後端服務。
SignalR Hub 配置
- ClientTimeoutInterval:30 秒內無回應則斷線,防止閒置連線長時間占用資源。
- KeepAliveInterval:15 秒發送心跳,確保連線狀態正常。
- HandshakeTimeout:10 秒內握手失敗則中斷連線,防止惡意連線拖延資源。
- MaximumReceiveMessageSize:限制消息大小,防止攻擊者利用大數據包耗盡記憶體。
這些設定有助於控制持久連線的資源使用,避免濫用情況下服務器資源被耗盡。
總結:這些措施配合使用,既能快速識別異常請求,又能在請求到達後在前端過濾和在後端控制連線,有效降低高頻請求攻擊帶來的風險。
This article was last edited at