七个动作全面加强云服务器安全性

云服务器创建完毕后你最关心的事情莫过于尽快的上线运行你开发的应用。然而,如果不先确保云服务器环境安全的话,你的程序将存在很大的安全隐患。

这篇指南,我们就来探讨那些在你上线应用之前有必要的基本服务器安全配置的最佳实践。

SSH 密钥

SSH 密钥是一对加密密钥,它们用作 SSH 服务器登录时的身份认证,并替代基于密码的登录方式。创建的密钥对包括一个公钥和一个私钥。私钥由用户保管,公钥则可以被分享给任何人。

SSH Keys diagram

配置 SSH 密钥身份认证,必须将用户的公钥放置在服务器特定的目录中。当用户尝试连接时,服务器会验证客户端上的私钥。当服务器确认服务器上的公钥与客户端提供的私钥是相匹配的,就会允许用户建立到服务器的链接而无需再输入密码。

它是如何增强安全性的?

SSH 协议下的所有认证方式,包括密码认证都是被完全加密的。然而,在允许密码登录的情况下,恶意用户就可以通过使用不同密码不断尝试访问服务器。黑客可以使用暴力破解工具自动化的对服务器密码进行快速破解。

设置 SSH 密钥认证后就可以关闭掉基于密码的认证方式。SSH 密钥比密码的位数大很多,这意味着黑客需要更复杂的手段才能破解。许多 SSH 密钥算法被设计为无法被现代计算机轻易破解,因为破解需要耗费很长很长的时间。

这很难设置吗?

SSH 密钥非常容易设置,而且推荐所有远程 Linux 或 Unix 服务器采用。你在本地计算机上用几分钟就可以生成一份 SSH 密钥对并将公钥发送给你的远程服务器上。

了解如何设置密钥,可以参考《Ubuntu 16.04 服务器初始化设置指南》中的第四步。如果你仍旧需要密码认证,可以考虑使用 fail2ban 限制密码重试次数。

防火墙

防火墙就是用来控制服务是否开放互联网访问的一种软件(或硬件)。即阻止或限制那些不希望被网络公开访问的端口。

通常,一台服务器上默认运行着一系列服务,可以将他们做以下归类:

  • 公共服务:任何人都可以通过互联网访问,以匿名访问为主。比如 web 服务器,任何人都可以访问你的网站。
  • 私有服务:只允许认证账户或特定的位置访问。例如数据库控制台。
  • 内部服务:只允许服务器自身访问,完全不对外开放。例如,数据库,只接受本地连接。

防火墙能确保根据上述分类进行服务器访问限制,对于未被使用的端口,则被完全禁止访问。

它是如何增强安全性的?

防火墙是任何服务器配置的重要组成部分。即使你的服务本身实现了安全功能,防火墙仍可作为额外的保护层。

正确配置的防火墙将限制对除了您需要保持打开的特定服务之外的所有功能的访问。只露出几块软件可以减少服务器的攻击面,限制易受剥削的组件。

除你设定开放的服务以外,一个配置恰当的防火墙会限制所有其他功能的访问。只暴露少量的软件,从而缩小服务器的被攻击面。

这很难设置吗?

Linux 系统有多重防火墙可选,它们的学习曲线各不相同。通常,设置防火墙只需几分钟时间,且一般在初始化服务器的环节进行设置或在需要对服务器上的服务进行修改时设置。

UFW 简洁易用,可以选择 iptables 或 CSF 。

VPN 和 私有网络

私有网络即仅允许特定服务器或用户访问的网络。VPN 或虚拟专用网络是在远程计算机之间创建安全连接并将连接呈现为本地专用网络的方式。这提供了一种将服务配置为专用网络并通过安全连接连接远程服务器的方式。>

它是如何增强安全性的?

对于内部通信而言,私有网络总是比公有网络更好些。然而,由于位于相同数据中心的其他用户也能访问网络内的服务器,你仍需额外设置确保服务器之间的通信安全。

使用 VPN 则能够实现只有你自己的服务器才可以访问的私有网络。服务器之间的通信完全私有且安全。其他应用程序能够配置通过 VPN 软件的虚拟网卡传输流量。这样一来,只有网络上的客户端需要访问的服务才会暴露在公共网络上。

这很难设置吗?

在支持此功能的数据中心中使用专用网络与在服务器创建过程中启用网卡并配置应用程序和防火墙一样简单。请记住,数据中心内网的专用网络与使用相同网络的其他服务器可以互访。

对于 VPN 来说,初始设置有一点复杂,但是对增加的安全性来说是值得的。VPN 上的每个服务器必须具有安装和配置安全连接所需的共享安全和配置数据。VPN 启动并运行后,应用程序必须配置为使用 VPN 通道。

公钥平台和 SSL/TLS 加密

Public key infrastructure – 公共密钥基础设施(PKI)是指创建、管理和验证用于识别个人和加密通信的证书的系统。可以使用 SSL 或 TLS 证书来认证彼此不同的实体。认证后,还可用于通信加密。

它是如何增强安全性的?

建立证书颁发机构并为您的服务器管理证书允许您的基础设施中的每个实体验证其他成员身份并加密流量。这可以防止中间人攻击(攻击者模仿您的基础架构中的服务器来拦截流量)。

