性能·网络 / 命令文档

DDoS攻击原理与Linux防护

$ ddos 22 个章节 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
fi

iptables防火墙配置

# 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防护演练和测试 监控系统资源使用情况,设置合理阈值 备份关键配置文件和数据

最佳实践建议

预防为主:提前配置防护措施,不要等攻击发生

分层防护:结合多种防护技术和工具

监控告警:建立完善的监控和告警系统

快速响应:制定详细的应急响应流程

持续优化:根据攻击特征不断调整防护策略

同分类 · 其他命令文档