如果您發現任何錯誤,請發佈至 問題回報。
是的,您可以僅對特定頁面限制工作階段數量。但是,在此之前,您必須先在防火牆面板中關閉「線上工作階段限制」,因為它的範圍是全域的,無法在同一資料池中使用。
在禁用「線上工作階段限制」後,您可以使用 Shieldon 的公開 API。例如,請考慮以下程式碼:
if (strpos($_SERVER['REQUEST_URI'], 'faq/online-session-limit.html') !== false) {
$firewall->getKernel()->limitSession(5, 300);
}
此頁面 將最大使用者數量限制為 5,每位使用者可查看該頁面 300 秒。
當使用者進入此頁面且使用者數量已達到限制時,將顯示類似以下截圖的對話框:
我沒有在防火牆面板中包含「封鎖全部」的功能,以防止某些個體封鎖與 URL / 相關的所有 IP 位址。這樣做將封鎖所有 URL,包括對防火牆面板的訪問。我建議使用 IP 管理器,根據需要設定特定的 IP 範圍。
如果您想要封鎖特定 URL 的所有 IP 位址,以下程式碼將有所幫助。
// 將此程式碼放在 $firewall->run() 之前
if (strpos($_SERVER['REQUEST_URI'], 'example/block-all.html') !== false) {
$firewall->getKernel()->getComponent('Ip')->denyAll();
}
這是一個範例頁面,封鎖所有 IP 位址的訪問。
當使用者被封鎖時,他們將遇到類似下面截圖的對話框。
警告:如果您點擊此範例連結,您將被封鎖無法訪問此網站。您需要等待 60 分鐘直到封鎖解除。
預設的使用者名稱是 shieldon_user
,密碼是 shieldon_pass
。登入防火牆面板後,您應該立即更改使用者名稱和密碼。
對於小規模的 HTTP 類型 DDOS 攻擊,我的答案是能夠,但實際情況取決於許多因素,如頻寬、硬體品質、系統調整、程式碼品質等。
讓我們考慮一個簡單的例子。假設您的網站平均頁面大小為 3 MB,而您的伺服器帶寬為 100 Mbps。您的伺服器可以處理大約 12.5 MB/s
的數據傳輸速率。如果有人決定惡意攻擊您的網站,您認為需要多少攻擊來源才能壓垮您的伺服器?這還沒考慮到對 MySQL 連線的潛在壓力。
Shieldon Firewall 中斷這些惡意連線,返回一個小於 50 KB 大小的 CAPTCHA 頁面。它停止進一步執行 PHP 腳本,防止進一步的 MySQL 連線。這樣,當您的網站受到攻擊時,Shieldon Firewall 可以節省記憶體和 CPU 使用量。然而,這僅是針對 HTTP 類型 DDOS 攻擊的緩解策略,而不是最終解決方案。