劉志遠 周冬梅
摘要:隨著云計算的到來,相應(yīng)的大數(shù)據(jù)和物聯(lián)網(wǎng)也隨之興起。然而網(wǎng)絡(luò)信息安全的形勢非常嚴峻?,F(xiàn)在網(wǎng)絡(luò)服務(wù)器都是集群式分布,很多服務(wù)器集中起來一起進行同一種服務(wù),實現(xiàn)負載均衡,在客戶端看來就像是只有一個服務(wù)器。集群可以利用多個計算機進行并行計算從而獲得很高的計算速度,但是如果服務(wù)器被攻擊,將會導(dǎo)致整個服務(wù)器集群受到影響,甚至有可能導(dǎo)致宕機,導(dǎo)致用戶無法使用提供的服務(wù),造成嚴重的損失。14年的qq郵箱大規(guī)模的癱瘓就是非常的例子。往往造成這種問題的是我們眾所周知的DDoS。當受到DDoS攻擊時,服務(wù)器流量會驟增為平時的幾十倍,通過流量監(jiān)控及時報警運維工程師處理,以免造成服務(wù)器大規(guī)模宕機。我們通過實時監(jiān)測網(wǎng)卡流量變化,通過郵件引擎實現(xiàn)第一時間報警,及時處理,減少攻擊帶來的危害。
關(guān)鍵詞:云計算;網(wǎng)絡(luò)信息安全;服務(wù)器集群;負載均衡 DDoS
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2015)09-0061-02
DoS是Denial of Service的簡寫就是拒絕服務(wù),而DDoS就是Distributed Denial of Service的簡寫就是分布式拒絕服務(wù)。DDoS是利用TCP三次握手的漏洞進行攻擊的,所以對它們的防御辦法都是差不多的。DDoS也是黑客門慣用的手段,讓網(wǎng)絡(luò)服務(wù)商防不勝防,雖然現(xiàn)在也有很多物理防火墻等安全手段,一個大的網(wǎng)站可能有很多臺主機利用負載均衡技術(shù)提供同一個網(wǎng)站的www服務(wù),但是在大規(guī)模的DDoS攻擊面前依然不堪一擊。
分布式拒絕服務(wù)攻擊采取的攻擊手段就是分布式的,在攻擊的模式改變了傳統(tǒng)的點對點的攻擊模式,使攻擊方式出現(xiàn)了沒有規(guī)律的情況,而且在進行攻擊的時候,通常使用的也是常見的協(xié)議和服務(wù),這樣只是從協(xié)議和服務(wù)的類型上是很難對攻擊進行區(qū)分的。在進行攻擊的時候,攻擊數(shù)據(jù)包都是經(jīng)過偽裝的,在源IP 地址上也是進行偽造的,這樣就很難對攻擊進行地址的確定,在查找方面也是很難的。這樣就導(dǎo)致了分布式拒絕服務(wù)攻擊在檢驗方法上是很難做到的。
此流量監(jiān)控報警系統(tǒng)是在centos 7 版本下使用shell腳本撰寫的,通過郵件報警?,F(xiàn)在智能手機的普及,郵件也能像短信即使告警,通知服務(wù)器運維人員。此腳本包包含主程序、子程序、配置文件、郵件引擎、輸出日志等。
主程序:作為整個腳本的入口,是整個系統(tǒng)的命脈。
配置文件:是一個控制中心,用它來開關(guān)各個子程序,指定各個相關(guān)聯(lián)的日志文件。
子程序:這個才是真正的監(jiān)控腳本,用來監(jiān)控各個指標。
郵件引擎:是原本是由一個php程序來實現(xiàn),它可以定義發(fā)郵件的服務(wù)器、發(fā)郵件人以及收郵件人。但是如果發(fā)表在本論文里,會導(dǎo)致篇幅過長,所以調(diào)用了系統(tǒng)自帶的mailx郵件引擎。
輸出日志:整個監(jiān)控系統(tǒng)要有日志輸出。
我們的機器角色多種多樣,但是所有機器上都要部署同樣的監(jiān)控系統(tǒng),也就說所有機器不管什么角色,整個程序框架都是一致的,不同的地方在于根據(jù)不同的角色,定制不同的配置文件。
程序架構(gòu):
monitor/bin/main.sh
monitor/conf/mon.conf
monitor/mail/mail.sh
monitor/log/ main.log、main_err.log、mail.log、mail_err.log、number.log、timestamp.log、network_traffic.txt
其中bin下是主程序,conf下是配置文件,mail下是郵件引擎,log下是日志及需要發(fā)送的郵件內(nèi)容。此腳本包中的程序是使用的相對路徑,如果使用該腳本包請按照以上程序架構(gòu)對應(yīng)的路徑。
1)main.sh
#! /bin/bash
#Written by Liuzhiyuan.
export send=1 # #報警控制開關(guān)##
export ip=`/sbin/ifconfig |grep -A1 'enp134s0' |grep 'inet' |awk '{print $2}'`
dir=`pwd`
last_dir=`echo $dir|awk -F'/' '{print $NF}'`
if [ $last_dir == "bin" ]; then
conf_file="../conf/mon.conf"
else
echo "you shoud cd bin dir"
exit
fi
exec 1>>../log/main.log 2>>../log/main_err.log
while [ 0 ]; do
sleep 60 ##一分鐘控制時間,一分鐘檢測一次##
if grep -q 'to_mon_traffic=1' $conf_file; then
echo $ip > ../log/network_traffic.txt
/usr/bin/sar -n DEV 1 10 >> ../log/network_traffic.txt
##當前10秒瞬時流量及10秒平均流量,以防單一秒內(nèi)瞬時流量驟增,導(dǎo)致誤判##
traffic_value=`tail -n3 ../log/network_traffic.txt |grep enp134s0 |awk '{print $5}'` ##截取流量平均值##
traffic_value=` echo $traffic_value |awk -F'.' '{print $1}'`
echo $traffic_value
tcpdump -nn -i enp134s0 -c 10 >> ../log/network_traffic.txt ##抓取攻擊ip#
fi
if [ $traffic_value > 1 ] && [ $send == 1 ]; then
/bin/bash ../mail/mail.sh $ip $traffic_value ../log/network_traffic.txt
fi
done
2)mail.sh
郵件控制腳本,原本是由php實現(xiàn)的,但是由于篇幅過長,改為調(diào)用系統(tǒng)自帶的mailx來實現(xiàn),如果系統(tǒng)內(nèi)未內(nèi)置,請使用yum install mailx-12.5-12.el7_0.x86_64 安裝。使用maix之前需要先配置/etc/mail.rc 文件,在該文件最下面加入以下內(nèi)容:
set from=*******@qq.com smtp=smtp.qq.com
set smtp-auth-user=##qq號## smtp-auth-password=##qq密碼##
set smtp-auth=login
如果測試不能發(fā)送郵件,請在郵箱設(shè)置里打開POP3/SMTP服務(wù)。
由于服務(wù)器是集群式分布,一個運維人員要管理上百臺服務(wù)器。如果服務(wù)器集群受到DDoS攻擊,不會只是單一的一臺服務(wù)器會報警,而是上百臺服務(wù)器同時報警。DDoS攻擊一般會持續(xù)很長時間,
如果每分鐘有上百臺機器發(fā)郵件到自己的郵箱會是怎樣一個折磨人的事情。如果這里使用短信作為報警手段,那么也會給企業(yè)帶來不必要的損失,所以這里實現(xiàn)了郵件的收斂。如果遭受到攻擊且距離上次受到攻擊的時間有一個小時以上,那么會立即發(fā)送郵件。如果受到攻擊且距離上次被攻擊的時間在一個小時以內(nèi),就通過計數(shù)累計10分鐘發(fā)一次郵件。初次使用本腳本包時,需要預(yù)先在number.log 和timestamp.log 置0.
#! /bin/bash
#Written by Liuzhiyuan.
exec 1>>../log/mail.log 2>>../log/mail_err.log
t_s1=`date +%s`
t_s2=`tail -1 ../log/timestamp.log`
v=$[$t_s1-$t_s2]
if [ $v -gt 3600 ];then
/usr/bin/mailx -s "$1 traffic_rate $2" 351843010@qq.com < $3
echo `date +%s` > ../log/timestamp.log
else
nu=`cat ../log/number.log`
nu=$[$nu+1]
echo $nu>../log/number.log
if [ $nu -ge 10 ];then
/usr/bin/mailx -s " $1 traffic_rate $2 trouble continue 10 min" 351843010@qq.com < $3
echo "0" > ../log/number.log
fi
fi
3)mon.conf
為了此腳本的可擴展性,在此配置文件獨立出來,是為了更好的控制各種監(jiān)控程序。
## to config the options if to monitor
to_mon_php_socket=0
## network traffic
to_mon_traffic=1
最后,log里的文件需要按照要求提前創(chuàng)建。把mian.sh 加入開機啟動項,也可以直接手動運行,sh main.sh & 以后臺這種方式運行。
通過shell腳本進行實時進行網(wǎng)卡流量監(jiān)控,并通過shell腳本控制郵件的發(fā)送及發(fā)送頻率,能夠及時報告服務(wù)器的負載情況,這對網(wǎng)絡(luò)運維至關(guān)重要。
參考文獻:
[1] 李世明.跟阿銘學(xué)Linux[M].北京;人民郵電出版社,2014.