确保 Linux VPS 安全简介

<$>[警告]

状态: 已弃用

本文已弃用,不再维护。作为参考,它可能仍然有用,但可能不是最新的最佳实践。

See Instead

请查看我们更新的指南保护您的Servers.的推荐安全措施 <$>

简介


控制您自己的Linux服务器是一个尝试新事物并利用伟大平台的功能和灵活性的机会。但是,Linux服务器管理员必须采取与任何联网计算机相同的谨慎措施,以确保其安全。

有许多不同的安全主题,属于Linux安全的一般类别,以及关于Linux服务器的适当安全级别是什么样子的许多观点。

从中吸取的主要教训是,您必须自己决定哪些安全保护措施是必要的。在这样做之前,您应该意识到风险和权衡,并在可用性和安全性之间做出对您有意义的平衡。

本文旨在帮助您了解在Linux服务器环境中要采取的一些最常见的安全措施。这不是一个详尽的列表,也不包括推荐的配置,但它将提供指向更全面的资源的链接,并讨论为什么每个组件都是许多系统的重要组成部分。

防火墙封堵访问


向所有用户推荐的最简单的步骤之一是启用和配置防火墙。防火墙在互联网的一般流量和您的机器之间起着屏障的作用。他们查看进出您的服务器的流量,并决定是否应该允许传递信息。

它们通过对照用户配置的一组规则检查有问题的流量来实现此目的。通常,服务器将只使用几个特定的网络端口来提供合法服务。其余端口未使用,应在防火墙后安全保护,该防火墙将拒绝所有发往这些位置的流量。

这允许您删除不期望的数据,甚至在某些情况下限制实际服务的使用。 健全的防火墙规则为网络安全提供了良好的基础。

有相当多的防火墙解决方案可用。下面我们将简要讨论一些更受欢迎的选项。

_UFW


UFW代表简单防火墙。其目标是在不使用其他解决方案的复杂语法的情况下提供良好的保护。

UFW和大多数Linux防火墙一样,实际上是控制Linux内核中包含的NetFilter防火墙的前端。对于不熟悉Linux防火墙解决方案的人来说,这通常是一个简单的防火墙,通常是一个很好的选择。

您可以通过点击此链接了解如何启用和配置UFW firewall并了解更多信息。

iptabes


也许最著名的Linux防火墙解决方案是iptabLes。IptabLes是用于管理Linux内核中包含的NetFilter防火墙的另一个组件。它已经存在了很长一段时间,并经过了严格的安全审计,以确保其安全。有一个名为ip6table的iptabLes版本用于创建IPv6限制。

在管理Linux机器的过程中,您可能会遇到iptabLes配置。语法一开始可能很难掌握,但它是一个非常强大的工具,可以使用非常灵活的规则集进行配置。

你可以在这里了解更多关于如何在Ubuntu或Debian系统上实现一些iptables防火墙规则,或者在这里了解如何在基于CentOS/Fedora/RHEL的发行版上使用iptables

IP6表

如上所述,ipables用于操作包含IPv4规则的表。如果您的服务器上启用了IPv6,您还需要注意IPv6的等价物:ip6ables

Linux内核中包含的NetFilter防火墙使IPv4和IPv6流量完全分开。这些数据存储在不同的表中。决定数据包最终命运的规则由所使用的协议版本决定。

对于服务器管理员来说,这意味着在启用版本6时必须维护单独的规则。 ip6tables命令与iptables命令共享相同的语法,因此在版本6的表中实现相同的限制集通常是直接的。 但是,您必须确保匹配指向您的IPv6地址的流量,才能正常工作。

_


尽管IPTABLes长期以来一直是Linux环境中防火墙的标准,但最近在Linux内核中添加了一个名为nfables的新防火墙。这是一个项目,由开发iptabes的同一个团队完成,目的是最终取代iptabes。

Nfables防火墙试图实现比其iptabes前身更具可读性的语法,并在同一工具中实现了对IPv4和IPv6的支持。虽然目前大多数版本的Linux都没有提供足够新的内核来实现nftable,但它很快就会变得非常常见,您应该尝试熟悉它的用法。

使用SSH远程安全登录


在管理您没有本地访问权限的服务器时,您需要远程登录。在Linux系统上实现这一点的标准、安全的方法是通过一种称为SSH的协议,它代表安全外壳。

