游乐游手机版
首页/编程语言/文章详情

iptables防火墙limit模块匹配规则详解与配置指南

时间:2026-05-07 12:44
Iptables防火墙limit模块扩展匹配规则 在配置防火墙时,除了控制“谁能访问”,还有一个同样重要的议题:“能以多快的频率访问”。这就要提到Iptables的limit模块了,它就是专门为报文速率戴上“紧箍咒”的工具。 简单来说,limit模块的核心功能是控制单位时间内通过的数据包数量,可以精

Iptables防火墙limit模块扩展匹配规则

在配置防火墙时,除了控制“谁能访问”,还有一个同样重要的议题:“能以多快的频率访问”。这就要提到Iptables的limit模块了,它就是专门为报文速率戴上“紧箍咒”的工具。

简单来说,limit模块的核心功能是控制单位时间内通过的数据包数量,可以精确到每秒、每分钟、每小时甚至每天。比如,你可以设定规则,要求一分钟内只放行10个ICMP请求,多出来的请求一律按规则处理。

用好这个模块,主要依赖两个关键参数:

  • --limit rate[/second|/minute|/hour|/day]:这个参数定义了限制的平均速率。你可以指定单位为秒、分、时、天。如果不指定,默认是按“每3小时”来计算的,这在实际中需要特别注意。
  • --limit-burst:这个参数理解起来有点意思。它定义了“突发流量”的额度。比如说,你设定每分钟允许10个包,但一开始可能一下子涌来好几个。burst值就设定了这第一波攻击或请求中,能直接放行的最大包数,默认是5个。超出的部分,才会严格按平均速率来控制。

1. 限制每分钟接收10个ICMP数据报文

咱们来看一个最常见的场景:限制ICMP Ping请求的频率,防止被简单的ping flood攻击拖垮。

首先,添加一条规则,在一分钟内最多接受10个ICMP协议的请求报文。

[root@jxl-1 ~]# iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT

紧接着,必须加上第二条规则:所有超出上述限制的ICMP报文,全部丢弃。

[root@jxl-1 ~]# iptables -t filter -A INPUT -p icmp -j DROP

最后,用详细列表查看一下规则是否生效。

[root@jxl-1 ~]# iptables -L -n -v --line-number

Chain INPUT (policy ACCEPT 1331 packets, 1111K bytes)

num pkts bytes target prot opt in out source destination

1 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: a vg 10/min burst 5

2 0 0 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0

Iptables防火墙limit模块扩展匹配规则详解

实际测试一下,你会发现前5个Ping包是畅通无阻的。这正是默认的--limit-burst 5在起作用,给了流量一个初始的“弹性空间”。

从第6个包开始,限制才真正生效。因为每分钟只允许10个,换算下来就是每6秒放行一个包。所以你会看到,第6个包之后,响应开始有规律地间隔出现。

所以,这条规则更直观的理解是:起初放行5个包(快速通过),之后每分钟稳定放行10个包。

Iptables防火墙limit模块扩展匹配规则详解

2. 允许10个数据报文快速通过,然后限制每分钟接收1个ICMP数据报文

这个场景是对上一个例子的灵活调整。比如,你希望服务启动初期能快速响应一些探测请求,但之后要进入严格的低速监控模式。

实现思路完全一样,核心就是手动调整--limit-burst这个初始突发值。

1. 添加规则,允许突发10个包,但后续速率限制为每分钟仅1个。

[root@jxl-1 ~]# iptables -t filter -I INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT

2. 同样,追加丢弃所有其他ICMP报文的规则。

[root@jxl-1 ~]# iptables -t filter -A INPUT -p icmp -j DROP

效果如图所示:最开始连续发送的10个包全部成功接收,展现了“突发额度”的效用。在此之后,每分钟就只能收到一个回应包了,限制非常严格。

Iptables防火墙limit模块扩展匹配规则详解

3. 限速案例:限制网络传输的带宽不超过500k/s

