使用 iptables 的 hashlimit 模块来限制新建连接数(即 NEW 状态的连接)具有多种作用,主要目的是为了保护服务器免受过度的连接请求带来的负面影响。以下是具体的作用和应用场景:
主要作用
防止 DoS 攻击:
通过限制每秒的连接数,可以有效防止分布式拒绝服务(DoS)攻击。这类攻击通常通过发送大量的连接请求来耗尽服务器的资源。
控制并发连接数:
限制新建连接的数量有助于控制服务器上的并发连接数,避免服务器资源被过度消耗。这对于处理高并发请求的应用尤其重要。
保障服务可用性:
当服务器的连接数达到上限时,继续接收新的连接请求可能会导致服务不可用。通过限制新建连接数,可以确保服务在高负载情况下仍能保持基本的可用性。
优化性能:
过多的新建连接会消耗服务器的 CPU 和内存资源。限制新建连接数可以减轻这种负担,使服务器能够更高效地处理现有的连接。
应用场景
Web 服务器保护:
对于 Web 服务器,限制新建连接数可以防止恶意攻击者通过大量的 HTTP 请求来耗尽服务器资源。
数据库服务器保护:
对于数据库服务器,限制新建连接数可以防止因大量客户端连接请求而导致的性能下降或服务中断。
API 服务器保护:
对于提供 API 服务的服务器,限制新建连接数可以防止因大量 API 请求而导致的性能问题。
利用hashlimit来限速需要包括两个步骤:
1.对符合hashlimit匹配规则包放行
2.丢弃/拒绝未放行的包
下面是一个简单的例子:
iptables -A INPUT -p tcp --dport 22 -m hashlimit --hashlimit-name ssh --hashlimit 5/sec --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-htable-expire 90000 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP