一、为什么要关注Tomcat安全加固

作为Java开发者最熟悉的Web服务器之一,Tomcat承载着大量企业级应用。但默认安装的Tomcat就像没上锁的家门,黑客可以轻松利用常见漏洞发起攻击。去年某金融公司就因未关闭Tomcat管理页面,导致攻击者上传恶意war包获取服务器权限。

想象一下,如果你的Tomcat服务器被植入挖矿程序,CPU占用率飙升到100%,业务系统全面瘫痪,那将是多么可怕的场景。因此,掌握Tomcat安全加固就像给家门装上防盗锁,是每个运维人员的必修课。

二、账户安全:第一道防线必须筑牢

1. 修改默认管理员凭证

安装完Tomcat后,第一件事就是修改manager-gui和admin-gui角色的默认密码。打开conf/tomcat-users.xml:

<!-- 修改前危险的默认配置 -->
<user username="admin" password="admin" roles="manager-gui,admin-gui"/>

<!-- 修改后的安全配置 -->
<user username="system_operator" 
      password="T0mcat!@#Sec2023" 
      roles="manager-gui"/>

密码强度建议:

  • 长度至少12位
  • 包含大小写字母、数字和特殊字符
  • 避免使用字典单词

2. 禁用不必要的管理接口

生产环境通常不需要host-manager功能,在conf/Catalina/localhost/目录下删除host-manager.xml文件:

# 进入Tomcat配置目录
cd $CATALINA_HOME/conf/Catalina/localhost/

# 安全操作:备份后删除
cp host-manager.xml host-manager.xml.bak
rm -f host-manager.xml

三、通信安全:给数据传输加上保护罩

1. 强制HTTPS加密

在server.xml中配置SSL连接器,示例使用Java的keytool生成证书:

# 生成密钥库(有效期365天)
keytool -genkey -alias tomcat -keyalg RSA \
        -keystore /opt/tomcat/conf/keystore.jks \
        -validity 365 -keysize 2048

然后在server.xml中添加:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="/opt/tomcat/conf/keystore.jks"
                     certificateKeystorePassword="changeit"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

2. 禁用不安全的协议

在conf/server.xml中明确禁用SSLv3和TLSv1.0:

<Connector ...>
    <SSLHostConfig protocols="TLSv1.2,TLSv1.3"
                   ciphers="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,...">
    </SSLHostConfig>
</Connector>

四、服务加固:缩小攻击面的艺术

1. 删除示例应用

Tomcat自带的examples、docs等目录可能包含漏洞:

# 安全删除示例程序
cd $CATALINA_HOME/webapps
rm -rf examples docs ROOT

2. 自定义错误页面

在web.xml中配置统一的错误页面,避免泄露版本信息:

<error-page>
    <error-code>404</error-code>
    <location>/error/404.html</location>
</error-page>
<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error/500.html</location>
</error-page>

五、运行时防护:主动防御策略

1. 设置安全响应头

在web.xml中添加安全头部:

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>SAMEORIGIN</param-value>
    </init-param>
</filter>

2. 限制HTTP方法

只允许必要的HTTP方法:

<security-constraint>
    <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>OPTIONS</http-method>
    </web-resource-collection>
    <auth-constraint/>
</security-constraint>

六、日志监控:安全事件的显微镜

1. 增强访问日志配置

在server.xml中启用详细日志:

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log" 
       suffix=".txt"
       pattern="%{X-Forwarded-For}i %l %u %t &quot;%r&quot; %s %b %D %I" />

2. 日志分析示例脚本

使用Linux命令分析攻击尝试:

# 查找可能的扫描行为
grep "404" logs/localhost_access_log.* | \
awk '{print $1}' | sort | uniq -c | sort -nr

七、升级维护:持续的安全保障

1. 版本更新策略

建议订阅Tomcat安全公告邮件列表,及时获取补丁信息。升级前务必:

  1. 备份server.xml等配置文件
  2. 测试环境验证兼容性
  3. 制定回滚方案

2. 自动化检查脚本

使用Shell脚本检查常见漏洞:

#!/bin/bash
# 检查是否使用弱密码
grep -q "password=\"[^ ]*\"" conf/tomcat-users.xml && \
echo "警告:发现可能使用弱密码"

# 检查示例应用是否存在
[ -d webapps/examples ] && \
echo "警告:示例应用程序未删除"

应用场景与技术分析

这些加固措施特别适合以下场景:

  • 面向互联网的Web应用
  • 处理敏感数据的业务系统
  • 需要合规审计的金融、医疗行业

技术优缺点: ✔️ 优点:显著降低常见攻击风险,配置简单 ✖️ 缺点:部分设置可能影响功能,需要充分测试

注意事项:

  1. 修改配置前必须备份
  2. 生产环境变更要在低峰期进行
  3. 加固后需进行渗透测试验证

总结回顾

通过账户安全、通信加密、服务加固、运行时防护、日志监控和版本维护六个维度的配置,我们可以构建一个相对安全的Tomcat运行环境。记住,安全没有终点,需要持续关注新的威胁和防护手段。就像给房子安装安保系统一样,多一层防护就少一分风险。