如何利用 iptables 统计某个 ip 地址+端口号 的数据量

本文介绍如何使用iptables来监控特定IP地址与端口之间的网络数据流量。通过设置iptables规则,可以实现对指定IP与端口间的数据包进行允许,并展示如何查看和清零统计数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iptables用于linux的防火墙,可以设置允许/禁止网络连接,也可以用来做负载均衡(reroute)防止DDOS攻击等。

如果需要监控某一个ip地址在某一个端口的数据流量,也可以用到 iptables.

例如,我需要监控ip地址是 192.168.1.5 的机器和 本机端口 8080 和 8090 交换的网络数据流量,可以按照如下添加 rules (需要 root 执行,注意 sport 和 dport 参数别写错了):

#!/bin/bash
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A OUTPUT -d 192.168.1.5 -p tcp -m tcp --sport 8080 -j ACCEPT
iptables -A INPUT -s 192.168.1.5 -p tcp -m tcp --dport 8080 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.5 -p tcp -m tcp --sport 8090 -j ACCEPT
iptables -A INPUT -s 192.168.1.5 -p tcp -m tcp --dport 8090 -j ACCEPT

添加这些 rule 之前可以先清理当前的 iptables 规则:

sudo iptables -L  # 查看当前rules
sudo iptabels -F  # 清除当前rules

然后运行如下命令可以查看连接的流量:

localhost$ sudo iptables -nvxL
Chain INPUT (policy ACCEPT 109045 packets, 120330262 bytes)
    pkts      bytes target     prot opt in     out     source               destination
      49     3720 ACCEPT     tcp  --  *      *       192.168.1.5         0.0.0.0/0            tcp dpt:890
    1249    50026 ACCEPT     tcp  --  *      *       192.168.1.5         0.0.0.0/0            tcp dpt:8080
       0        0 ACCEPT     tcp  --  *      *       192.168.1.5         0.0.0.0/0            tcp dpt:8090

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 108503 packets, 120187996 bytes)
    pkts      bytes target     prot opt in     out     source               destination
      37   233199 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.5         tcp spt:8090
     201  6270564 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.5         tcp spt:8080
       0        0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.5         tcp spt:8090
       0        0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.5         tcp spt:8080

将流量统计信息清零:

localhost$ sudo iptabels -Z

需要实时监控,可以使用 watch 命令重复执行:

watch -n 0.5 iptables -nvxL

需要注意的一点就是,这里统计的数据包含了tcp/ip协议头的数据(以及其他协议头),所以跟程序中实际发送的数据量有点出入,不过应用程序发送的数据量一般比较大,协议头的数据量可以忽略不计。

see ref link:
https://www.booleanworld.com/depth-guide-iptables-linux-firewall/
https://www.thegeekstuff.com/2011/01/iptables-fundamentals/
https://serverfault.com/questions/195894/monitor-number-of-bytes-transferred-to-from-ip-address-on-port

### 关于 `iptables` 的全面介绍 #### 什么是 `iptables` `iptables` 是 Linux 系统中的一个重要工具,用于配置 IPv4 数据包过滤规则和服务。通过定义一系列规则来决定如何处理进入、离开或转发的数据包,从而实现网络安全防护功能[^1]。 #### 查看现有规则 要查看当前已经设置好的所有链上的规则列表及其计数器信息(即匹配次数),可以执行如下命令: ```bash [root@zcwyou ~]# iptables -L -n -v ``` 这条指令会显示详细的表单视图,其中 `-L` 参数表示列出规则;`-n` 表示不解析主机名和端口号而是直接给出数值形式;`-v` 则增加了额外的信息量如字节数等统计详情。 #### 清除已有规则 如果想要删除之前设定过的某条特定规则,则可以根据具体位置编号来进行操作。但是更常见的情况是清空整个链条上所有的自定义项以便重新部署新的策略集。此时可采用下面的方法之一完成此目的: ```bash # 移除指定序号处的一条记录 (假设为第3行) iptables -D INPUT 3 # 将INPUT, FORWARD 和 OUTPUT三个默认链全部重置为空状态 iptables -F iptables -X iptables -Z ``` 上述代码片段展示了两种不同的方式去移除现有的规则:一种是指定确切的位置索引来单独清除个别项目;另一种则是批量地把各个预设路径下的内容都清理掉。 #### 添加新规则实例 为了更好地理解怎样利用 `iptables` 来增强系统的安全性,这里提供几个实用的例子说明常见的应用场景以及相应的命令格式。 ##### 场景一:允许来自本地回环接口的所有流量 ```bash iptables -A INPUT -i lo -j ACCEPT ``` 该语句的作用是在输入方向追加一条接受条件,只要源地址属于 loopback 接口(`lo`)就放行请求。 ##### 场景二:阻止外部访问 SSH 服务(22端口) ```bash iptables -A INPUT -p tcp --dport 22 -s ! 192.168.0.0/16 -j DROP ``` 这段脚本实现了对外部非信任网段发起连接至服务器SSH端口的行为进行拦截的功能,除了内部私有IP范围内的机器外其他一律拒绝建立TCP三次握手过程。 ##### 场景三:开放HTTP(S)网站浏览权限 ```bash iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT ``` 以上四行分别针对入站与出站两个方面设置了对于标准Web协议(HTTP/TLS)的支持,在确保合法用户的正常访问的同时也保障了数据传输的安全性。 #### 总结 掌握好 `iptables` 不仅有助于提高个人计算机环境下的隐私保护水平,而且对于从事 IT 运维工作的专业人士来说更是不可或缺的一项技能。它提供了灵活多样的手段让用户能够按照实际需求定制个性化的防火墙方案,进而有效抵御潜在的风险因素[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值