文档目的

本文档主要是为了解决服务器带宽跑满,影响正常业务提供服务问题。其中的原因有可能是恶意程序问题,或者是部分IP恶意***访问导致,也有可能是服务器遭到CC***。

 

 

基础知识

CC***:***者借助代理服务器生成指向受害主机的合法请求,实现DDOS,和伪装就叫:CC(ChallengeCollapsar)CC模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).

 

 

常用命令

iftop相关参数

 

常用的参数

-i设定监测的网卡,如:# iftop -i eth1

 

-B bytes为单位显示流量(默认是bits),如:# iftop -B

 

-n使host信息默认直接都显示IP,如:# iftop -n

 

-N使端口信息默认直接都显示端口号,如: # iftop -N

 

-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24# iftop -F 10.10.1.0/255.255.255.0

 

-hdisplay this message),帮助,显示参数信息

 

-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

 

-b使流量图形条默认就显示;

 

-f这个暂时还不太会用,过滤计算包用的;

 

-P使host信息及端口信息默认就都显示;

 

-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

 

进入iftop画面后的一些操作命令(注意大小写)

h切换是否显示帮助;

 

n切换显示本机的IP或主机名;

 

s切换是否显示本机的host信息;

 

d切换是否显示远端目标主机的host信息;

 

t切换显示格式为2/1/只显示发送流量/只显示接收流量;

 

N切换显示端口号或端口服务名称;

 

S切换是否显示本机的端口信息;

 

D切换是否显示远端目标主机的端口信息;

 

p切换是否显示端口信息;

 

P切换暂停/继续显示;

 

b切换是否显示平均流量图形条;

 

B切换计算2秒或10秒或40秒内的平均流量;

 

T切换是否显示每个连接的总流量;

 

l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

 

L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

 

j或按k可以向上或向下滚动屏幕显示的连接记录;

 

123可以根据右侧显示的三列流量数据进行排序;

 

<根据左边的本机名或IP排序;

 

>根据远端目标主机的主机名或IP排序;

 

o切换是否固定只显示当前的连接;

 

f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

 

!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

 

q退出监控。

 

系统环境

操作系统:Linux bogon 3.10.0-327.36.3.el7.x86_64 #1 SMP Mon Oct 24 16:09:20 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

 

 

 

 

操作步骤

1.确认带宽跑满网卡

sar -n DEV 1 5


wKiom1iySHjRzKxQAATBSI-rRq0519.png


2. 安装iftop工具

服务器内部安装 iftop 流量监控工具:

 

yum install iftop -y

 

 

注:如果无法用yum安装,可以尝试一下方式

 

CentOS上安装所需依赖包:

 

yum install flex byacc  libpcap ncurses ncurses-devel libpcap-devel

 

 

 

下载iftop

 

wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz

 

tar zxvf iftop-0.17.tar.gz

 

cd iftop-0.17

 

./configure

 

make && make install

 

3. iftop排查问题

服务器外网带宽被占满时,如果通过远程无法登陆,可通过阿里云终端管理进入到服务器内部,运行下面命令查看流量占用情况:

 

iftop -i eth1 -P

注:-P 参数会将请求服务的端口显示出来,也就是说是通过服务器哪个端口建立的连接,看内网流量执行 iftop -i eth0 -P 命令。

 

界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

 

中间的<= =>这两个左右箭头,表示的是流量的方向。

 

TX:发送流量

RX:接收流量

TOTAL:总流量

Cumm:运行iftop到目前时间的总流量

peak:流量峰值

rates:分别表示过去 2s 10s 40s 的平均流量


wKioL1iySJOAPfO9AARGVpBR4cY277.png


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

 

netstat -tunlp |grep 53139


wKiom1iySKiwcpqUAACjWYGLZTI994.png


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

 

 4. nethogs排查问题

下载nethogs

wget http://sourceforge.NET/projects/nethogs/files/nethogs/0.8/nethogs-0.8.0.tar.gz

 

安装nethogs及其依赖

yum install ncurses*

yum install libpcap-dev libncurses5-dev

tar zxvf nethogs-0.8.0.tar.gz

cd nethogs

make && make install

 

 

执行nethogs

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


wKioL1iySMuiUveTAAHQTdIy0-Y583.png


常见问题果确定是恶意程序,可以通过 kill -TERM 来终止程序。

 

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

 

 

 

问题一:make: yacc: Command not found

make: *** [grammar.c] Error 127

 

解决方法:

apt-get install byacc   /   yum install byacc

 

问题二:configure: error: Curses! Foiled again!

(Can't find a curses library supporting mvchgat.)

Consider installing ncurses.

 

解决方法:

apt-get install libncurses5-dev  /    yum  install ncurses-deve

参考文献

阿里云文献