Linux系统日志是排查DDoS攻击的关键线索,需重点分析/var/log/messages(或syslog)、/var/log/secure(或auth.log)、Web服务器access.log三类日志,结合高频失败登录、异常HTTP请求、内核连接警告等特征,并通过命令快速定位可疑IP与行为,再交叉验证实时连接数、负载及内存状态以确认攻击。

Linux 系统日志是排查 DDoS 攻击的重要线索,尤其当流量监控尚未触发告警、或攻击处于初期阶段时,日志中的异常模式往往最先暴露问题。关键不在于“有没有日志”,而在于“看哪几类日志、盯哪些字段、结合什么行为判断”。
重点关注三类日志文件
Linux 下需同时检查以下日志路径,它们各自反映不同层面的异常:
-
/var/log/syslog(Debian/Ubuntu)或 /var/log/messages(RHEL/CentOS):记录系统级事件,如内核丢包、连接队列溢出、OOM killer 日志。出现大量
nf_conntrack: table full或Out of memory: Kill process是带宽或连接数耗尽的强信号。 -
/var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS):若攻击伴随暴力破解(如 SSH 洪水),会密集出现
Failed password记录,且来源 IP 高度集中、时间间隔极短(如每秒数条)。 -
/var/log/apache2/access.log 或 /var/log/nginx/access.log:应用层 DDoS(如 HTTP Flood)在此最明显。典型特征是同一 IP 在极短时间内发起数百甚至上千次 GET/POST 请求,User-Agent 高度重复或为空,请求路径单一(如反复刷
/wp-login.php或根路径)。
用命令快速定位可疑模式
无需打开完整日志,用组合命令直击关键信息:
- 查高频失败登录:
sudo tail -n 1000 /var/log/auth.log | grep "Failed password" | awk '{print $11}' | sort | uniq -c | sort -nr | head -10—— 输出前 10 个异常 IP 及其失败次数。 - 查 Web 层异常请求:
sudo awk '$9 ~ /^50[0-3]$/ {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10—— 统计返回 5xx 错误最多的客户端 IP(常因后端超时或资源枯竭触发)。 - 查内核级连接压力:
sudo dmesg -T | grep -i "conntrack\|drop\|overflow" | tail -20—— 查看最近是否触发连接跟踪表满、SYN 队列溢出等底层警告。
日志中需警惕的典型特征
单条日志意义有限,要关注“高频 + 集中 + 异常”的组合:
- 某 IP 在 1 分钟内向
/login接口发起 300+ 次 POST,但无一次成功(全为 401/403),且 User-Agent 为python-requests/2.28.0或空白; - 同一 IP 在
auth.log中每 2 秒尝试一次 SSH 密码,持续 10 分钟以上,且目标用户名固定(如root或admin); -
messages中反复出现kernel: TCP: time wait bucket table overflow,说明 TIME_WAIT 连接堆积严重,通常是 SYN Flood 或短连接洪水的结果。
日志分析要配合其他指标交叉验证
日志异常只是线索,必须结合实时状态确认是否为 DDoS:
- 发现某 IP 在 access.log 中高频访问,立即执行
netstat -ntu | awk '{print $5}' | cut -d: -f1 | grep ^IP地址$ | wc -l查其当前活跃连接数; - 看到大量 502/503 错误,同步运行
uptime和free -h,若平均负载 > CPU 核数 × 2 且内存使用率 >90%,基本可判定资源被耗尽; - 日志显示 conntrack 溢出,立刻检查
sysctl net.netfilter.nf_conntrack_count和net.netfilter.nf_conntrack_max的比值,接近 100% 即为瓶颈。


















