刘志远 周冬梅
摘要:随着云计算的到来,相应的大数据和物联网也随之兴起。然而网络信息安全的形势非常严峻。现在网络服务器都是集群式分布,很多服务器集中起来一起进行同一种服务,实现负载均衡,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,但是如果服务器被攻击,将会导致整个服务器集群受到影响,甚至有可能导致宕机,导致用户无法使用提供的服务,造成严重的损失。14年的qq邮箱大规模的瘫痪就是非常的例子。往往造成这种问题的是我们众所周知的DDoS。当受到DDoS攻击时,服务器流量会骤增为平时的几十倍,通过流量监控及时报警运维工程师处理,以免造成服务器大规模宕机。我们通过实时监测网卡流量变化,通过邮件引擎实现第一时间报警,及时处理,减少攻击带来的危害。
关键词:云计算;网络信息安全;服务器集群;负载均衡 DDoS
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)09-0061-02
DoS是Denial of Service的简写就是拒绝服务,而DDoS就是Distributed Denial of Service的简写就是分布式拒绝服务。DDoS是利用TCP三次握手的漏洞进行攻击的,所以对它们的防御办法都是差不多的。DDoS也是黑客门惯用的手段,让网络服务商防不胜防,虽然现在也有很多物理防火墙等安全手段,一个大的网站可能有很多台主机利用负载均衡技术提供同一个网站的www服务,但是在大规模的DDoS攻击面前依然不堪一击。
分布式拒绝服务攻击采取的攻击手段就是分布式的,在攻击的模式改变了传统的点对点的攻击模式,使攻击方式出现了没有规律的情况,而且在进行攻击的时候,通常使用的也是常见的协议和服务,这样只是从协议和服务的类型上是很难对攻击进行区分的。在进行攻击的时候,攻击数据包都是经过伪装的,在源IP 地址上也是进行伪造的,这样就很难对攻击进行地址的确定,在查找方面也是很难的。这样就导致了分布式拒绝服务攻击在检验方法上是很难做到的。
此流量监控报警系统是在centos 7 版本下使用shell脚本撰写的,通过邮件报警。现在智能手机的普及,邮件也能像短信即使告警,通知服务器运维人员。此脚本包包含主程序、子程序、配置文件、邮件引擎、输出日志等。
主程序:作为整个脚本的入口,是整个系统的命脉。
配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。
子程序:这个才是真正的监控脚本,用来监控各个指标。
邮件引擎:是原本是由一个php程序来实现,它可以定义发邮件的服务器、发邮件人以及收邮件人。但是如果发表在本论文里,会导致篇幅过长,所以调用了系统自带的mailx邮件引擎。
输出日志:整个监控系统要有日志输出。
我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件。
程序架构:
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下是日志及需要发送的邮件内容。此脚本包中的程序是使用的相对路径,如果使用该脚本包请按照以上程序架构对应的路径。
1)main.sh
#! /bin/bash
#Written by Liuzhiyuan.
export send=1 # #报警控制开关##
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秒平均流量,以防单一秒内瞬时流量骤增,导致误判##
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实现的,但是由于篇幅过长,改为调用系统自带的mailx来实现,如果系统内未内置,请使用yum install mailx-12.5-12.el7_0.x86_64 安装。使用maix之前需要先配置/etc/mail.rc 文件,在该文件最下面加入以下内容:
set from=*******@qq.com smtp=smtp.qq.com
set smtp-auth-user=##qq号## smtp-auth-password=##qq密码##
set smtp-auth=login
如果测试不能发送邮件,请在邮箱设置里打开POP3/SMTP服务。
由于服务器是集群式分布,一个运维人员要管理上百台服务器。如果服务器集群受到DDoS攻击,不会只是单一的一台服务器会报警,而是上百台服务器同时报警。DDoS攻击一般会持续很长时间,
如果每分钟有上百台机器发邮件到自己的邮箱会是怎样一个折磨人的事情。如果这里使用短信作为报警手段,那么也会给企业带来不必要的损失,所以这里实现了邮件的收敛。如果遭受到攻击且距离上次受到攻击的时间有一个小时以上,那么会立即发送邮件。如果受到攻击且距离上次被攻击的时间在一个小时以内,就通过计数累计10分钟发一次邮件。初次使用本脚本包时,需要预先在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
为了此脚本的可扩展性,在此配置文件独立出来,是为了更好的控制各种监控程序。
## to config the options if to monitor
to_mon_php_socket=0
## network traffic
to_mon_traffic=1
最后,log里的文件需要按照要求提前创建。把mian.sh 加入开机启动项,也可以直接手动运行,sh main.sh & 以后台这种方式运行。
通过shell脚本进行实时进行网卡流量监控,并通过shell脚本控制邮件的发送及发送频率,能够及时报告服务器的负载情况,这对网络运维至关重要。
参考文献:
[1] 李世明.跟阿铭学Linux[M].北京;人民邮电出版社,2014.