我应该使用iptables对数据包进行速率限制吗?

我在Ubuntu服务器上使用iptables。 这是一个VPS上的Web服务器。
我想知道是否应该限制数据包。 如果是这样,我应该限制什么? 我应该这样做全球或每个IP地址?

参考
我看到有人提出这个build议:

# 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 

以上,全球限价似乎并不是很有用,至less在我能想象的情况下。 有什么情况下我应该限制全球?
我相信每个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的types:哪些是(潜在的)有害的?

速率限制不是预防,而是对DoS的邀请 – 尤其是在上面提到的风味中,如果没有超过一定比例的未经身份validation的数据包,数据包将被丢弃。 由于每个人都可以毫不费力地在这个连接状态下伪造数据包(包括源IP地址),所以会产生一个利用您的速率限制设施的新的DoS攻击vector。

一般来说,费率限制只有在你有时才有意义

  1. 在您的configuration中可预测的硬连接或软连接限制
  2. 将一般stream量的速率限制设置为低于此限制,以便能够设置优先级或pipe理stream量的连接,而不pipe负载如何

虽然1.往往是很难确定,甚至打扰,2.显然只有当你能够可靠地区分“优先或pipe理”的stream量与其余的连接设置 – 例如,如果它通过不同的networking接口。

在其他情况下,它会降低系统的弹性而不是增加系统的弹性。

-m限制的问题是无论源IP地址如何,所有TCP数据包的限制。 所以,如果你有一个像syn数据包的低限制

 -A INPUT -p tcp --syn -m limit --limit 30/s --limit-burst 30 -j ACCEPT -A INPUT -p tcp --syn -j DROP 

只有一个使用hping命令行的客户端可以通过发送带有SYN标志的多个tcp数据包来取消服务器,因为限制规则将匹配,并且无论源IP地址如何,都会丢弃许多数据包。 限制不会影响好的stream量和不好的stream量。 它也将取消良好的传入stream量。

hping可能是这样的:

 hping thetargetedhostip -p 80 -S -c 1000 -i u20000 

最好使用hashlimit来限制每个IP地址的传入TCP连接。 以下规则只有在每秒接收到30个数据包的情况下才会匹配,从而将每个IP的授权数据包数量减less到每秒 15个数据包。

 -A INPUT -p tcp --syn -m hashlimit --hashlimit 15/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name synattack -j ACCEPT -A INPUT -p tcp --syn -j DROP 

事实上,我确信很多今天被取下的服务器在攻击过程中不会被资源占用,而是因为限制模块会丢弃所有的入站stream量。

我通常将速率限制规则限制在我期望拥有的服务器上:

  • 预期stream量低
  • authentication服务

例如,托pipe控制面板的login页面,POP3,IMAP,SSH等。我通常会将HTTP服务全部打开,并且只有在出现问题时才会阻止。

你不想放弃良好的networkingstream量。 在slashdot上的链接可能会给你带来大量的stream量和全球规则,你可能没有意识到一个问题。

关于欺骗IP,它们不能被使用这种方法阻塞,通常不是一个问题,因为这些规则主要集中于限制已build立的TCP连接。 使用欺骗IP,TCP连接永远不能build立。