温馨提示×

Linux上Tomcat如何防止攻击

小樊
44
2025-11-29 03:38:44
栏目: 网络安全

Linux上Tomcat安全防护清单

一 基础与系统层加固

  • 保持Tomcat与系统为最新稳定版本,及时应用安全补丁,关注并记录CVE通告与修复进度。避免使用已停止维护的版本。
  • 非root专用用户运行Tomcat,最小权限原则:创建系统用户(如tomcat),将安装目录属主设为该用户,脚本仅保留必要执行权限。
  • 强化口令策略与账号治理:设置≥8位且包含大小写字母、数字与特殊字符的复杂密码;仅保留业务必需账号;必要时对接LDAP/OAuth等集中认证。
  • 配置防火墙/安全组:仅开放必要端口(如HTTP/HTTPS),对管理口与后端端口限制来源IP;云环境同步收紧安全组规则。
  • 开启监控与日志审计:启用访问日志与AccessLogValve,集中采集并定期审计异常访问与失败登录。

二 配置与组件层加固

  • 关闭或限制AJP协议:如无前置mod_jk/mod_proxy_ajp联动,直接在server.xml注释AJP Connector;否则仅限内网访问并严格鉴权。
  • 保护8005 Shutdown端口:将默认端口改为非默认高位端口,并将shutdown指令修改为强随机字符串;更安全的做法是仅本地回环可访问。
  • 删除或禁用管理应用:生产环境移除webapps/manager、host-manager、docs、examples、ROOT等非业务内容;若必须保留,仅限跳板/内网访问并启用强认证与IP白名单。
  • 禁用目录浏览热部署:在conf/web.xml将 DefaultServlet 的listings=false;关闭自动部署(autoDeploy/deployOnStartup)以避免恶意WAR植入。
  • 限制HTTP方法:在 DefaultServlet 启用readonly=true,禁用PUT/DELETE/TRACE等危险方法。
  • 隐藏版本信息:修改ServerInfo.properties(打包回catalina.jar)或在Connector设置server字段,降低指纹暴露面。
  • 配置SSL/TLS:在8443端口启用TLS,使用有效证书(keytool或外部CA),禁用不安全协议与弱套件。
  • 会话与Cookie安全:在conf/context.xml设置useHttpOnly=true,并启用secure标志与合理超时。

三 网络与访问控制

  • 最小化暴露面:仅开放HTTP/HTTPS到前端;8005/AJP仅本地或受控网段可达;变更默认端口并定期巡检监听端口。
  • 强化访问控制:对管理端、运维接口与敏感路径实施IP白名单网络ACL;云上通过安全组实现分区分域。
  • 部署反向代理/负载均衡(Nginx/Apache)统一承载TLS与压缩、WAF、限流与防CC,后端Tomcat仅监听127.0.0.1或内网接口。

四 运行监控与响应

  • 启用并轮转访问日志与catalina.out,集中到日志平台进行异常检测(如暴力访问、路径扫描、异常UA/Referer)。
  • 配置AccessLogValve输出关键字段(客户端IP、请求时间、方法、状态码、UA、请求时间等),便于溯源与风控。
  • 建立变更与应急流程:变更留痕、版本回滚预案、紧急关停通道;定期安全评估/渗透测试与基线核查。

五 关键配置示例

  • server.xml(关键片段)
    <!-- 仅保留HTTP/HTTPS;AJP按需禁用或内网限制 -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" redirectPort="8443" />
    
    <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="ChangeMe!"/>
    
    <!-- 保护shutdown端口与指令 -->
    <Server port="18005" shutdown="Str0ngShutdown!"/>
    
  • 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>
    
    <!-- 错误页面统一跳转,减少信息泄露 -->
    <error-page>
      <error-code>404</error-code>
      <location>/404.html</location>
    </error-page>
    <error-page>
      <error-code>500</error-code>
      <location>/500.html</location>
    </error-page>
    
  • context.xml(会话与Cookie)
    <Context useHttpOnly="true" />
    
  • 防火墙(UFW示例)
    sudo ufw allow 8080/tcp
    sudo ufw allow 8443/tcp
    sudo ufw enable
    

0