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
语法: 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]