centos下tomcat如何安全配置
小樊
38
2026-01-08 00:04:47
CentOS 下 Tomcat 安全配置清单
一 基础安全基线
- 运行身份与目录权限
- 创建专用系统用户与组(禁止 root 启动):groupadd tomcat;useradd -g tomcat tomcat。
- 规范目录与权限:将 Tomcat 安装至如 /srv/tomcat,执行 chown -R tomcat:tomcat /srv/tomcat;目录权限建议 750、文件 640,关键目录如 conf、bin 可设为 700,降低信息泄露与篡改风险。
- 服务化与最小权限启动
- 使用 systemd 托管,设置 User=tomcat、Group=tomcat、UMask=0007,并开启 Restart=always,确保异常退出自动拉起且以最小权限运行。
- 版本选择与校验
- 优先选择 Tomcat 9.0(JDK 11/17) 或 Tomcat 10.1(需 Jakarta EE 9+);从官网获取二进制包并用 sha512sum 校验完整性,避免第三方篡改版本。
二 网络与访问控制
- 防火墙精细化
- 仅开放必要端口(如 8080/8443/80/443):firewall-cmd --permanent --zone=public --add-port=8080/tcp;如需限制来源 IP,可使用 rich-rule:firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.100” port port=“8080” protocol=“tcp” accept’;变更后执行 firewall-cmd --reload。
- 反向代理与边界防护
- 建议前置 Nginx/Apache 统一暴露 80/443,Tomcat 仅监听 127.0.0.1:8080;Nginx 反向代理示例:location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }。
- SELinux 策略
- 保持 SELinux=enforcing,按需调整布尔值(如 httpd_can_network_connect)或为 tomcat 定制策略,避免放宽过度导致风险扩大。
三 最小化攻击面与组件加固
- 关闭或限制管理接口
- 生产环境建议直接移除 webapps/manager 与 webapps/host-manager;如确需保留,务必在 conf/tomcat-users.xml 使用强密码并仅授予必要角色,同时在 webapps/manager/META-INF/context.xml 通过 RemoteAddrValve 限制可访问 IP(如仅内网网段)。
- 关闭危险端口与功能
- 不使用 AJP 时注释 8009/AJP 连接器;如前端已有 Web 服务器,AJP 通常无需开启。
- 修改或禁用 8005/shutdown 端口与指令:将 shutdown 改为复杂随机字符串,或直接设为 port=“-1” 彻底禁用远程关闭能力。
- 关闭热部署与自动加载
- 在 server.xml 的 中设置 unpackWARs=“false”、autoDeploy=“false”、reloadable=“false”,避免被恶意 WAR 自动部署与代码热加载利用。
- 隐藏版本信息
- 在 server.xml 的 增加 server=“APP Srv1.0” 隐藏 HTTP 头版本;如需进一步隐藏错误页版本号,可修改 lib/catalina.jar 中 org/apache/catalina/util/ServerInfo.properties(server.info/server.number)后重启。
四 加密传输与证书部署
- 启用 HTTPS
- 使用 Let’s Encrypt 获取证书,转换为 PKCS12 并配置到 Tomcat:
- 转换命令:openssl pkcs12 -export -in /etc/letsencrypt/live/example.com/fullchain.pem -inkey /etc/letsencrypt/live/example.com/privkey.pem -out /srv/tomcat/conf/keystore.p12 -name tomcat -CAfile /etc/letsencrypt/live/example.com/chain.pem -caname root -password pass:密钥密码
- server.xml 关键片段:
- 对外服务优先通过 Nginx/Apache 终止 TLS,证书与加密套件管理更集中、可运维性更强。
五 运行期防护与监控
- 资源与连接限制
- 在 server.xml 配置线程池与队列:;Connector 中设置 maxThreads、acceptCount、maxPostSize 等,抑制慢速攻击与资源耗尽。
- 抗 DDoS 与异常流量治理
- 在 Tomcat 层限制并发与队列;在 firewalld/iptables 层限制单 IP 连接数与速率;启用 WAF(如 ModSecurity)、接入 CDN/负载均衡 分散流量;持续监控 access/catalina.out 与线程、连接指标,异常时自动告警与封禁。
- JVM 与 GC 策略
- 通过环境变量设置堆与 GC(示例):JAVA_OPTS=“-Xms512m -Xmx1024m -XX:+UseG1GC”,并结合实例内存规格与业务峰值调优,避免 Full GC 抖动与 OOM。