CentOS中Tomcat的安全配置怎么做
导读:CentOS 上 Tomcat 的安全配置清单 一 运行环境与最小权限 使用 JDK 11/17(LTS),通过包管理器安装并验证:java -version。避免使用不受支持的 JDK 版本。 创建专用系统用户(禁止 root 直接运行...
CentOS 上 Tomcat 的安全配置清单
一 运行环境与最小权限
- 使用 JDK 11/17(LTS),通过包管理器安装并验证:
java -version。避免使用不受支持的 JDK 版本。 - 创建专用系统用户(禁止 root 直接运行):
sudo groupadd tomcat & & sudo useradd -g tomcat -m -d /srv/tomcat -s /bin/false tomcat
- 目录与权限最小化:
- 安装到 /srv/tomcat,目录属主:
sudo chown -R tomcat:tomcat /srv/tomcat - 权限建议:目录 750、文件 640,关键脚本 700:
sudo find /srv/tomcat -type d -exec chmod 750 { } \;sudo find /srv/tomcat -type f -exec chmod 640 { } \;sudo chmod 700 /srv/tomcat/bin/*.sh
- 安装到 /srv/tomcat,目录属主:
- Systemd 服务以非特权用户运行(示例):
- 创建
/etc/systemd/system/tomcat.service,关键项:User=tomcat、Group=tomcat、UMask=0007、Restart=always,并配置JAVA_HOME、CATALINA_HOME、CATALINA_BASE、CATALINA_PID等环境变量;执行systemctl daemon-reload & & systemctl enable --now tomcat。
- 创建
- 说明:使用专用用户与最小权限可显著降低被入侵后的横向权限提升风险。
二 网络与访问控制
- 防火墙(firewalld)最小化放行:
- 放行 HTTP/HTTPS:
sudo firewall-cmd --permanent --zone=public --add-service=http --add-service=https & & sudo firewall-cmd --reload - 如必须直连 8080,可仅对跳板/内网放行:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="8080" protocol="tcp" accept' & & sudo firewall-cmd --reload
- 放行 HTTP/HTTPS:
- 反向代理与监听地址:
- 生产建议前置 Nginx/Apache,Tomcat 仅监听 127.0.0.1:8080,外部无法直接访问:
- Connector 增加:
address="127.0.0.1" - Nginx 示例:
proxy_pass http://127.0.0.1:8080;并设置Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto头。
- Connector 增加:
- 生产建议前置 Nginx/Apache,Tomcat 仅监听 127.0.0.1:8080,外部无法直接访问:
- Tomcat 内置访问控制:
- 对管理应用限制来源 IP(示例仅允许内网/跳板机):
- 在
webapps/manager/META-INF/context.xml与host-manager/META-INF/context.xml的< Context>中加入:< Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1,192.168.1.100"/>
- 在
- 对管理应用限制来源 IP(示例仅允许内网/跳板机):
- 可选 SELinux:保持启用并按需收紧策略,避免放宽网络权限给 Tomcat 进程。
三 服务与连接器加固
- 关闭或保护管理接口:
- 生产环境建议直接移除或禁用
webapps/manager与webapps/host-manager;如必须保留,务必启用强密码、IP 白名单与最小角色。
- 生产环境建议直接移除或禁用
- 关闭 AJP(未使用前置 Web 服务器时):在
server.xml注释 AJP 连接器:< !-- < Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
- 关闭热部署与自动加载:在
server.xml的< Host>中:unpackWARs="false" autoDeploy="false" reloadable="false"
- 保护关闭端口:
- 修改默认关闭指令并复杂化:
server.xml中< Server port="8005" shutdown="复杂随机字符串"> - 或彻底禁用:
port="-1"(注意将无法再通过内置机制远程关闭实例)。
- 修改默认关闭指令并复杂化:
- 隐藏版本信息:
- Connector 增加:
server="APP Srv 1.0"(自定义标识) - 修改
lib/catalina.jar中的org/apache/catalina/util/ServerInfo.properties,自定义server.info、server.number等字段,避免泄露版本与构建信息。
- Connector 增加:
- 连接器安全与性能:
- 使用 NIO2:
protocol="org.apache.coyote.http11.Http11Nio2Protocol" - 禁用 DNS 反向解析:
enableLookups="false" - 限制 POST 大小:
maxPostSize="10485760"(10MB,按需调整) - 建议启用线程池(Executor)并合理设置
maxThreads、acceptCount等参数。
- 使用 NIO2:
四 加密通信与证书管理
- 启用 HTTPS/TLS:
- 推荐将证书转换为 PKCS12 并配置到 Tomcat:
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out /srv/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" SSLEnabled="true" scheme="https" secure="true">< SSLHostConfig>< Certificate certificateKeystoreFile="conf/keystore.p12" type="RSA" certificateKeystorePassword="YourP12Pass"/>
< /SSLHostConfig>
< /Connector>
- 推荐将证书转换为 PKCS12 并配置到 Tomcat:
- 证书获取:可使用 Let’s Encrypt 获取免费证书,再转换为 PKCS12 导入 Tomcat。
- 建议将 HTTP 强制跳转至 HTTPS(可在 Nginx 或 Tomcat 的 Host 配置中实现)。
五 认证授权与日志审计
- 管理接口强认证与最小角色:
conf/tomcat-users.xml仅保留必要角色(如manager-gui、manager-script、manager-status、admin-gui、admin-script),并为账户设置强密码;未使用的默认账户应删除。
- 应用级访问控制:
- 在应用的
WEB-INF/web.xml中使用< security-constraint>、< auth-constraint>与< login-config>配置 BASIC/FORM 认证,按 URL 模式与角色精细化授权。
- 在应用的
- 日志与监控:
- 持续关注
logs/catalina.out、logs/localhost_access_log.*,并结合journalctl -u tomcat或系统审计工具进行审计与告警。
- 持续关注
- 安全基线自检:
- 禁止对外暴露 8005/8009/8080(按实际架构调整)、管理应用仅内网可达、版本信息已隐藏、无明文密码与弱口令、证书与密钥受控。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS中Tomcat的安全配置怎么做
本文地址: https://pptw.com/jishu/785086.html
