
我有一個 lighttpd Web 伺服器,可以提供 PHP 產生的網頁。由於 DDoS 機器人攻擊,該伺服器目前面臨大量流量,我正在尋找一種方法來阻止或減輕其中一些流量。
據我所知lighttpd提供了透過遠端IP位址阻止請求的可能性,例如透過放置
$HTTP["remoteip"] == "12.34.56.0/24" {
url.access-deny = ( "" )
}
,lighttpd.conf
來自 IP 範圍 12.34.56.0 - 12.34.56.255 的所有請求都將被阻止。
然而,由於 DDoS 的性質,阻止單一 IP 位址或範圍是不可行的,因為它們變化非常頻繁。
透過檢查訪問日誌,我發現大多數來自機器人的請求似乎使用較舊的 HTTP/1.0 協議,而大多數合法流量使用 HTTP/1.1。
所以我的問題是:有沒有辦法在lighttpd 中封鎖/拒絕透過 HTTP/1.0 傳入的所有請求(並允許透過 HTTP/1.1 傳入的請求)?
我在官方沒有找到這樣的可能性lighttpd配置文檔。
筆記:
- 我知道一些合法流量也可能使用 HTTP/1.0,但我也可以阻止這些流量。
- 機器人請求似乎沒有使用用戶代理或 HTTP 引用者的通用模式,因此使用具有正規表示式模式的請求似乎不是一個選項。
答案1
而不是給出解決方案lighttpd
我建議您使用失敗2禁止這是存在於所有基於 Unix 的系統上的。它正在監視日誌檔案中的更改並根據正則表達式規則對其進行解析,如果匹配模式(在您的情況下為HTTP/1.0)將在系統的防火牆層級阻止它,這可以更有效地阻止不需要的連接。
此外,如果您遇到異常流量,即發現惡意請求多於正常請求,您可以添加以下防火牆規則來減緩 DDoS 攻擊
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 127 -j ACCEPT
如果您仍然想在lighttpd
層級上封鎖 HTTP/1.0,請嘗試像這樣匹配 HTTP 協定:
env.SERVER_PROTOCOL == "HTTP/1.0" {
url.access-deny = ( "" )
}
nginx
(自從我很久以前切換到以來,解決方案尚未經過測試,但 AFAIR 它可能會起作用。)