服务器被攻击怎么办?DDoS防护实战经验分享

8 阅读5分钟

服务器被攻击了怎么办?本文结合真实案例,详解DDoS攻击的识别、防御策略与应急响应流程,让你的云服务器安全无忧。

前言

凌晨3点,你的手机突然疯狂震动。

打开一看:监控告警——CPU 100%、内存爆满、服务器连接超时、业务全线崩溃。

你揉了揉眼睛,打开服务器一看:尼玛,登录日志里有十几万个来自不同IP的登录尝试!

这就是DDoS攻击——分布式拒绝服务攻击。它不需要破解你的密码,只需要用海量请求把你的服务器资源耗尽,让正常用户无法访问。

作为一个在云服务器上摸爬滚打多年的老司机,今天来聊聊DDoS防护实战经验

一、认识DDoS攻击

1.1 DDoS是什么?

DDoS(Distributed Denial of Service) 即分布式拒绝服务攻击。攻击者通过控制大量计算机(僵尸网络),同时向目标服务器发送海量请求,耗尽其带宽、CPU、内存等资源,导致正常用户无法访问。

简单理解:就像有十万个人同时给你家门口打电话,让你正常的访客根本进不来。

1.2 常见的DDoS攻击类型

攻击类型攻击原理危害程度防御难度
SYN Flood伪造TCP握手包,耗尽连接队列⭐⭐⭐
UDP Flood发送大量UDP数据包,带宽耗尽⭐⭐⭐⭐⭐⭐
HTTP Flood模拟正常请求,耗尽应用资源⭐⭐⭐⭐⭐⭐⭐
CC攻击攻击动态页面,数据库连接耗尽⭐⭐⭐⭐⭐⭐⭐⭐⭐
DNS Flood攻击DNS服务器,导致解析失败⭐⭐⭐⭐⭐⭐⭐
混合型攻击多种攻击同时进行⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

1.3 如何判断服务器被攻击?

紧急告警信号:

# 1. CPU/内存异常飙升
top -c
# 查看进程占用,看到大量不明进程或CPU100%

# 2. 网络流量异常
sar -n DEV 1 10
# 观察网卡流量,发现入站流量暴增

# 3. 连接数异常
netstat -anp | grep ESTABLISHED | wc -l
# ESTABLISHED连接数高达数万

# 4. 查看登录失败日志
grep "Failed password" /var/log/auth.log | tail -100
# 大量来自不同IP的失败登录尝试

# 5. 检查端口连接状态
netstat -s | grep -i listen
# 半开连接队列满

典型特征:

  • 服务器突然响应极慢或完全无法访问
  • 监控显示入站流量暴增10倍以上
  • SSH连接困难或频繁断开
  • 日志出现大量异常请求

二、DDoS防护实战策略

2.1 第一道防线:云厂商DDoS防护

主流云厂商都提供了DDoS防护服务,这是最基础也是最有效的防护手段:

云厂商防护服务免费额度说明
腾讯云DDoS基础防护2Gbps自动开启,无需付费
腾讯云BGP高防10G-100G付费,按量计费
阿里云DDoS基础防护5Gbps自动开启
阿里云DDoS高防20G-300G付费,按量计费
华为云Anti-DDoS5Gbps免费开启

腾讯云DDoS防护配置:

# 查看当前DDoS防护状态
tccli ant DDoS describeuebaStatus --BasicIp xx.xx.xx.xx --BasicRegion ap-guangzhou

# 开启DDoS防护(自动)
# 注:基础防护默认开启,无需手动配置

# 查看攻击日志
tccli ant DDoS describeAttackLogList --Offset 0 --Limit 20

2.2 第二道防线:iptables/firewalld应急处理

在云厂商防护生效前,先用服务器自带防火墙应急:

#!/bin/bash
# DDoS应急处理脚本

# 1. 立即限制新连接速率
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

# 2. 封禁异常IP(假设攻击IP列表)
for ip in $(cat /tmp/attack_ips.txt); do
    iptables -I INPUT -s $ip -j DROP
    echo "已封禁: $ip"
done

# 3. 限制单个IP连接数
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROP
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 100 -j DROP

# 4. 启用syncookies防止SYN Flood
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# 5. 保存iptables规则
iptables-save > /etc/sysconfig/iptables

封禁常用端口扫描器:

# 封禁常见扫描IP段
iptables -A INPUT -s 103.21.244.0/22 -j DROP
iptables -A INPUT -s 103.22.200.0/22 -j DROP
iptables -A INPUT -s 104.16.0.0/13 -j DROP

2.3 第三道防线:Nginx层防护

# Nginx DDoS防护配置

# 限制连接数(每个IP最多50个连接)
limit_conn_zone $binary_remote_addr zone=addr:10m;

