介绍
在构建云基础设施时,您首要关注的是确保您的应用程序完全正常运行。在您的设置和部署过程中,一个重要的环节是在将应用程序或系统提供给公众之前,为其构建有效、彻底且强大的安全措施。与其在部署后追溯性地实施安全措施,不如确保在您的基础设施中构建一个安全的基础配置,这一点至关重要。
本教程将在这方面为您提供帮助。它将重点介绍在设置和配置服务器基础设施时可以实施的某些实用安全措施。虽然这并非服务器安全协议的详尽列表,但它是一个有用的起点。随着您对环境和应用程序的具体需求进行操作并加深理解,您可以制定额外的安全措施,以帮助巩固您的基础。
SSH (Secure Shell) 密钥
在操作服务器时,您的大部分时间都将花在终端会话中与服务器的 SSH 连接上。安全外壳 (SSH) 密钥提供了一种比依赖密码登录更安全的服务器登录方法。为了进行身份验证,在使用 SSH 密钥时,需要准备两个访问密钥。第一个是秘密(私有)密钥,而另一个是可共享的公开密钥。
必须首先配置 SSH 密钥身份验证。这是通过将 SSH 公钥放置在服务器上的适当目录中来实现的。当您的客户端最初连接到服务器时,系统会要求您提供拥有私钥的证明。这是通过生成一个随机值并将其发送到您的 SSH 客户端来完成的。反过来,SSH 客户端将使用私钥对响应进行加密。该响应将发送到服务器。接下来,服务器将使用您的公钥解密来自客户端的消息。如果服务器成功解密了该随机值,则表明客户端拥有私钥。在这种情况下,身份验证得到确认,并且可以建立无需密码 of 服务器连接。
使用 SSH 密钥增强安全性
虽然密码授权或使用 SSH 的任何身份验证都是完全加密的,但恶意用户仍可能尝试访问服务器。特别是如果他们获取了服务器的公网 IP 地址。通过尝试每种可能的密钥组合,现代计算确实允许基于密码的登录,并且恶意用户经常进行这种尝试。如果有人将这些访问尝试自动化,通过系统地尝试不同的组合,最终是有可能获取正确密码的。
通过利用 SSH 加密身份验证,无需启用密码进行登录。SSH 密钥通常包含攻击者需要尝试的庞大组合可能性。位数的增加使破解加密所需的不同组合的潜力呈倍数增长。因此,要运行 SSH 密钥算法的所有可能组合将极其耗时。因此,这变成了一项不值得恶意攻击者花费时间的尝试。这就是为什么 SSH 加密通常被认为是“无法破解”的原因。
实施 SSH 密钥
登录到任何远程 Linux 服务器都应该使用 SSH 密钥。可以在本地机器端生成密钥,并在几分钟内将公钥传输回服务器。通过本教程,您将基本了解 如何在 Ubuntu 中使用 SSH 连接到远程服务器。 您还可以关注我们深入的 关于如何配置 Linux 服务器以使用基于 SSH 密钥的身份验证的教程.
总体而言,不允许 root 用户直接通过 SSH 登录是一种常用的最佳实践,而应该作为非特权用户登录,并根据需要使用类似 sudo 的工具来提升权限。这被称为最小特权原则:一种限制访问权限的方法。一旦通过 SSH 验证了非特权账户的登录,就可以通过在服务器上设置 /etc/ssh/sshd_config 中的 PermitRootLogin no 指令来禁用 root 登录。然后,可以使用 SSH 进程命令 sudo systemctl restart sshd 重启服务器。
防火墙
调节服务向网络暴露程度的软件(或硬件设备)被称为防火墙。配置得当的防火墙可以确保只有允许的服务才能公开可用,并允许进出特定的服务器。

