1. 及时更新Tomcat版本
保持Tomcat及其依赖库为最新稳定版本,定期检查Apache Tomcat官方安全公告,及时修复已知漏洞(如CVE-2025-24813远程代码执行、CVE-2024-50379文件上传等)。在Debian中,可通过sudo apt update && sudo apt upgrade tomcat命令更新Tomcat,升级前备份配置文件和应用程序以防止数据丢失。
2. 最小化安装与端口管控
删除Tomcat默认的示例应用(docs、examples文件夹)和文档,减少潜在攻击面;关闭未使用的协议(如AJP协议,默认端口8009),在server.xml中注释或删除相关Connector配置。仅开放必要的端口(如HTTP 8080、HTTPS 8443),使用ufw(Uncomplicated Firewall)限制访问:sudo ufw allow 8080/tcp(允许HTTP)、sudo ufw allow 8443/tcp(允许HTTPS),并禁用不必要的端口。
3. 权限与认证强化
以低权限专用用户运行Tomcat,避免使用root:通过sudo useradd -r -d /opt/tomcat -s /bin/false tomcat创建用户,再用sudo chown -R tomcat:tomcat /opt/tomcat设置目录所有权,sudo chmod -R 750 /opt/tomcat限制权限(仅所有者可读写执行,组和其他用户无写权限)。修改tomcat-users.xml中的默认密码,设置复杂密码(至少8位,包含数字、大小写字母和特殊符号),限制高权限角色(如manager-script、manager-jmx)的使用,仅授权必要人员访问管理界面。
4. 管理界面与访问控制
限制管理界面(manager、host-manager)的访问IP,在server.xml的<Valve>标签中添加IP过滤:<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+" />(仅允许192.168.1.x网段访问)。若无需管理界面,可直接删除webapps目录下的manager和host-manager文件夹。禁用Tomcat的Shutdown端口(默认8005),在server.xml中将shutdown属性值设为-1:<Server port="-1" shutdown="SHUTDOWN">,防止攻击者通过端口发送shutdown命令。
5. SSL/TLS加密配置
为Tomcat配置SSL/TLS证书,加密客户端与服务器之间的通信,防止中间人攻击。获取受信任证书颁发机构(CA)签发的证书(如Let’s Encrypt),将证书文件(.crt)和私钥(.key)放置在Tomcat的conf目录下,修改server.xml中的Connector配置:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateFile="/opt/tomcat/conf/your_cert.crt"
certificateKeyFile="/opt/tomcat/conf/your_key.key" />
</SSLHostConfig>
</Connector>
重启Tomcat后,通过https://your_domain:8443访问,强制用户使用HTTPS。
6. 日志监控与安全审计
定期审查Tomcat日志文件(logs/catalina.out、logs/localhost_access_log.*.txt),监控异常活动(如频繁的登录失败、大量404错误、可疑的POST请求)。使用tail -f /opt/tomcat/logs/catalina.out实时查看日志,或配置日志分析工具(如ELK Stack、Splunk)进行自动化监控。设置日志轮转,避免日志文件过大占用磁盘空间。
7. 高级安全措施
禁用文件上传功能的危险配置,在conf/web.xml中将readonly参数设为true:
<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value>
</init-param>
禁用HTTP PUT方法(攻击者常通过PUT方法上传恶意JSP文件),在web.xml中添加:
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable PUT</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint />
</security-constraint>
开启账户锁定机制,通过tomcat-users.xml或自定义Realm配置登录失败次数限制(如连续5次失败锁定账户10分钟),防止暴力破解。