跳转到内容

Linux 网络/IP 计费(适用于 Linux-2.0)

来自维基教科书,开放的书籍,面向开放的世界

IP 计费(适用于 Linux-2.0)

[编辑 | 编辑源代码]

Linux 内核的 IP 计费功能允许您收集和分析一些网络使用数据。收集的数据包括自上次重置数字以来累积的包数和字节数。您可以指定各种规则来对这些数据进行分类,以满足您的任何目的。此选项在内核 2.1.102 中被移除,因为旧的基于 ipfwadm 的防火墙被“ipfwchains”所取代。

内核编译选项

            Networking options  --->
                [*] IP: accounting

编译并安装内核后,您需要使用 ipfwadm 命令来配置 IP 计费。您可以选择多种不同的方式来分解计费信息。我选择了一个简单的例子,它可能对您有用,您应该阅读 ipfwadm 手册页以获取更多信息。场景:您有一个以太网网络,通过 PPP 连接到互联网。在以太网上,您有一台提供多种服务的机器,您感兴趣的是了解每个 FTP 和 WWW 流量产生的流量,以及总的 TCP 和 UDP 流量。

您可以使用以下命令集,它显示为一个 shell 脚本

            #!/bin/sh
            #
            # Flush the accounting rules
            ipfwadm -A -f
            #
            # Set shortcuts
            localnet=44.136.8.96/29
            any=0/0
            # Add rules for local ethernet segment
            ipfwadm -A in  -a -P tcp -D $localnet ftp-data
            ipfwadm -A out -a -P tcp -S $localnet ftp-data
            ipfwadm -A in  -a -P tcp -D $localnet www
            ipfwadm -A out -a -P tcp -S $localnet www
            ipfwadm -A in  -a -P tcp -D $localnet
            ipfwadm -A out -a -P tcp -S $localnet
            ipfwadm -A in  -a -P udp -D $localnet
            ipfwadm -A out -a -P udp -S $localnet
            #
            # Rules for default
            ipfwadm -A in  -a -P tcp -D $any ftp-data
            ipfwadm -A out -a -P tcp -S $any ftp-data
            ipfwadm -A in  -a -P tcp -D $any www
            ipfwadm -A out -a -P tcp -S $any www
            ipfwadm -A in  -a -P tcp -D $any
            ipfwadm -A out -a -P tcp -S $any
            ipfwadm -A in  -a -P udp -D $any
            ipfwadm -A out -a -P udp -S $any
            #
            # List the rules
            ipfwadm -A -l -n
            #

名称“ftp-data”和“www”指的是 /etc/services 中的行。最后一个命令列出每个计费规则并显示收集到的总数。

在分析 IP 计费时,需要注意的重要一点是,所有匹配规则的总计都会被递增,因此要获得差值数据,您需要进行适当的数学运算。例如,如果我想知道有多少数据不是 FTP 也不是 WWW,我需要从匹配所有端口的规则中减去各个总计。

root# ipfwadm -A -l -n
IP accounting rules
pkts bytes dir prot source               destination          ports
   0     0 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> 20
   0     0 out tcp  44.136.8.96/29       0.0.0.0/0            20 -> *
  10  1166 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> 80
  10   572 out tcp  44.136.8.96/29       0.0.0.0/0            80 -> *
 252 10943 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> *
 231 18831 out tcp  44.136.8.96/29       0.0.0.0/0             * -> *
   0     0 in  udp  0.0.0.0/0            44.136.8.96/29       * -> *
   0     0 out udp  44.136.8.96/29       0.0.0.0/0            * -> *
   0     0 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> 20
   0     0 out tcp  0.0.0.0/0            0.0.0.0/0            20 -> *
  10  1166 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> 80
  10   572 out tcp  0.0.0.0/0            0.0.0.0/0            80 -> *
 253 10983 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> *
 231 18831 out tcp  0.0.0.0/0            0.0.0.0/0            * -> *
   0     0 in  udp  0.0.0.0/0            0.0.0.0/0            * -> *
   0     0 out udp  0.0.0.0/0            0.0.0.0/0            * -> *
华夏公益教科书