服务器被攻击企业案例

2023年 5月 4日 34.9k 0

服务器遭受到攻击,直接显示出运维的能力不行。我对此非常的自责,但是通过这次让我知道了运维的重要性,和重要职责!
服务器遭受攻击导致无法打开网址
服务器遭受攻击导致无法打开网址
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访问日志,终于发现了问题!

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

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

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攻击 轻量级预防

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

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

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

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

iptables -A INPUT  -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
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-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
(2)iptables版本:1.3.7
2. 安装
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
3. 配置相应的iptables规则
示例如下:
(1)控制单个IP的最大并发连接数

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秒)内允许新建立的连接数

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的参数如下:

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

本段转载:http://sookk8.blog.51cto.com/455855/321242/
我自己写的脚本,本脚本是参考刘沈晨的防DDOS攻击,进行改写,写入定时任务即可!

[root@vm-69-6cc2 ~]# cat /server/scripts/iptables.sh 
#!/bin/sh
IP_filter_command="iptables -I INPUT -j DROP -s"
IP_recover_command="iptables -D INPUT -j DROP -s"
IP(){
  netstat -an|grep "ESTABLISHED"|awk -F "[ |:]+" '{print $6}'|sort |uniq -c|sort -rn -k1 > /server/scripts/ip.txt
}

a(){
   exec < /server/scripts/ip.txt
   while read line
   do
     IP_count=`echo $line|awk '{print $1}'`
     IP=`echo $line|awk '{print $2}'`
     IP_fil=`iptables -L -n|grep "b${IP}b"|wc -l`
     if [ ${IP_count} -gt 50 -a ${IP_fil} -eq 0 ];then
        ${IP_filter_command} ${IP}
        echo "${IP}" >> /server/scripts/ip_filtered.txt
        action "Filter ${IP}" /bin/true
     fi
   done
}
IP
a

总结:按照今天的错误发现了很多问题,首先我们公司没有监控。导致只有网站宕机了才会进行报警。其次最重要的一点,出了问题看日志!
2016年9月6日23:51:20
特么的,就在刚刚准备睡觉的时候。突然有人进行攻击!
1.jpg-93.6kB
果断封IP脚本!
最后查看了攻击的IP地址
1.png-3.1kB
2.png-3.1kB
按照分析可能是爬虫IP. 果断要买阿里云的安骑士,否则基础访问都做不了!

相关文章:

  1. 服务器安全之iptables
  2. Shell 变量及函数讲解 [2]
  3. 老男孩Shell企业面试题30道 [答案]
  4. Shell 基础介绍 [1]

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论