更有趣的应用来了:用limit模块实现网络带宽限速。这听起来有点跨界,但原理是相通的——控制单位时间内通过的数据包数量

关键在于一个简单的计算:带宽速率最终由每秒传输的数据包数量决定。一个标准的以太网数据包(MTU 1500)大小大约在1500字节左右。

限速公式可以这样推导:(目标带宽速率 * 1000) / 单个数据包大小 ≈ 每秒允许的数据包数量。

以限制500k/s为例: (500 * 1000) / 1500 ≈ 333个包/秒。为了保险起见,我们可以先设为300个。

[root@jxl-1 ~]# iptables -t filter -I OUTPUT -p  tcp -m limit --limit 300/s  -j ACCEPT
[root@jxl-1 ~]# iptables -t filter -A OUTPUT -p  tcp -j DROP

当然,实际网络中的数据包大小并不恒定,因此实际速率会有一定波动。如果目标是将速率严格压制在500k以内,可以根据实测结果微调--limit的数值。比如下图中,将包数量设为120个/秒后,实际下载速率就稳定在了327k/s左右,达到了限速目的。

Iptables防火墙limit模块扩展匹配规则详解

通过对limit模块这几个经典场景的拆解,可以看到,它不仅是防攻击的利器,更能实现精细化的流量管控。理解其“平均速率”与“突发额度”的双参数协作机制,是灵活运用它的关键所在。

来源:https://www.jb51.net/article/258196.htm
上一篇密码破解方法详解与安全防范指南 下一篇SQL注入XSS与CORS攻击原理及防范指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
用 LlamaIndex 做 RAG 前,先把 Reader、Index、Retriever 的边界写清楚
编程语言 · 2026-07-13

用 LlamaIndex 做 RAG 前,先把 Reader、Index、Retriever 的边界写清楚

LlamaIndex 不适合用“5 行代码做一个 RAG demo”来判断好坏。那个 demo 只能证明框架能跑通一次,不证明你的数据进入系统后仍然可追踪,不证明检索结果能解释,不证明 Agent 的

Go语言AES混淆加密解密敏感数据详解
编程语言 · 2026-07-13

Go语言AES混淆加密解密敏感数据详解

Go语言AES加密需注意:密钥长度必须为16、24或32字节,否则会引发panic;CBC模式解密乱码常因IV或PKCS7填充错误;GCM模式中nonce不可重用,否则密钥可被恢复;ECB模式因明文块输出固定密文,存在安全风险,不建议使用。

C++ std::atomic::wait高性能轮询等待原子变量状态变化
编程语言 · 2026-07-13

C++ std::atomic::wait高性能轮询等待原子变量状态变化

C++20的std::atomic::wait是轻量级等待机制,需GCC11+ Clang12+及glibc≥2 34,macOS不支持。需与notify配对,注意内存序,循环检查防虚假唤醒。超时版本精度有限,高性能关键在notify时机与内存序正确性。

VSCode左侧边栏不见了?快速找回方法
编程语言 · 2026-07-13

VSCode左侧边栏不见了?快速找回方法

按Ctrl+B或Cmd+B可恢复被误触隐藏的侧边栏。若无效,需检查窗口焦点是否在编辑器、是否处于全屏或Zen模式、workbench activityBar visible配置项、扩展冲突以及远程环境同步问题,并逐一排查。

VSCode中利用Node批量修改多媒体文件元数据标签
编程语言 · 2026-07-13

VSCode中利用Node批量修改多媒体文件元数据标签

music-metadata库支持跨格式读写MP3、FLAC、M4A、WAV等音频元数据,需先用parseFile()初始化,再调用writeMetadata()写入。批量修改前必须验证写入支持,封面图片需为Uint8Array格式。在VSCode终端运行脚本比插件更可控,处理中文路径时需切换终端代码页为UTF-8并指定ID3v2 3版本以避免乱码。