默认情况下,服务器上可能会运行多个服务,这些服务可以分为以下几组:
- 内部服务: 这些服务只能从服务器本身内部访问。这可以防止服务暴露在公开可用的互联网中(例如:只能通过本地连接访问的数据库)。
- 公共服务: 互联网上任何人都可以访问的服务,通常是匿名的。这些包括允许访问者访问您的网站的 Web 服务器。
- 私有服务: 只有来自特定位置组的授权账户才能访问这些服务(例如:phpMyAdmin 数据库控制面板)。
虽然公共服务可以保持允许从互联网访问,但私有服务可以根据访问参数(例如连接类型)进行限制,而内部服务则完全关闭任何基于互联网的访问。对这些服务的访问以及允许访问的粒度都由防火墙控制。未使用的端口通常配置为完全阻止对其进行访问。
使用防火墙增强安全性
防火墙是服务器保护的基线。它用于在应用程序处理流量之前限制与服务的连接。当然,您可以为您的服务实施额外的安全功能,并将其限制在所需的接口上。
只有您选择保持开放的服务才不会受到配置得当的防火墙的限制。这限制了易受攻击的元素,因为可用的软件要有限得多,因此遭受攻击的可能性也较小。
实施防火墙
Linux 系统有许多可用的防火墙。其中一些相当复杂。然而,通常只需在服务器初始设置时以及对服务器服务进行更改时设置防火墙。这应该只需要您几分钟的时间。以下是设置和激活防火墙时可以考虑的一些选项:
- 对于 CentOS,您可以参考我们的 在 CentOS 7 上使用 FirewallD 设置防火墙指南.
- 我们的 Iptables 指南可以引导您列出和删除 Iptables 防火墙规则.
最重要的是,无论参考哪种教程,您都必须确保所选的防火墙阻止来自服务器的未知流量,以防止任何新可用的服务在无意中暴露在互联网上。通过需要明确授权访问,系统将提示您全面评估服务的访问方式、运行方式以及允许谁访问。
虚拟私有云 (VPC) 网络
您的基础设施’资源需要在一个被称为 VPC 的私有网络中运行。这些网络更安全,因为它们可以阻止来自其他基于云的 VPC 网络的访问。因此,它们使网络的接口无法从公共互联网访问。
通过 VPC 网络增强安全性
对于内部通信,私有网络比公共网络更可取。VPC 允许将资源组隔离到特定的私有网络中。因为 VPC 网络仅通过私有连接进行接口,所以网络’的流量可以免于暴露给公共互联网,在公共互联网中,这些信息可能会容易受到拦截或泄露。VPC 网络还可以用于隔离执行环境以及租户。互联网网关也可以设置为公共互联网与 VPC 网络上的资源之间的单一访问点。
此外,安全很大程度上需要分析我们的系统并尽最大努力保护所有组件。服务审计使我们能够了解系统’可接受的协议、正在运行的服务以及哪些端口正用于通信。了解这些信息有助于针对配置做出最佳决策。这些决策可能包括防火墙设置、系统监控和警报,以及哪些服务应该可以公开访问。

利用审计增强安全性
每个服务都可以用于处理外部客户端或用于内部目的。无论意图如何,这些服务对于恶意用户来说都是漏洞点。随着运行服务数量的增加,漏洞被利用的可能性也会增加。
一旦您牢固掌握了机器正在运行哪些服务,就可以开始分析服务。在进行服务审计时,提出以下问题是有益的:
- 该特定服务是否应该处于活动运行状态?
- 它是否在最佳的网络接口上运行?
- 该服务最适合公共网络接口还是私有网络接口?
- 防火墙规则是否配置正确,以允许合法流量访问此服务?
- 我的防火墙规则是否阻止了非法的流量?
- 是否启用了关于安全漏洞的警报系统?
在向基础设施添加新服务器时,上述内容应作为其配置过程中的标准实践。服务审计的另一个好处是,它们可以识别出任何无意中更改的配置。
执行服务审计
为了审计正在运行的服务,请使用 ss 命令列出所有的 UDP 和 TCP 端口 在服务器上活跃使用的端口。以下是使用带有程序名称 PID 的 ss 命令来检查监听的 TCP 和 UDP 端口的示例:
|
1 |
sudo ss -plunt |
将返回类似于以下内容的信息:

