Tomcat 作为最流行的 Java 应用服务器之一,在 CentOS 生产环境中的安全配置至关重要。本文将从权限管理、网络防护、应用安全、加密传输、监控运维五个维度,详细介绍如何构建安全的 Tomcat 运行环境。
一、基础运行环境与权限配置
1.1 使用安全版本的 JDK
生产环境应使用长期支持版本(LTS)的 JDK,推荐 JDK 11 或 JDK 17。通过包管理器安装后,务必验证版本:
java -version
重要提醒:切勿使用来源不明的 JDK 或 Tomcat 安装包,避免引入供应链安全风险。
1.2 创建专用系统用户
永远不要以 root 用户运行 Tomcat!创建专用用户是安全的第一道防线:
useradd -m -s /sbin/nologin tomcat_user
后续以该用户身份启动服务,即使被攻破,攻击者也仅获得普通用户权限。
1.3 目录权限最小化
推荐的权限配置原则:
| 目录/文件 | 权限 | 说明 |
|---|---|---|
安装目录 /srv/tomcat |
750 | 仅所有者和组可访问 |
| 配置文件 | 640 | 防止敏感信息泄露 |
脚本文件 bin/*.sh |
700 | 仅所有者可执行 |
| webapps 目录 | 750 | 限制应用部署权限 |
1.4 Systemd 服务托管
使用 Systemd 管理 Tomcat 服务,实现自动重启和权限控制:
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Type=forking
User=tomcat_user
Group=tomcat_group
UMask=0007
Restart=always
Environment="JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC"
ExecStart=/srv/tomcat/bin/startup.sh
ExecStop=/srv/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
1.5 校验软件完整性
下载官方二进制包后,务必使用 SHA512 校验:
sha512sum apache-tomcat-*.tar.gz
对比官方发布的校验值,确保未被篡改。
二、网络与访问控制策略
2.1 端口最小化暴露
生产环境仅开放必要端口:
- 8080:HTTP 连接器(建议仅用于重定向)
- 8443:HTTPS 连接器
- 8005:关闭端口(建议修改或禁用)
推荐配置全站 HTTPS,HTTP 请求重定向至 HTTPS。
2.2 防火墙规则配置
使用 firewalld 限制访问:
# 开放 HTTP/HTTPS 服务
firewall-cmd --permanent --zone=public --add-service=http --add-service=https
firewall-cmd --reload
# 限制单 IP 并发连接(防 DoS)
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="可疑IP" reject'
2.3 架构层防护
最佳实践:将 Tomcat 部署在内网,通过 Nginx 反向代理对外服务。
配置方式:
- Tomcat 仅监听本机:修改
server.xml中的address="127.0.0.1" - 防火墙限制:仅放行 Nginx 所在网段访问 8080 端口
- Nginx 配置代理头:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
三、应用与接口安全加固
3.1 管理接口保护
强烈建议:生产环境删除 manager 和 host-manager 应用。
如确需保留,必须:
- 在
conf/tomcat-users.xml中配置强密码和最小角色 - 在
webapps/manager/META-INF/context.xml中限制访问 IP:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1|内网网段" />
3.2 禁用热部署
修改 server.xml 中的 Host 配置,防止恶意 WAR 包被自动部署:
<Host name="localhost" unpackWARs="false" autoDeploy="false">
<Context reloadable="false" />
</Host>
3.3 隐藏版本信息
攻击者常通过版本号寻找已知漏洞。隐藏方法:
- 修改 Server 头:在 Connector 中添加
server="APP Srv1.0" - 修改版本文件:编辑
lib/catalina.jar中的ServerInfo.properties
3.4 更改关闭端口指令
默认的关闭端口和指令极易被利用:
<Server port="8105" shutdown="复杂的随机字符串">
建议使用随机生成的长字符串作为 shutdown 指令。
3.5 应用层认证
在 WEB-INF/web.xml 中配置安全约束:
<security-constraint>
<web-resource-collection>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
四、加密传输与证书管理
4.1 启用 HTTPS
使用 Let’s Encrypt 免费证书:
certbot certonly --standalone -d yourdomain.com
转换为 PKCS12 格式:
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name tomcat
在 server.xml 中配置:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
scheme="https" secure="true"
keystoreFile="/path/to/keystore.p12"
keystoreType="PKCS12"
keystorePass="your_password" />
4.2 证书自动续期
配置 crontab 定时任务,在证书到期前自动续期:
0 3 * * * /usr/bin/certbot renew --quiet && /srv/tomcat/bin/shutdown.sh && /srv/tomcat/bin/startup.sh
五、抗 DoS 与监控运维
5.1 连接与线程控制
在 server.xml 中配置合理的连接参数:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="200"
acceptCount="100"
connectionTimeout="20000"
maxConnections="10000" />
参数说明:
- maxThreads:最大工作线程数
- acceptCount:等待队列长度
- connectionTimeout:连接超时时间
5.2 纵深防御策略
| 防护层 | 措施 | 说明 |
|---|---|---|
| WAF | ModSecurity | 过滤恶意请求 |
| CDN | 流量清洗 | 隐藏源站 IP |
| 负载均衡 | 分摊压力 | 避免单点故障 |
| 黑名单 | 拒绝恶意 IP | 结合日志分析 |
5.3 日志与监控
启用访问日志:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="access_log"
suffix=".txt"
pattern="%h %l %u %t %r %s %b" />
日志轮转配置(/etc/logrotate.d/tomcat):
/srv/tomcat/logs/catalina.out {
daily
rotate 7
compress
size 50M
missingok
create 640 tomcat_user tomcat_group
}
监控告警:建议使用 Prometheus + Grafana 监控 JVM 内存、线程数、请求响应时间等关键指标。
总结
Tomcat 安全加固是一个系统工程,需要从多个层面协同防护:
- 权限最小化:专用用户、严格权限、服务托管
- 网络隔离:防火墙规则、反向代理架构
- 应用加固:隐藏信息、禁用危险功能、强认证
- 传输加密:HTTPS 全站、证书自动续期
- 监控运维:日志审计、性能监控、异常告警
安全无小事,建议定期审查配置、关注安全公告、及时更新补丁,构建纵深防御体系。
本文适用于 CentOS 7/8/9 环境,Tomcat 9/10 版本。实际部署请根据业务需求调整参数。