Ipv6
如何保護 Web 應用程序免受 IPv6 機器人的攻擊?
在保護 Web 應用程序免受機器人攻擊的背景下,我對此很感興趣,但我想它適用於機器人可以通過 IPv6 進行的所有類型的攻擊。
在 Web 應用程序中,您需要保護一些頁面免受機器人攻擊。
它可能是一個登錄頁面:您希望避免數百萬個嘗試使用者名/密碼組合的請求。
它可能是一個註冊頁面。您不希望在您的網站上創建數千個機器人帳戶。
或者您可能不希望一次下載數據庫的全部內容。您認為匿名使用者每天向您的數據庫發出 100 或 200 個請求以獲取一些資訊是可以的,但是您不同意機器人通過每分鐘發出 1000 個請求來下載您提供的所有內容。
或僅出於統計目的。您正在記錄您網站上的訪問者活動,並且您不希望機器人完全偏向您的數據,例如,人為地點擊一個連結數千次,以便它連結到的文章成為您新聞網站上的“最受歡迎的文章” .
我經常使用基於 IP 地址的節流/速率限制,使用 Nginx 速率限制功能來處理這個問題:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/m; server { location /sensitiveUrl { limit_req zone=mylimit; proxy_pass http://my_upstream; } }
但是對於 IPv6,我不確定這有多有效。我的意思是,使用 IPv4,它相對有效,因為攻擊者創建和使用數千個 IP 地址的成本很高,但似乎使用 IPv6 任何人都可以創建數百萬個 IP。如何處理?我應該對 IPv6 網路而不是地址應用限制嗎?如果我這樣做,在實踐中會有多有效?
IPv6 定址的靈活性非常好,但它確實使這樣的事情變得更加困難。我推薦的算法:
- 首先阻止單獨的 IPv6 地址 (a
/128
)。它可能是具有多個使用者的網路上的單個使用者,並且您希望避免阻止無辜的使用者(由於 NAT,IPv4 一直發生這種情況,我們不再重複)- 如果你有多個
x
相同的塊/64
,假設整個/64
被污染並阻止所有的。您現在可以/128
從黑名單中刪除單個記錄,因為它們現在已被/64
. 這可以防止您的黑名單系統溢出記憶體/儲存。- 攻擊者可能擁有多個
/64
. 預設大小是 a/48
,但/56
甚至/60
(這對於 IPv6 來說太小了,但一些 ISP 永遠不會學習)會發生。我會按 4 位按比例放大:如果/64
來自同一個的多個 s/60
被阻止,則按比例放大以阻止整個/60
. 與多個/60
in a/56
等相同。- 我還建議對不同的前綴長度使用不同的黑名單超時。單個使用者意外阻止 a
/64
比某人“意外”被整個/48
阻止更容易。更大的塊在黑名單上應該有更長的時間恕我直言。- 攻擊者可能會濫用該算法,從一開始就將其攻擊傳播到一個整體
/48
,從而無法快速觸發縮放算法。因此,您可能需要多個並行條件來快速擴展。這種縮放機制的一個例子可能是:
+---------------+----------------------------------------+-----------+ | | Block when containing >= of these: | Blacklist | | Prefix length | /128 | /64 | /60 | /56 | /52 | time | +---------------+--------+-------+-------+-------+-------+-----------+ | /128 | N/A | N/A | N/A | N/A | N/A | 5 min | | /64 | 5 | N/A | N/A | N/A | N/A | 15 min | | /60 | 15 | 2 | N/A | N/A | N/A | 30 min | | /56 | 50 | 4 | 2 | N/A | N/A | 60 min | | /52 | 75 | 8 | 4 | 2 | N/A | 120 min | | /48 | 100 | 16 | 8 | 4 | 2 | 240 min | +---------------+--------+-------+-------+-------+-------+-----------+