什么是DDoS攻击?
DDoS(Distributed Denial of Service,分布式拒绝服务攻击)是一种利用大量被控制的计算机(通常称为“肉鸡”或僵尸网络)向特定目标服务器发送海量攻击数据包的恶意行为。其目的是耗尽目标服务器的系统资源(如CPU、内存、连接数)或网络带宽,导致合法用户无法获得正常的服务响应。
常见的DDoS攻击类型
根据攻击原理,DDoS攻击主要可分为以下两类:
协议缺陷型攻击
这类攻击利用TCP、DNS、HTTP等互联网协议的设计缺陷或状态机漏洞,向服务器发送大量看似合法但无效的请求,迫使服务器消耗资源进行处理,从而无法服务正常流量。常见类型包括:
- SYN Flood:利用TCP三次握手过程中的半开连接状态耗尽服务器连接资源。
- ACK Flood:向服务器发送大量ACK确认包,消耗其处理能力。
- DNS Flood:向DNS服务器发送大量伪造的查询请求,使其无法响应合法查询。
流量阻塞型攻击
这类攻击不依赖协议漏洞,而是纯粹通过发送海量垃圾数据包来堵塞目标服务器的网络带宽或链路。常见类型包括:
- UDP Flood:向目标服务器的随机端口发送大量UDP数据包。
- ICMP Flood:发送大量ICMP回显请求(Ping)数据包。
DDoS攻击的影响
DDoS攻击会导致目标服务器承载的业务服务中断或严重降级,具体影响取决于业务类型:
- 对于B/S架构的网站(如www.qq.com),用户将无法打开网页或访问速度极慢。
- 对于C/S架构的在线服务(如网络游戏、即时通讯),会导致在线用户大规模掉线,新用户无法登录。
这种服务中断不仅会造成直接的经济损失,还会严重损害品牌声誉和用户信任。
如何判断是否遭受DDoS攻击?
当服务器出现以下异常现象时,应警惕可能正在遭受DDoS攻击:
- 网站或服务突然完全无响应。
- 用户连接服务器时间超长或频繁失败。
- 服务器网络流量(入向带宽)异常激增,远超平时峰值。
- 服务器系统资源(CPU、内存、连接数)使用率异常高,但自身业务负载并无变化。
使用命令行工具进行初步排查
在Linux服务器上,可以使用以下命令来辅助判断异常连接和流量。
1. 查看所有80端口的连接数
netstat -nat | grep -i "80" | wc -l
2. 对连接的IP按连接数量进行排序
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
3. 查看TCP连接状态统计
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn
或使用更详细的统计脚本:
netstat -n | awk '/^tcp/ {++S[$NF]}; END {for(a in S) print a, S[a]}'
4. 查看80端口连接数最多的20个IP
netstat -anlp | grep 80 | grep tcp | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n20
5. 使用tcpdump嗅探80端口的访问
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -20
6. 查找异常的连接状态
查找大量TIME_WAIT连接:
netstat -n | grep TIME_WAIT | awk '{print $5}' | sort | uniq -c | sort -rn | head -n20
查找大量SYN连接:
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
应急处理:使用iptables临时封禁IP
在确认攻击源IP后,可以使用iptables防火墙进行临时封禁。请注意,大规模DDoS攻击的源IP通常非常多且变化快,手动封禁效果有限,仅适用于小规模或特定攻击源的情况。
封禁单个IP
iptables -I INPUT -s 211.1.0.0 -j DROP
封禁IP段(CIDR格式)
iptables -I INPUT -s 211.1.0.0/16 -j DROP
保存iptables规则使其重启后生效
临时规则在重启后会丢失。若需永久生效,可将规则保存:
iptables-save > /etc/sysconfig/iptables
或者使用服务命令:
service iptables save # 适用于使用systemctl之前的系统
# 或
systemctl enable iptables # 确保服务自启后,规则会自动从配置文件加载
解封IP或清空规则
解封特定IP(需与添加时的规则完全匹配):
iptables -D INPUT -s IP地址 -j DROP
清空所有iptables规则(谨慎操作):
iptables -F
重要提示:上述命令行排查和iptables封禁属于基础运维操作。面对现代大规模、复杂的DDoS攻击,企业更应依赖专业的DDoS防护服务(如云服务商提供的高防IP、流量清洗服务)来构建有效的防御体系。