一、DDoS攻击基础认知
1.1 什么是DDoS攻击
DDoS(分布式拒绝服务攻击)是指攻击者利用大量受控的计算机或设备,同时向目标服务器发送海量请求,耗尽其带宽、CPU、内存等资源,使正常用户无法访问服务。与传统DoS攻击相比,DDoS利用分布式的肉鸡网络,攻击流量可达数百Gbps甚至Tbps级别,防御难度极高。
1.2 DDoS攻击的主要类型
| 攻击类型 | 说明 | 危害程度 |
|---|---|---|
| SYN Flood | 发送大量SYN包但不完成三次握手 | ★★★★☆ |
| UDP Flood | 发送大量UDP数据包 | ★★★★☆ |
| HTTP Flood | 模拟正常HTTP请求 | ★★★★★ |
| ICMP Flood | Ping洪水攻击 | ★★★☆☆ |
| DNS Amplification | 利用DNS放大攻击 | ★★★★☆ |
| NTP Amplification | 利用NTP服务器放大攻击 | ★★★★☆ |
1.3 攻击危害评估
DDoS攻击可能造成以下严重后果:
危害等级评估:
├── 🔴 服务中断(1-24小时)
│ ├── 业务直接损失
│ ├── 用户体验下降
│ └── 搜索引擎排名下降
├── 🟠 数据泄露风险
│ ├── 攻击作为掩护
│ ├── 趁乱入侵窃取数据
│ └── 隐私合规问题
├── 🟡 声誉损失
│ ├── 品牌形象受损
│ ├── 客户信任度下降
│ └── 媒体负面报道
└── 🟢 经济损失
├── 应急响应成本
├── 带宽超额费用
└── 潜在诉讼赔偿
二、DDoS攻击防御核心策略
2.1 策略一:流量监控与异常检测
建立完善的流量监控系统是防御DDoS的基础:
# 使用iftop监控实时流量
sudo apt install iftop
sudo iftop -i eth0
# 使用nethogs监控进程流量
sudo apt install nethogs
sudo nethogs
# 使用tcpdump分析异常数据包
sudo tcpdump -i eth0 -c 1000 'tcp[tcpflags] & tcp-syn != 0'
监控关键指标:
| 指标 | 正常范围 | 告警阈值 |
|---|---|---|
| 带宽使用率 | <50% | >70% |
| 并发连接数 | <10000 | >50000 |
| CPU使用率 | <60% | >85% |
| 丢包率 | <0.1% | >1% |
| 响应延迟 | <100ms | >500ms |
2.2 策略二:防火墙与ACL配置
配置iptables防火墙过滤恶意流量:
# 基础防火墙配置
sudo iptables -F
sudo iptables -X
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -m state --state INVALID -j DROP
# 限制单IP并发连接数
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
sudo iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 50 -j DROP
# 限制SYN请求速率
sudo iptables -A INPUT -p tcp --syn -m limit --limit 50/s --limit-burst 100 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP
# 屏蔽常见攻击IP
sudo iptables -A INPUT -s 1.2.3.4/24 -j DROP
# 启用conntrack限制
sudo sysctl -w net.netfilter.nf_conntrack_max=200000
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
2.3 策略三:负载均衡与流量分散
使用Nginx或HAProxy分散攻击流量:
# Nginx负载均衡配置示例
upstream backend {
least_conn;
server 192.168.1.101:80 weight=5;
server 192.168.1.102:80 weight=5;
server 192.168.1.103:80 weight=5;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 5s;
proxy_read_timeout 30s;
}
}
# HAProxy配置示例
frontend http_front
bind *:80
mode http
default_backend http_back
backend http_back
mode http
balance roundrobin
server web1 192.168.1.101:80 check inter 2000 rise 2 fall 3
server web2 192.168.1.102:80 check inter 2000 rise 2 fall 3
server web3 192.168.1.103:80 check inter 2000 rise 2 fall 3
# 连接数限制
maxconn 10000
rate-limit sessions 5000
2.4 策略四:CDN与DDoS高防服务
使用专业CDN和高防服务是防御大流量攻击的关键:
| 服务类型 | 推荐服务商 | 适用场景 |
|---|---|---|
| CDN加速 | Cloudflare、阿里云CDN、腾讯云CDN | 内容分发、隐藏源站 |
| DDoS高防 | 阿里云DDoS高防、腾讯云DDoS防护 | 200Gbps+攻击防护 |
| Anycast | Cloudflare、Akamai | 全球分布式防护 |
| 云原生防护 | AWS Shield、Azure DDoS Protection | 云服务器防护 |
// CloudFlare配置示例
{
"zone": {
"settings": {
"security_level": "high",
"challenge_ttl": 1800,
"brotli": "on"
}
},
"firewall_rules": [
{
"expression": "ip.src in {10.0.0.0/8 172.16.0.0/12 192.168.0.0/16}",
"action": "allow"
},
{
"expression": "cf.threat_score > 30",
"action": "challenge"
}
]
}
2.5 策略五:应用层防护
针对HTTP Flood等应用层攻击,需要特殊的防护措施:
# Nginx防止CC攻击配置
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
# 限制请求速率
location / {
limit_req zone=one burst=20 nodelay;
}
# 限制并发连接
location /api/ {
limit_conn addr 5;
}
# 验证码页面
location /captcha/ {
set $captcha_request 1;
if ($cookie_captcha = "verified") {
set $captcha_request 0;
}
}
}
# 使用fail2ban防止暴力破解
sudo apt install fail2ban
sudo systemctl enable fail2ban
# 配置fail2ban
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
2.6 策略六:紧急响应与恢复计划
建立完整的应急响应机制:
## DDoS攻击应急响应流程
### Phase 1: 检测与确认(0-5分钟)
1. 收到告警或用户反馈
2. 检查监控面板确认攻击
3. 评估攻击规模和类型
4. 启动应急响应小组
### Phase 2: 初步应对(5-15分钟)
1. 启用高防IP或DDoS防护服务
2. 切换到备用服务器(如有)
3. 配置防火墙阻断规则
4. 联系ISP协助流量清洗
### Phase 3: 持续监控(15-60分钟)
1. 监控攻击流量变化
2. 调整防护策略
3. 记录攻击日志和证据
4. 准备对外沟通
### Phase 4: 恢复服务(60分钟+)
1. 确认攻击已停止
2. 逐步恢复服务
3. 检查系统完整性
4. 发布服务恢复公告
### Phase 5: 事后分析
1. 分析攻击特征和来源
2. 更新防护策略
3. 改进监控机制
4. 总结经验教训
三、服务器安全基线配置
3.1 系统安全加固
#!/bin/bash
# 服务器安全加固脚本
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装安全工具
sudo apt install -y fail2ban ufw unattended-upgrades
# 3. 配置SSH
sudo sed -i 's/#Port 22/Port 22022/' /etc/ssh/sshd_config
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
# 4. 配置UFW防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22022/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable
# 5. 启用自动安全更新
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# 6. 配置日志审计
sudo apt install -y auditd
sudo systemctl enable auditd
echo "Security hardening completed!"
3.2 网络参数优化
# 优化网络参数抵御DDoS
cat >> /etc/sysctl.conf << EOF
# 防止SYN Flood攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
# 限制IP连接数
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
# TIME_WAIT重用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# 禁止ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 启用rp_filter
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
EOF
sudo sysctl -p
四、DDoS防护方案选型指南
4.1 根据业务规模选择
| 业务规模 | 月流量 | 推荐方案 | 预算范围 |
|---|---|---|---|
| 小型网站 | <10GB | 免费CDN + 基础防火墙 | ¥0-500/月 |
| 中型企业 | 10-100GB | CDN + 云防火墙 | ¥500-3000/月 |
| 大型平台 | 100GB-1TB | 专业DDoS高防 | ¥3000-10000/月 |
| 电商/金融 | 1TB+ | 运营商级防护 | ¥10000+/月 |
4.2 高防服务对比
| 服务商 | 防护能力 | 清洗能力 | 价格 | 特点 |
|---|---|---|---|---|
| 阿里云DDoS高防 | 1Tbps+ | 800Gbps | 按量计费 | 电商首选 |
| 腾讯云DDoS防护 | 1Tbps+ | 600Gbps | 按量计费 | 游戏优势 |
| 华为云DDoS | 500Gbps+ | 400Gbps | 包年优惠 | 企业用户 |
| Cloudflare | 无上限 | 无限 | 免费+企业版 | 全球节点 |
五、监控与预警系统搭建
5.1 Prometheus + Grafana监控
# prometheus.yml
global:
scrape_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
rule_files:
- "alerts.yml"
scrape_configs:
- job_name: 'server'
static_configs:
- targets: ['localhost:9100']
# alerts.yml
groups:
- name: ddos_alerts
rules:
- alert: HighTraffic
expr: rate(node_network_receive_bytes_total[5m]) > 100000000
for: 5m
labels:
severity: critical
annotations:
summary: "High incoming traffic detected"
- alert: ManyConnections
expr: node_netstat_Tcp_CurrEstab > 50000
for: 2m
labels:
severity: warning
5.2 自动告警配置
#!/bin/bash
# 告警通知脚本
WEBHOOK_URL="你的钉钉/飞书webhook"
send_alert() {
local title=$1
local message=$2
local level=$3
curl -X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d "{
\"msgtype\": \"markdown\",
\"markdown\": {
\"title\": \"$title\",
\"content\": \"## $title\\n\\n$message\\n\\n**级别**: $level\\n**时间**: $(date '+%Y-%m-%d %H:%M:%S')\"
}
}"
}
# 使用示例
send_alert "DDoS攻击告警" "检测到异常流量,建议立即检查!" "紧急"
六、常见问题与解决方案
Q1: 如何判断是否正在遭受DDoS攻击?
识别方法:
– 服务器CPU/带宽突然飙高
– 大量来自同一IP段的请求
– 特定端口流量异常
– 服务响应缓慢或超时
– 日志中出现大量异常请求
# 快速诊断命令
netstat -an | grep ESTABLISHED | wc -l # 当前连接数
netstat -an | grep SYN_RECV | wc -l # SYN等待连接
ss -s # socket统计
top # CPU使用率
Q2: 如何快速止血?
紧急措施:
# 1. 临时屏蔽攻击源IP
sudo iptables -I INPUT -s 攻击IP -j DROP
# 2. 限制连接速率
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
# 3. 启用高防服务
# 登录云服务商控制台,切换到高防IP
# 4. 更换服务器IP(如有)
# 联系服务商更换源站IP
Q3: DDoS攻击成本与防护成本对比
| 攻击成本 | 防护成本 |
|---|---|
| 肉鸡租用:¥50-500/天 | CDN基础版:免费 |
| 攻击工具:¥100-1000/月 | 云防火墙:¥300/月 |
| 专业攻击服务:¥1000+/次 | DDoS高防:¥2000+/月 |
防护成本通常远低于攻击成本,建议投资防护而非亡羊补牢。
七、总结
DDoS攻击防御是一个系统工程,需要多层次、多维度的防护策略:
- 流量监控:建立实时监控体系,第一时间发现异常
- 防火墙防护:配置ACL规则,过滤恶意流量
- 负载均衡:分散攻击压力,提高服务可用性
- 专业服务:使用CDN和高防服务,应对大流量攻击
- 应用层防护:防止HTTP Flood等应用层攻击
- 应急响应:制定完善的应急预案,快速恢复服务
通过组合以上策略,可以有效防御大多数DDoS攻击,保障服务器和业务的稳定运行。
注:本文基于2026年DDoS攻击态势编写,具体防护措施请根据实际业务需求调整。