Linux

我應該使用 iptables 限制數據包的速率嗎?

  • October 26, 2017

我在 Ubuntu 伺服器上使用 iptables。它是 VPS 上的 Web 伺服器。

我想知道我是否應該對數據包進行速率限制。如果是這樣,我應該限制什麼?我應該在全球範圍內還是按 IP 地址這樣做?

參考

我看到有人這樣建議:

# Limit packet traffic on a TCP or UDP port:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

# Limit established/related packet traffic:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

以上,全域速率限制似乎不是很有用,至少對於我能想像的情況。在任何情況下我應該在全球範圍內限制速率?

我相信每個 IP 的速率限制通常更好:

# Add the IP to the list:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --set --name RATELIMITED
# Drop if exceeded limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --update --seconds $sec --hitcount $hc --rttl --name RATELIMITED -j DROP
# Accept if inside limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -j ACCEPT

附加問題:遠端 IP 可能被欺騙。如何正確限制它們?

為此添加了另一個問題:

https ://serverfault.com/questions/340258/how-to-rate-limit-spoofed-ips-with-iptables

我試圖降低某些 D/DoS 攻擊和一般濫用的風險的目標。

相關

如何使用 iptables 限制 SSH 連接的速率?

PS:我剛剛為 ICMP 打開了一個相關問題,它包括此協議的速率限制:iptables | ICMP 的類型:哪些是(潛在的)有害的?

速率限制不是一種預防措施,而是對 DoS 的邀請——尤其是在上面介紹的情況下,如果超出了沒有狀態資訊的未經身份驗證的數據包的某個速率,數據包將被丟棄。由於每個人都可以在此連接狀態下輕鬆偽造數據包(包括源 IP 地址),因此將出現利用您的速率限制工具的新 DoS 攻擊向量。

速率限制通常只有在你有

  1. 配置中可預測的硬連接或軟連接限制
  2. 將一般流量的速率限制設置為低於此限制,以便能夠為優先級或管理流量設置連接,而不管負載如何

雖然 1. 通常很難確定甚至打擾,但 2. 顯然只有在您能夠在連接設置時可靠地將“優先級或管理”流量與其他流量區分開來時才有效 - 例如,如果它來自不同的網路介面。

在其他情況下,它寧願降低系統的彈性也不願增加它。

引用自:https://serverfault.com/questions/340256