REST API 的 IP 过滤器在 Ant Media Server (Tomcat 10) 的负载均衡器后面不起作用

REST API 的 IP 过滤器在 Ant Media Server (Tomcat 10) 的负载均衡器后面不起作用

我正在使用 Ant Media Server,并且我有一个负载均衡器和在负载均衡器后面运行的 Ant Media Server 实例。我想通过在 IP 过滤器中将我的 IP 地址列入白名单来访问 Ant Media Server REST API。但是这行不通。只有将 0.0.0.0/0 CIDR 块列入白名单时,它才有效。

步骤如下

  1. 在负载均衡器后面部署服务器
  2. 将你的 IP 列入 Rest API 的 IP 过滤器白名单
  3. 调用任何 Rest API

预期行为 Rest API 调用应按预期工作

实际行为 Rest API 调用不起作用,并且出现 IP 不允许错误(403)

答案1

出于安全原因,这是公共 IP 地址的预期行为。让我为您提供全面的解决方案。

首先,让我们深入探讨一下为什么这是公共 IP 地址的预期行为。

为什么这是一个问题

  • 当 REST 请求发送到负载均衡器时,负载均衡器会将该请求转发到后端服务器之一。
  • 负载均衡器转发带有标头的请求X-Forwarded-For,并附加原始客户端的 IP 地址。
  • Ant Media Server 利用远程 IP 阀门,它接受本地网络地址作为可信地址(请参阅internalProxies链接中的部分)。未经适当验证而接受此范围之外的地址可能会带来安全漏洞。
  • 当负载平衡器和 Ant Media Servers 不在同一个私有网络中时,似乎就会出现挑战,从而导致您遇到的问题。

解决方案:

internalProxies好消息是,远程 IP 阀门提供了修改和的灵活性trustedProxies

trustedProxies:这是一个正则表达式(使用java.util.regex),代理的 IP 地址必须匹配该正则表达式才能被视为受信任的代理。列出的受信任代理remoteIpHeader将被视为可靠,并将出现在proxiesHeader值中。如果未指定,则不会信任任何代理。

我正在利用trustedProxies这个案例。以下是我处理它的方法:

  1. 我已经设置了一个具有公共 IP 地址的实例:145.239.135.94。我在其上安装了 Nginx,以将传入请求重定向到 OVH36 测试服务器。在此设置中,Nginx 实例和 OVH36 测试服务器都具有公共地址,并且位于不同的区域。
  2. 我导航到/usr/local/antmedia/conf/jee-container.xml并找到了包含的行<bean id="valve.access" class="org.apache.catalina.valves.RemoteIpValve" />
  3. 我修改了该行,如下所示,特别注意包含负载均衡器的地址trustedProxies
<bean id="valve.access" class="org.apache.catalina.valves.RemoteIpValve">
  <property name="trustedProxies" value="145.239.135.94"/>
</bean>
  1. 然后,我重新启动了 Ant Media Server:
sudo service antmedia restart
  1. 随后,我将我的公共地址添加到 REST IP 过滤器中: 在此处输入图片描述

  2. 之后,我在本地终端使用 curl 向负载均衡器发出请求:

curl http://145.239.135.94:5080/WebRTCAppEE/rest/v2/broadcasts/count 

结果:

{"number":1}

服务器返回预期结果,表明配置成功。

我希望此解决方案对您的设置也有效。请尝试一下并告诉我效果如何。如果您有任何问题或需要进一步帮助,请随时联系我们。

文档

谨致问候,Oguz

相关内容