2014-10-03 75 views
0

环境公开地暴露WCF服务,这是在防火墙后面

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

终端用户--Internet - >网络服务器在DMZ - 防火墙 - > WCF托管应用程序服务器 - >数据库服务器

约束:

也要考虑到我们不能从基础设施的角度来改变任何东西。例如,开放的端口,更改任何防火墙设置等

问题:

我们要公开的WCF,其托管的应用程序服务器上,以外部客户。我们正在努力解决这个问题如下:

终端用户--Internet - >路由器WCF在DMZ - 防火墙 - > WCF托管应用程序服务器 - >数据库服务器

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

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

+0

打开防火墙的端口?或者我错过了一个要求 – 2014-10-03 02:25:55

+0

请不要只是要求我们为您解决问题。告诉我们你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“[您尝试过什么?](http://whathaveyoutried.com/)”,以获得一篇您最近需要阅读的优秀文章。 – 2014-10-03 02:53:39

+0

桑德斯先生,我感谢你的热情教育我。我从来不知道它是要求之一(仍然不明白为什么)在提问之前“尝试”某些东西。这似乎与“为什么要重新发明轮子”相矛盾。我认为这是什么网站像stackoverflow擅长。 “分享知识”。然而,在这种情况下,我已经提到了我们如何解决这个问题,并希望人们在我花费数小时的努力去做某些不正确的事情之前验证我的想法是否正确。 – 2014-10-03 14:53:29

回答

0

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

机器是你似乎提到的网络服务器,那是愚蠢的,没有数据,并且(作为一个合适的DMZ)在它和所有服务器之间有一个防火墙(WCF和其他服务器)只有IP:这种机器上使用的端口。

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

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

DMZ可能看起来有点过时(我同意),但是当你的WCF机器这样的服务器有几十个端口打开,并且你想降低面向网络的机器上随机端口的风险时,一个巨大的攻击面。现在所有的东西都可以在打开几个端口的情况下工作,所以看起来“愚蠢”的做所有这些只是为了转发一个TCP端口。但是它仍然很有价值,例如,如果DMZ中Web服务器后面的服务器没有互联网访问,即使WCF受到攻击,攻击者也不能使用自己的反向shell来部署它现在称为APT的东西(昨天的后门)。由于DMZ提供了与外部世界的连接,攻击者从WCF“看不到”他自己的机器。

+0

我编辑了我的问题,请看看它现在对你是否有意义。感谢您的帮助。 – 2014-10-03 15:16:51