Linux下是没有文件直接给你按进程记录流量信息的。你想要编程实现的话,办法是有的,只是比较麻烦。首先,你需要能截取流经网卡的数据包,这个可以通过libpcap来完成,其次你要完成的最重要的一步就是怎么根据端口号找到进程的pid。端口号通过截取的数据包可以获得,这个时候你要按行来解析/proc/net/tcp (如果要支持ipv6的话还要解析/proc/net/tcp6),这个文件记录了当前活跃的TCP连接情况,每一行代表一条连接,我们感兴趣的是其中的inode这一项,你得把inode的值解析出来保存。然后蛋疼的时候来了,接下来你得遍历所有的/proc/pid/fd文件,察看其中每一个文件描述符,如果发现内容为socket[xxxx]的,把xxxx截取出来,这个xxxx也是inode号,如果和你之前解析/proc/net/tcp的inode号吻合,恭喜你,这说明这个pid和那个tcp连接有关系,进而也就确定了端口号和pid的对应关系,也就知道了数据包和进程之间的对应关系了。
我的建议:
先看看http://www.tcpdump.org/pcap.html, 熟悉一下libpcap库的用法,怎么截取数据包。
自己看看/proc/net/tcp的内容,想想怎么做文本解析,除了inode外,源ip,源端口号,目的ip,目的端口号都可以解析出来,而这个四元组实际就代表了一条tcp连接。
想想怎么做数据包,连接,进程的老化超时处理。比如说,当前截取的到的数据包在统计过一次流量后,下一次就不应该再计入了,怎么处理?一条连接长时间没有任何数据包的交互,怎么老化掉?一个进程长时间没有数据包的交互,甚至用户给关闭了,你的程序如何感知?libpcap截取到数据包后会给你提供截取到的时间戳,好好利用这个时间戳就可以办到。
最后,以数据包 ->连接 ->进程 的关系来思考会有助于你的程序设计,一条连接可以有N个数据包,一个进程可以有N条连接。这么一想,这3个结构体或者类就能定义好了。剩下的自己琢磨琢磨。
Linux下使用iftop工具结合iptables服务来解决带宽资源被恶意请求满的问题,主要通过2个步骤来实现;1. 使用iftop工具查出来是哪些个IP地址在请求主机的带宽资源,找出耗带宽的元凶
2. 找出耗带宽的IP地址或者段,分析是out方向还是in方向,使用iptables规则来进行控制
具体的详细 *** 作方法如下;
一但出现带宽被恶意请求,在带宽被请满的情况下基本上很难通过网络登入到服务器上进行 *** 作跟维护,这时我们需要通过阿里云提供的“连接管理终端”服务来登入系统
一般建议在主机正常的时候直接在服务器内部安装好iftop工具,这样出现恶意请求的时候直接可以使用该工具来进行排查,下面介绍下iftop的2中安装方法
1.使用yum 安装iftop工具
使用yum安装的话比较简单,只要直接执行 yum install iftop –y命令即可,如果没问题的话系统就会自动执行安装,但是有使用yum可能安装不了,这时就需要使用编译安装了
2.编译安装iftop工具
(1)下载iftop工具的源码包;
http://oss.aliyuncs.com/aliyunecs/iftop-0.17.tar.gz
(2)CentOS下安装所需的依赖包
yum install flex byacc libpcap ncursesncurses-devel libpcap-devel
(3 解压缩下载的iftop文件
tarzxvf iftop-0.17.tar.gz
(4 进入到解压的的iftop目录中
cdiftop-0.17
配置并制定安装目录为/usr/local/iftop目录下
(5./configure –prefix=/usr/local/iftop
(6)编译并安装
make &&make install
安装完成以后直接使用/usr/local/iftop/sbin/iftop 启动iftop程序查看流量使用情况,如果想使用iftop的方式直接开启程序,需要将iftop的程序添加到环境变量中即可
结合使用iptables服务来限制恶意请求的流量;
iftop –i eth1 查看eth1这块外网网卡的流量使用情况
通过上面这张信息很清楚的看到,121.199这台服务器一直往192.230.123.101 这个地址发送流量,而且出去产生的流量相当大,几乎把整个出网带宽都给耗尽了
查到了恶意请求的原因跟目标主机以后,我们就可以使用iptables服务来对这种恶意行为进行限制了,因为从查看到的数据看主要的流量是从out方向出去的,那就直接在OUT方向设置策略
Iptables -A OUTPUT -d 192.230.123.101 –j REJECT
这里可能还会发现一个情况就是禁用了这个1个IP以后可能这个段的其它IP地址都有可能马上就接上继续请求,那就可以针对一个段来进行限制
iptables-A OUTPUT -d 192.230.0.0/16 -j REJECT
策略加上以后可以再使用iftop –i eth1 来查看流量的请求情况;
可以查看到流量已经恢复了正常,之前的恶意请求的地址都已经被防火墙给屏蔽了,效果比较好
另外iftop还有很多的参数可以实现比较多的功能,有时间的话可以研究研究,对排查网络流量攻击以及掌控流量使用很有帮助的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)