1. 服务器被攻击的典型症状识别
作为运维工程师,最头疼的就是半夜被电话叫醒:"服务器挂了!"这时候快速判断是否遭遇攻击至关重要。根据我处理过的上百起安全事件,90%的服务器攻击都会表现出以下明显特征:
1.1 网络层面的异常表现
当服务器遭受DDoS攻击时,最直观的表现就是网络资源被耗尽。我曾处理过一起案例,某电商网站在大促前突然无法访问,当时观察到:
- 外网带宽持续跑满100Mbps(平时峰值不超过30Mbps)
- TCP连接数从平时的2000激增到5万+
- 通过
iftop -nP命令发现大量海外IP的UDP流量
这种情况基本可以判定是典型的UDP Flood攻击。此时需要立即:
bash复制# 快速查看带宽使用情况
nload -m -u M eth0
# 统计异常连接数
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
1.2 系统资源异常
CC攻击往往不会打满带宽,但会耗尽服务器资源。上周处理的一个案例中:
- CPU持续100%但带宽使用率仅30%
- 通过
htop发现大量Apache进程 - 查询日志发现单一IP在10分钟内发起2万次请求
这种情况的典型处理流程:
bash复制# 找出消耗CPU最多的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 10
# 分析Web服务器日志
tail -n 1000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
2. 深度诊断:攻击类型判断方法论
2.1 DDoS攻击特征分析
DDoS攻击主要分为三类,每种都有独特特征:
| 攻击类型 | 典型表现 | 检测命令 |
|---|---|---|
| 带宽消耗型 | 外网带宽持续100% | vnstat -l -i eth0 |
| 连接耗尽型 | TCP连接数异常高 | ss -s |
| 协议漏洞利用 | 大量畸形包 | tcpdump -nni eth0 port 80 |
实战案例: 某游戏服务器遭遇SYN Flood攻击时,通过以下命令确认:
bash复制netstat -n | grep :80 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
输出显示大量SYN_RECV状态连接,这是典型特征。
2.2 CC攻击识别技巧
CC攻击更难察觉,我的经验是关注这些指标:
-
请求特征异常
- User-Agent相同或缺失
- Referer异常
- 请求间隔极其规律
-
资源消耗模式
- 每个请求消耗较多CPU
- 大量数据库查询
- 频繁写入日志
使用这个组合命令快速分析:
bash复制# 统计前10个异常IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
# 分析请求URL分布
awk -F\" '{print $2}' /var/log/nginx/access.log | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 20
3. 高级排查与取证技术
3.1 网络层深度检测
当怀疑遭受攻击时,建议按以下流程操作:
-
抓包分析(不超过30秒)
bash复制
tcpdump -G 30 -W 1 -w /tmp/dump.pcap -i eth0 -
流量特征分析
bash复制
tshark -r /tmp/dump.pcap -qz io,phs -
协议分布统计
bash复制
tshark -r /tmp/dump.pcap -qz ip_hosts,tree
我曾用这个方法发现一起伪装成正常HTTP请求的Slowloris攻击,攻击者每个连接保持60秒才发送完整请求头。
3.2 系统层异常检测
内存分析技巧:
bash复制# 检测异常内存分配
vmstat 1 10
# 查找内存泄漏进程
ps aux --sort=-%mem | head -n 10
文件系统异常检测:
bash复制# 查找异常文件修改
find / -type f -mtime -1 -exec ls -lh {} \;
# 检查异常进程打开的文件
lsof -p <可疑PID>
4. 防御措施与应急响应
4.1 立即缓解措施
针对DDoS:
- 启用云厂商的清洗服务
- 临时限制连接速率:
bash复制iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT - 关闭非必要端口
针对CC攻击:
- 设置WAF规则拦截异常User-Agent
- 启用请求频率限制:
nginx复制limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; - 对动态接口添加验证码
4.2 长期防御方案
根据OWASP建议,完整的防御体系应该包括:
-
基础设施层
- 部署流量清洗设备
- 启用BGP Anycast
- 多CDN轮询
-
系统层
bash复制# 调整内核参数 sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w net.ipv4.tcp_max_syn_backlog=2048 -
应用层
- 实现请求指纹校验
- 关键操作二次验证
- 业务流量基线监控
5. 监控体系建设
5.1 基础监控项配置
推荐使用Prometheus监控这些关键指标:
yaml复制# prometheus.yml 片段
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
metrics_path: '/metrics'
params:
collect[]:
- 'cpu'
- 'memory'
- 'network'
- 'tcp'
5.2 智能告警规则
以下Alertmanager规则可有效预警攻击:
yaml复制groups:
- name: ddos-alerts
rules:
- alert: BandwidthOverload
expr: rate(node_network_receive_bytes_total[1m]) > 1000000000
for: 5m
labels:
severity: critical
annotations:
summary: "Possible DDoS attack detected"
6. 攻击溯源实战技巧
去年处理的一起挖矿病毒入侵事件中,我通过以下步骤成功溯源:
-
分析异常进程
bash复制ps -ef | grep -E 'miner|rig|xmrig' -
检查定时任务
bash复制crontab -l ls -la /etc/cron.d/ -
追踪网络连接
bash复制
lsof -i :3333 netstat -antp | grep ESTABLISHED -
分析启动项
bash复制systemctl list-unit-files --state=enabled ls -la /etc/init.d/
最终发现攻击者通过Redis未授权访问漏洞植入后门,整个过程仅用17分钟就完成定位。