本文目录导读:

DDoS(分布式拒绝服务)攻击的自动检测是网络安全领域的重要课题,确实有一些实用脚本和工具可以辅助完成这项工作,但需要明确的是:没有任何单一脚本能100%准确检测所有DDoS攻击,通常需要结合流量分析、行为模式识别和阈值设定。
以下是一些常见的检测思路和实用脚本示例(基于Linux环境):
基于网络流量的简单检测脚本(使用netstat/ss)
这个脚本会监控当前连接数,当来自单个IP的连接数超过阈值时进行报警。
#!/bin/bash
# 简易DDoS检测脚本 - 检测单个IP的连接数
THRESHOLD=100 # 单个IP最大连接数阈值
LOG_FILE="/var/log/ddos_detect.log"
echo "$(date) - 开始检测..." >> $LOG_FILE
# 使用ss命令统计每个IP的连接数(比netstat更快)
ss -ntu | awk '{print $5}' | grep -oP '(\d+\.\d+\.\d+\.\d+)' | sort | uniq -c | sort -nr | while read count ip
do
if [ "$count" -gt "$THRESHOLD" ]; then
echo "$(date) - 警告: IP $ip 有 $count 个连接 (超过阈值 $THRESHOLD)" >> $LOG_FILE
# 可在此添加封禁动作(需谨慎)
# iptables -A INPUT -s $ip -j DROP
fi
done
分析Web服务器日志的脚本(针对HTTP Flood)
使用awk分析Apache/Nginx访问日志,检测高频请求的IP:
#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"
THRESHOLD=500 # 每分钟请求数阈值
TEMP_FILE="/tmp/ddos_temp.txt"
# 统计最近1分钟内每个IP的请求数
tail -n 5000 $LOG_FILE | awk -v date="$(date +'%d/%b/%Y:%H:%M' -d '-1 min')" '
$4 ~ date { count[$1]++ }
END { for (ip in count) print count[ip], ip }
' | sort -rn > $TEMP_FILE
# 检查是否超过阈值
while read count ip; do
if [ "$count" -gt "$THRESHOLD" ]; then
echo "$(date) - DDoS报警: IP $ip 在1分钟内请求 $count 次"
# 可选: 添加iptables规则
fi
done < $TEMP_FILE
使用专业工具(更推荐生产环境)
如果追求更可靠的检测,建议部署以下成熟工具:
-
Fail2ban:开源的入侵防御框架,可配置多种服务(SSH、Web等)的异常检测和自动封禁
# 安装 apt install fail2ban # 配置示例:检测Nginx DDoS vim /etc/fail2ban/jail.local
-
DDoS-Deflate:轻量级脚本,专门用于检测和阻止DDoS攻击
wget https://github.com/jgmdev/ddos-deflate/raw/master/ddos-deflate.sh
-
Cloudflare/CloudFront等CDN服务:在边缘节点提供企业级DDoS防护
重要警告与最佳实践
-
误报风险:脚本检测可能导致误封合法用户(如爬虫、CDN节点),建议:
- 设置合理的白名单(如搜索引擎爬虫IP段)
- 采用动态阈值而非固定值
- 报警后人工确认再封禁
-
防护层次:DDoS检测只是第一步,完整方案应包含:
- 检测层:流量基线分析、异常检测
- 缓解层:限速、黑洞路由、清洗中心
- 恢复层:冗余架构、自动扩容
-
法律合规:自动封禁可能涉及网络阻断,需符合当地法律法规
-
资源消耗:对高流量服务器,实时分析日志可能消耗大量CPU/磁盘IO
- 简单场景:用上述bash脚本可以快速部署基本检测
- 生产环境:推荐Fail2ban + 专业DDoS防护服务(如Cloudflare/Akamai)
- 深度学习方案:使用流量分析工具如
ntopng、pmacct进行大数据分析
需要根据你的实际环境(服务器规模、业务类型、预算)选择合适的方案,如果业务对可用性要求极高,建议直接采购专业DDoS防护服务。