CentOS 下 Tomcat 安全加固完整指南:防止攻击的最佳实践 (2026)

Tomcat 作为最流行的 Java 应用服务器之一,在 CentOS 生产环境中的安全配置至关重要。本文将从权限管理、网络防护、应用安全、加密传输、监控运维五个维度,详细介绍如何构建安全的 Tomcat 运行环境。


一、基础运行环境与权限配置

1.1 使用安全版本的 JDK

生产环境应使用长期支持版本(LTS)的 JDK,推荐 JDK 11JDK 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 反向代理对外服务。

配置方式:

  1. Tomcat 仅监听本机:修改 server.xml 中的 address="127.0.0.1"
  2. 防火墙限制:仅放行 Nginx 所在网段访问 8080 端口
  3. Nginx 配置代理头
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

三、应用与接口安全加固

3.1 管理接口保护

强烈建议:生产环境删除 managerhost-manager 应用。

如确需保留,必须:

  1. conf/tomcat-users.xml 中配置强密码和最小角色
  2. 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 隐藏版本信息

攻击者常通过版本号寻找已知漏洞。隐藏方法:

  1. 修改 Server 头:在 Connector 中添加 server="APP Srv1.0"
  2. 修改版本文件:编辑 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 安全加固是一个系统工程,需要从多个层面协同防护:

  1. 权限最小化:专用用户、严格权限、服务托管
  2. 网络隔离:防火墙规则、反向代理架构
  3. 应用加固:隐藏信息、禁用危险功能、强认证
  4. 传输加密:HTTPS 全站、证书自动续期
  5. 监控运维:日志审计、性能监控、异常告警

安全无小事,建议定期审查配置、关注安全公告、及时更新补丁,构建纵深防御体系。


本文适用于 CentOS 7/8/9 环境,Tomcat 9/10 版本。实际部署请根据业务需求调整参数。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注