我们正在DMZ公司的一个独立的LAMP平台上部署一个简单的通讯webapp。 关于是否应该从DMZ中删除MySQL服务器并将其放入内部networking,有一些讨论。
服务器位于防火墙后面,只打开端口80,MySql将连接到非标准端口。 数据库包含客户电子邮件地址。
这是一个安全的设置(或足够安全)? 将数据放置在第二个防火墙后面会更安全吗? (我更像是一个开发人员,所以我没有真正意识到这里的所有安全方面 – 有人可以启发我!)
更新只是为了澄清,并进一步评论这里是我们目前的设置:
internet – firewall1 – http服务器 – firewall2 – appserver – firewall3 – 企业资源
这个新的应用程序应该完全在防火墙1和防火墙2之间的DMZ内。我们正在讨论把MySQL服务器拉到第二个防火墙后面。
为了允许从DMZ到内部LAN的连接违背了DMZ的概念。
将MySQL绑定到本地主机将比在其他地方放置MySQL安全。 如果数据盗窃是您的担忧,那么您应该假设这两台机器是分开的,而且Apache部分已经被破坏,那么存储在受损机器上的MySQL连接细节可能会被攻击者重新利用来读取数据。
编辑添加:
即使按照您所描述的方式使用双跳DMZ,您也不会从分离服务中获得任何真正的安全优势,同时也会使设置更加复杂。 您甚至有可能通过增加机器数量并通过线路发送数据来增加攻击面,否则这些数据会在回送中。
我会把数据库放在内部networking(在第二个防火墙之后)。
这极大地减less了数据库的攻击面,因为您将第二个防火墙(DMZ到内部)的防火墙规则设置为仅允许来自Web服务器的端口XXXX(数据库端口)上的连接。
所以,即使你的DMZ遭到破坏,你的数据库仍然有保护。
我认为MySQL的部分已经被充分覆盖,我当然同意已经说过的话。 我只想指出,作为第一步,你应该找出你的世界的法律要求是什么,因为它们差异很大。 很可能会决定你的configuration。
数据库服务器应该从任何外部互联网连接防火墙,所以只有应用程序服务器(加上pipe理所需的任何东西)可以连接到数据库。 如果它与应用程序服务器是分开的 – 这样做有多种原因 – 然后适当地设置防火墙和安全性。
妥协应用程序服务器可能会使应用程序的login凭据可供数据库攻击者使用,因此某些级别的数据库或应用程序级别的安全性可能会有所帮助。 例如,你可以按照以下方式做一些责任分离:
设置数据库对象所有权,以便应用程序不能直接读取客户数据,但必须通过存储过程。 完整的信用卡号码可以只写 – 一个sproc可以让他们更新,但只读取“更新详细信息”屏幕的最后4位数字。 任何需要CC编号的东西都可能位于不同的服务器上,并通过不同的帐户连接。
如果财务pipe理是在一个物理上不同的服务器上进行的(也许是从公共互联网上防火的),那么你最多可以发出虚假命令或类似的命令,而不会实际上损害服务器。 获取信用卡信息需要妥协两台机器(应用程序服务器和数据库服务器或财务服务器)。 您还将不得不从受感染的Web服务器发起攻击。 由于攻击者不能同时损害两台机器,因此这会给您一个更长的时间来检测活动。
数据库和金融服务器机器也与networking服务器有一组非常特定的交互。 这可以让你假设大多数非应用程序相关的活动都是可疑的,并且在这些机器上设置了一个超级偏执狂configuration的IDS。
让我们来评估这两种情况,看看哪一种更好。 我想你已经configurationMySQL帐户只有读/写访问特定于应用程序的表。
我会用zeroday攻击来攻击web服务器。 我现在可以通过pipe理员访问Web服务器,并可以完全访问本地文件系统。 我也可以发送来自这个networking服务器的networking通信。 我已经获得访问应用程序数据库所需的凭据。
如果数据库服务器位于同一台计算机上,那么现在我也可以直接和完全访问数据库。 我可以读写数据库中的所有表,创build新的表并监听与此数据库服务器的所有其他通信。 评估:这是最糟糕的情况。 应用程序数据库和所有其他数据库现在受到影响。
如果数据库服务器位于同一DMZ的不同机器上,则可以与数据库服务器完全通信。 我现在可以使用Windows文件共享服务中的漏洞利用来获得pipe理员对此服务器的访问权限。 评估:我可以使用Web应用程序帐户访问数据库服务器,但这只能给我有限的权利。 我需要一个不同的漏洞利用来获得对数据库服务器的完全访问权限。 我可以利用数据库服务器上可用的任何服务。
如果数据库服务器位于完全不同的networking中,则只能访问数据库端口。 任何其他通信都由防火墙过滤。 这意味着我只能在数据库程序中使用漏洞获得pipe理员访问权限。 如果我获得pipe理员访问权限,则整个内部networking都会受到影响。 评估:我可以使用Web应用程序帐户访问数据库服务器,但这只能给我有限的权利。 我只能利用数据库端口来获得完全访问权限。 如果我这样做,数据库服务器的networking会受到影响。
如果机器受到威胁,那么MySQL服务器是否在DMZ中并不重要。 用于访问MySQL数据库的证书将位于Web应用程序代码中,DMZ中的机器将不得不访问该数据库,因此防火墙在这种情况下不会保证数据安全。
一个更好的devise可能是让Web应用程序写入一个队列,然后将其拖入受保护networking中的MySQL数据库中。 这将限制客户数据暴露在队列中。 只是在这里大声思考。 这可能不适用于您的特定应用程序。
您不得允许任何来自DMZ的stream量进入内部networking。 这是一个非常糟糕的主意! 如果有人可以控制您的networking应用dmz,那么可以打开到您的内部networking中的服务器的连接,并获得对整个networking的全面控制。 如果你想从你的networking分离Web应用程序,我build议你创build另一个DMZ并把你的数据库放在那里。 从您的networking服务器只允许其他DMZ我的stream量。 我看到一些可怕的防火墙devise,这是其中之一。
HåkanWinther高级DBA和安全公司的前任老板。