CentOS上Tomcat安全配置指南
/opt/tomcat/webapps(或自定义安装路径下的webapps)目录下的所有默认应用(如docs、examples、ROOT等),防止恶意代码通过默认应用部署。conf/tomcat-users.xml中的所有用户和角色定义,避免未授权用户通过默认账户访问管理界面。tomcat用户及同组,用于运行Tomcat服务,限制其对系统其他目录的访问权限。sudo adduser --system --no-create-home --group tomcat
sudo chown -R tomcat:tomcat /opt/tomcat # 假设Tomcat安装在/opt/tomcat
conf/tomcat-users.xml,添加必要的角色(如admin-gui、manager-gui)和用户,仅授予最小必要权限。<tomcat-users>
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="StrongPassword123!" roles="admin-gui,manager-gui"/>
</tomcat-users>
RemoteAddrValve限制管理界面的访问IP,仅允许可信IP(如公司内网、运维人员IP)访问。<!-- 编辑/conf/context.xml(全局)或特定应用的META-INF/context.xml -->
<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+|127\.0\.0\.1"/>
</Context>
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 Admin Area</realm-name>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/pki/tls/private/tomcat.key \
-x509 -days 365 -out /etc/pki/tls/certs/tomcat.crt
conf/server.xml,添加HTTPS连接器(端口8443),启用SSL并指定证书路径。<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/etc/pki/tls/certs/tomcat.crt"
keystorePass="YourCertPassword"
clientAuth="false"/>
firewalld开放Tomcat端口(8080/HTTP、8443/HTTPS),并限制仅允许可信IP访问。sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
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
sudo chcon -R -t httpd_sys_content_t /opt/tomcat/webapps
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs
sudo setsebool -P httpd_can_network_connect 1 # 允许Tomcat发起网络连接(如数据库访问)
tomcat用户身份运行,编辑/etc/systemd/system/tomcat.service(或/usr/lib/systemd/system/tomcat.service),添加以下内容:[Service]
User=tomcat
Group=tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
重新加载systemd并重启Tomcat:sudo systemctl daemon-reload
sudo systemctl restart tomcat
conf/server.xml,禁用autoDeploy和unpackWARs,防止恶意WAR文件自动部署。<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false">
conf/logging.properties,增加访问日志和错误日志的详细程度,便于审计异常行为。handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
logrotate工具定期归档日志,检查catalina.out、localhost_access_log.*.txt等日志中的异常请求(如大量404、403错误)。