安全

保护服务器的推荐安全措施

服务审计。安全工作有很大一部分在于分析我们的系统、了解可被利用的攻击面,并尽可能地锁定各个组件。服务审计是一种手段,用来了解某个系统上运行着哪些服务、它们使用哪些端口通信、接受哪些协议,这些信息有助于配置对外开放的服务、防火墙参数以及监控与告警。本文还介绍无人值守更新、关闭目录索引和频繁备份这三项措施。

· 1 分钟阅读 · 难度 中级

服务审计

安全工作有很大一部分在于分析我们的系统、了解可被利用的攻击面,并尽可能地锁定各个组件。

服务审计是一种手段,用来了解某个系统上运行着哪些服务、它们使用哪些端口进行通信,以及接受哪些协议。这些信息可以帮助您配置哪些服务应当对公众开放、防火墙的参数,以及监控与告警。

服务审计如何提升安全性?

服务器可能出于内部用途运行一些进程,也可能运行进程来服务外部客户端。每一个正在运行的服务,无论它是面向内部还是面向公众,对恶意用户来说都意味着更大的攻击面。您运行的服务越多,您的软件受漏洞影响的风险就越大。

当您对机器上运行的网络服务有了清楚的了解之后,就可以开始分析这些服务。在进行服务审计时,请针对每一个正在运行的服务向自己提出以下问题:

  • 这个服务有必要运行吗?
  • 这个服务是否运行在它本不该运行的网络接口上?
  • 这个服务应该绑定到公网接口还是私网接口?
  • 我的防火墙规则是否设置成把合法流量转发给这个服务?
  • 我的防火墙规则是否拦截了不合法的流量?
  • 对于其中每一个服务,我是否有办法接收有关漏洞的安全告警?

在您的基础设施中配置一台新服务器时,这类服务审计应当成为一项标准做法。每隔几个月进行一次服务审计,也有助于发现那些配置可能在无意中被改动过的服务。

如何进行服务审计

要审计系统上正在运行的网络服务,可以使用相应命令列出服务器上正在使用的所有 TCP 和 UDP 端口。下面这条命令示例会显示程序名称、PID 以及用于监听 TCP 和 UDP 流量的地址:

  • sudo ss -plunt

您会得到与下面类似的输出:

Illustration 1 — Mesures de sécurité recommandées pour protéger vos serveurs

需要您关注的主要列是 Netid、Local Address: Port 和 Process name 这几列。如果本地地址: 端口是 0.0.0.0,说明该服务在所有 IPv4 网络接口上接受连接。如果地址是 [::],说明该服务在所有 IPv6 接口上接受连接。在上面的输出示例中,SSH 和 Nginx 都在所有公网接口上监听,并且同时监听 IPv4 和 IPv6 网络栈。

根据这个输出示例,您可以决定是允许 SSH 和 Nginx 在两种接口上监听,还是只在其中一种上监听。一般来说,您应当关闭运行在未使用接口上的服务。例如,如果您的站点只需要通过 IPv4 访问,那就应当明确禁止服务在 IPv6 接口上监听,以减少暴露的服务数量。

无人值守更新

及时为服务器打好补丁,是保证基本安全水平所不可缺少的。过时的服务器和不安全的软件版本是大多数入侵事件的根源,而定期更新可以缓解漏洞,阻止攻击者在您的服务器上站稳脚跟。

传统的更新方式要求管理员手动检查并安装服务器上各个软件包的更新;这可能非常耗时,而且有可能遗漏或错过一次重要的更新。相比之下,无人值守更新让系统能够自动更新大部分软件包。

无人值守更新如何提升安全性?

实施无人值守更新,可以降低保障服务器安全所需要的工作量,并缩短服务器可能受已知缺陷影响的时间。当出现影响服务器软件的漏洞时,您的服务器在您执行更新所需的这段时间里都是脆弱的。每天进行无人值守升级,可以确保您不会漏掉任何软件包,并且只要补丁一发布,存在漏洞的软件就会被修复。

与前面提到的服务审计相结合,自动执行更新可以大幅减少您暴露在攻击之下的风险,并减少维护服务器安全所花费的时间。

如何实施无人值守更新

大多数服务器发行版如今都提供了可选的无人值守更新。例如在 Ubuntu 上,管理员可以执行:

sudo apt install unattended-upgrades

注意:这些机制只会自动更新通过系统软件包管理器安装的软件。请确认您运行的其他软件,例如各种 Web 应用,要么已配置为自动更新,要么会被定期手动检查。

关闭目录索引

大多数 Web 服务器默认配置为:当用户访问一个没有索引文件的目录时,显示该目录的索引列表。例如,如果您在 Web 服务器上创建一个名为 download s 的目录而不做任何额外配置,那么浏览该目录的任何人都能看到其中所有文件。在许多情况下这并不构成安全问题,但完全有可能暴露某些机密内容。例如,如果您在 Web 服务器上为自己的网站创建一个索引目录,该目录中可能既有网站首页的文件,又有一个包含网站主数据库凭据的配置文件。如果不关闭目录索引,浏览该目录的任何人都能看到该文件夹中的这两个文件。

关闭目录索引如何提升安全性?

目录索引有其正当用途,但它们常常会在无意中把文件暴露给访问者。为您的 Web 服务器默认关闭目录索引,可以让目录中的文件对访问者不可见,从而消除数据意外丢失、泄露或被利用的风险。如果文件确实存在于目录中,访问者仍然可以访问它们,但关闭索引会让这些文件难以被无意中发现。

在大多数情况下,关闭目录索引只需要在 Web 服务器的配置中增加一行。

  • Nginx 默认关闭目录索引,因此如果您使用 Nginx,应该不需要做任何修改。
  • Apache wiki 上的 DirectoryListings 页面说明了如何关闭目录列表。请务必使用 Options -Indexes。

频繁备份

备份严格来说并不是一项安全措施,但对于挽救被入侵的系统和数据、以及分析系统是如何被入侵的,它可能至关重要。例如,如果您的服务器被 ransomware(一种恶意工具或病毒,它会加密文件,只有在攻击者收到一笔钱之后才会解密)攻陷,缺少备份可能意味着您唯一的选择就是付钱来换回自己的数据。如果您的系统和数据被定期且安全地备份,您就可以在不与被入侵系统打交道的情况下访问并恢复自己的数据。

频繁备份如何提升安全性?

频繁备份可以在数据被意外删除时,以及在数据被删除或损坏的攻击发生时,恢复数据。在这两种情况下,它们都通过保留意外删除之前或攻击发生之前的数据副本,帮助降低数据丢失的风险。

除了勒索软件的情形之外,定期备份还有助于对长期攻击进行取证分析。如果您没有数据的历史记录,就很难甚至无法确定攻击是从什么时候开始的,以及哪些数据被入侵了。

如何实施频繁备份

为您的系统实施备份时,请把恢复被入侵或被删除的数据当作目标。请问自己这个问题:如果我的服务器明天消失了,需要采取哪些措施才能以尽可能少的工作量让它重新运行起来并安全地工作?

制定灾难恢复计划时,还需要考虑以下几个问题:

  • 是否始终应该使用最近一次备份?取决于您的数据变化的频率,以及入侵或删除发生的时间,这样做可能会降低默认退回到更早备份的风险。
  • 恢复备份的实际流程是怎样的?
  • 您需要新建一台服务器,还是恢复现有的服务器?
  • 在没有这台服务器运行的情况下,您能撑多久?
  • 您是否需要异地备份?