SSH提供端到端加密、通过安全连接以隧道方式传输不安全流量、X转发(网络连接上的图形用户界面)等功能。基本上,如果您无法访问本地连接或带外管理,SSH应该是您与计算机交互的主要方式。

虽然协议本身非常安全,并且经过了广泛的研究和代码审查,但您的配置选择可能有助于或阻碍服务的安全性。我们将在下面讨论一些选项。

密码与SSH密钥登录


SSH有一个灵活的身份验证模型,允许您使用多种不同的方法登录。 两个最常用的选择是密码和SSH密钥身份验证。

虽然密码身份验证可能是大多数用户最自然的模式,但它也是这两种选择中安全性较低的一种。密码登录允许潜在入侵者不断猜测密码,直到找到成功的密码组合。这被称为暴力逼迫,潜在的攻击者可以很容易地使用现代工具实现自动化。

另一方面,SSH密钥通过生成安全密钥对来操作。公钥被创建为一种用于识别用户的测试。它可以没有问题地公开共享,除了识别用户并允许使用匹配的私钥登录到用户之外,不能用于任何其他用途。私钥应该保密,并用于通过其相关公钥的测试。

基本上,您可以在服务器上添加您的公共SSH密钥,它将允许您使用匹配的私钥登录。这些密钥太复杂了,暴力逼迫是不切实际的。此外,您还可以选择将长密码添加到密钥中,从而增加安全性。

要了解有关如何使用SSH的更多信息,请单击此处,并查看此链接以了解如何在您的server.上设置SSH键

实现ail2ban封杀恶意IP地址


有助于提高SSH配置的一般安全性的一个步骤是实现类似Fail2ban的解决方案。Fail2ban是一项服务,它监视日志文件,以确定远程系统是否可能不是合法用户,然后暂时禁止来自相关IP地址的未来流量。

通过设置合理的Fail2ban策略,您可以标记持续尝试登录失败的计算机,并添加防火墙规则以在设置的时间段内丢弃来自这些计算机的流量。这是一种简单的方式来阻止经常使用的暴力方法,因为当它们被禁止时,它们将不得不休息一段时间。这通常足以阻止进一步的暴力企图。

您可以在此处了解如何在Ubuntu上实施故障2ban策略。这里有类似的DebianCentOS指南。

实现入侵检测系统检测未经授权的入侵


要记住的一个重要考虑事项是制定一种策略来检测未经授权的使用。你可能已经采取了预防措施,但你也需要知道它们是否失败了。

入侵检测系统,也称为入侵检测系统,在处于已知良好的状态时会对配置和文件详细信息进行编录。然后,它针对这些记录的状态运行比较,以找出文件是否已更改或设置是否已修改。

有相当多的入侵检测系统。我们将在下面介绍几个。

Tripwire


最著名的入侵检测系统实现之一是Tripwire。Tripwire编译了一个系统文件数据库,并使用一组密钥保护其配置文件和二进制文件。在选择了配置详细信息并定义了异常之后,后续运行会通知它所监视的文件的任何更改。

该策略模型非常灵活,允许您根据您的环境调整其属性。然后,您可以通过cron作业配置tripwire运行,甚至可以在发生异常活动时执行电子邮件通知。

点击此处了解更多如何实施tripwire]。

帮助


入侵检测系统的另一个选择是AIDE。与Tripwire类似,AIDE的运作方式是建立一个数据库,并将当前系统状态与其存储的已知完好值进行比较。当出现差异时,它可以通知管理员该问题。

AIDE和Tripwire都为同一个问题提供了类似的解决方案。查看文档并尝试这两种解决方案,找出您更喜欢哪种解决方案。

有关如何将AIDE用作IDS,的指南》,请查看此处。

  • 帕萨德

PSAD工具关注的系统部分与上面列出的工具不同。PSAD不监视系统文件,而是密切关注防火墙日志,试图检测恶意活动。

例如,如果用户试图通过端口扫描来探测漏洞,PSAD可以检测到这一活动,并动态更改防火墙规则以锁定违规用户。该工具可以注册不同的威胁级别,并根据问题的严重程度做出响应。它还可以选择向管理员发送电子邮件。

要了解如何使用PSAD作为网络IDS,,请访问此链接。

兄弟