# 限制请求速率(每个IP每秒最多10个请求)
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    # 应用连接限制
    limit_conn addr 50;
    
    # 应用请求限制(允许突发50个请求)
    limit_req zone=one burst=50 nodelay;
    
    # 关闭慢连接
    client_body_timeout 5s;
    client_header_timeout 5s;
    
    # 设置缓冲区大小,防止内存耗尽
    client_body_buffer_size 16k;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    
    location / {
        # 白名单跳过限制
        allow 10.0.0.0/8;
        allow 172.16.0.0/12;
        allow 192.168.0.0/16;
        deny all;
    }
}

2.4 第四道防线:fail2ban自动封禁

# 安装fail2ban
yum install -y fail2ban

# 配置fail2ban防护SSH暴力破解
cat > /etc/fail2ban/jail.local << EOF
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/nginx/access.log
maxretry = 200
bantime = 600
findtime = 60
action = iptables[name=HttpFlood, port=http, protocol=tcp]
EOF

# 创建HTTP DoS过滤器
cat > /etc/fail2ban/filter.d/http-get-dos.conf << EOF
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*"
ignoreregex =
EOF

# 启动服务
systemctl enable fail2ban
systemctl start fail2ban

三、应急响应流程

3.1 攻击应急响应 SOP

┌─────────────────────────────────────────────────────────────────┐
│                        DDoS攻击应急响应流程                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. 发现攻击                                                      │
│     ↓                                                             │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │ 告警通知 → 登录云控制台 → 查看DDoS防护状态                    │  │
│  └────────────────────────────────────────────────────────────┘  │
│     ↓                                                             │
│  2. 紧急止血                                                      │
│     ↓                                                             │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │ 临时关闭非核心业务 → 切换高防IP → 启用IP黑白名单               │  │
│  └────────────────────────────────────────────────────────────┘  │
│     ↓                                                             │
│  3. 分析攻击                                                      │
│     ↓                                                             │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │ 查看攻击类型 → 分析攻击源IP → 评估持续时间                     │  │
│  └────────────────────────────────────────────────────────────┘  │
│     ↓                                                             │
│  4. 升级防护                                                      │
│     ↓                                                             │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │ 扩容带宽 → 接入高防IP → 联系云厂商支援                        │  │
│  └────────────────────────────────────────────────────────────┘  │
│     ↓                                                             │
│  5. 恢复服务                                                      │
│     ↓                                                             │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │ 逐步恢复业务 → 监控流量变化 → 确认攻击结束                     │  │
│  └────────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

3.2 腾讯云高防IP配置

# 购买高防IP后配置
# 1. 添加防护域名
tccli dayu createCcGeoIPBlockConfig \
  --BusinessType bgp \
  --Id bgpip-xxxxxxxx \
  --IpList ["1.2.3.4"] \
  --ActionType block

# 2. 设置CC防护规则
tccli dayu createCcReqLimitPolicy \
  --BusinessType bgp \
  --Id bgpip-xxxxxxxx \
  --Uri "/api/*" \
  --ReqLimitRate 100 \
  --ConnectionDuration 60

# 3. 查看防护状态
tccli dayu describeCCStatus \
  --BusinessType bgp \
  --Id bgpip-xxxxxxxx

四、预防胜于治疗:长期防护策略

4.1 架构层面

策略说明成本
多点部署在不同地域部署服务,流量分散
Anycast网络利用CDN/云厂商全球节点吸收攻击
DDoS高防接入专业高防服务按量付费
弹性带宽提前扩容带宽,应对突发流量按量付费

4.2 日常运维

# 1. 定期检查登录日志
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -10

# 2. 开启自动告警
# 在腾讯云设置告警策略:
# - 公网入流量 > 1Gbps
# - CPU使用率 > 80%
# - 连接数 > 50000

# 3. 定期更新iptables规则
iptables-save > /root/iptables.backup.$(date +%Y%m%d)

4.3 安全加固清单

# 1. SSH禁用密码登录,使用密钥
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd

# 2. 修改SSH默认端口
sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config

# 3. 安装denyhosts自动封禁SSH暴力破解
yum install -y denyhosts

# 4. 关闭不必要的端口
iptables -A INPUT -p tcp --dport 23 -j DROP   # Telnet
iptables -A INPUT -p tcp --dport 135 -j DROP  # RPC
iptables -A INPUT -p tcp --dport 445 -j DROP   # SMB

五、总结

DDoS攻击是每个互联网服务都要面对的问题,关键在于:

  1. 预防为主:做好架构设计,启用云厂商基础防护
  2. 快速发现:配置完善的监控告警,第一时间感知攻击
  3. 有效止血:iptables紧急封禁 + 切换高防IP
  4. 长期防护:fail2ban + Nginx限流 + 安全加固

记住:攻击并不可怕,可怕的是没有应对预案。 建议每个上线的服务都准备一份DDoS应急预案,并定期演练。


关于作者

长期关注大模型应用落地与云服务器实战,专注技术在企业场景中的落地实践。

个人博客:yunduancloud.icu —— 持续更新云计算、AI大模型实战教程,欢迎访问交流。