设置网络服务器的最佳做法是什么?

设置网络服务器的最佳做法是什么?

我们是一家位于新西兰的网络开发机构,为大约 300 个客户提供网站托管服务。

我们希望将这些网站从旧服务器迁移到更现代的服务器。我们研究过 Azure/其他基于云的服务器,但选择不使用这些服务。

我希望在我们继续设置新服务器之前获得一些关于最佳实践的建议。

我们托管基于多种技术/CMS 的网站,其中包括:

  1. PHP/WordPress
  2. ASP.NET 3.X / 4.X
  3. .NET 核心
  4. MySQL
  5. 微软SQL

问题 1:将 ASP.Net/Core 站点放在一台 IIS Web 服务器上,将 PHP 站点放在单独的服务器上,这样会更好吗?或者,最好设置一台能够托管所有网站的 Web 服务器,而不管使用哪种语言?

问题 2:我知道可以在同一台服务器上同时托管 MySQL 和 MSSQL,但这是个好主意吗?还是他们应该有自己的服务器?

任何帮助将不胜感激。

答案1

我会尽力简短地说明要点,但您可能读了几十本关于这个主题的书却仍然不知道从哪里开始。

从企业设计目标来看,您需要了解所谓的“n 层架构”。基本上,您有单独的层和层,它们将提供组件的隔离和分离。例如,您可以有一个运行 Web 服务器(如 NGINX)的表示层,根据客户的使用情况,它可以运行某些类型的网站或充当应用程序层的反向代理。如果涉及企业应用程序,那么它应该位于应用程序层,它将在自己的专用资源和中间件(如 WebSphere 应用程序服务器或 JBoss EAP)上运行。然后,对于数据库层,将您的数据库及其自己的资源放在这里。它可能看起来像这样:

总统级别(阿帕奇/NGINX) <--> 应用层 (WAS/杰博斯)<--> 数据库层 (Oracle/Postgres/SQL)

您确实希望将这些虚拟机分开,因为如果您将角色组合在单个虚拟机中,并且虚拟机受到攻击,那么他们可以访问该节点的所有内容,而只能访问 Web 服务器,因为应用程序层和数据库层不对外公开,​​只有表示层。这意味着,如果该机器被黑客入侵,那么他们接下来必须侵入应用程序服务器,然后从那里跳转到数据库服务器,因为表示层与数据库层之间没有连接。

然后,每个节点也应该使用某种框架(如 NIST 800-53 或 800-171)进行强化。不要让它压垮你,只需花时间实施、测试和编写所需的更改,并创建 GPO 和预强化映像。此外,如果你没有任何特殊要求,你可以随意应用最适合你组织的方法。CIS-CAT是另一个框架,他们有一些基本的免费工具,但要完成所有系统类型,您可能需要购买会员资格。

在强化之后,您应该至少考虑进行一次漏洞扫描,看看您的漏洞在哪里。然后在所有漏洞都得到缓解之后,再进行渗透测试以查找任何易受攻击的代码。渗透测试对您的客户来说可能有点过度,但如果您看看银行和其他大公司,他们会定期进行渗透测试,以确保他们的代码和中间件堆栈的攻击面尽可能小。

其他考虑因素可能是您设计多个 NGINX 服务器来使用“粘性会话”对用户连接进行负载平衡,以便理论上您可以修补、重新启动、重建和替换负载平衡器后面的 VM,从而提供某种形式的冗余和更高的可用性甚至高可用性(HA)。

这只是冰山一角,但应该足以让您开始设计。如果您要购买新硬件,您可能需要考虑使用带刀片的 Dell VRTX 机箱。您可以在不同的数据中心安装 2 个这样的机箱,并执行完全冗余和故障转移。或者只买一个带 2 个刀片的机箱并运行集群主机。只需填充 RAM 和驱动器并加载您喜欢的虚拟化管理程序并构建集群。如果预算有限优必胜拥有价格合理的网络设备,但其免费支持仅基于聊天。否则,思科是“黄金标准”,但您需要支付 TAC 支持和年度续订费用,否则您将无法获得安全更新或电话支持,如果您没有足够的预算,请远离它。

最后,我会尝试归纳出更多内容。您需要确定预算,以及 300 个客户中的每一个客户的要求是什么,当性能不是首要任务时,其中一些客户是否可以共享托管空间(想想共享托管计划),这是否会打开其他客户可能不允许的安全漏洞。即使使用云提供商,客户想要的东西在他们的价格点上也可能不切实际,因为当您获得 VM 时,您不会获得任何强化或安全管理,因此您仍需对此负责。安全性就像是可用性的滑动尺度跷跷板。如果它完全可用,那么它就不安全,但如果它完全安全,那么没有人可以访问它。您需要确定您需要在哪里实现这一点,对于不同的客户来说,它可能有所不同。这些事情没有灵丹妙药。大多数开发人员不将安全性视为其开发的一部分,因此请计划在您变得更加安全时出现问题。可以使用适当的编码和/或架构设计来修复损坏的项目。

相关内容