我正在将一个 Web 应用程序(在 LAMP 上运行)从单个主机转换为在 DMZ 中面向公众的服务器上运行 php/apache 应用程序的配置。该应用程序连接到位于 DMZ 后面的专用网络中的 mysql。我的主要标准是将所有用户数据(在数据库或用户上传的文件中)完全排除在 DMZ 之外,并且只允许通过 ACL 访问它。即通过网络和身份验证/访问将应用程序层与数据层隔离。
我已经用 mysql 很好地实现了这种隔离,但我还没有想出任何关于如何从 Web 服务器访问文件服务器上的文件存储的好主意。我目前已在安装在 Web 服务器上的 NFS 导出上运行它,但这会使文件服务器及其所有数据对任何有权访问 Web 服务器(基本上)而无需身份验证的人开放。
我意识到任何严肃的解决方案都可能涉及大量的开发时间,我准备这样做。如果需要,我也准备花一些钱购买现成的解决方案以正确完成工作。我觉得我在这里忽略了一些显而易见的东西。
答案1
您确实无法同时实现这两种方式:如果您想从 Web 服务器访问文件服务器上的资源,则需要为其打开防火墙漏洞。
为 NFS 和 MySQL 打开防火墙漏洞实际上没有区别——如果有人闯入您的 Web 服务器,他们就可以获取您的 MySQL 数据库(或者至少获取凭据并访问用户可以访问的任何数据库)。同样,如果他们闯入 Web 服务器,他们可以访问 Web 服务器有权访问的任何内容,但要遵守您对 NFS 导出设置的任何限制。
在这种情况下,您能做的最好的事情就是将 NFS 导出限制到文件服务器的最小实际窗口(保护您免受 Web 服务器的攻击),并对 NFS 客户端使用强身份验证,例如通过 Kerberos(保护您免受 DMZ 的附带攻击)。这里还有一些带有标签的问题网络文件系统其中讨论了授权和身份验证问题、安全性等,可以为您提供一些指点。