服务器被攻击企业案例

摘要

服务器遭受到攻击,直接显示出运维的能力不行。我对此非常的自责,但是通过这次让我知道了运维的重要性,和重要职责!





服务器遭受攻击导致无法打开网址


服务器遭受攻击导致无法打开网址

2016年9月6日
  今天我们公司发生了一个故障,首先是网站的带宽跑满,其次是CPU一直上不去。因为我们公司的服务器架构只有简单的1个nginx负载2台web。Web上面是2台有几个tomcat项目包
  首先我们先查看阿里云监控的流量图,我们可以看到正常流量。然后突然流量大增
1.png-10.7kB
2.png-15.6kB
3.png-38.3kB
这里CPU使用率一直特别高,所以我使用了top命令来查看进程,发现不是这里的问题。

4.png-316.9kB
  但是,看到web上面的tomcat项目并没有占用多少资源。开始进行日志查看
首先我查看的是系统错误日志
5.png-35.2kB
  发现好像是洪水攻击,当时就有点不冷静了。因为服务器已经影响到业务。导致无法SSH连接进行管理,当时就设置了tcp的连接数,发现设置完成之后好了。但是几分钟之后还是出现问题。

  当时把所有的服务器全停了,然后等了半个小时,在次开启,发现一开起几分钟就会出现这种问题。

6.png-23.9kB
后来发现一停掉,负载就下去。最后通过nginx负载均衡发现问题
---
  在这期间,我查看了阿里云监控的态势感知
  1.png-75.2kB
  发现公司的服务器一直被攻击,当时项目整个的方案已经写好,还没实施就发生了这个问题。顿时感到心里有阴影!
  当时有人让我查看一下web访问日志,终于发现了问题!

  1. [root@vm-69-6cc2 logs]# grep 07/Sep/2016 mallView_access.log |awk '{a[$1]++}END{for(i in a)print i,a[i]}'
  2. 114.111.167.89 60
  3. 111.205.180.168 60
  4. 60.205.125.164 407876

有一个IP跟我们一直建立连接!
温馨提示:有的时候光查看web访问日志是不行的。因为我们公司的人员都访问我们自己的网站,此时Web访问日志会有很多。所以我们还要查看连接数

  1. netstat -an|grep "ESTABLISHED"|awk -F "[ :]+" '{print $6}'|sort|uniq -c|sort -rn -k1

如下图
1.png-3.7kB

果断设置防火墙拒绝这个IP地址
4.jpg-26kB
从新启动发现负载正常。

因为当时显示带宽用的特别多,出口带宽。我就是用了nethogs工具查看内部带宽情况
3.png-5.8kB
  提示:如果有使用阿里云服务器的同学,请务必要购买云盾和CDN等相关缓存业务。否则吃亏的是自己!

防范DDOS攻击脚本

#防止SYN攻击 轻量级预防

  1. iptables -N syn-flood
  2. iptables -A INPUT -p tcp --syn -j syn-flood
  3. iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
  4. iptables -A syn-flood -j REJECT

#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃

  1. iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
  2. iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#用Iptables抵御DDOS (参数与上相同)

  1. iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
  2. iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

##########################################################

防范CC攻击

  当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
1.系统要求
(1)LINUX 内核版本:2.6.9-42ELsmp2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
(2)iptables版本:1.3.7
2. 安装
安装iptables1.3.7系统内核版本对应的内核模块kernel-smp-modules-connlimit
3. 配置相应的iptables规则
示例如下:
(1)控制单个IP的最大并发连接数

  1. iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30

#默认iptables模块不包含connlimit,需要自己单独编译加载,请参考该地址
http://sookk8.blog.51cto.com/455855/280372不编译内核加载connlimit模块

(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接

  1. iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT

#单个IP在60秒内只允许最多新建30个连接

4. 验证
(1)工具:flood_connect.c(用来模拟攻击)
(2)查看效果:
使用
watch 'netstat -an | grep:21 | grep<模拟攻击客户机的IP>| wc -l'
 实时查看模拟攻击客户机建立起来的连接数,使用watch 'iptables -L -n -v | \grep<模拟攻击客户机的IP>'

查看模拟攻击客户机被 DROP 的数据包数。
5.注意
为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:

  1. #cat/etc/modprobe.conf options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60
  2. #记录1000个IP地址,每个地址记录60个数据包 #modprobe ipt_recent

本段转载:http://sookk8.blog.51cto.com/455855/321242/


我自己写的脚本,本脚本是参考刘沈晨的防DDOS攻击,进行改写,写入定时任务即可!

  1. [root@vm-69-6cc2 ~]# cat /server/scripts/iptables.sh
  2. #!/bin/sh
  3. IP_filter_command="iptables -I INPUT -j DROP -s"
  4. IP_recover_command="iptables -D INPUT -j DROP -s"
  5. IP(){
  6. netstat -an|grep "ESTABLISHED"|awk -F "[ |:]+" '{print $6}'|sort |uniq -c|sort -rn -k1 > /server/scripts/ip.txt
  7. }
  8. a(){
  9. exec < /server/scripts/ip.txt
  10. while read line
  11. do
  12. IP_count=`echo $line|awk '{print $1}'`
  13. IP=`echo $line|awk '{print $2}'`
  14. IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l`
  15. if [ ${IP_count} -gt 50 -a ${IP_fil} -eq 0 ];then
  16. ${IP_filter_command} ${IP}
  17. echo "${IP}" >> /server/scripts/ip_filtered.txt
  18. action "Filter ${IP}" /bin/true
  19. fi
  20. done
  21. }
  22. IP
  23. a

  总结:按照今天的错误发现了很多问题,首先我们公司没有监控。导致只有网站宕机了才会进行报警。其次最重要的一点,出了问题看日志!

2016年9月6日23:51:20
特么的,就在刚刚准备睡觉的时候。突然有人进行攻击!

1.jpg-93.6kB
果断封IP脚本!
最后查看了攻击的IP地址
1.png-3.1kB
2.png-3.1kB
按照分析可能是爬虫IP. 果断要买阿里云的安骑士,否则基础访问都做不了!


    A+
发布日期:2016年09月07日  所属分类:Linux
标签:
新闻联播老司机

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

  1. avatar abc 3
    确实是企业案例,多多更新!