一、配置Tomcat日志记录(基础前提)
要监控Tomcat安全事件,首先需确保日志能捕获足够的安全相关信息。主要从以下方面配置:
conf/logging.properties文件,将org.apache.catalina、org.apache.coyote、org.apache.tomcat等核心组件的日志级别设置为FINE或DEBUG(如logger.level=org.apache.catalina=FINE),以记录更多调试细节(如请求处理、认证授权过程)。server.xml中启用AccessLogValve,记录访问日志的关键字段(如客户端IP、请求时间、URL、响应状态码、用户代理)。示例配置:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"" />
这能帮助追踪异常访问行为(如频繁的404请求、可疑IP的集中访问)。logging.properties设置日志滚动策略,避免单个文件过大。示例配置:java.util.logging.FileHandler.pattern = %h/tomcat.%g.log
java.util.logging.FileHandler.limit = 50000(50MB)
java.util.logging.FileHandler.count = 5(保留5个备份)
防止日志文件占用过多磁盘空间,同时保留历史记录用于回溯分析。二、识别常见安全事件日志特征
通过分析日志中的特定模式,可快速定位安全威胁。以下是常见安全事件的日志表现:
org.apache.catalina.authenticator.AuthenticatorBase日志中会出现Authentication failed for user [username],提示用户名或密码错误(可能是暴力破解尝试)。Authorization failed for user [username],表示用户已认证但无权访问资源(如未授权访问管理页面)。org.apache.catalina.session.StandardSessionListener的sessionDestroyed日志(伴随reason=TIMEOUT)表示会话超时,若频繁出现可能是会话固定攻击的迹象。CsrfTokenRepository会记录saveToken(正常令牌生成)或invalidToken(无效令牌,提示CSRF攻击);OncePerRequestFilter或DataSourceUtils会记录恶意请求(如包含<script>标签的XSS payload、带单引号的SQL语句)。org.apache.catalina.connector.Request的filter日志会提示Unauthorized access attempt(如访问/admin路径未通过权限检查)。org.apache.catalina.connector.Response日志可能记录包含敏感数据的响应(如数据库错误信息、用户密码明文),需警惕Content-Type: text/plain的响应。三、使用工具自动化分析与监控
手动分析日志效率低,需借助工具实现自动化:
tomcat_exporter采集Tomcat指标(如请求延迟、线程池使用率),结合Grafana设置阈值告警(如“线程池活跃线程数超过200”);tail -f logs/catalina.out实时查看日志,结合grep过滤关键信息(如grep "Authentication failed" logs/catalina.out)。四、建立安全审计与响应机制
五、补充安全措施
conf/catalina.policy文件配置安全策略(如限制文件读写权限、禁止调用Runtime.exec()),监控运行时安全事件(如非法文件访问)。web.xml配置IP白名单(如只允许公司IP访问管理接口),减少外部攻击面。