一、初始化配置:消除默认风险
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),记录详细访问和操作日志,便于后续审计。