iptables如何监控流量?,流量监控怎么设置

使用iptables的计数器功能可以实时监控网络流量,通过设置规则并查看字节统计,能够精确掌握特定接口、IP或端口的流量数据。

iptables 作为 Linux 系统自带的防火墙工具,很多人只拿它做包过滤,其实它的流量统计能力同样强大,无论是排查哪个 IP 在占带宽,还是统计某个端口用了多少流量,iptables 都能胜任,且无需安装任何第三方软件,下面就从最常用的命令开始,逐步拆解。

【小知识】第9期 20分钟掌握iptables指令
加载中
【小知识】第9期 20分钟掌握iptables指令

iptables 监控流量 命令详解

要利用 iptables 监控流量,核心是理解它的统计计数器,每个规则都会记录匹配到的包数和字节数,通过 iptables -L -v -n 就能看到。

查看规则流量统计

执行 iptables -L -v -n 后,输出中会有 pkts 和 bytes 两列,分别代表包数和字节数。

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 120  54000 ACCEPT     tcp  --  eth0          0.0.0.0/0            0.0.0.0/0            tcp dpt:80

这里显示 120 个包,54000 字节经过这条规则,如果你只想看总流量,可以用 iptables -L INPUT -v -n 只看 INPUT 链,常用参数组合:

  • -n 禁用 DNS 解析,加快显示速度。
  • -v 显示详细信息,包括计数器。
  • -x 显示精确字节数,不加 -x 时可能被缩略为 K 或 M。
参数 作用
-n 不解析IP和端口,显示原始数字
-v 显示包数和字节数
-x 显示精确字节数,不使用单位缩写
--line-numbers 显示规则编号,方便脚本提取

重置计数器

统计需要周期性观看,如果每次从头累加,不方便计算差值,使用 iptables -Z 可以将所有链的计数器清零。iptables -Z INPUT 只清零 INPUT 链,清零后,过一段时间再次查看,就能得到这段时间内的流量增量。

监控特定端口流量

监控 Web 服务器流量,只需添加一条规则,然后定期查看:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

注意,-j ACCEPT 不能省略,因为规则必须有一个目标,如果不想影响防火墙策略,可以创建一个自定义链:

iptables -N WEB_TRAFFIC
iptables -A WEB_TRAFFIC -j RETURN
iptables -A INPUT -p tcp --dport 80 -j WEB_TRAFFIC

这样所有到 80 端口的包先进入 WEB_TRAFFIC 链,计数器会增加,然后通过 RETURN 放回 INPUT 链继续匹配,但这种方法需要确保自定义链的规则没有被其他规则提前匹配,更简单的方法是直接在主链中添加 ACCEPT 规则,并放在靠前位置,确保它被匹配到。

监控特定 IP 流量

如果要监控某个来源 IP 的流量,192.168.1.100:

iptables -A INPUT -s 192.168.1.100 -j ACCEPT

iptables如何监控流量?,流量监控怎么设置

同样,这条规则会统计该 IP 发给本机的所有流量,如果想统计双向流量,可以在 OUTPUT 链也添加规则。

iptables -A OUTPUT -d 192.168.1.100 -j ACCEPT

这样就能分别统计入站和出站流量,对于局域网网关场景,通常需要在 FORWARD 链上添加规则,统计经过的流量。

同时监控多个端口或 IP

使用 -m multiport 模块可以一次匹配多个端口,减少规则数量:

iptables -A INPUT -p tcp -m multiport --dports 80,443,22 -j ACCEPT

这样一条规则就能统计 HTTP、HTTPS、SSH 的总流量,同理,可以用 -m iprange 监控一个 IP 段,--src-range 192.168.1.1-192.168.1.254。

使用 iptables 监控流量 脚本自动化

手动敲命令看流量太原始,写个脚本定期收集并记录才是正道,下面是一个简单但完整的脚本思路。

编写基础脚本

大致如下:

#!/bin/bash
# 定义规则编号(假设我们跟踪INPUT链的第一条规则)
RULE_NUM=1
CHAIN="INPUT"
# 提取当前字节数
BYTES=$(iptables -L $CHAIN -v -n -x --line-numbers | grep "^$RULE_NUM " | awk '{print $2}')
# 如果文件不存在,则用0作为初始值
if [ -f /tmp/iptables_prev.txt ]; then
    PREV=$(cat /tmp/iptables_prev.txt)
else
    PREV=0
