限制对内部网络的服务但负载均衡器?

时间:2014-06-27 14:11:45

标签: c# asp.net servicestack servicestack-bsd

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

问题在于我们使用负载平衡,并且受限制的服务可供所有人公开访问,因为调用API的IP始终是负载均衡器的IP,因此也是内部IP。

有没有办法绕过这一点,以便内部服务仅限于内部IP,除了负载均衡器的IP?

1 个答案:

答案 0 :(得分:3)

我还没有看到内置的方式See [Restrict] tests来限制基于特定的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。