基于网络的IDS的另一个选择是Bro。 Bro实际上是一个网络监控框架,可以用作网络IDS或其他目的,如收集使用统计数据,调查问题或检测模式。

Bro系统分为两层。 第一层监视活动并生成它认为的事件。 第二层通过一个策略框架运行生成的事件,该策略框架规定应该对流量执行什么操作(如果有的话)。 它可以生成警报、执行系统命令、简单地记录事件或采取其他路径。

要了解如何使用Bro作为IDS,请单击此处。

RKHunter


虽然从技术上讲,rkHunter不是一个入侵检测系统,但它的工作原理与基于主机的入侵检测系统很多相同,以检测rootkit和已知的恶意软件。

虽然病毒在Linux世界中很少见,但恶意软件和rootkit随处可见,它们可以危害您的机器或允许继续访问成功的攻击者。RKHunter下载已知漏洞的列表,然后根据数据库检查您的系统。如果在某些常见应用程序中检测到不安全的设置,它还会向您发出警报。

您可以阅读这篇文章来了解如何在Ubuntu.上使用RKHunter

一般安全建议


虽然上面的工具和配置可以帮助您保护系统的各个部分,但良好的安全性并不是仅仅实现一个工具就忘记它。良好的安全表现在一定的心态中,通过勤奋、仔细和将安全作为一个过程来实现。

有一些一般规则可以帮助您在安全使用系统方面设置正确的方向。

关注更新,定期更新


软件漏洞无时无刻不在您的系统上可能存在的每一种软件中被发现。分发维护人员通常很好地跟踪最新的安全补丁,并将这些更新推送到他们的存储库中。

但是,如果您没有下载并安装安全更新,则在存储库中提供安全更新对您的服务器没有好处。尽管许多服务器受益于依赖稳定且经过良好测试的系统软件版本,但安全补丁不应被推迟,应被视为关键更新。

大多数发行版都提供了安全邮件列表和单独的安全存储库,以便仅下载和安装安全补丁。

在官方渠道外下载软件要当心


大多数用户会坚持使用官方版本库中提供的软件,并且大多数发行版都提供签名软件包。用户通常可以信任发行版维护者,并将他们的关注点集中在从官方渠道以外获得的软件的安全性上。

您可以选择信任来自您的发行版的包或可从项目的官方网站获得的软件,但请注意,除非您亲自审核每个软件,否则会有风险。大多数用户认为这是可以接受的风险水平。

另一方面,从随机存储库和由您不认识的人员或组织维护的PPA获取的软件可能会带来巨大的安全风险。没有固定的规则,大多数非官方软件来源可能是完全安全的,但请注意,每当您信任另一方时,您都是在冒险。

确保你能向自己解释为什么你信任这个消息来源。如果您不能做到这一点,请考虑将您的安全风险视为一个更大的问题,而不是您将获得的便利。

了解您的服务并限制它们


尽管运行服务器的整个过程都可能提供您可以访问的服务,但请将在您的计算机上运行的服务限制为您使用和需要的服务。将每个已启用的服务视为可能的威胁载体,并尝试在不影响核心功能的情况下尽可能消除更多的威胁载体。

这意味着,如果您运行的是无外设(未连接显示器)服务器,并且不运行任何图形(非Web)程序,则应该禁用并可能卸载X Display服务器。在其他领域也可以采取类似的措施。没有打印机?禁用LP服务。没有Windows网络共享?禁用Samba服务。

您可以通过各种方式发现您的计算机上运行了哪些服务。本文在)。

不要使用FTP,改用SFTP


这对许多人来说可能是一个很难接受的问题,但FTP是一种本质上不安全的协议。 所有身份验证都是以纯文本形式发送的,这意味着任何监视服务器和本地计算机之间连接的人都可以看到您的登录详细信息。

只有极少数情况下,可能可以实现ftp。如果你运行的是匿名的、公开的、只读的下载镜像,那么ftp是一个不错的选择。在另一种情况下,如果您只是在启用NAT的防火墙后的两台计算机之间传输文件,并且您相信您的网络是安全的,则可以选择使用FTP。

在几乎所有其他情况下,您应该使用更安全的替代方案。 SSH套件附带了一个名为SFTP的替代协议,该协议在表面上以类似的方式运行,但它基于SSH协议的相同安全性。