fi
# 计算增量
DELTA=$((BYTES - PREV))
# 记录当前值用于下次
echo $BYTES > /tmp/iptables_prev.txt
# 输出到日志(假设我们只关心大于0的情况)
if [ $DELTA -gt 0 ]; then
    echo "$(date) $CHAIN rule $RULE_NUM bytes last period: $DELTA" >> /var/log/traffic.log
fi

这个脚本假设你已经在 INPUT 链第一条规则放置了统计规则,为了适应不同场景,可以改为从文件中读取规则编号,或者用规则描述来匹配,更健壮的做法是使用 iptables -L -v -n -x | grep "your comment" 来定位规则,因为规则顺序可能变化,建议在添加规则时用 -m comment --comment "web traffic" 加上注释,方便脚本提取。

结合 cron 定期统计

在 crontab 中添加任务:

/5     /root/traffic_monitor.sh

脚本中先保存当前计数,然后与上一次保存的计数做差,差值就是这 5 分钟的流量,如果脚本在启动时读取上一次保存的计数,第一次无法计算,需要忽略,更好的做法是每次脚本执行时,先读取当前计数,保存到文件,然后计算与上次保存值的差,但要注意,iptables 重启或规则更新会导致计数重置,所以持久化规则并保持计数器稳定很重要。

输出到文件或 syslog

你可以将统计结果写入 /var/log/traffic.log,或者使用 logger 命令直接发送到 syslog。

logger -t traffic-monitor "Bytes in 5 min: $delta_bytes"

这样在集中日志系统里就能看到流量变化,如果使用 systemd 的 journal,还可以用 journalctl -t traffic-monitor 查看。

iptables 流量监控 实战场景

理论说再多,不如一个实际案例来得直接,下面分享几个典型场景。

iptables如何监控流量?,流量监控怎么设置

监控服务器出站流量

当你的服务器流量异常,怀疑某个进程在回传数据,可以在 OUTPUT 链添加规则,监控到外部 IP 的流量,监控所有到 8.8.8.8 的流量:

iptables -A OUTPUT -d 8.8.8.8 -j ACCEPT

然后观察计数,如果发现瞬间有大量字节,说明有程序在向该地址发数据,更细致地,可以按端口统计,比如监控到 443 端口的出站流量:

iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

监控局域网用户流量

在作为网关的 Linux 服务器上,通过 FORWARD 链监控内网某个 IP 的流量,监控 192.168.1.50 的流量:

iptables -A FORWARD -s 192.168.1.50 -j ACCEPT
iptables -A FORWARD -d 192.168.1.50 -j ACCEPT

这样就能统计该 IP 的入站和出站流量,如果需要按天统计,可以每天凌晨用 cron 执行 iptables -Z 并记录昨天的数据。

监控 DDoS 攻击流量

当怀疑遭受攻击,可以用 iptables 的 -m hashlimit 模块统计每个 IP 的包速率,同时记录丢弃的包数,但单纯统计流量,直接用计数器即可,在 INPUT 链最前面添加一条记录所有流量的规则:

iptables -A INPUT -j ACCEPT

这条规则会匹配所有入站包,计数会增长很快,但要注意,它会影响防火墙规则,因为一旦匹配,后续规则不再处理,所以最好放在最后,或者前面已经允许了需要的连接,更专业的做法是创建一个自定义链,将所有流量引入,但不要改变默认策略。

场景 使用的链 规则示例
监控本机入站流量 INPUT iptables -A INPUT -j ACCEPT
监控本机出站流量 OUTPUT iptables -A OUTPUT -j ACCEPT
监控网关转发流量 FORWARD iptables -A FORWARD -j ACCEPT
监控特定端口 INPUT/OUTPUT iptables -A INPUT -p tcp --dport 80 -j ACCEPT
监控特定IP INPUT/OUTPUT/FORWARD iptables -A FORWARD -s 192.168.1.50 -j ACCEPT

iptables 监控流量 注意事项

iptables 监控流量虽然简单,但有些细节处理不好,数据就不准确。

规则顺序与性能

规则数量直接影响性能,尤其是当规则匹配缓慢时,统计流量时,尽量把统计规则放在靠前位置,避免不必要的遍历,但统计规则本身不应影响防火墙策略,所以使用自定义链是推荐做法。

iptables -N STATS
iptables -A STATS -j RETURN
iptables -A FORWARD -j STATS