可以将每个服务器配置为被信任的中心认证机构。然后,授权机构的任何证书都将被信任。如果您用于通信的应用程序和协议支持 TLS / SSL 加密,则这是一种对系统进行加密的方式,避免 VPN 隧道的性能开销。

这很难设置吗?

配置证书颁发机构并设置其余的公钥基础架构可能涉及相当多的初始化工作。此外,管理证书可能会在需要创建、签名或撤销新的证书时产生额外的管理负担。

对于许多用户来说,实施完整的公共密钥基础架构将随着基础设施需求的增长而变得更有意义。使用 VPN 保护组件之间的通信可能是一个很好起点,逐步过渡到 PKI。

服务审计

到目前为止,我们已经讨论了一些可以提高服务器安全性的技术。然而,分析系统是安全性的另外一个重要方面,了解可能的被攻击面,并尽可能地锁定组件同样重要。

服务审计是一种发现服务器上所运行服务的过程。通常,操作系统默认在启动时运行某些服务。安装附加软件有时会引起自动启动依赖的程序。

服务审计是一种了解您的系统上运行哪些服务的方式,它们正在使用哪些端口进行通信,以及接受什么协议。这些信息可以帮助您配置防火墙。

它是如何增强安全性的?

为了能够处理外部客户端或内部任务,服务器会启动许多进程。这些就是恶意用户可以利用的攻击面,运行的服务越多,可利用的漏洞就越多。

了解服务器上运行的网络服务,就可以开始分析了。下面是应该回答的问题:

  • 这项服务应该运行吗?
  • 服务是否运行在不需要的接口上?是否应该绑定一个独立 IP?
  • 防火墙规则是允许合法流量传递给此服务?
  • 防火墙规则是否阻止不合法的流量?
  • 是否能够接收到有关这些服务的漏洞安全警报?

这很难设置吗?

基本的服务审计非常简单,可以使用 netstat 命令找出哪些服务正在侦听网卡上哪些端口。显示侦听 TCP 和 UDP 流量的程序名称、PID 和地址:

sudo netstat -plunt

会看到类似下面的输出:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      887/sshd        
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      919/nginx       
tcp6       0      0 :::22                   :::*                    LISTEN      887/sshd        
tcp6       0      0 :::80                   :::*                    LISTEN      919/nginx

应主要关注 ProtoLocal Address 和 PID/Program name。如果地址为 0.0.0.0,则代表服务接受任何接口的连接。

文件审计和入侵检测系统

文件审计是在系统处于已知状态时将当前系统与系统的文件和文件特性的记录进行比较的过程,用以检测可能已被授权的系统的更改。

入侵检测系统(IDS)是一种监视系统或网络中行未经授权的活动的软件,许多基于主机的 IDS 使用文件审计作为检查系统是否已更改的方法。

它是如何增强安全性的?

与上述服务级审计类似,如果你要确保安全系统,那么对系统执行文件级审计是非常有用的。可以由管理员定期进行,也可以由 IDS 自动完成。

这些策略是确保您的文件系统未被某些用户或进程更改的唯一方法。由于许多原因,入侵者通常保持隐藏状态,以便持续长时间地利用你的服务器。它们可能会以破解的程序替换你系统中的二进制文件。对文件系统进行审核会告诉您是否有任何文件被更改,从而确保服务器环境的完整性。

这很难设置吗?

实施 IDS 或进行文件审核可能是一个非常复杂过程。初始配置包括告知审核系统您对服务器所做的任何非标准更改,并定义应排除的路径以创建基准读数。

它会介入你的日常操作,使系统更新便的复杂,因为您需要在运行更新之前重新检查系统,然后在运行更新后重新创建基准以捕获对软件版本的更改。还需要将报告转移到另一个位置,以便入侵者无法更改审计记录以隐匿痕迹。

虽然这可能会增加您的管理负载,但是能够根据已知的副本检查您的系统是确保文件完整性的唯一方法。流行的文件审计/入侵检测系统有 Tripwire 和 Aide

环境隔离

隔离执行环境是指单个组件在其自己的专用空间内运行的一种方案。

这可能意味着将您的应用程序各组件分别部署到单独的服务器,或将您的服务配置为在 chroot 环境或容器中运行。隔离的级别取决于应用程序的要求和基础架构的现实。

它是如何增强安全性的?

将您的业务隔离到单独的环境中执行,分离的各个组件能限制入侵者对其他部分基础设施的访问。

这很难设置吗?

使用容器技术隔离应用程序相对简单,通过将各个组件封装在容器中,您可以快速实现一些隔离措施,但请注意,Docker 并不将其容器化视为安全功能。

为每一个应用设置 chroot 环境也可以提供一定程度的隔离,但这也不是万无一失的隔离方法,因为存在突破 chroot 环境的方法。将组件移动到单独的服务器是最好的隔离方案,并且也是最简单的,但这也会带来更多的成本开销。

总结

上述内容只是改进系统安全性的一些增强策略。重点是要意识到,安全不可事后诸葛亮,必须从一开始就实施。

1,746 views

发表评论