如何保護伺服器免受簡單的 DoS 攻擊

如何保護伺服器免受簡單的 DoS 攻擊

請注意我是不是詢問如何保護伺服器免受分散式阻斷服務。我的意思是如果有人siege -c 1000 www.example.com在他的 VPS 上運行。這將導致我的伺服器服務數千個請求並減慢速度。如果我以共享託管為目標運行 siege,我不會看到我的電腦上的回應能力急劇下降(從 60 毫秒到 2000 毫秒/請求)。我不期望能夠緩解大型 DDoS,但我希望能夠避免第一個腳本小子發現圍攻:) 另一方面,我可以接受這樣一個事實:當大量流量來自來源合法,響應可能會慢一些。

答案1

您可以使用防火牆來限制並發連線的數量以及來自網路的新連線的速率(例如,用於 IPv4 的 /32 和用於 IPv6 的 /64)。使用的範例iptables

# Limit number of concurrent connections
-A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 50 -j DROP
# Limit rate of new connections
-A INPUT -i eth0 -p tcp --syn -m hashlimit --hashlimit-name tcp --hashlimit-mode srcip --hashlimit-above 3/sec --hashlimit-burst 7 --hashlimit-srcmask 32 -j DROP

ip6tables(除了添加--connlimit-mask 64到第一個並在第二個中更改--hashlimit-srcmask為之外,情況相同。)64

您也可以限制 HTTP 請求的速率,例如使用nginx的limit_req模組

答案2

除了一些基本的防火牆之外,我們還依靠 haproxy 來完成繁重的 TCP 工作。我們發現,就任何類型的 Slowdos 攻擊而言,它都會圍繞開箱即用的 Apache HTTPd 實例運行。

-A INPUT -p tcp -m tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j SYNFLOOD

-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j HTTPDGUARD
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j HTTPDGUARD

-A HTTPDGUARD -m connlimit --connlimit-above 25 --connlimit-mask 32 -j HTTPDENY
-A HTTPDENY -j LOG --log-prefix "HTTP Flood: "
-A HTTPDENY -p tcp -m tcp -j REJECT --reject-with tcp-reset

-A SYNFLOOD -m state --state NEW -m recent --set --name SYNRATE --rsource
-A SYNFLOOD ! -s 150.156.24.0/24 -m state --state NEW -m recent --update \
   --seconds 5 --hitcount 200 --name SYNRATE --rsource -j DROP

-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT

但基本上,您要么需要阻止攻擊,修復漏洞,要么兩者兼而有之。

答案3

失敗2禁止是眾多旨在處理這種情況的工具之一。 fail2ban 幫助我阻止了對 ssh 的暴力攻擊。我假設你的伺服器是linux。

相關內容