您的主要关注点应该是 Netid、Local Address:Port 和 Process 列:
- 如果 Local Address:Port 的值为 0.0.0.0,则意味着该服务正在主动接受所有 IPv4 网络接口上的所有连接。如果地址是 [::],则所有 IPv6 连接都在接受流量。
- 在上述示例中,Nginx 和 SSH 都在两个网络栈(IPv4 和 IPv6)的所有公共接口上进行监听。
通过上述示例,您可以选择是否需要允许 SSH 和 Nginx 在这两个接口上监听,或者仅在其中一个接口上监听。通常,您会希望禁用任何未使用的服务以防止它们运行。例如,如果您的网站应该只能通过 IPv4 访问,那么关闭 IPv6 接口将有助于限制暴露。
通过无人值守更新保持最新状态
无人值守更新降低了保持服务器安全所需的工作量,并有助于缩短它们暴露于已知漏洞的时间。您在服务器上运行更新所需的时间越长,它暴露于已知漏洞的时间就越长。无人值守更新将确保一旦有修复包可用,就可以自动安装在服务器上,以限制漏洞存在的时间。
除了服务器审计之外,无人值守更新还可以极大地减少遭受攻击的风险。它们还将大大减少在服务器维护上花费的时间。
如何激活无人值守更新
无人值守更新现在是大多数服务器发行版中的一个可选功能。例如,在 Ubuntu 上,管理员可以运行以下命令:
|
1 |
sudo apt install unattended-upgrades |
有关实施无人值守更新的更多信息,请查看这里的自动更新部分。对于 Fedora,可以在这里找到说明。请注意,自动更新将仅安装最初通过系统包管理系统安装的软件。任何补充应用程序(例如基于 Web 的应用程序)都需要单独手动检查更新,或单独配置自动更新。
目录索引
当目录缺少索引文件时,大多数服务器默认配置为显示目录索引。换句话说,如果在您的 Web 服务器上创建了一个名为“downloads”的目录,任何浏览该目录的人都将能够看到其中的所有文件。虽然这并不总是安全风险,但它确实会让不应看到机密信息的人看到这些信息。例如,考虑到您的 Web 服务器可能有一个包含网站主页访问凭据的文件,以及一个包含网站数据库后端所有配置的文件。如果未禁用目录索引,任何浏览该目录的人都会看到这些文件。
通过禁用目录索引提高安全性
尽管目录索引很有用,但它们可能会导致文件无意中暴露。为了减轻这种无意中的暴露及任何相关风险,默认情况下应禁用服务器上的目录索引。虽然访问者仍然可以访问这些文件,但无意中查看数据的风险已大大降低。
禁用目录索引
在大多数情况下,只需在 Web 服务器的配置中多添加一行,就足以禁用目录索引。
- 请按照以下步骤在 Apache Wiki 上禁用这些目录列表。确保在 Apache Directory 的配置块中列出了 Options -Indexes。
- Nginx 默认禁用索引,在这方面无需采取进一步操作。
频繁备份
尽管备份不是一种安全措施,但在系统遭到破坏时,它们对于保护数据和整个系统至关重要。它还有助于分析系统是如何受到攻击的。考虑一个不幸的情况,您的系统受到勒索软件(一种加密系统上文件,只有在您向黑客付钱时才解密文件的病毒或恶意软件工具)的攻击。如果没有数据备份,您唯一的选择就是付钱以重新获得对数据的访问权限。如果数据已安全备份,您仍然可以访问它,并且无需访问受损系统即可恢复数据。
通过频繁备份增强安全性
频繁的备份有助于在发生攻击、损坏甚至无意丢失(删除)时恢复信息。无论是什么类型的负面事件导致数据丢失,保留服务器数据的副本都可以降低风险。
除了勒索软件攻击之外,频繁的备份还有助于对长期系统攻击进行可衡量的调查。如果您没有以备份形式安全地将数据存储在异地,那么确定攻击源以及哪些数据遭到破坏可能会非常困难,甚至是不可能的。
实施频繁备份
在备份系统时,将损坏、受损或删除数据的可验证恢复作为恢复工作的目标是至关重要的。最恰当的设想是,如果您的服务器明天消失了,哪些操作所需的精力最少就能让您重新启动并运行。
在考虑灾难恢复计划时,以下是需要考虑的其他一些要点:
- 如果您处理的是动态变化的数据,您的备份可能需要更加频繁。在数据丢失的情况下,如果您的上一次备份时间太久,您可能会被迫恢复到陈旧的数据。
- 考虑一下实际的备份恢复过程。是需要为此添加一台新服务器,还是可以恢复现有的服务器?
- 您的服务器可以不运行的最长时间是多少?
- 异地备份是必要的解决方案吗?
要了解更多关于 CloudSigma 灾难恢复解决方案的信息,请查看我们的博客文章,其中详细介绍了为什么我们的灾难恢复即服务(Disaster-Recovery-as-a-Service)是云端的完美伴侣。在这里您可以了解更多关于CloudSigma 的安全 & 业务连续性功能的信息。我们还提供了一份详细的指南,介绍如何轻松设置 CloudSigma 的备份功能.
私有网络和 VPN
私有网络是仅供特定用户或服务器访问和使用的网络。远程设备之间的安全连接,使该连接能够像在私有网络中一样运行,这就是VPN(虚拟专用网络)。它使您能够在私有网络中保护连接并连接远程服务器。

