阅读量:62
1. 用户与权限管理:最小权限原则
- 创建专用低权限用户:使用
useradd -r -d /opt/tomcat -s /bin/false tomcat命令创建系统用户(如tomcat),避免以root身份运行Tomcat。通过chown -R tomcat:tomcat /opt/tomcat设置Tomcat目录所有权,chmod -R 750 /opt/tomcat限制目录权限(所有者可读写执行,组用户可读执行,其他用户无权限)。 - 配置管理用户权限:编辑
conf/tomcat-users.xml,仅保留必要角色(如manager-gui仅授权给运维人员),设置强密码(组合大小写字母、数字、特殊符号,长度≥8位)。可通过LockOutRealm(在server.xml的Engine节点添加)配置账户锁定:failureCount="5"(连续失败5次)、lockOutTime="300"(锁定5分钟),防止暴力破解。
2. 网络与访问控制:限制暴露面
- 修改默认端口:将
server.xml中的HTTP连接器端口从8080改为非标准端口(如8081),减少自动扫描工具的发现概率。若无需AJP协议(常用于与Apache/Nginx集成),注释或删除8009端口配置。 - 防火墙规则配置:使用
firewalld(推荐)或iptables限制访问:firewall-cmd --zone=public --add-port=8081/tcp --permanent(添加端口)、firewall-cmd --reload(生效);或iptables -A INPUT -p tcp --dport 8081 -s 192.168.1.100 -j ACCEPT(仅允许指定IP访问),拒绝其他IP的连接。 - 限制管理界面IP:在
server.xml的Host节点添加,仅允许特定IP段访问管理界面(如manager、host-manager)。
3. 应用与组件安全:减少攻击面
- 移除不必要的内置应用:删除
webapps目录下的docs(文档)、examples(示例)、ROOT(默认页)、host-manager(主机管理)、manager(应用管理)等目录。若无需这些功能,彻底移除可避免潜在漏洞。 - 禁用自动部署:修改
server.xml中的Host节点,设置autoDeploy="false"(关闭自动部署)、deployOnStartup="false"(禁止启动时部署),防止恶意WAR文件自动部署。建议将应用部署到非默认目录(如/opt/tomcat/custom_webapps),并通过手动启动。 - 关闭AJP连接器:若未使用Apache/Nginx作为前端代理,注释
server.xml中的AJP连接器配置(),避免暴露AJP协议的潜在漏洞。
4. 数据传输安全:加密通信
- 启用SSL/TLS:使用
keytool生成证书(keytool -genkey -alias tomcat -keyalg RSA -keystore /etc/tomcat/keystore -validity 365),修改server.xml添加HTTPS连接器:。强制应用使用HTTPS(如在web.xml中添加标签,要求敏感页面使用CONFIDENTIAL传输)。
5. 日志与监控:及时发现异常
- 启用详细日志:配置
server.xml中的AccessLogValve,记录访问日志(directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common"),包含IP、时间、请求方法、URL、状态码等信息。启用应用日志(如log4j或java.util.logging),记录应用层异常(如SQL注入、XSS攻击尝试)。 - 定期审计与监控:每日检查Tomcat日志(
logs/catalina.out、logs/localhost_access_log.*.txt),使用grep命令查找异常关键词(如404错误过多、sql injection、xss)。部署入侵检测系统(IDS,如Snort)或SIEM(如Elastic SIEM),实时监控流量和日志,预警潜在攻击。
6. 系统与Tomcat版本维护:修复已知漏洞
- 定期更新Tomcat:关注Apache Tomcat官网的安全公告(如CVE漏洞),及时下载最新稳定版本(如Tomcat 10.1.x),替换旧版本。更新前备份配置文件(
conf/)和应用数据(webapps/),避免数据丢失。 - 操作系统安全加固:定期更新Linux系统(如CentOS的
yum update、Ubuntu的apt update),安装安全补丁。禁用不必要的系统服务(如FTP、Telnet),使用chkconfig或systemctl关闭未使用的服务。设置SSH密钥认证,禁用密码登录(修改/etc/ssh/sshd_config中的PasswordAuthentication no),防止SSH暴力破解。
7. 应用层安全:强化应用自身防护
- 禁用危险HTTP方法:编辑
web.xml,添加限制请求方法:,防止攻击者通过PUT/DELETE方法上传恶意文件或探测系统。Restricted Methods /* PUT DELETE TRACE - 设置HttpOnly Cookie:在
conf/context.xml中添加,防止JavaScript通过[removed]访问会话Cookie,减少会话劫持风险。 - 应用代码安全:对应用进行安全编码(如使用PreparedStatement防止SQL注入、输出编码防止XSS、CSRF Token防止跨站请求伪造),定期进行代码审计(如使用SonarQube)和渗透测试(如使用Burp Suite)。