这允许您以与传统使用FTP相同的方式在服务器之间传输信息,但没有风险。大多数现代的FTP客户端还可以与SFTP服务器通信。

要了解如何使用sftp传输文件securely,,请查看本指南。

实施合理的用户安全策略


在管理用户时,您可以采取许多步骤来更好地保护您的系统。

一个建议是禁用root登录。 由于root用户存在于任何类POSIX系统上,并且它是一个全能的帐户,因此它是许多攻击者的一个有吸引力的目标。 在配置了sudo访问之后,或者如果您习惯使用su命令,则禁用root登录通常是一个好主意。 很多人不同意这个建议,但看看它是否适合你。

可以在SSH守护程序中禁用远程超级用户登录或禁用本地登录,您可以在/etc/securetty文件中进行限制。您还可以将根用户的外壳设置为非外壳,以禁用根外壳访问,并设置PAM规则来限制根登录。Redhat有一篇很棒的文章,内容是如何禁用根logins.

对用户帐户实施的另一个好策略是为每个用户和服务创建唯一的帐户,并仅授予他们完成工作所需的最低权限。锁定他们不需要访问的所有内容,并取消除削弱他们之外的所有特权。

这是一项重要的策略,因为如果一个用户或服务受到攻击,不会导致多米诺骨牌效应,从而允许攻击者访问更多的系统。这种隔舱系统有助于隔离问题,就像舱壁和水密门系统可以帮助防止船在船体破裂时沉没一样。

与我们上面讨论的服务策略类似,您还应该注意禁用任何不再需要的用户帐户。当您卸载软件或用户不再具有系统访问权限时,可能会发生这种情况。

注意权限设置


文件权限是许多用户感到沮丧的一个巨大来源。在允许您执行所需操作的同时不使自己受到伤害的权限之间找到平衡可能很困难,并且在每种情况下都需要仔细的关注和思考。

设置一个合理的无掩码策略(为新文件和目录定义默认权限的属性)在创建良好的默认权限方面大有裨益。您可以在此处了解权限如何工作以及如何调整您的umAsk value

一般来说,在将任何内容设置为全球可写之前,您应该三思而后行,特别是如果它可以以任何方式访问互联网的话。这可能会产生极端的后果。此外,除非您完全知道自己在做什么,否则不应在权限中设置SGID或SUID位。另外,检查您的文件是否有所有者和组。

您的文件权限设置将根据您的具体使用情况而有很大差异,但您应该始终尝试查看是否有方法可以使用较少的权限。 这是最容易出错的事情之一,也是互联网上流传着很多糟糕建议的领域。

定期检查服务器上的恶意软件


虽然与Windows相比,Linux通常较少受到恶意软件的攻击,但它也绝不能幸免于恶意软件。除了实施入侵检测系统来检测入侵企图外,扫描恶意软件还可以帮助识别活动痕迹,这些活动表明您的计算机上安装了非法软件。

有许多可用于Linux系统的恶意软件扫描程序可用于定期验证服务器的完整性。Linux恶意软件检测,也称为‘MalDete’或LMD,是一个流行的选项,可以很容易地安装和配置为扫描已知的恶意软件签名。它可以手动运行以执行一次性扫描,也可以通过守护程序运行定期排定的扫描。这些扫描的报告可以通过电子邮件发送给服务器管理员。

如何保护您正在使用的特定软件


尽管本指南的篇幅不够大,无法详细介绍保护每一种服务或应用程序的细节,但网上有许多教程和指南。您应该阅读您打算在系统上实现的每个项目的安全建议。

此外,流行的服务器软件,如Web服务器或数据库管理系统,都有专门用于安全的整个网站和数据库。一般而言,在将每项服务放到网上之前,您应该仔细阅读并确保其安全。

您可以查看我们的安全section],了解有关您正在使用的软件的更具体建议。

结论


现在,您应该对可以在您的Linux服务器上实现的一般安全实践有了很好的了解。虽然我们已经努力提到了许多非常重要的领域,但归根结底,你将不得不自己做出许多决定。当您管理服务器时,您必须对服务器的安全负责。

这不是您可以在一开始就快速配置的东西,它是一个过程,是审计您的系统、实施解决方案、评估日志和警报、重新评估您的需求等过程中的持续练习。您需要警惕地保护您的系统,并始终评估和监视解决方案的结果。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus