一、初始化配置:消除默认风险
rm -rf /opt/tomcat/webapps/*清除webapps目录下的所有默认应用(如ROOT、docs、examples),避免恶意代码通过默认路径部署。conf/tomcat-users.xml中的所有<user>和<role>配置(如manager-gui、admin-gui角色),防止未授权访问管理界面。conf/server.xml中的<Connector>标签,添加server="CustomServer/1.0"属性(如<Connector port="8080" protocol="HTTP/1.1" server="MyAppServer/1.0">),避免泄露Tomcat版本,降低针对性攻击风险。二、用户与端口管理:降低攻击面
tomcat)并赋予权限:useradd -r -m -d /opt/tomcat -s /sbin/nologin tomcat,然后修改Tomcat目录所有权:chown -R tomcat:tomcat /opt/tomcat,最后通过sudo -u tomcat ./startup.sh启动,避免以root权限运行。firewalld限制访问,仅允许必要端口(如8080、8443):sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent # HTTP sudo firewall-cmd --zone=public --add-port=8443/tcp --permanent # HTTPS sudo firewall-cmd --reload 如需更严格限制,可使用iptables仅允许可信IP访问:sudo iptables -A INPUT -p tcp --dport 8080 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 8080 -j DROP 三、应用程序安全:防范恶意部署
server.xml中的<Host>标签,设置autoDeploy="false"和unpackWARs="false",防止恶意WAR文件自动解压和部署:<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false"> webapps目录下的docs、examples、host-manager、manager等默认应用(可通过rm -rf /opt/tomcat/webapps/{docs,examples,host-manager,manager}命令),减少潜在攻击入口。四、SSL/TLS配置:加密数据传输
openssl req -newkey rsa:2048 -nodes -keyout /etc/pki/tls/private/tomcat.key -x509 -days 365 -out /etc/pki/tls/certs/tomcat.crt server.xml,添加以下<Connector>(替换证书路径和密码):<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/etc/pki/tls/certs/tomcat.crt" keystorePass="your_password" clientAuth="false" sslProtocol="TLS"/> 此配置启用HTTPS,强制数据加密传输。五、会话安全:防范会话劫持
context.xml(全局)或应用级META-INF/context.xml中,添加以下配置:<Context sessionCookieHttpOnly="true" sessionCookieSecure="true" sessionCookiePath="/yourapp"> HttpOnly防止XSS攻击窃取Cookie,Secure确保Cookie仅通过HTTPS传输。六、权限与目录管理:限制非法访问
chown -R tomcat:tomcat /opt/tomcat # 所有文件属主为tomcat chmod -R 755 /opt/tomcat/bin/*.sh # 限制脚本执行权限 chmod -R 750 /opt/tomcat/webapps # 限制Web应用目录访问 conf/web.xml,找到<servlet>标签(名称为default),添加listings="false":<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> </servlet> 防止Tomcat列出目录内容,避免敏感文件泄露。七、访问控制:精细化权限管理
webapps/manager/META-INF/context.xml(或host-manager),添加RemoteAddrValve限制IP访问(如仅允许本地或内网IP):<Context antiResourceLocking="false" privileged="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+" /> </Context> 生产环境中,建议将allow设置为可信IP段。WEB-INF/web.xml中,添加安全约束保护敏感资源(如/admin/*路径):<security-constraint> <web-resource-collection> <web-resource-name>Admin Area</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>Protected Area</realm-name> </login-config> <security-role> <role-name>admin</role-name> </security-role> 此配置要求访问/admin/*路径的用户必须具备admin角色。八、日志与更新:持续监控与修复
conf/logging.properties,调整日志级别(如org.apache.catalina.level=FINE),记录详细访问和操作日志,便于后续审计。