温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Tomcat的安全性问题如何解决

发布时间:2025-12-16 08:17:28 来源:亿速云 阅读:103 作者:小樊 栏目:系统运维

Tomcat 安全性加固清单与实践

一 基础安全加固

  • 非 root用户运行:创建专用系统账号(如tomcat),将安装目录属主设为该用户,使用 su - tomcat 启动;避免使用 root 直接启动服务。
  • 删除或禁用管理应用:移除或限制访问 webapps/docs、examples、host-manager、manager,避免被暴力破解或滥用热部署。
  • 禁止目录浏览:在 conf/web.xml 的 DefaultServlet 中将 listings 设为 false,防止目录遍历与信息泄露。
  • 禁用危险 HTTP 方法:在 DefaultServlet 中将 readonly 设为 true,或在应用的 web.xml 仅允许 GET/POST 等必要方法。
  • 关闭自动部署:在 conf/server.xmlHost 节点将 autoDeploy 与(如有)deployOnStartup 设为 false,减少被投放恶意应用的风险。
  • 隐藏版本信息:修改 lib/catalina.jarorg/apache/catalina/util/ServerInfo.properties,将 server.info、server.number 改为自定义字符串,降低针对性攻击面。
  • 开启访问日志与审计:在 conf/server.xmlHost 下启用 AccessLogValve,记录 客户端IP、时间、请求行、状态码、字节数 等,便于追踪与取证。
  • 错误页面与信息泄露防护:配置 统一跳转至自定义错误页,避免堆栈与敏感路径泄露。
  • 加固关闭指令:将 conf/server.xmlServershutdown 指令改为复杂且不可猜测的字符串。
  • 网络与端口:如非必要,修改 HTTP 8080 为非常见端口;仅在内网开放管理端口,必要时通过防火墙/ACL 限制来源。

二 传输加密与访问控制

  • 启用 HTTPS/TLS:使用 JDK keytool 生成证书,配置 conf/server.xml8443 端口启用 SSLEnabled=true,设置 keystoreFile/keystorePass,并将 redirectPort 指向 8443,强制管理端与敏感数据走加密通道。
  • 管理端访问控制:若必须保留 manager,务必配置强口令(长度≥8,包含大小写字母、数字、特殊字符中至少3类),并通过 防火墙/安全组限制可访问来源 IP。
  • 禁用或保护 AJP:AJP 默认端口 8009。若前端由 Apache HTTP Server 反向代理,建议在前端终止 SSL 并以 HTTP 与 Tomcat 通信,或直接注释 AJP Connector;如必须使用,绑定 address=“127.0.0.1” 并限制来源,或配置 secret/requiredSecret 进行认证。

三 漏洞修复与版本管理

  • 及时升级:关注官方安全公告,优先升级至包含修复的版本。历史高危漏洞如 CVE-2020-1938(Ghostcat) 的修复版本为:7.0.100、8.5.51、9.0.31;后续又发布了更高修复版本(如 7.0.107、8.5.68、9.0.48),建议直接升级到最新稳定版。
  • 典型漏洞速览与处置:
    • CVE-2017-12615(任意文件写入):成因多为将 DefaultServlet readonly=false 导致可用 PUT 上传;修复为将 readonly=true 并升级版本。
    • CVE-2019-0232(RCE,Windows):启用 CGI Servlet 且开启 enableCmdLineArguments 时存在命令注入;修复为禁用该参数并升级。
    • CVE-2020-9484(Session 反序列化):使用 FileStore 且依赖存在 gadget 时可能被反序列化;修复为升级、禁用 FileStore 或避免引入危险依赖。
    • 弱口令与 WAR 远程部署:默认或弱口令可被登录后台并上传 WAR 获取控制权;修复为强口令、限制来源、删除或禁用管理应用。

四 运维与监控

  • 日志集中与审计:启用 AccessLogValve,并集中采集 catalina.out、localhost.*.log 等至 SIEM,设置告警规则(如多次 4xx/5xx、非法方法、管理路径访问、异常流量)。
  • 基线巡检与合规:定期核查用户与权限、server.xml/web.xml 关键配置、目录与文件权限、开放端口与协议、证书有效期。
  • 安全测试与演练:使用漏洞扫描器与配置基线工具定期检查;对 AJP、管理端、PUT/DELETE 等高风险点进行专项验证;制定并演练应急与回滚预案。

五 最小化配置示例

  • server.xml(关键片段)
    <Server port="8005" shutdown="复杂随机字符串">
      <Service name="Catalina">
        <!-- HTTP Connector -->
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000" redirectPort="8443" />
    
        <!-- HTTPS Connector -->
        <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                   clientAuth="false" sslProtocol="TLS"
                   keystoreFile="/opt/tomcat/conf/keystore.jks"
                   keystorePass="强密码" />
    
        <!-- 如不使用 AJP,直接注释或删除
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        -->
      </Service>
    </Server>
    
  • web.xml(关键片段)
    <!-- 禁止目录浏览 -->
    <servlet>
      <servlet-name>default</servlet-name>
      <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
      <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
      </init-param>
      <init-param>
        <param-name>readonly</param-name>
        <param-value>true</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
    </servlet>
    
    <!-- 仅允许 GET/POST -->
    <security-constraint>
      <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>HEAD</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
      </web-resource-collection>
      <auth-constraint/>
    </security-constraint>
    
    <!-- 统一错误页面 -->
    <error-page>
      <exception-type>java.lang.Throwable</exception-type>
      <location>/error.jsp</location>
    </error-page>
    
  • 访问日志(Host 内)
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs" prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t "%r" %s %b" />
    
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI