【问题标题】:How to hide http server, restful http service and websocket server behind a single IP and Port如何在单个 IP 和端口后面隐藏 http 服务器、restful http 服务和 websocket 服务器
【发布时间】:2016-03-23 06:56:39
【问题描述】:

现状

服务器开放了三个端口:

  1. 用于交付 HTML5 内容的网络服务器(使用来自 System.NetHttpListener
  2. 用于提供请求/响应接口的 RESTful 服务(使用来自 WCFwsHttpBinding
  3. 一个WebSocket服务器(使用AlchemyWebSocket Server)提供发布/订阅接口

由于服务器将托管在 Windows 7/10 操作系统上,来自 .NET 4.5WebSocket 不会有太大帮助,因为完整的框架并未针对 Windows 7/10 实现。我可能错了。

预期情况

应该只公开一个端口,即 SSL/TLS 上的 Web 服务器端口。

我们可以将 Web 服务器和 RESTful 接口合二为一,不使用WCF,而是通过实现嵌入在 Web 服务器中的 RESTful 接口。但这将需要进行重大的代码更改(在服务器端和客户端)。我们希望通过一种涉及最少代码更改的方法来解决这种情况。

问题

如何安全地将这三台服务器隐藏在一个暴露的网络服务器端口后面? 从安全角度来看,实现这种情况的一般最佳实践是什么?

【问题讨论】:

    标签: .net ssl proxy router tls1.2


    【解决方案1】:

    通过 HTTP/S 请求使用 RESTful 应用程序。您的网络服务器可能会侦听标准端口 80 或 8080 之一以服务处理请求。

    如果“隐藏”是指限制/阻止与这些端口的连接,您可以:

    1) 通过防火墙规则将此端口的连接限制为已知 IP 地址列表。在 Linux 上,使用 iptables 实用程序是标准的。

    2) 要使用上述方法,连接客户端需要固定 IP 地址才能工作。如果您的 ISP 没有分配静态 IP 地址,或者您的客户端需要从其他网络连接,则此方法将无法始终如一地工作。

    3) 为了解决上述问题,您可以要求客户端在使用您的 API 之前先通过 VPN 隧道进行身份验证。

    不过,老实说,我不推荐上述方法,除非您试图隐藏(比如说)僵尸网络 API。比隐藏服务器端口更重要的是保护业务资源,方法是编写自定义身份验证层逻辑来授予客户端访问您的 API 的权限。 auth 层可以使用基于令牌的方法(例如OAuth)、公钥-私钥或基于会话的登录来实现。与防火墙规则和服务器配置相比,这为您提供了更大的灵活性,并且是 RESTful 应用程序设计中的“一般最佳实践”。

    正如您所提到的,您必须强制使用 HTTPS 来加密客户端-服务器数据。

    编辑: 由于您使用的是单个服务器,因此您的端口 (80/8080) 将绑定到单个静态 IP 地址。 p>

    【讨论】:

    • 我希望我的意思不是要实现您试图提供的解决方案。我想要实现的是在单个 IP 和端口上托管三台服务器,而无需更改任何代码,例如我认为我可以为这三台服务器使用 URL,并有一种路由器在内部将不同的 URL 请求路由到特定的 IP 端口服务器。希望这可以帮助您理解我的问题。无论如何,谢谢。
    • 在这种情况下,听起来您想要类似于 reverse proxy 的东西。此设置中的反向代理服务器可以通过单个 IP 地址识别,并将客户端请求路由到内部私有服务器。我不确定这是否是您所需要的。更多细节会有所帮助。
    • 这是一篇描述上述内容的文章,使用 Apache:iws.io/…
    • bw_0x7c6 :是的,对,这就是我想要实现的目标。通过 Apache 反向代理服务器,我将尝试这个,并让每个人都知道是否使用这个解决方案我能够实现它。谢谢!
    • 不客气。 :) 如果您需要帮助,请告诉我。
    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多