You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下Wildfly 11如何配置仅响应指定IP/子网的HTTP请求?

配置Wildfly 11仅响应特定IP/子网的HTTP请求

你之前尝试的interfaces配置确实只是用来定义Wildfly绑定的网络接口(比如让服务器监听0.0.0.0还是某个特定网卡IP),没法过滤请求的来源IP。要实现这个需求,咱们得用Wildfly内置的Undertow web服务器的请求过滤功能,具体来说是RemoteAddrHandler过滤器,下面是详细的配置步骤:

第一步:添加IP过滤规则到Undertow过滤器

打开你的standalone.xml配置文件,找到Undertow子系统的配置块(大概长这样):

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https"/>
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <filter-ref name="server-header"/>
            <filter-ref name="x-powered-by-header"/>
        </host>
    </server>
    <servlet-container name="default">
        <jsp-config/>
        <websockets/>
    </servlet-container>
    <handlers>
        <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    </handlers>
    <filters>
        <response-header name="server-header" header-name="Server" header-value="WildFly/11"/>
        <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
    </filters>
</subsystem>

在<filters>标签内部,添加一个新的过滤器,用来指定允许访问的IP或子网:

<filter name="allow-specific-ips" class-name="io.undertow.server.handlers.remoteaddr.RemoteAddrHandler" module="io.undertow.core">
    <!-- 允许单个IP和CIDR格式的子网,多个用逗号分隔 -->
    <param name="allow" value="192.168.1.10,10.0.0.0/24"/>
    <!-- 可选:自定义拒绝访问时的提示信息,默认返回403 Forbidden -->
    <param name="rejectionReason" value="Access Denied: Your IP is not whitelisted"/>
</filter>

如果需要拒绝特定IP/子网(而不是允许),可以把allow参数换成deny,比如:

<param name="deny" value="192.168.2.0/24,172.16.0.5"/>

第二步:将过滤器应用到目标范围

接下来要把这个过滤器绑定到你想要控制的范围,可以是整个主机(所有web应用),也可以是特定路径:

选项1:应用到整个默认主机(所有应用)

找到<host name="default-host" alias="localhost">标签,在内部添加过滤器引用:

<host name="default-host" alias="localhost">
    <location name="/" handler="welcome-content"/>
    <filter-ref name="server-header"/>
    <filter-ref name="x-powered-by-header"/>
    <!-- 添加这行,绑定IP过滤规则 -->
    <filter-ref name="allow-specific-ips"/>
</host>

选项2:应用到特定路径(比如仅限制/admin路径)

如果只想过滤某个特定路径,比如/admin,可以在<host>标签下添加一个新的<location>块:

<host name="default-host" alias="localhost">
    <location name="/" handler="welcome-content"/>
    <location name="/admin" handler="admin-handler">
        <!-- 仅对/admin路径应用IP过滤 -->
        <filter-ref name="allow-specific-ips"/>
    </location>
    <filter-ref name="server-header"/>
    <filter-ref name="x-powered-by-header"/>
</host>

注意:这里的admin-handler需要你提前在<handlers>标签中定义,对应你的admin应用的路径。

第三步:(可选)处理反向代理场景下的真实客户端IP

如果你的Wildfly前面部署了反向代理(比如Nginx、Apache),默认情况下Wildfly拿到的请求来源IP是代理服务器的IP,这时候需要先配置Undertow识别真实客户端IP:

  1. 在<filters>标签中添加代理头部处理过滤器:
<filter name="proxy-headers" class-name="io.undertow.server.handlers.ProxyPeerAddressHandler" module="io.undertow.core"/>
  1. 在<host>标签中,先添加这个代理过滤器,再添加IP过滤过滤器(顺序很重要):
<filter-ref name="proxy-headers"/>
<filter-ref name="allow-specific-ips"/>

这样Wildfly就能正确获取到客户端的真实IP,再进行过滤。

最后:重启Wildfly生效

配置完成后,重启Wildfly服务器,测试一下:

  • 用允许的IP访问:正常响应
  • 用未允许的IP访问:返回403 Forbidden,并且看到你自定义的拒绝信息(如果配置了的话)

内容的提问来源于stack exchange,提问作者brgsousa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:09:37