性能·网络 / 命令文档
DDoS攻击原理与Linux防护
概述
Linux运维工程师必备的DDoS防护知识
攻击原理 攻击类型 检测方法 防护策略 工具配置 监控运维
什么是DDoS攻击?
分布式拒绝服务攻击(DDoS)是一种恶意行为,攻击者通过控制大量分布式设备(僵尸网络)同时向目标服务器发送大量请求,消耗服务器资源,使合法用户无法正常访问服务。
常见攻击流量
僵尸设备数量
服务可用性目标
OSI攻击层次
攻击机制
DDoS攻击主要通过以下机制实现:
资源耗尽:消耗CPU、内存、带宽等系统资源
连接池满载:占满TCP连接数,阻止新连接建立
服务过载:应用层请求过多,导致服务响应缓慢
网络拥塞:填满网络带宽,造成数据包丢失
攻击特征:短时间内异常大量的请求、来源IP分散、请求模式异常、系统资源使用率暴增
1容量带宽攻击
UDP洪水攻击:发送大量UDP数据包消耗带宽
hping3 -2 -p 80 --flood target_ip
SYN洪水攻击:发送大量TCP SYN请求,耗尽连接池
ICMP洪水攻击:发送大量ping请求消耗资源
2应用层攻击
HTTP洪水攻击:发送大量HTTP请求
慢速HTTP攻击:Slowloris、Slow POST等
DNS查询攻击:大量DNS查询请求
SSL攻击:SSL握手攻击消耗CPU资源
3反射放大攻击
DNS反射:利用DNS服务器放大攻击流量
NTP反射:利用NTP服务器的monlist功能
SNMP反射:利用SNMP协议特性
流量监控检测
# 监控网络接口流量
iftop -i eth0 -P
# 查看连接状态统计
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 监控带宽使用
vnstat -l -i eth0系统资源监控
# CPU和内存监控 top -b -n1 | head -5 # 磁盘I/O监控 iostat -x 1 # 网络连接数监控 ss -s | grep TCP
日志分析检测
# Apache/Nginx访问日志分析
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
# 检测异常请求模式
grep -E "(GET|POST)" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr
# 实时监控连接
watch -n 1 'netstat -an | grep :80 | wc -l'自动化检测脚本
#!/bin/bash
# DDoS检测脚本
THRESHOLD=1000
CURRENT_CONN=$(netstat -an | grep :80 | wc -l)
if [ $CURRENT_CONN -gt $THRESHOLD ]; then
echo "警告:检测到异常连接数: $CURRENT_CONN"
# 触发防护措施
iptables -I INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
fiiptables防火墙配置
# SYN洪水攻击防护 iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP # 限制并发连接数 iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP # 防御ping洪水攻击 iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT iptables -A INPUT -p icmp -j DROP
内核参数优化
# 编辑/etc/sysctl.conf echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf echo 'net.ipv4.tcp_max_syn_backlog = 8192' >> /etc/sysctl.conf echo 'net.ipv4.tcp_synack_retries = 2' >> /etc/sysctl.conf echo 'net.ipv4.tcp_syn_retries = 5' >> /etc/sysctl.conf echo 'net.ipv4.ip_forward = 0' >> /etc/sysctl.conf sysctl -p
Nginx/Apache配置优化
# Nginx配置示例
limit_req_zone $binary_remote_addr zone=ddos:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
server {
limit_req zone=ddos burst=20 nodelay;
limit_conn conn 10;
client_body_timeout 5s;
client_header_timeout 5s;
}fail2ban配置
# 安装fail2ban yum install fail2ban -y systemctl enable fail2ban # 配置/etc/fail2ban/jail.local [DEFAULT] bantime = 3600 findtime = 600 maxretry = 5 [nginx-ddos] enabled = true port = http,https filter = nginx-ddos logpath = /var/log/nginx/access.log maxretry = 100 findtime = 60 bantime = 86400
DDoS-Deflate
轻量级DDoS防护脚本
wget https://github.com/jgmdev/ddos-deflate/archive/master.zip unzip master.zip && cd ddos-deflate-master chmod +x install.sh && ./install.sh
CSF防火墙
功能强大的Linux防火墙
wget https://download.configserver.com/csf.tgz tar -xzf csf.tgz && cd csf sh install.sh
vnStat流量监控
网络流量统计工具
yum install vnstat -y vnstat -u -i eth0 systemctl enable vnstat
nload实时监控
实时网络流量监控
yum install nload -y nload -m eth0
高级防护配置
# HAProxy配置示例(负载均衡+防护)
frontend http_front
bind *:80
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src
http-request reject if { sc_http_req_rate(0) gt 20 }
default_backend http_back
# Cloudflare防护API集成
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/firewall/rules" \
-H "X-Auth-Email: your-email@example.com" \
-H "X-Auth-Key: your-api-key" \
-H "Content-Type: application/json" \
--data '{"action":"block","filter":{"expression":"(ip.src in {攻击IP列表})"}}'实时监控系统
Zabbix监控配置
# 网络连接数监控
UserParameter=tcp.connections,netstat -an | grep tcp | wc -l
UserParameter=tcp.established,netstat -an | grep ESTABLISHED | wc -l
UserParameter=tcp.syn_recv,netstat -an | grep SYN_RECV | wc -l
# 带宽监控
UserParameter=net.if.in[*],cat /proc/net/dev | grep $1 | awk '{print $$2}'
UserParameter=net.if.out[*],cat /proc/net/dev | grep $1 | awk '{print $$10}'自动响应脚本
#!/bin/bash
# DDoS自动响应脚本
LOG_FILE="/var/log/ddos_response.log"
CONN_THRESHOLD=5000
BW_THRESHOLD=100000 # KB/s
check_connections() {
CURRENT_CONN=$(netstat -an | grep :80 | wc -l)
if [ $CURRENT_CONN -gt $CONN_THRESHOLD ]; then
echo "$(date): 连接数异常: $CURRENT_CONN" >> $LOG_FILE
# 启用更严格的iptables规则
iptables -I INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
# 发送告警邮件
echo "DDoS攻击检测到" | mail -s "服务器告警" admin@example.com
fi
}
# 定期检查
while true; do
check_connections
sleep 60
done性能指标监控
iostat -c 1 1 | tail -1
free -m | awk 'NR==2{printf "%.2f\n", $3*100/$2}'ss -s | grep TCP
iostat -x 1 1 | tail -1
运维注意事项 建立分层防护体系:网络层、传输层、应用层 定期更新防护规则和签名库 准备应急响应预案和联系方式 与上游ISP建立紧急联系机制 定期进行DDoS防护演练和测试 监控系统资源使用情况,设置合理阈值 备份关键配置文件和数据
最佳实践建议
预防为主:提前配置防护措施,不要等攻击发生
分层防护:结合多种防护技术和工具
监控告警:建立完善的监控和告警系统
快速响应:制定详细的应急响应流程
持续优化:根据攻击特征不断调整防护策略