在阿里雲租了一台服務器,是ECS的裸裝,在上面安裝了tomcat和項目之后跑了一段時間,沒過幾天發現帶寬的流量特別高,其實本身程序訪問的沒有幾個用戶,但是帶寬的流量已經消耗了好幾百老人頭了,這是一個值得去關注的問題,如何解決當下這種情況。
解決方案有二種:
1.重裝系統,重新來一遍,說實話這確實是最快的方法,但是卻不是解決問題的根本之道;
2.照目前來看,肯定是被人掃成肉雞了,所以找到對應的發送數據包的程序,然后kill 掉。
我個人傾向於第二種解決方案,所以需要准備一些工具着手去做這些事,需要用到的工具:
tcpdump、libpcap(tcpdump依賴於此)、iftop
ok這些工具都是需要安裝的,安裝包我會提供出來,相應的安裝教程也貼出來
一、安裝tcpdump
http://blog.csdn.net/maxwell_nc/article/details/45270083
這篇博客講的非常好,安裝步驟也比較詳細,為了保證資源不丟失我就轉一下內容吧
yum install flex yum install bison yum install gcc
yum這個命令我就不多做解釋了Centos用的,不會的大家可以百度一下
上面這三個是安裝tcpdump必要的庫
另外tcpdump是基於libpcap,這個在yum找不到,我們到tcpdump的官網(http://www.tcpdump.org/#latest-release)可以下載libpcap和tcpdump
我這里使用的tcpdump-4.9.0.tar.gz和libpcap-1.8.1.tar.gz 。
首先解壓libpcap,然后進入目錄配置安裝
./configure make make install
然后解壓tcpdump,然后進入目錄配置安裝
./configure make make install
一切順利的話,就可以使用tcpdump進行抓包了。
具體的tcpdump命令可參考上面的引用地址
小例子:tcpdump -i eth0 port 80 -c 3 -t
(1) -i eth0 : 只抓經過接口eth0的包
(1) port 80 : 抓取數據包只抓取80端口的
(3) -c 3 : 只抓取3個數據包
(4) -t : 不顯示時間戳
一般來講tcpdump 配合wireshark這個軟件去使用,這個軟件百度一搜就搜到了,然后將tcpdump生成的文件放到這個wireshark去分析即可。
OK 到了現在基本上就能做分析了,但是如果想要找到具體原因這還是遠遠不夠滴。
二、安裝iftop去分析
iftop 是類似於top的實時流量監控工具。主要用來顯示本機網絡流量情況及各相互通信的流量集合,如單獨同那台機器間的流量大小,非常適合於代理服務器和iptables服務器使用
官方網站:http://www.ex-parrot.com/~pdw/iftop/
在官網下載即可,后面我也會將具體的文件下載地址貼出來
tar zxvf iftop-0.17.tar.gz cd iftop-0.17 ./configure make make install
檢測環境時提示:checking for a curses library containing mvchgat... none found
解決辦法:yum -y install ncurses-devel
1、iftop界面相關說明
界面上面顯示的是類似刻度尺的刻度范圍,為顯示流量圖形的長條作標尺用的。
中間的<= =>這兩個左右箭頭,表示的是流量的方向。
TX:發送流量
RX:接收流量
TOTAL:總流量
Cumm:運行iftop到目前時間的總流量
peak:流量峰值
rates:分別表示過去 2s 10s 40s 的平均流量
使用示例:
iftop -i eth1 -B -n -N -P
看下有沒有異常的ip,接收或發送流量特別大的都是有問題滴,可以看看ip是哪里的。
三、配合命令
netstat -apn
查看所有的進程和端口使用情況。
重點看這里
看看哪個ip是不正常的用的端口也是不正常的,如果是阿里雲的機器可以在控制台設置公網入方向的端口和公網出方向的端口,只打開有用的端口
這時在配合iftop去分析,很容易就發現有問題的ip和端口了,看看如果你的機器還是一直在向外發送流量 那么就找到這個程序的pid
ps -aux|grep pid
通過上面的命令很容易看到這個程序在哪個地址下運行着,先kill -9 892 掉然后刪除對應的目錄
如果感覺程序會再生的話可以通過 find -name "程序名" 找找
重啟,如果還有問題的話重復上面的操作即可。