1. 配置Tomcat内置用户与角色
Tomcat通过tomcat-users.xml文件(路径:/etc/tomcat9/tomcat-users.xml,Debian下Tomcat 9为例)管理用户和角色。需添加角色定义及对应用户,并分配权限。例如:
<tomcat-users>
<!-- 定义角色 -->
<role rolename="manager-gui"/> <!-- 管理控制台GUI访问权限 -->
<role rolename="admin-gui"/> <!-- 管理员功能访问权限 -->
<!-- 创建用户并分配角色 -->
<user username="admin" password="SecurePassword123!" roles="manager-gui,admin-gui"/>
</tomcat-users>
保存后需重启Tomcat使配置生效:sudo systemctl restart tomcat9。
2. 配置Web应用安全约束
通过web.xml文件(路径:/var/lib/tomcat9/webapps/your_app/WEB-INF/web.xml,your_app为目标应用)限制对特定路径的访问。例如,限制/admin/*路径仅允许admin-gui角色访问:
<web-app>
<!-- 定义受保护资源 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin Area</web-resource-name>
<url-pattern>/admin/*</url-pattern> <!-- 受保护的URL模式 -->
</web-resource-collection>
<!-- 指定允许访问的角色 -->
<auth-constraint>
<role-name>admin-gui</role-name>
</auth-constraint>
</security-constraint>
<!-- 登录配置(选择认证方式) -->
<login-config>
<auth-method>BASIC</auth-method> <!-- 基础认证(简单但不安全,生产环境建议用FORM或DIGEST) -->
<realm-name>YourAppRealm</realm-name> <!-- 认证领域名称 -->
</login-config>
<!-- 定义角色引用 -->
<security-role>
<role-name>admin-gui</role-name>
</security-role>
</web-app>
重启Tomcat后,访问/admin/*路径将触发认证,仅具备admin-gui角色的用户可通过。
3. 通过防火墙限制访问IP
使用ufw(Uncomplicated Firewall)限制仅特定IP地址能访问Tomcat默认端口(8080)。例如,允许IP192.168.1.100访问:
sudo ufw allow from 192.168.1.100 to any port 8080 # 允许指定IP
sudo ufw deny 8080/tcp # 拒绝其他所有IP
sudo ufw enable # 启用防火墙
此配置可有效防止未经授权的IP访问Tomcat服务。
4. 配置Tomcat IP限制阀
通过server.xml文件(路径:/etc/tomcat9/server.xml)添加RemoteAddrValve,基于IP地址限制访问。例如,仅允许本地IP(127.0.0.1)和局域网IP(192.168.1.0/24)访问:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- IP限制阀 -->
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|192\.168\.1\.\d+" <!-- 正则匹配允许的IP -->
deny=".*"/> <!-- 拒绝其他所有IP -->
</Host>
重启Tomcat后,不符合IP规则的请求将被拒绝。
5. 使用反向代理增强访问控制
通过Nginx或Apache作为反向代理,整合Tomcat并添加额外认证层。以Nginx为例:
sudo apt install nginx/etc/nginx/sites-available/tomcat):server {
listen 80;
server_name your_domain.com; # 替换为域名或IP
location / {
proxy_pass http://localhost:8080; # 转发到Tomcat
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 基础认证(需创建密码文件)
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
# IP限制
allow 192.168.1.100;
deny all;
}
}
/etc/nginx/.htpasswd):sudo htpasswd -c /etc/nginx/.htpasswd your_username(输入密码)sudo ln -s /etc/nginx/sites-available/tomcat /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx
此时,访问Tomcat需通过Nginx认证,且仅允许指定IP访问。
6. 配置SSL/TLS加密传输
为防止数据泄露,建议启用HTTPS。以自签名证书为例(生产环境建议使用Let’s Encrypt免费证书):
sudo mkdir -p /etc/ssl/private/tomcat
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/tomcat.key \
-x509 -days 365 -out /etc/ssl/certs/tomcat.crt
server.xml(取消注释并修改SSL连接器):<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/etc/ssl/private/tomcat.key"
certificateKeystorePassword="your_keystore_password"
type="RSA"/>
</SSLHostConfig>
</Connector>
sudo systemctl restart tomcat9https://your_domain.com:8443提供加密访问。