这样所有经过 FORWARD 的包都会先进入 STATS 链,计数器增加,RETURN 继续匹配后续规则,但注意,STATS 链在 FORWARD 链中插入的位置,可能有些包被前面的规则直接 ACCEPT 或 DROP 了,就不会经过 STATS 链,所以要把 STATS 链放在 FORWARD 链的最顶端。

计数器的准确性

iptables如何监控流量?,流量监控怎么设置

计数器在内核中维护,理论上精确无误,但要注意,如果系统重启或 iptables 规则被重置(如 iptables -F),计数器会清零,所以如果需要长期统计,要确保规则持久化,并定期保存计数器值,如果数据包被 connection tracking 模块处理,某些包可能被标记为 INVALID 而不经过规则,但这种情况很少。

规则持久化

使用 iptables-save > /etc/iptables.rules 保存规则,然后在网络启动脚本中 iptables-restore < /etc/iptables.rules,这样每次重启后计数器也从零开始,但如果你想保留历史计数,可以每次关机前用脚本保存计数器值,开机后恢复,但这比较麻烦,通常场景下,每天统计一次,凌晨清零,这样更简单。

避免重复统计

如果你在多个链中统计同一个流量,可能导致重复计数,一个入站数据包经过 PREROUTING(raw表、mangle表)、INPUT(filter表),如果你在 filter 表的 INPUT 链和 FORWARD 链都统计所有流量,那么被转发(FORWARD)的包不会出现在 INPUT,所以不会重复,但如果你在同一个链中统计了两次,比如在 INPUT 链中有一条规则统计所有流量,另一条规则统计特定端口,那么特定端口的流量会被两条规则都匹配,导致计数两次,解决办法是:要么只统计一次,要么在统计时用 -j RETURN 避免继续匹配,但这样会影响后续规则,最好的做法是只保留一条统计规则,或者使用自定义链最后统一统计。

iptables 是一个被低估的流量监控工具,无需安装任何软件,仅靠自带的计数器就能实现基本的流量统计,结合脚本和 cron,完全可以满足中小网络的日常监控需求,如果你的环境需要更精细的流量分析,可以配合 ntopng 或 netflow,但 iptables 始终是一个轻量可靠的起点。

iptables 监控流量 常见问题

问:iptables 监控流量 怎么用最方便?

最方便的方式是添加一条统计所有流量的规则,然后通过 iptables -L -v -n -x 查看字节数,配合 iptables -Z 定期重置,也可以编写脚本,将特定规则的字节数写入日志,实现自动化监控,如果需要长期统计,建议使用自定义链并在 cron 中定期记录。

问:iptables 监控流量 准确吗?

准确,因为计数器是内核直接维护的,每个包经过规则时都会原子更新,但需要注意,只统计经过规则匹配的包,如果规则被跳过或数据包被其他规则提前处理,就不会被统计,建议使用独立的链并放在最前面,确保所有流量都被统计。

问:iptables 监控流量 和 nethogs 有什么区别?

iptables 是内核级统计,可以按任意条件(IP、端口、协议)分类统计,支持长期监控和自动化,nethogs 是用户态工具,按进程分组显示实时流量,适合临时排查哪个进程在占带宽,两者侧重点不同,根据需求选择即可,如果要同时看到进程和端口信息,可以先用 iptables 统计异常流量来源,再用 nethogs 定位具体进程。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/552093.html

赞 (0)
IIS数据库查询超时和GaussDB连接超时如何设?,怎么做
上一篇 2026年8月6日 20:40
我的世界哪些服务器可以开挂?,开挂会不会被封号?
下一篇 2026年8月6日 20:41

