在 Debian 上通过 Apache 日志定位攻击,核心思路是:找到异常请求 → 分析来源 → 判断攻击类型 → 采取措施。下面按实战步骤说明。
默认路径:
/var/log/apache2/
常见日志文件:
access.log:访问日志(最重要)error.log:错误日志other_vhosts_access.log:虚拟主机日志(如果启用)查看实时日志:
tail -f /var/log/apache2/access.log
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
示例输出:
12345 1.2.3.4
6789 5.6.7.8
→ 单个 IP 短时间大量请求,可能是:
grep -E "(wp-login|phpmyadmin|admin|config|/.env|/actuator)" access.log
常见攻击目标:
/wp-login.php(WordPress 爆破)/phpmyadmin/.git//api//../(目录穿越)grep -E "(union|select|or 1=1|script|alert\() " access.log
或:
grep -i "union select" access.log
grep -E "(sqlmap|nmap|masscan|dirb|nikto|curl|python-requests)" access.log
1.2.3.4 - - [时间] "POST /wp-login.php HTTP/1.1" 200
特征:
✅ 防御:
iptables -A INPUT -s 1.2.3.4 -j DROP
或使用 fail2ban
5.6.7.8 - - [时间] "GET /admin HTTP/1.1" 404
5.6.7.8 - - [时间] "GET /backup HTTP/1.1" 404
特征:
9.9.9.9 - - [时间] "GET /news?id=1' OR '1'='1 HTTP/1.1"
tail -f /var/log/apache2/error.log
例如:
apt install goaccess
goaccess /var/log/apache2/access.log -o report.html --log-format=COMBINED
apt install fail2ban
示例规则(Apache 暴力破解):
[apache-auth]
enabled = true
awk '{print $4}' access.log | cut -d: -f1-3 | sort | uniq -c
| 日志特征 | 可能攻击 |
|---|---|
| 大量 404 | 扫描 / 探测 |
| POST 登录页 | 暴力破解 |
| SQL 关键词 | SQL 注入 |
| 异常 UA | 扫描器 |
| 单 IP 高并发 | CC / DoS |
访问 .env |
信息泄露 |
access.logerror.log如果你愿意,可以:
我可以帮你 精确判断攻击类型和防御方案。