私有网络如何增强安全性?
当在内部通信中选择使用公有网络还是私有网络时,后者总是首选。然而,请记住,数据中心内的其他用户仍然能够访问同一个网络。这意味着仍必须采取补充安全措施,以确保服务器之间的通信安全。
从本质上讲,利用 VPN 是一种界定组织员工可以查看哪些内容的方法。通信将是完全安全和私密的。应用程序配置将允许虚拟接口流量通过 VPN 传输。通过这样做,只有那些旨在通过互联网与客户交互的服务才会被允许暴露给公有网络。
实施 VPN 有多难?
对您的数据中心而言,利用私有网络非常简单,只需配置您的应用程序和防火墙以使用私有网络,并在创建服务器期间启用 VPN 即可。需要记住的是,其他服务器与整个数据中心的私有网络共享相同的网络空间。
VPN 的初始设置稍微复杂一些。然而,对于大多数使用场景来说,这所增加的安全性是值得的。配置数据和共享安全需要安装并配置在网络中的每台服务器上。有关VPN 如何工作以及在 Ubuntu 上设置 OpenVPN 的概述,请遵循此指南。您也可以按照本教程,它将引导您完成将 VPN 网络连接到 CloudSigma 基础设施的步骤.
SSL/TLS 加密和公钥基础设施

用于识别个人身份和通信加密的证书的生成、管理和验证被称为公钥基础设施(PKI)。不同的实体可以通过使用SSL 或TLS 证书相互进行身份验证。之后,它们还可以用于建立加密通信。
证书如何增强安全性
为了在服务器上加密流量并验证成员身份,建立证书颁发机构(CA)并能够查看您网络的所有证书至关重要。这有助于防止“中间人”攻击,即黑客模仿服务器并将流量重定向。
每台服务器的配置都可以设置为信任集中的 CA。随后任何证书签名都可以被隐式信任。如果您的服务器所使用的协议和应用程序支持 SSL/TLS 加密,您就可以在没有 VPN 隧道开销的情况下保护您的系统。欲了解更多信息,请关注我们的关于如何为 Nginx 自动更新 LetsEncrypt SSL 证书的教程.
实施难度
配置证书颁发机构并设置其余 PKI 在初始阶段可能需要付出大量努力。此外,当需要创建、吊销或签署新证书时,还需要额外的管理工作。
由于大多数基础设施都需要扩展,因此实施完整的 PKO 是最明智的方法。在达到 PKI 值得付出额外管理成本的阶段之前,利用 VPN 来保护系统组件可以作为一种充分的权宜之计。
检测系统入侵并利用文件审计
文件审计是一种用于将处于完全安全、良好状态下的系统文件及其属性与当前系统文件进行对比的过程。这是发现并隔离未经授权的系统更改的好方法。

