如何通过iptables设置数据包速率限制

1. 简介

经常遇到某些用户或设备试图用过多的流量淹没我们的网络的情况。在这种情况下,实施数据包速率限制在防范拒绝服务(DoS) 攻击和维护网络稳定性和安全性方面起着至关重要的作用。

在本文中,我们将探讨如何使用 iptables 在防火墙级别实现数据包速率限制。我们将了解此功能的重要性,并在此过程中查看示例。

2. 协议的速率限制:陷阱

仅基于所使用的协议(如 TCP 或 UDP)实施速率限制可能会产生意想不到的后果。某些协议,如 ICMP(互联网控制消息协议),对于网络运行状况和故障排除至关重要。例如,ICMP 数据包的过度速率限制可能会妨碍网络诊断、延迟重要错误消息并影响整体网络性能。

此外,不正确地通过协议实施速率限制可能会创建拒绝服务攻击媒介,攻击者可能会滥用我们自己的规则来阻止每个人的协议访问。

因此,通常建议按源地址选择速率限制,这样可以提供更精细的控制。

3. 源地址的速率限制:理想的方法

源地址的速率限制允许我们根据网络数据包的原始IP地址设置限制。此外,这种方法在管理流量方面提供了更大的灵活性和准确性。

通过关注源地址,我们可以识别可能需要速率限制的特定主机、网络甚至地理位置。它使我们能够定制速率限制策略以满足我们网络的特定需求。

4. 示例场景

让我们探讨三种常见场景,在这些场景中,基于单个源IP地址实施数据包速率限制可能会有所帮助。

4.1. 防止暴力攻击

假设我们要防止潜在的暴力尝试来猜测安全shell(SSH)服务的有效用户名和密码组合。

在这种情况下,我们可以使用数据包速率限制规则来限制从同一IP地址连接到SSH端口的数量。让我们使用以下 iptables 命令来实现此目的:

 iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
# iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 120 --hitcount 10 -j DROP

上面的命令使用iptables扩展最近,它允许我们动态创建IP地址列表并以不同的方式匹配它们。在此示例中,如果iptables尝试在10秒(两分钟)内打开超过22个到SSH端口(120/tcp) 的连接,我们将指示iptables从任何IP地址删除连接。通过使用NEW状态,只有新连接受此规则的影响,而不会影响已建立的连接。

可以使用不同的iptables扩展来实现数据包速率限制。接下来,我们将探讨如何使用conntrack扩展来实现类似的结果。

4.2. 网络服务器保护

假设我们要限制对Web服务器的传入请求进行速率限制,以防止拒绝服务(DoS)攻击并确保用户之间的公平资源分配。我们可以使用iptables conntrack扩展来实现这一点:

 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m limit --limit 20/min --limit-burst 30 -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -m limit --limit 20/min --limit-burst 30 -j ACCEPT
# iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j DROP
# iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j DROP

首先,我们将iptables配置为接受已经建立的连接。然后,我们定义两个规则,接受与端口8043的新连接,同时跟踪来自每个唯一IP地址的连接数。这些规则将继续接受新连接,只要它们不超过每个IP地址每分钟20个连接的限制。

限制突发表示允许与速率限制匹配的初始数据包数。每次未达到定义的限制时,它都会补充一个。但是,它不会超过最大值30

此外,最后两个规则会丢弃先前规则尚未接受的过多连接。

4.3. 带宽管理

在某些情况下,我们可能希望限制服务器使用的总出站带宽。为此,我们可以使用另一个称为 limitiptables 扩展。

首先,我们将创建一个用于速率限制出站流量的用户定义链,然后创建一个规则以将数据包速率限制为每秒1Mb位:

 iptables -N RATE_LIMIT
# iptables -A RATE_LIMIT -m limit --limit 1mbit/s -j ACCEPT
# iptables -A RATE_LIMIT -j DROP
# iptables -A OUTPUT -o eth0 -j RATE_LIMIT

最后一条规则对通过 eth0 接口的传出流量应用速率限制操作。

5. 结论

数据包速率限制有许多用例,包括缓解资源耗尽攻击和解决利基需求。iptables是系统管理员武器库中的多功能工具,提供各种速率限制扩展,例如ConntrackLimitState等。

在本文中,我们探讨了协议限制速率的陷阱,并了解了按源地址限制速率的好处。然后,我们研究了使用iptables设置数据包速率限制的常见方案。通过使用iptables的强大功能,网络管理员可以增强网络稳定性、安全性和资源分配。


友情提醒: 请添加客服微信进行免费领取流量卡!
QQ交流群:226333560 站长微信:qgzmt2

原创文章,作者:sunyaqun,如若转载,请注明出处:https://www.dallk.cn/3340.html

(0)
sunyaqunsunyaqun
上一篇 2023年9月28日
下一篇 2023年9月28日

相关推荐

发表回复

登录后才能评论