1. 用户与权限管理:最小权限原则
useradd -r -d /opt/tomcat -s /bin/false tomcat命令创建系统用户(如tomcat),避免以root身份运行Tomcat。通过chown -R tomcat:tomcat /opt/tomcat设置Tomcat目录所有权,chmod -R 750 /opt/tomcat限制目录权限(所有者可读写执行,组用户可读执行,其他用户无权限)。conf/tomcat-users.xml,仅保留必要角色(如manager-gui仅授权给运维人员),设置强密码(组合大小写字母、数字、特殊符号,长度≥8位)。可通过LockOutRealm(在server.xml的Engine节点添加)配置账户锁定:failureCount="5"(连续失败5次)、lockOutTime="300"(锁定5分钟),防止暴力破解。2. 网络与访问控制:限制暴露面
server.xml中的HTTP连接器端口从8080改为非标准端口(如8081),减少自动扫描工具的发现概率。若无需AJP协议(常用于与Apache/Nginx集成),注释或删除8009端口配置。firewalld(推荐)或iptables限制访问:firewall-cmd --zone=public --add-port=8081/tcp --permanent(添加端口)、firewall-cmd --reload(生效);或iptables -A INPUT -p tcp --dport 8081 -s 192.168.1.100 -j ACCEPT(仅允许指定IP访问),拒绝其他IP的连接。server.xml的Host节点添加<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+" />,仅允许特定IP段访问管理界面(如manager、host-manager)。3. 应用与组件安全:减少攻击面
webapps目录下的docs(文档)、examples(示例)、ROOT(默认页)、host-manager(主机管理)、manager(应用管理)等目录。若无需这些功能,彻底移除可避免潜在漏洞。server.xml中的Host节点,设置autoDeploy="false"(关闭自动部署)、deployOnStartup="false"(禁止启动时部署),防止恶意WAR文件自动部署。建议将应用部署到非默认目录(如/opt/tomcat/custom_webapps),并通过手动启动。server.xml中的AJP连接器配置(<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />),避免暴露AJP协议的潜在漏洞。4. 数据传输安全:加密通信
keytool生成证书(keytool -genkey -alias tomcat -keyalg RSA -keystore /etc/tomcat/keystore -validity 365),修改server.xml添加HTTPS连接器:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/etc/tomcat/keystore" keystorePass="your_password" clientAuth="false" sslProtocol="TLS" />。强制应用使用HTTPS(如在web.xml中添加<security-constraint>标签,要求敏感页面使用CONFIDENTIAL传输)。5. 日志与监控:及时发现异常
server.xml中的AccessLogValve,记录访问日志(directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common"),包含IP、时间、请求方法、URL、状态码等信息。启用应用日志(如log4j或java.util.logging),记录应用层异常(如SQL注入、XSS攻击尝试)。logs/catalina.out、logs/localhost_access_log.*.txt),使用grep命令查找异常关键词(如404错误过多、sql injection、xss)。部署入侵检测系统(IDS,如Snort)或SIEM(如Elastic SIEM),实时监控流量和日志,预警潜在攻击。6. 系统与Tomcat版本维护:修复已知漏洞
conf/)和应用数据(webapps/),避免数据丢失。yum update、Ubuntu的apt update),安装安全补丁。禁用不必要的系统服务(如FTP、Telnet),使用chkconfig或systemctl关闭未使用的服务。设置SSH密钥认证,禁用密码登录(修改/etc/ssh/sshd_config中的PasswordAuthentication no),防止SSH暴力破解。7. 应用层安全:强化应用自身防护
web.xml,添加<security-constraint>限制请求方法:<web-resource-collection><web-resource-name>Restricted Methods</web-resource-name><url-pattern>/*</url-pattern><http-method>PUT</http-method><http-method>DELETE</http-method><http-method>TRACE</http-method></web-resource-collection><auth-constraint /></security-constraint>,防止攻击者通过PUT/DELETE方法上传恶意文件或探测系统。conf/context.xml中添加<Context useHttpOnly="true">,防止JavaScript通过document.cookie访问会话Cookie,减少会话劫持风险。