DDoS 攻击,深入浅出理解拒绝服务攻击
前言
近过年时间,DeepSeek 大火,自古以来,树大招风,引来了 DDoS(Distributed Denial of Service)攻击,造成服务一顿中断。DDoS 攻击是一个复杂的技术话题,但我们可以通过从 DoS(Denial of Service)攻击的基础入手,逐步深入理解 DDoS。这里我们将以 DoS 攻击为起点,逐步解释其概念、工作原理以及演变,最终帮助大家全面了解 DDoS 攻击的方式与防御策略。通过深入浅出的讲解,大家可以更清晰地认识到 DDoS 攻击背后的技术细节和潜在威胁,同时也能学习如何有效防范这种日益严重的安全风险。
DDoS又名分布式拒绝服务攻击,在解释这个概念之前,我们先来了解一下什么是DoS攻击。
预防DDos
使用 Cloudflare/CDN 进行流量清洗。 配置 iptables 限速,防止单个 IP 过度访问:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
使用 iptables 防止某个 IP 在短时间内建立大量连接:
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 20 -j DROP
该规则表示:若某 IP 在 60 秒内创建了超过 20 次连接,则直接丢弃后续请求。
2. 拒绝伪造来源 IP(SYN Flood 防御)
# 丢弃不合法的新连接请求(非 SYN)
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
# 拒绝恶意扫描包
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
3. 自动封锁恶意 IP(结合 fail2ban)
安装 fail2ban:
sudo apt install fail2ban -y
配置 /etc/fail2ban/jail.d/nginx-ddos.conf
:
[nginx-dos]
enabled = true
port = http,https
filter = nginx-dos
logpath = /var/log/nginx/access.log
maxretry = 100
findtime = 60
bantime = 3600
过滤规则 /etc/fail2ban/filter.d/nginx-dos.conf
:
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*
ignoreregex =
fail2ban 会在单位时间内访问过多时自动封锁该 IP。
二、应用层防御:Web Server 限速配置
1. Nginx 限速防止 HTTP Flood
配置 Nginx 的请求速率控制:
http {
limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
server {
location / {
limit_req zone=perip burst=10 nodelay;
}
}
}
该配置表示每个 IP 每秒最多请求 5 次,超过部分会被限速或拒绝。
2. 控制连接并发数
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 10;
}
}
}
此规则限制每个 IP 同时最多建立 10 个并发连接。
3. 屏蔽恶意 User-Agent
map $http_user_agent $block_ua {
default 0;
"~*curl" 1;
"~*bot" 1;
"~*scanner" 1;
}
server {
if ($block_ua) {
return 403;
}
}
三、DNS 放大攻击防护(适用于自建 DNS 服务)
1. 禁用递归解析
以 BIND 为例,修改 /etc/bind/named.conf.options
:
options {
recursion no;
allow-query { trusted_ips; };
};
仅允许内部授权 IP 查询 DNS,避免被放大攻击滥用。
四、使用 Cloudflare 或高防服务商进行流量清洗
1. 启用代理防御
将域名接入 Cloudflare 后,将 DNS 记录状态设置为“Proxied”,即启用代理流量保护。
2. 配置防火墙规则
通过 Cloudflare 面板添加规则:
- 限制来源国家或 IP
- 根据 UA 筛选请求
- 按路径或参数进行条件过滤
示例表达式:
(http.request.uri.path contains "/login") and (ip.src ne 1.2.3.4)
执行动作设置为 Challenge 或 Block。
五、实时监控与报警机制
1. 使用 Netdata 进行资源监控
安装 Netdata:
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
通过浏览器访问 http://<服务器IP>:19999
,查看网络流量、连接数、CPU 使用情况等实时数据。
2. Prometheus + Grafana 构建可视化告警系统
- 使用 Node Exporter 采集系统级别指标
- 配置 Prometheus 定期拉取指标数据
- 使用 Grafana 构建图形化仪表盘
- 配置 Alertmanager 将告警推送至邮件、钉钉、飞书等平台
六、紧急封堵脚本(批量封禁高连接数 IP)
编写脚本 /usr/local/bin/ddos-block.sh
:
#!/bin/bash
block_ip() {
ip=$1
echo "$(date) 阻断 $ip" >> /var/log/ddos_block.log
iptables -I INPUT -s $ip -j DROP
}
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | \
awk '$1 > 200 {print $2}' | while read ip; do
block_ip $ip
done
加上执行权限:
chmod +x /usr/local/bin/ddos-block.sh
通过定时任务定期执行:
*/2 * * * * root /usr/local/bin/ddos-block.sh
七、安全策略汇总建议
防护场景 | 推荐措施 |
---|---|
带宽洪水攻击 | 使用 CDN / 高防 IP 清洗 |
SYN/UDP Flood | 设置 iptables 限制并发连接 |
应用层请求泛滥 | Nginx 限流、防 UA、防并发 |
DNS 放大攻击 | 禁止递归,仅允许授权 IP |
实时监控与预警 | Netdata 或 Prometheus 系统 |
持续性主动阻断 | fail2ban + iptables 自动化策略 |
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:《 DDoS攻击 》
本文链接:http://0.0.0.0:3015/tech/ddos-deepseek.html
本文最后一次更新为 天前,文章中的某些内容可能已过时!