如何利用Linux日誌分析、Nginx限流及Blazor Server配置抵禦高頻請求攻擊

| Linux | 19 Reads

我發現服務器遭遇大量針對 /_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.confhttp 區塊中添加:

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