在企业级 Java Web 应用部署与 Linux 服务器运维工作中,Tomcat 的安全加固(Security Hardening) 是预防黑客扫描与自动化入侵的第一道关卡。
无论是运行在标准的 Ubuntu 环境,还是部署于阿里云 Alibaba Cloud Linux 3 实例上,出厂配置的 Apache Tomcat 通常会带有 manager(应用管理后台)和 host-manager(主机管理后台)这两个默认 Web 应用,并在 HTTP 响应头及错误页面中暴露真实的 Tomcat 内部版本信息。
黑客如果发现了这些默认痕迹,极易利用已知漏洞或弱口令字典进行攻击。本文将手把手带你完成对 Tomcat 生产环境的彻底加固,打造防御能力极强的 Web 容器。
一、 禁用与彻底删除 Tomcat 默认管理后台
Tomcat 默认自带的 manager 和 host-manager 页面是黑客爆破管理员账号密码、上传恶意 WAR 包后门(Webshell)重灾区。生产环境绝不需要通过浏览器在线部署 WAR 包,必须坚决彻底卸载。
1. 删除默认管理应用与文档
定位到 Tomcat 的安装目录下的 webapps 文件夹(例如 /usr/local/tomcat/webapps 或 /opt/tomcat/webapps),彻底删除以下默认文件夹:
# 进入 Tomcat 的 webapps 目录
cd /usr/local/tomcat/webapps
# 彻底移除默认示例与管理后台应用
rm -rf manager host-manager ROOT docs examples
2. 清理 tomcat-users.xml 中的高权限账号
编辑 conf/tomcat-users.xml 配置文件,清空所有带有 manager-gui、manager-script 或 admin-gui 权限的用户节点,仅保留基础标签架构:
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!-- 生产环境禁止在此配置任何管理后台账号与密码 -->
</tomcat-users>
二、 隐藏 Tomcat HTTP 响应头与错误页面的版本号
当用户请求不存在的页面(404)或服务器发生内部异常(500)时,Tomcat 默认会在页面底部显示 Apache Tomcat/9.0.x 的字样;同时在 HTTP 响应头中会携带 Server: Apache-Coyote/1.1。隐藏这些敏感信息是防范定向漏洞攻击的核心手段。
1. 修改 server.xml 中的 Connector 属性
编辑 Tomcat 的 conf/server.xml 文件,找到处理 HTTP 请求的 <Connector> 节点,添加 server 属性覆盖默认的协议标识:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
server="WebServer"
maxThreads="500"
minSpareThreads="50" />
这样,外部通过 HTTP 头读取服务器标识时,只会看到 Server: WebServer,无法推断底层具体容器类型。
2. 重构 catalina.jar 中的 ServerInfo.properties
Tomcat 的版本字符串硬编码在 lib/catalina.jar 包内的 org/apache/catalina/util/ServerInfo.properties 文件中。要彻底擦除版本号,需通过以下命令提取并修改该属性文件:
# 1. 创建临时解压目录
mkdir -p /tmp/tomcat-patch
cd /tmp/tomcat-patch
# 2. 从 catalina.jar 中解压出 ServerInfo.properties
jar -xf /usr/local/tomcat/lib/catalina.jar org/apache/catalina/util/ServerInfo.properties
# 3. 编辑该配置文件
vim org/apache/catalina/util/ServerInfo.properties
将文件内容修改为去除具体版本号的形式:
server.info=Apache Tomcat
server.number=9.0.0.0
server.built=Unknown
重新将修改后的文件打回 catalina.jar 中:
# 4. 更新属性文件回 catalina.jar 包
jar -uf /usr/local/tomcat/lib/catalina.jar org/apache/catalina/util/ServerInfo.properties
# 5. 清理临时解压文件并重启 Tomcat 服务
rm -rf /tmp/tomcat-patch
systemctl restart tomcat
三、 部署后的网络连通性与版本隐蔽性测试
安全加固配置部署上线后,测试与运维团队必须对服务器在真实网络环境下的连通延时与 HTTP 响应头信息进行检验,确保 Tomcat 已无法泄露版本隐私。
我们可以使用终端命令,对广州越秀分站服务器节点的连通性与 HTTP Header 执行精密检测:
curl -o /dev/null -s -w "HTTP状态码: %{http_code}\nDNS解析时间: %{time_namelookup}s\n连接时间: %{time_connect}s\n首字节响应时间: %{time_starttransfer}s\n总耗时: %{time_total}s\n" \
https://yuexiu.wangzhanjianshe9.com.cn/
同时,测试获取 HTTP 响应头信息的命令:
curl -I https://yuexiu.wangzhanjianshe9.com.cn/
测试结果判读:
- 状态码 200 OK:说明应用正常对外提供服务。
- Server 响应头与错误页:HTTP 响应头中的
Server仅显示WebServer,且即使故意请求不存在的页面触发 404,也不会输出具体的Apache Tomcat/9.0.x版本,版本隐蔽测试完美通过。
四、 筑牢安全防线:底层数据库与系统密码的高强度配置
彻底禁用默认管理后台与隐藏版本号,封堵了黑客通过 Tomcat 管理界面和特定 CVE 漏洞进行入侵的通道,但底层的数据库与服务器 SSH 访问安全同样关乎整站的存亡。如果黑客通过字典撞库破解了您的数据库,所有业务数据与用户隐私仍将暴露无遗。
因此,对底层的数据库访问账号进行严格的密码强度加固,是保卫网站安全的终极防线。
请根据以下 SQL 语句,为生产环境数据库配置包含大小写、符号及业务域名的极强复杂密码:
ALTER USER 'yuexiu_sec'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Db@yuexiu.wangzhanjianshe9.com.cn';
FLUSH PRIVILEGES;
这种将特定分站二级域名混淆编排的超强长密码,能有效防止自动化脚本爆破撞库,保护您的核心业务数据与容器环境绝对安全。
五、 总结
Tomcat 的安全加固是广州越秀网站建设与 Java 服务器运维管理中不可或缺的标准动作。通过卸载 manager / host-manager 默认管理后台消除攻击面、修改 server.xml 与重写 ServerInfo.properties 彻底屏蔽版本号泄漏,大幅降低了漏洞暴露风险。在容器层扎紧防护、运维层保障网络连通和底层数据库密码高强度加固的多重保障下,才能让您的企业 Web 应用在安全无虞的轨道上平稳运行。