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

Logo

更多推荐