温馨提示×

Tomcat在CentOS上的安全配置指南

小樊
35
2026-01-02 07:20:36
栏目: 智能运维

一 基础安全基线

  • 运行用户与最小权限
    • 创建专用系统用户(禁止登录):sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
    • 目录属主与权限:
      • sudo chown -R tomcat:tomcat /opt/tomcat
      • sudo find /opt/tomcat -type d -exec chmod 750 {} \;
      • sudo find /opt/tomcat -type f -exec chmod 640 {} \;
      • 关键目录:sudo chmod 700 /opt/tomcat/conf /opt/tomcat/bin
  • 系统与网络
    • 仅开放必要端口(建议先仅内网开放,再通过反向代理或防火墙白名单放通):sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
    • 禁止 root 直接运行 Tomcat,避免提权风险
  • 版本与来源
    • 选择受支持的 Tomcat 9/10JDK 11/17(LTS);从官网获取发行包并使用校验值(如 sha512)核验完整性,避免使用第三方修改版

二 服务化与最小攻击面

  • Systemd 服务(示例)
    • 创建文件:/etc/systemd/system/tomcat.service
    • 关键项:以 tomcat 用户运行、设置 JAVA_HOME/CATALINA_HOME/CATALINA_BASE、开启自动重启
    • 启用:sudo systemctl daemon-reload && sudo systemctl enable --now tomcat
  • 关闭或保护管理接口
    • 生产环境建议直接移除管理应用:rm -rf /opt/tomcat/webapps/{manager,host-manager}
    • 如确需保留,务必:
      • conf/tomcat-users.xml 仅保留必要角色并使用强密码
      • webapps/manager/META-INF/context.xml 增加来源限制:
        • <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1,192.168.1.0/24"/>
  • 关闭或加固关闭端口
    • 修改 server.xml<Server port="8005" shutdown="复杂随机字符串">
    • 或彻底禁用:<Server port="-1" shutdown="SHUTDOWN">
  • 禁用 AJP(未使用前置 Web 服务器时)
    • 注释或删除:<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
  • 目录精简与部署策略
    • 移除或限制 webapps 下示例应用与文档
    • 关闭热部署与自动加载:unpackWARs="false" autoDeploy="false" reloadable="false"(仅在维护窗口手动部署)

三 连接器与协议安全

  • HTTP 连接器加固(示例)
    • 隐藏版本信息:在 <Connector> 增加 server="APP Srv 1.0"
    • 禁用 DNS 反查、启用压缩(或交由前置 Nginx/Apache)、限制 POST 大小
    • 示例:
      • <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" server="APP Srv 1.0" enableLookups="false" maxPostSize="10485760" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" URIEncoding="UTF-8"/>
  • 启用 HTTPS(推荐 8443)
    • 使用 Let’s Encrypt 获取证书,转换为 PKCS12 并配置到 Tomcat:
      • openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out /opt/tomcat/conf/keystore.p12 -name tomcat -CAfile chain.pem -caname root -password pass:YourP12Pass
      • server.xml 连接器:
        • <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true">
        • <SSLHostConfig><Certificate certificateKeystoreFile="conf/keystore.p12" type="RSA" certificateKeystorePassword="YourP12Pass"/></SSLHostConfig></Connector>
    • 如具备合规要求,优先采用 TLS 1.2+,禁用 SSLv3/TLS1.0/1.1
  • 端口与协议取舍
    • 未使用 Apache/mod_jk 时关闭 AJP 8009
    • 对外仅暴露 8443/8080,其余管理端口仅本地监听或关闭

四 应用与运行时安全

  • 隐藏版本信息
    • 修改 lib/catalina.jar 中的 org/apache/catalina/util/ServerInfo.properties
      • 示例:server.info=APP Srv 1.0server.number=1.0.0
      • 注意:升级 Tomcat 后需重新应用该修改
  • 会话与 Cookie
    • 在应用的 web.xml 或框架层设置安全 Cookie 属性:HttpOnlySecure(仅 HTTPS)、SameSite=Strict/Lax
    • 避免使用可预测或易冲突的会话标识策略
  • JVM 与内存
    • 通过环境变量设置堆与 GC(示例):JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"
    • 结合实例规格与业务峰值调优,避免 OOM 与频繁 Full GC
  • 文件与部署隔离
    • 建议将应用代码与 Tomcat 安装目录分离(如 /var/www/app),分别由不同系统用户拥有,降低 WebShell 提权影响面

五 审计与持续维护

  • 日志与监控
    • 实时查看:tail -f /opt/tomcat/logs/catalina.out
    • 按日轮转与集中采集(如 filebeat/rsyslog),保留不少于 90 天
  • 变更与发布
    • 采用灰度/蓝绿发布;变更前备份 conf/webapps/bin/
    • 维护窗口内执行 stop/start/restart,避免频繁 reloadable 导致文件句柄与类加载异常
  • 例行检查清单
    • 每周:弱口令与用户清单、开放端口与服务指纹、证书到期时间
    • 每月:依赖与组件升级(Tomcat/JDK/库)、内核与系统补丁、备份恢复演练
    • 随时:异常访问与错误日志激增、可疑 JSP/Webshell 文件、反向代理与防火墙规则漂移

0