相关推荐

  • 服务器连接磁盘阵列柜失败怎么办?服务器连接磁盘阵列柜教程

    服务器连接磁盘阵列柜的核心在于通过HBA卡或RAID控制器建立物理链路,并配合正确的驱动配置与多路径软件实现高可用性与性能优化,这是构建企业级存储架构的基础环节,在数据中心或企业机房中,服务器与存储设备之间的连接往往被视为“黑盒”操作,许多运维人员习惯于点击几个按钮就完成挂载,却对底层的连接逻辑缺乏深入理解,当……

    2026年7月8日
    19100
  • 服务器收费标准是多少?服务器租用价格怎么算

    服务器收费没有统一标准,主要取决于配置、带宽、机房位置及计费模式,通常入门级应用每月几十元,企业级应用每月数千至数万元不等,很多初次接触云计算的朋友,看到后台账单时往往一头雾水,为什么同样的CPU,有的商家卖50元,有的卖200元?为什么带宽费用能占到总成本的半壁江山?这背后的逻辑其实并不复杂,关键在于你如何理……

    2026年7月9日
    19600
  • 服务器主机闲置了还能做什么?,怎么赚钱?

    服务器主机闲置并非电子垃圾,只要你愿意动手,它完全可以变废为宝,无论是企业还是个人,闲置服务器都能在私有云、测试环境、二手变现等方面发挥余热,关键在于找到适合你的场景,服务器闲置怎么处理?三种主流出路多数人面对闲置服务器第一反应是“卖掉”,但直接转手往往亏得最多,先评估硬件规格,再按需求选择出路,才能把价值拉满……

    2026年7月25日
    3400
  • 分布式缓存服务真的好吗?分布式缓存服务优缺点详解

    分布式缓存服务不仅好,而且是构建高并发、低延迟现代应用架构的绝对刚需,它能显著提升系统响应速度并保护后端数据库,想象一下,你的网站像一家生意火爆的餐厅,如果每来一位顾客点菜,厨师都要亲自去遥远的农场现摘蔬菜、现杀鸡鸭,那排队等待的时间会让顾客绝望,分布式缓存服务就像是在餐厅门口设置了一个巨大的“半成品备货区……

    2026年7月3日
    12100
  • 70亿与700亿参数大模型差距多大?大模型参数越多效果越好吗

    70亿参数与700亿参数大模型的差距并非简单的线性叠加,而是从“熟练工”到“专家”的质变,前者擅长标准化任务,后者具备复杂逻辑推理与长上下文理解能力,在2026年的AI应用生态中,参数规模的差异直接决定了模型的能力边界,很多开发者在选型时容易陷入误区,认为参数越大越好,却忽略了算力成本与落地场景的匹配度,70亿……

    2026年6月23日
    4000
  • 如何用Flask搭建安卓客户端服务器?flask服务器安卓客户端配置教程

    Flask服务器配合安卓客户端是构建轻量级移动应用后端的最优解,其核心优势在于开发效率极高、资源占用极低且能迅速实现数据交互闭环,为什么选择Flask作为安卓端的数据中枢在移动应用开发的生态中,后端技术选型直接决定了项目的迭代速度和运维成本,对于中小型项目或初创团队而言,Flask凭借其“微框架”的特性,成为了……

    2026年7月8日
    19000
  • 国产AI大模型突破了吗?国内AI大模型最新进展

    国产AI大模型已实现从“跟随”到“并跑”乃至部分领域“领跑”的关键跨越,核心能力在中文理解、多模态交互及行业垂直应用上取得实质性突破,显著降低了企业智能化转型门槛,国产大模型技术底座实现质的飞跃过去几年,国内人工智能领域经历了从单纯模仿到自主创新的深刻变革,主流国产大模型在参数量级、训练效率以及推理速度上均达到……

    2026年6月14日
    4010
  • 服务器临时租用如何选择性价比高的配置,怎么收费?

    服务器临时租用不是单纯的短租服务器,而是按需获取弹性计算资源,适合短期高负载、活动峰值、开发测试等场景,成本可控且部署灵活,临时服务器怎么租?三步完成资源部署很多用户第一次接触临时租用,容易被云厂商的配置清单绕晕,其实流程很清晰,核心就三步:选配置、定时长、一键部署,明确需求是前提先问自己几个问题:需要多少核C……

    2026年7月29日
    1600
  • AI大模型是如何生成的?大模型训练需要多少算力

    AI大模型并非凭空产生内容,而是基于海量数据训练出的概率预测引擎,通过“预训练-对齐-推理”三步流程,将你的文字输入转化为最可能的下一个词序列,很多人误以为AI像人类一样拥有意识或理解力,其实它更像是一个读过图书馆所有书籍的超级速记员,擅长寻找词语之间的统计规律,要真正理解它如何生成内容,我们需要拆解其背后的技……

    2026年6月14日
    3200
  • 发优惠券通知的网站有哪些,哪个平台更靠谱?

    选对发优惠券通知的网站,关键在于通知是否及时触达、能否精准细分用户,以及成本是否可控,目前市面上成熟的平台能帮你实现自动化营销,提升复购率,发优惠券通知的网站哪个好?评估标准选平台不能只看价格,几项硬指标直接决定最终效果,行业共识认为,一套合格的发优惠券通知系统至少要在以下四个方面达标,通知到达率是核心指标短信……

    2026年7月27日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注