在 Tomcat 中限制 IP 访问,常用有 RemoteAddrValve(推荐)、防火墙、context 级别限制 等方式。下面按常见场景说明。
Tomcat 自带 RemoteAddrValve,可以在 server.xml / context.xml / web.xml 中配置。
修改 conf/server.xml,在 <Host> 内添加:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.1.*|127.0.0.1"
deny=""
denyStatus="403" />
allow:允许访问的 IP(支持正则)deny:拒绝的 IP<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="10.0.0.5|192.168.2.*"
denyStatus="403" />
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.*.*|127.0.0.1" />
⚠️
allow和deny支持*和正则表达式
在 META-INF/context.xml 或 conf/Catalina/localhost/xxx.xml:
<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.1.100" />
</Context>
<security-constraint>
<web-resource-collection>
<web-resource-name>restricted</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
⚠️ 这种方式不能直接限制 IP,一般配合登录使用。
iptables -A INPUT -p tcp --dport 8080 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="8080" protocol="tcp" accept'
如果 Tomcat 前面有 Nginx:
location / {
allow 192.168.1.0/24;
deny all;
proxy_pass http://localhost:8080;
}
Real IP 问题
RemoteIpValveTomcat 9+
调试
catalina.out403<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="203.0.113.10|203.0.113.11" />
如果你愿意,可以告诉我:
我可以给你精确配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。