記一次流量異常處理
前兩天接到一個做開發的朋友電話,說他們客戶一台服務器開機後,所有一個網段的機器上網都變慢了,他遠程操作這台服務器也一卡一卡的。
我第一反應就是機器被人攻擊過了,因為我之前也遇到過類似的現象。大概都是tomcat管理密碼設置的比較弱,被人上傳了一些war包,導致服務器拼命往外發包,或者是被人惡意上傳了一些php文件,也是往外發送大量的數據包。總而言之,往外發送大量數據包基本都是被人攻擊過啦!下面看看我是怎麼處理的。
1、首先我給他一個腳本,確認一下是網卡異常流量引起。注意網卡改成你的外網網卡名稱。
- while : ; do
- time=`date "+%Y-%m-%d %H:%M:%S"`
- rx_before=`ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-`
- tx_before=`ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-`
- sleep 2
- rx_after=`ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-`
- tx_after=`ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-`
- rx_result=$[(rx_after-rx_before)/256]
- tx_result=$[(tx_after-tx_before)/256]
- echo "$time Now_In_Speed: "$rx_result"kbps Now_OUt_Speed: "$tx_result"kbps"
- sleep 2
- done
然後運行這個腳本
- sh traffic.sh
執行之後我們會看到偶爾流出的流量驚人。
- 2016-02-03 13:32:01 Now_In_Speed: 5kbps Now_OUt_Speed: 0kbps
- 2016-02-03 13:32:05 Now_In_Speed: 2kbps Now_OUt_Speed: 0kbps
- 2016-02-03 13:32:09 Now_In_Speed: 1kbps Now_OUt_Speed: 0kbps
- 2016-02-03 13:32:13 Now_In_Speed: 1kbps Now_OUt_Speed: 664567kbps
- 2016-02-03 13:32:17 Now_In_Speed: 6kbps Now_OUt_Speed: 657895kbps
- 2016-02-03 13:32:21 Now_In_Speed: 3kbps Now_OUt_Speed: 568462kbps
- 2016-02-03 13:32:25 Now_In_Speed: 4kbps Now_OUt_Speed: 0kbps
2、問題確定了,我們就好辦了,上圖我截圖很少,而且我還發現了很有規律的事情,大概每二十多秒就會發出3-4個左右相當大的數據包。既然有規律那就肯定是後台有程序在運行。我查看了一下服務器是不是運行了tomcat?結果webapps目錄下沒有一些異常的jar包。我再查了一下是不是apache什麼的,結果服務器上就只發現運行了oracle,根據自己的排查故障經驗,我和朋友說了把oracle關閉。縮小故障查找范圍,好確認不是oracle引起的。
3、在用ps -ef看了一下基本看不出,因為進程太多了,而且很多系統的進程我也不認識,沒有看到什麼異常進程。只有一個tomcat進程,kill之後一會又起來了,很奇怪。肯定是什麼守護程序一直啟動。
4、上面說了一開機啟動就會出現這個現象,那麼還肯定是啟動服務或者啟動腳本裡面寫了什麼代碼,結果rc.local文件也正常。那麼看/etc/init.d目錄下的啟動腳本,有沒有新增的或者可疑的?果然發現了一個functions和DbSecuritySpt文件,我將這兩個文件移走,然後故障依舊。看了一下DbSecuritySpt文件裡面內容:
- #!/bin/bash
- /usr/local/apache-tomcat-6.0.44/webapps/eei/gfty
初步一看這是一個很正常的腳本文件啊!一般病毒文件都是打不開的。問了我朋友說不是他們寫的,那我只能將這個文件移走,然後也很二逼似的把那個functions文件也移走了,結果他們重啟機器後,告訴我服務器起不來啦!截圖如下:
一看上圖的報錯我心想肯定是那個functions文件移走報錯了。不過還好這是個虛擬機,我遠程連接宿主機上。
然後在上圖界面輸入root密碼後,執行mount -o remount rw /後將functions文件移到/etc/init.d目錄下重新啟動。但是重啟還是報錯,說要檢查文件系統塊文件,又執行fsck -y /dev/sda後提示重啟,重啟後系統正常運行。沒有tomcat那個進程了,但是還是偶爾往外拼命往外發包啊!
5、我又上網查了一下很多網友說是將/tmp目錄下有一些的文件裡面寫了PID號,但是我根據這些PID號沒有找到這些進程,我把這兩個文件移走了。重啟系統故障依舊。而且操作很卡真的很惡心,加上我自己的筆記本一上午關機7次,應該硬件老化的原因,比較2010年買的。哎!此處心中一萬個草泥馬飄過。
6、又咨詢了朋友說iftop工具能看的出來,我試了也不行,爆卡,後來又是是iptraf工具,這兩個工具都沒安裝,又花了很多安裝時間,結果也看不出來啊!拿一個iptraf工具我們看看,如下圖所示:
7、又看了一下chkconfig開機啟動有沒有異常的服務,一看服務太多了,也很難發現。
8、我在想是不是每次連續發送幾個大包的時候是不是那個進程也會占用很高的CPU使用率呢?再一邊觀察流量腳本運行的情況,一邊又執行top看看是不是哪個進程導致。有一個getty進程偶爾能跑到70%多,結果一查看是有6個終端,然後關閉了多余的終端,但是還是異常。也沒發現別的進程占用很高的CPU使用率。
9、最後我想用netstat -an | more測試,一個一個排查當前服務器開放端口,因為我朋友說客戶也不是很懂linux,開放了很多端口暴露在互聯網上。發現了一個xxxx.51545->119.147.145.221:6001異常,然後我查看了一下這個51545端口對應的進程,如下所示:
這個進程執行的正是getty命令,說明和我上面一個getty進程偶爾跑到70%多使用率,查的正好符合。我嘗試將這個1587進程號kill掉,再觀察一段時間腳本流出流量基本為0了,也就是正常了。也就是說這台服務器通過51545端口去連接互聯網上的119.147.145.221這台服務器的6001端口,查看了這個IP地址是廣東電信的。
但是事情還沒有完結,上面說了肯定是開機啟動程序裡面運行的,而且這個目的119.147.145.221地址肯定是在病毒文件裡面隱藏的。我進到/etc/rc.d目錄下看了一下:
看樣子每個啟動級別都被人置放病毒文件啦!
都是軟件連哈!不過這個文件被我第四步的時候移走了,然後我們還看到了一個可疑的selinux文件,因為它和DbSecuritySpt文件的時間戳和別的啟動腳本文件不一樣。這就測試你的眼睛尖不尖了哈~~
再看看這個/usr/bin/bsd-port目錄下的東東哈!
趕緊刪除/etc/init.d/selinux文件和/usr/bin/bsd-port目錄。然後重啟再試試看,系統一切正常!網卡流量也一切正常。然後修改root密碼,但是很遺憾這裡查不出是因為系統的漏洞還是程序的漏洞導致被惡意上傳代碼文件的。
故障處理總結:
1、服務器一定要盡少量的使用密碼登錄,最好是密鑰加密碼登錄。
2、少開一些和業務無關的端口。
3、查問題一定要用排除法。眼睛要尖。
4、還是對系統很多腳本和進程不是很熟悉。
4、雖然解決了,但是這個機器還是被人上傳過的,不確定是不是還會有一些不穩定的因素,建議最好還是重新安裝系統。