所谓 IDS, intrusion detection system,是指用于监视系统上任何未经授权活动的监控软件。通常,它使用文件审计方法来寻找任何意外的系统更改。
通过 IDS/文件审计增强安全性
除了服务级别的审计之外,进行文件级别的审计对于确保系统安全也至关重要。这可以通过自动化的 IDS 流程来完成,也可以由系统管理员定期执行。
文件审计和 IDS 是确保系统没有发生任何意外更改的唯一真正流程。大多数入侵者都希望长期利用他们入侵的服务器,为了做到这一点,他们必须保持其行为的隐蔽性。他们可能会用存在漏洞或被篡改的版本替换二进制文件。系统中被修改过的任何文件都会被文件系统审计检测到。这让您能够非常快速地了解系统的完整性是否已遭到破坏,从而感到安心。
实施难度级别
实施 IDS 和文件审计可能是一个非常繁重的过程。在开始时,必须配置系统以定义要排除的路径,并确定对系统所做的非标准更改,以便创建系统的基线数据。
日常操作也会变得更加繁琐,因为在运行任何更新之前,程序都需要重新检查系统。系统测量的基线也需要重新创建或重新确立,以将软件版本更改纳入系统的新基线中。审计报告也需要转移到另一个位置。那’是因为您需要防止系统入侵者通过掩盖痕迹来篡改审计以保持隐蔽。
虽然这确实增加了系统的管理负担,但这是确保在您不知情的情况下没有任何文件被篡改的唯一万无一失的方法之一。一些最受欢迎的入侵检测和文件审计系统包括 Aide 和 Tripwire.
隔离环境
任何将单个组件运行在各自专用空间中的方法都被称为隔离执行环境。

这可能意味着特定的应用程序组件将托管在它们自己的专用服务器上,或者您的服务可能被配置为在 chroot 环境(或容器)中运行。环境的隔离程度主要取决于您基础设施的实际情况以及应用程序的需求。
通过隔离环境增强安全性
通过将进程隔离到单独的环境中,您也隔离了可能受到安全漏洞影响的进程。就像船上的隔舱和舱壁有助于控制船体破损一样,当您将系统的各个部分和组件分开时,即使入侵者获得了其中一个的访问权限,他们也无法访问整个互连的网络系统。
实施难度
隔离应用程序的复杂性因您决定使用的容器类型而异。Docker 并不将隔离视为一种安全特性。然而,当您的组件被拆分到不同的容器中时,隔离会更容易实现。您可以参考这篇 在我们的基础设施上安装 Docker 的教程.
设置 chroot 环境时,也会提供一定程度的隔离。然而,这并非完全坚不可摧,因为存在脱离此类环境的方法。为不同的组件配备专用机器通常是实现隔离最好且最简单的方法。然而,由于需要额外的机器,其成本也更高。
结语
提供的策略只是您为提高系统安全性可以采取的部分步骤。值得注意的是,您等待实施安全特性的时间越长,其效果就越低。考虑到这一点,确保安全工作不应拖延至关重要。相反,它应该作为构建基础设施的首要准备工作之一来实施。一旦您的系统通过基线保护获得了足够的安全保障,您就可以开始激活服务并附加应用程序,同时确信它们默认是在安全的环境中运行的。
然而,安全并不是一个静止的过程,而是一个流动的过程。它需要不断维护和迭代。应当以保持警惕和持续防范的心态来对待安全。始终质疑任何系统更改所涉及的安全影响。确保运行环境和默认配置始终在优化安全性,并与具有足够防御性的软件协同工作。
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。