【问题标题】:Publically exposing a WCF service which is behind firewall公开暴露防火墙后面的 WCF 服务
【发布时间】:2014-11-28 03:03:51
【问题描述】:

环境

考虑以下 Web 应用程序的生产环境设置:

最终用户 --Internet--> DMZ 中的 Web 服务器 --防火墙--> 托管在应用服务器上的 WCF --> DB 服务器

约束:

还要考虑到,从基础架构的角度来看,我们无法更改任何内容。例如,打开端口、更改任何防火墙设置等。

问题:

我们希望将托管在应用服务器上的 WCF 公开给外部客户端。我们正在尝试通过以下方式解决这个问题:

最终用户 --Internet--> DMZ 中的路由器 WCF --防火墙--> 托管在应用服务器上的 WCF --> DB 服务器

请注意,我们无法从需要托管 WCF 的 DMZ 环境建立数据库连接,以便外部客户端可以使用它。我们开发了一个“Router WCF”,它将所有消息传递到内部 WCF,反之亦然。

此解决方案增加了序列化和反序列化数据的不必要开销。必须有更好和正确的方法来做到这一点。我们期待社会各界的指导。谢谢。

【问题讨论】:

  • 打开防火墙端口?还是我缺少要求
  • 请不要只求我们为您解决问题。向我们展示如何尝试自己解决问题,然后向我们确切地展示结果是什么,并告诉我们您为什么觉得它不起作用。请参阅“What Have You Tried?”了解您真正需要阅读的优秀文章。
  • 先生。桑德斯,我感谢你对教育我的热情。我从来不知道在提问之前“尝试”某事是要求之一(我仍然不明白为什么)。这似乎与“为什么要重新发明轮子”的说法相矛盾。我认为这就是像 stackoverflow 这样的网站所擅长的。 “分享知识”。但是,在这种情况下,我提到了我们正在考虑如何解决这个问题,并希望人们在我花费数小时的努力做一些不正确的事情之前验证我的想法是否正确。

标签: wcf security firewall


【解决方案1】:

在 DMZ 中,参考书目告诉您:始终创建中间层。这意味着互联网上的另一台机器将成为连接点,并将连接代理回 WCF。

这台机器是你似乎提到的网络服务器,它很愚蠢,没有数据,并且(作为一个适当的 DMZ)在它和它所服务的所有机器(WCF 和其他机器)之间有防火墙,只允许此类机器上使用的 IP:PORTS。

在这种情况下,通常使用 URL 重写规则的公共 Web 服务器上的 Apache(即,如果是 /x/y 则将其发送到 servera.internal.com:9900 - 如果是 /x/z 则将其发送到serverb.internal.com:9901 etc...) 就足够了,当然还有很多解决方案。

看来您正在这样做,为什么说这不是正确的解决方案?

DMZ 作为保护机制可能看起来有点过时(我同意),但是当您的 WCF 机器之类的服务器打开了数十个端口时,您必须考虑一下,并且您想降低面向 Web 的随机端口的风险机器,一个巨大的攻击面。现在一切都可以在打开几个端口的情况下工作,所以做这一切只是为了转发一个 TCP 端口似乎很“愚蠢”。但它仍然很有价值,因为(例如)如果 DMZ 中的 Web 服务器后面的服务器无法访问 Internet,即使 WCF 受到威胁,攻击者也无法使用自己的反向 shell 部署现在称为 APT(昨天的后门) )。当 DMZ 提供与外部世界的连接时,攻击者“不会从 WCF 看到”他自己的计算机。

【讨论】:

  • 我已经编辑了我的问题,请看看它现在对你是否有意义。感谢您的帮助。
猜你喜欢
  • 2022-10-26
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2022-01-20
  • 2011-02-01
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
相关资源
最近更新 更多