选择安全的 Web 服务器软件

选择安全的 Web 服务器软件

Nginx 是一种在市场上相对较新的开源 Web 服务器,由于在过去几年的一些基准测试中表现非常出色,最近引起了一些关注。

在为可公开访问的商业应用程序选择服务器软件时,我一直在想,从安全角度来看,使用可能缺乏普遍性的服务器软件(例如 Nginx)是否是不负责任的。

另一方面,Apache 经过了多年的公众审查,修复了大量漏洞,并拥有一支安全团队。

以下是我对两个候选服务器的优势的看法,它们在市场份额、社区和一般开发环境方面有很大差异。

Nginx 优势

  • 无处不在。在我看来,由于不容易成为攻击目标,而且规模较小,一些软件产品不太可能成为有针对性的攻击的受害者。一个很好的例子就是苹果的 Mac OS X 平台,与 Windows 相比,最近受到的攻击相对较少。

    2009 年 6 月 Netcraft 服务器市场份额数据这表明竞争对手分别占据了 Nginx 和 Apache 市场的 4% 和 50%。

  • 代码库更小,错误更少。这只是一个假设;我没有查看任何一个代码库,但假设代码与错误率相似,较小的代码库可能会导致更少的漏洞。

    Ohloh 表示,代码库大小为 635:75,Apache 更大。我不确定这是否包括模块,但考虑到巨大的大小增量,很可能包括模块。(当然,这将导致一个非常错误的结论,因为如果您关注的是安全性,那么您只会运行所需的模块。)

Apache 优势

  • 保安团队。Apache 软件基金会似乎拥有相当先进的安全基础设施。
  • 经验。Apache HTTP Server 项目多年来已经出现了无数漏洞,毫无疑问,他们已经制定了如何快速最佳地处理问题的政策。
  • 无处不在。这既可能是优点也可能是缺点。这意味着有更多的人关注代码,但并没有说明好人与坏人的比例。
  • 到期。正如我之前提到的,该项目已经经历了无数次的探索和大量公众的审查。

    这可能会略微降低零日漏洞的风险,因为大问题不太可能被忽视。这也可能意味着新的漏洞不那么严重。

    快速搜索并未发现 Apache 是否接受过安全审计。

  • 文档。攻击媒介可能由错误配置产生。对于 Apache 来说,这种情况发生的可能性较小,因为它提供了大量关于如何保护服务器的出版物(书籍和文章)。
  • 安全模块的数量。通过浏览两个服务器的站点,我感觉 Apache 在安全增强模块方面远远超过 Nginx。

普遍性似乎是一把双刃剑。普遍性通常是好是坏可能并不是线性关系(可能还包含其他因素,比如你是否极易受到攻击)。我非常怀疑是否有关于普遍性对安全漏洞影响的研究,尽管我承认我尝试过搜索。

如果我们谈论的是社交应用程序、新闻网站或媒体,它们在与业务应用程序分开的服务器上提供服务,我可能不会考虑这个问题。对于处理付款、个人信息和信用卡号的应用程序,我目前的信息倾向于 Apache。

由于我不是安全专家,我的想法也不是科学的,因此可能不太具有说服力,因此我非常希望得到任何关于哪些因素会影响此类决定的意见。如果没有其他因素,这仍需其他处于相同位置的人考虑。

答案1

nginx 托管着全球网站数量的百分之几,因此它远非默默无闻。这些网站数量有数十万甚至数百万个,因此 nginx 足够大,值得成为攻击目标。

nginx 已经存在安全问题,开源社区已向作者披露了漏洞,作者已修复了漏洞。在变更日志中搜索“安全”,你会看到有一个工作流程:http://nginx.net/CHANGES-0.6

因此,nginx 修复安全问题的流程与 Apache 基本相同。虽然团队规模较小,形式化程度较低,但工作方式基本相同。

从安全角度来看,拥有一个小型、紧凑的代码库,以及一个干净、简单的架构,是一项重大改进。更少的代码 = 统计上更少的错误。经验表明,随着代码库的变大,错误数量会以线性方式增长。假设代码与错误比率相似,较小的代码库将要导致更少的漏洞。

从安全角度来看,由于 nginx 的用户群较小,使用 nginx 是否不负责任?我的答案是绝对不。nginx 是一个非常好的选择,也适合注重安全的人。

不过,我建议以稍微不同的方式来看待 HTTP 服务器安全性。http 守护进程中存在缓冲区溢出问题,这可能导致对 http 守护进程本身的攻击。对于大多数设计,通过使用操作系统级工具(如 jails / croot / virtualization)来“容器化”http 守护进程并限制成功攻击的影响,可以相当轻松地将此影响降至最低。

针对 Web 应用程序的攻击可能更严重,也更常见,尤其是针对内部开发的 Web 应用程序,这些应用程序通常没有经过专家的安全审核。例如,使用跨端脚本或 SQL 注入利用用户数据做坏事、提取资金、窃取用户名和密码数据库等。

Apache 在 Web 应用安全方面有一个主要优势,那就是第三方 mod_security 模块。您可以将其视为 HTTP 请求的大型正则表达式引擎,它允许您对 HTTP 调用的任何部分进行模式匹配和过滤。这可以大大减少您自己的 Web 应用代码的攻击面。

对于注重安全的开源 Web 应用程序堆栈,我可能会使用:

  • 一个用于负载平衡的容器化的 nginx 实例,位于 Web 服务器前面的单独物理或虚拟服务器上,将 HTTP 请求代理到后端 Web 服务器。
  • 带有 mod_security 的 Apache 作为网络服务器。

您也可以反过来做——使用 mod_security 的 Apache 在 nginx 网络服务器前端执行负载平衡。这在很大程度上取决于您希望 CPU 负载在哪里——使用 mod_security 的 HTTP 过滤需要相当多的 CPU 资源,因此使用 mod_security 的 Apache 负载平衡器可能无法处理超过少数后端网络服务器。如果负载平衡器是一个小型、快速的 nginx 实例,并且网络服务器执行自己的 mod_security 过滤,则负载平衡器上的拥塞会大大减少。

这为您提供了一个容器化的 HTTP 代理,作为公共互联网和您的 webapp 之间的间接层,而 mod_security 则作为您的 webapp 代码前面的可扩展 HTTP 级防火墙。但请为此做好准备,尤其是 mod_security,需要花费大量时间来设置并完全运行,而不会产生不必要的副作用。

答案2

模糊的安全模型并不是良好 IT 的基础。

但这并不意味着 Nginx 不是您的最佳解决方案。应用程序只是安全的一个点。

由于我自己没有做过研究,所以我不能说 Apache 更具优势,但是从您的列表来看,Nginx 的优势较弱。

答案3

不久前,我遇到了同样的问题,当时使用的是 Sun Web Server。它是一个 NSAPI 服务器,尽管它也有一个 Java 容器。该服务器的核心是开源的,而且是免费的。它以安全性而闻名。它有一个简单的管理界面,而且非常可靠。它实际上是旧的 Netscape fastrack 服务器。

答案4

nginx 的一个缺点是,Ubuntu 10.04 LTS 中的当前版本仍为 .7,而主流 nginx 为 .8 并正在向 .9 迭代。Apache 似乎在官方 Ubuntu LTS 软件包的更新方面得到了更好的支持。作为一个在小型组织中管理 7 台服务器并同时处理其他任务的人,记录所有非标准软件安装并保持其最新是一件很麻烦的事。因此,我们坚持使用 LTS 发行版中的任何内容,并使用标准措施保持服务器更新。

相关内容