服务器要面临着病毒、黑客、信息泄露等安全威胁。那么我们怎样保护服务器安全呢?感兴趣的朋友就跟随一起来看看吧
1、SSH密钥
SSH密钥是一对加密密钥,可用于对SSH服务器进行身份验证,以替代基于密码的登录。认证之前会创建一个私钥和公钥对。用户将私钥保持秘密和安全,而任何人都可以共享公钥。
要配置SSH密钥身份验证,必须将用户的公共密钥放在服务器上的特殊目录中。当用户连接到服务器时,服务器将要求提供证据证明客户端具有关联的私钥。SSH客户端将使用私钥以证明私钥所有权的方式进行响应。然后,服务器将让客户端连接而无需输入密码。要了解有关SSH密钥如何工作的更多信息,请在此处查看我们的文章。
他们如何增强安全性?
使用SSH,可以完全加密任何类型的身份验证,包括密码身份验证。但是,当允许基于密码的登录时,恶意用户可以反复尝试访问服务器。利用现代的计算能力,可以通过自动执行这些尝试并在组合之后尝试组合直到找到正确的密码来获得进入服务器的权限。
设置SSH密钥身份验证可让您禁用基于密码的身份验证。SSH密钥通常比密码具有更多的数据位,这意味着攻击者必须经历更多的可能组合。现代计算硬件认为许多SSH密钥算法不可破解,原因仅在于它们需要太多时间来进行可能的匹配。
SSH密钥非常容易设置,是推荐的远程登录任何Linux或Unix服务器环境的方法。您的计算机上可以生成一对SSH密钥,您可以在几分钟之内将公共密钥传输到服务器。
要了解有关如何设置按键的信息,请遵循本指南。如果仍然需要密码验证,请考虑在服务器上实施诸如fail2ban之类的解决方案以限制密码猜测。
2、防火墙
防火墙是控制哪些服务公开到网络的软件(或硬件)。这意味着阻止或限制对每个端口的访问,除非那些端口应公开可用。
在典型的服务器上,默认情况下可能会运行许多服务。这些可以分为以下几类:
互联网上的任何人都可以匿名访问的公共服务。一个很好的例子是一个Web服务器,它可能允许访问您的站点。 只能由选定的一组授权帐户或从某些位置访问的私人服务。例如数据库控制面板。 内部服务只能从服务器内部访问,而不能将服务暴露给外界。例如,这可能是仅接受本地连接的数据库。
防火墙可以确保根据上述类别来限制对软件的访问。公共服务可以开放给所有人使用,私人服务可以根据不同的标准进行限制。内部服务可以使外界完全无法访问。对于未使用的端口,在大多数配置中,访问被完全阻止。
他们如何增强安全性?
防火墙是任何服务器配置的重要组成部分。即使您的服务本身实现了安全功能或仅限于您希望它们在其上运行的接口,防火墙也可以充当额外的保护层。
正确配置的防火墙将限制对除保持打开状态所需的特定服务之外的所有内容的访问。仅公开一些软件可以减少服务器的攻击面,从而限制易于利用的组件。
Linux系统有许多可用的防火墙,其中某些防火墙的学习曲线比其他防火墙陡峭。但是,一般而言,设置防火墙仅需要几分钟,并且仅需要在服务器的初始设置过程中或在更改计算机上提供的服务时进行。
一个简单的选择是UFW防火墙。其他选项是使用iptables或CSF防火墙。
3、VPN和专用网络
专用网络是仅对某些服务器或用户可用的网络。例如,DigitalOcean专用网络可在同一帐户或同一区域内的团队中的服务器之间实现隔离的通信。
VPN或虚拟专用网络是一种在远程计算机之间创建安全连接并将连接呈现为本地专用网络的方式。这提供了一种配置服务的方式,就好像它们在专用网络上一样,并通过安全连接来连接远程服务器。
他们如何增强安全性?
考虑到两者之间的选择,几乎总是首选使用私有而不是公共网络进行内部通信。但是,由于数据中心内的其他用户都可以访问同一网络,因此您仍然必须实施其他措施来保护服务器之间的通信。
有效地,使用VPN是一种映射只有您的服务器才能看到的专用网络的方法。通信将完全保密和安全。可以将其他应用程序配置为通过VPN软件公开的虚拟接口传递其流量。这样,只有本应由客户在公共Internet上消费的服务才需要在公共网络上公开。
在具有此功能的数据中心中使用专用网络就像在服务器创建过程中启用接口以及配置应用程序和防火墙以使用专用网络一样简单。请记住,数据中心范围的专用网络与使用同一网络的其他服务器共享空间。
对于VPN,初始设置要复杂一些,但是对于大多数用例而言,提高安全性是值得的。VPN上的每个服务器都必须具有安装和配置建立安全连接所需的共享安全性和配置数据。VPN启动并运行后,必须将应用程序配置为使用VPN隧道。要了解有关设置VPN以安全连接基础架构的信息,请查看我们的OpenVPN教程。
4、公钥基础结构和SSL / TLS加密
公钥基础结构(PKI)是指旨在创建,管理和验证用于识别个人并加密通信的证书的系统。SSL或TLS证书可用于相互认证不同的实体。验证后,它们也可以用于建立加密通信。
他们如何增强安全性?
为服务器建立证书颁发机构和管理证书,可以使基础结构中的每个实体验证其他成员的身份并加密其流量。这样可以防止中间人攻击,其中攻击者在您的基础结构中模仿服务器来拦截流量。
可以将每个服务器配置为信任集中式证书颁发机构。之后,可以隐式信任权威机构签署的任何证书。如果您用于通信的应用程序和协议支持TLS / SSL加密,则这是一种对系统进行加密的方式,而不会增加VPN隧道的开销(VPN隧道通常也在内部使用SSL)。
配置证书颁发机构和设置其余的公共密钥基础结构可能需要大量的初始工作。此外,当需要创建,签名或吊销新证书时,管理证书可能会增加管理负担。
对于许多用户而言,随着他们的基础架构需求的增长,实施成熟的公钥基础架构将更加有意义。使用VPN保护组件之间的通信可能是一个很好的制胜法宝,直到达到PKI值得额外管理成本的地步。
5、服务审核
到目前为止,我们已经讨论了可以实施以提高安全性的一些技术。但是,安全性的很大一部分是分析系统,了解可用的攻击面以及尽可能地锁定组件。
服务审核是发现基础架构中的服务器上正在运行哪些服务的过程。通常,默认操作系统配置为在引导时运行某些服务。安装其他软件有时可能会引入依赖关系,这些依赖关系也会自动启动。
服务审核是一种了解系统上正在运行的服务,用于通信的端口以及接受哪些协议的方法。此信息可以帮助您配置防火墙设置。
如何增强安全性?
服务器为内部目的和处理外部客户端而启动许多进程。这些都代表了针对恶意用户的扩展攻击面。您运行的服务越多,可访问软件中存在漏洞的可能性就越大。
了解计算机上正在运行哪些网络服务后,就可以开始分析这些服务了。对于每个问题,您都想问自己一些问题:
该服务应该运行吗? 服务是否在不需要的接口上运行?是否应将其绑定到单个IP? 您的防火墙规则是否构造为允许合法流量传递给该服务? 您的防火墙规则是否阻止了不合法的流量? 您是否有一种方法可以接收有关每个服务漏洞的安全警报?
在基础架构中配置任何新服务器时,这种类型的服务审核应该是标准做法。
进行基本服务审核非常简单。您可以使用以下netstat命令找出哪些服务正在侦听每个接口上的端口。一个简单的示例显示程序名,PID和用于侦听TCP和UDP通信的地址是:
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
你需要保持注意的主要列是Proto,Local Address和PID/Program name。如果地址为0.0.0.0,则该服务正在所有接口上接受连接。
6、文件审核和入侵检测系统
文件审核是在系统处于良好状态时将当前系统与文件记录和系统文件特征进行比较的过程。这用于检测可能已授权的系统更改。
入侵检测系统(IDS)是一种软件,可以监视系统或网络是否存在未经授权的活动。许多基于主机的IDS实现使用文件审核作为检查系统是否已更改的方法。
他们如何增强安全性?
与上述服务级别审核类似,如果您认真考虑确保系统安全,则能够对系统执行文件级别审核非常有用。这可以由管理员定期进行,也可以作为IDS中自动化过程的一部分来完成。
这些策略是绝对确定您的文件系统未被某些用户或进程更改的唯一方法。由于许多原因,入侵者通常希望保持隐藏状态,以便他们可以继续长时间使用服务器。他们可能会用受损版本替换二进制文件。审核文件系统将告诉您是否有任何文件被更改,从而使您对服务器环境的完整性充满信心。
实施IDS或进行文件审核可能是一个非常密集的过程。初始配置包括将您对服务器所做的任何非标准更改告知审核系统,并定义创建基线读数应排除的路径。
这也使日常操作更加复杂。它使更新过程变得复杂,因为您需要在运行更新之前重新检查系统,然后在运行更新后重新创建基准以捕获对软件版本的更改。您还需要将报告卸载到另一个位置,以使入侵者无法更改审核以覆盖其跟踪记录。
尽管这可能会增加您的管理负担,但是能够根据已知有效的副本检查系统是确保在您不知情的情况下不会更改文件的唯一方法之一。Tripwire和Aide是一些流行的文件审核/入侵检测系统。
7、隔离的执行环境
隔离执行环境是指在单个组件各自的专用空间中运行单个组件的任何方法。
这可能意味着将离散的应用程序组件分离到它们自己的服务器上,或者可能涉及将服务配置为在chroot环境或容器中运行。隔离级别在很大程度上取决于您的应用程序要求和基础架构的实际情况。
他们如何增强安全性?
将流程隔离到单独的执行环境中,可以增强隔离可能出现的任何安全问题的能力。类似于舱壁和舱室如何帮助防止船舶破损,分离各个组件可能会限制入侵者对基础设施其他部分的访问权限。
根据您选择的容纳类型,隔离应用程序可能相对简单。通过将各个组件包装在容器中,可以快速实现某种程度的隔离,但是请注意,Docker并不将其容器化视为安全功能。
chroot为每个组件设置环境也可以提供一定程度的隔离,但这也不是万无一失的隔离方法,因为通常有多种方法可以脱离chroot环境。将组件移动到专用计算机是最好的隔离级别,并且在许多情况下可能是最简单的,但对于其他计算机而言可能会花费更多。
8、定期备份数据。定期备份服务器数据是最简单,也是最安全的保护数据的方式。很多中小企业对定期备份数据的重视程度非常低,一旦服务器数据出现丢失或者损坏,将会造成巨大的损失。定期备份数据应该进行多重数据备份,一份出现了问题还有多余的备份。
9、采用raid磁盘阵列存储存储数据。采用raid磁盘阵列的方式不仅能提高数据的交换速度,还能大大增强数据的安全性。可以采用raid1和raid3的方式才存储数据。采用这种的方式存储数据,只要不是所有的硬盘同时损坏,我们就能比较容易地恢复受损的数据。
10、设置合理的权限。设置合理的权限非常有必要,特别是对于那些数据量比较大,机密程度高的网站服务器更应如此。比如:给负责日常更新的用户赋予“编辑”的用户权限。合理设置权限能大大降低非专业人员的误操作,大大提高服务器的数据安全。
11、不盲目操作或者修改数据。对一些专业人员来说,有时一个无心的举动会让整个服务器甚至整个系统陷入瘫痪乃至宕机场,需要重点提醒的是:不要顺便修改或者盲目操作服务器。