蓝忧无泪 发表于 2017-8-31 02:18:04

Linux 带宽异常跑满的解决方案


问题原因

可能是恶意程序问题,或者是部分 IP 恶意访问导致,亦可能是服务遭到了CC攻击

处理办法

使用 iftop 工具排查
使用 nethogs 进行排查
首先需要确定是哪一张网卡的带宽跑满,可以通过sar -n DEV 1 5 命令来获取网卡级别的流量图,命令中 1 5 表示每一秒钟取 1 次值,一共取 5 次。

命令执行后会列出每个网卡这 5 次取值的平均数据,根据实际情况来确定带宽跑满的网卡名称,默认情况下 eth0 为内网网卡,eth1 为外网网卡。



使用 iftop 工具排查

1、服务器内部安装 iftop 流量监控工具:yum install iftop -y

2、.服务器外网带宽被占满时,如果通过远程无法登陆,可通过阿里云终端管理进入到服务器内部,运行下面命令查看流量占用情况:iftop -i eth1 -P 注:-P 参数会将请求服务的端口显示出来,也就是说是通过服务器哪个端口建立的连接,看内网流量执行 iftop -i eth0 -P 命令。

如上面示例图,通过分析发现最耗流量的是服务器上 53139 端口和 115.205.150.235 地址建立的连接,产生了大量入网流量。执行 netstat 命令反查 53139 端口对应进程。netstat -tunlp |grep 53139

3、最终定位出来是服务器上 vsftpd 服务产生大量流量,这时可以通过停止服务或使用iptables服务来对指定地址进行处理,如屏蔽 IP 地址,限速,以保证服务器带宽能够正常使用。

使用 nethogs 进行排查

1、服务器内部安装 nethogs 流量监控工具:yum install nethogs -y2、通过 nethogs 工具来查看某一网卡上进程级流量信息,若未安装可以通过 yum、apt-get 等方式安装。

假定当前 eth1 网卡跑满,则执行命令 nethogs eth1,在右边的红框中可以看到每个进程的网络带宽情况,左边红框显示了进程对应的 PID,在此可以确定到底是什么进程占用了系统的带宽。



3、如果确定是恶意程序,可以通过 kill -TERM 来终止程序。

如是 Web 服务程序,则可以使用 iftop 等工具来查询具体 IP 来源,然后分析 Web 访问日志是否为正常流量,日志分析也可以使用 logwatch 或 awstats 等工具进行分析,若确定是正常的流量,则可以考虑升级服务器的带宽。

使用Web应用防火墙防御CC攻击

产品页面:https://www.aliyun.com/product/waf







蓝忧无泪 发表于 2017-8-31 02:46:07

语法: iftop -h | [-npblNBP] [-i interface] [-f filter code] [-F net/mask] [-G net6/mask6]
   -h                  显示本帮助(Help)信息
   -n                  不进行主机名(hostName)查找
   -N                  不将端口号(port Number)转换成对应的服务 to services
   -p                  混合(Promiscuous)模式(显示网络相关的其他主机信息)
   -b                  不显示流量图形条(Bar)
   -B                  以字节(Byte)为单位,显示带宽(Bandwidth);默认以比特(bit)显示的
   -i interface      监控的网卡接口(interface)
   -f filter code      包统计时,使用过滤码;默认:无,只统计IP包
   -F net/mask         显示特定IPv4网段的进出流量(Flow);如# iftop -F 10.10.1.0/24
   -G net6/mask6       显示特定IPv6网段的进出流量(Flow)
   -l                  显示并统计IPv6本地(Local)链接的流量(默认:关)
   -P                  显示端口(Port)
   -m limit            设置显示界面上侧的带宽刻度(liMit)
   -c config file      指定配置(Config)文件
   -t                  使用不带窗口菜单的文本(text)接口

   排序:
   -o 2s                Sort by first column (2s traffic average)
   -o 10s               Sort by second column (10s traffic average)
   -o 40s               Sort by third column (40s traffic average)
   -o source            Sort by source address
   -o destination       Sort by destination address

   The following options are only available in combination with -t
   -s num            print one single text output afer num seconds, then quit
   -L num            number of lines to print界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
前面IP是本机的(Source),后面IP远程主机的(Dest);
中间的<= =>这两个左右箭头,表示的是流量的方向。
右侧的三列数值:
第一列是:在此次刷新之前2s或10s或40s的平均流量(按B设置秒数);
第二列是:在此次刷新之前10秒钟的总流量的一半;
第三列是:在此次刷新之前40秒钟的总流量的1/5;
TX:发送(Transmit)流量;RX:接收(Receive)流量;TOTAL:总流量;
cum:运行iftop到目前时间的总和(Cum);peak:流量峰(Peak)值;
rates:分别表示过去 2s 10s 40s 的平均流量;

界面显示时的交互命令:主机显示:                              
n - DNS主机解析的开关                     
s - 源(Source)主机显示的开关               
d - 目标(Dest)主机显示的开关               
t - 循环切换行显示模式   
端口显示:                              
N - toggle service resolution               
S - toggle show source port                  
D - toggle show destination port            
p - toggle port display                     
排序:
1/2/3 - sort by 1st/2nd/3rd column
< - sort by source name
> - sort by dest name
o - freeze current order
普通:                           
P - 暂停(Pause)显示
h - 本帮助(Help)的显示或隐藏
b - 图形条(Bar)的显示或隐藏
B - cycle bar graph average         
T - toggle cumulative line totals   
j/k - scroll display               
f - edit filter code               
l - set screen filter               
L - lin/log scales                  
! - shell command                  
q - quit         
页: [1]
查看完整版本: Linux 带宽异常跑满的解决方案