限制服务到内部网络BUT负载均衡器

本文关键字:BUT 负载 均衡器 网络 内部 制服 服务 | 更新日期: 2023-09-27 18:10:28

在我们基于ServiceStack (v3)的API中,我们有一些仅供内部使用的服务,因此我们在所有内部请求dto上放置了[Restrict(InternalOnly = true)]属性。

问题是我们使用负载平衡,并且受限制的服务可以被所有人公开访问,因为调用API的IP总是负载平衡器的IP,因此是内部IP。

是否有任何方法来规避这一点,使内部服务仅限于内部IP除了负载均衡器的IP?

限制服务到内部网络BUT负载均衡器

我还没有看到一个内置的方式(参见[Restrict]测试)来限制基于特定ip。但是,您可以使用自定义属性轻松地过滤请求:

public class AllowLocalExcludingLBAttribute : RequestFilterAttribute
{
    public override void Execute(IHttpRequest req, IHttpResponse res, object requestDto)
    {
        // If the request is not local or it belongs to the load balancer then throw an exception
        if(!req.IsLocal || req.RemoteIp == "10.0.0.1")
            throw new HttpError(System.Net.HttpStatusCode.Forbidden, "403", "Service can only be accessed internally");
    }
}

然后您只需在您的服务或操作方法中添加[AllowLocalExcludingLB],否则您将使用[Restrict]属性或将其与其他限制一起使用。10.0.0.1替换为您的负载均衡器IP