保护您的LinuxVPS的简介
介绍
控制您自己的 Linux 服务器是一个尝试新事物并利用出色平台的强大功能和灵活性的机会。 但是,Linux 服务器管理员必须采取与任何联网机器相同的谨慎态度,以确保其安全。
有许多不同的安全主题属于“Linux 安全”这一一般类别,并且对于 Linux 服务器的适当安全级别是什么样的有许多意见。
摆脱这一点的主要事情是,您必须自己决定需要哪些安全保护。 在你这样做之前,你应该意识到风险和权衡,并决定对你有意义的可用性和安全性之间的平衡。
本文旨在帮助您了解在 Linux 服务器环境中采取的一些最常见的安全措施。 这不是一个详尽的列表,也不包括推荐的配置,但它将提供指向更全面资源的链接,并讨论为什么每个组件都是许多系统的重要组成部分。
使用防火墙阻止访问
向所有用户推荐的最简单的步骤之一是启用和配置防火墙。 防火墙充当 Internet 的一般流量与您的计算机之间的屏障。 他们查看进出您的服务器的流量,并决定它是否应该允许传递信息。
他们通过根据用户配置的一组规则检查有问题的流量来做到这一点。 通常,服务器只会将几个特定的网络端口用于合法服务。 其余端口未使用,应在防火墙后面进行安全保护,防火墙将拒绝发往这些位置的所有流量。
这允许您删除您不期望的数据,甚至在某些情况下限制您的真实服务的使用。 健全的防火墙规则为网络安全提供了良好的基础。
有相当多的防火墙解决方案可用。 我们将在下面简要讨论一些更受欢迎的选项。
UFW
UFW 代表简单防火墙。 它的目标是在没有其他解决方案的复杂语法的情况下提供良好的保护。
UFW 和大多数 Linux 防火墙一样,实际上是控制 Linux 内核中包含的 netfilter 防火墙的前端。 对于不熟悉 Linux 防火墙解决方案的人来说,这通常是一个简单的防火墙,通常是一个不错的选择。
您可以了解如何启用和配置UFW防火墙,并通过单击此链接了解更多信息。
IPTables
也许最著名的 Linux 防火墙解决方案是 iptables。 IPTables 是另一个用于管理 Linux 内核中包含的 netfilter 防火墙的组件。 它已经存在了很长时间,并且经过了严格的安全审核以确保其安全性。 有一个名为 ip6tables 的 iptables 版本用于创建 IPv6 限制。
在管理 Linux 机器期间,您可能会遇到 iptables 配置。 语法一开始可能很难掌握,但它是一个非常强大的工具,可以配置非常灵活的规则集。
您可以在此处了解有关 如何在 Ubuntu 或 Debian 系统 上实施一些 iptables 防火墙规则的更多信息,或在此处了解 如何在基于 CentOS/Fedora/RHEL 的发行版 上使用 iptables。
IP6表
如上所述,iptables
用于操作包含 IPv4 规则的表。 如果您在服务器上启用了 IPv6,您还需要注意 IPv6 等效项:ip6tables
。
Linux 内核中包含的 netfilter 防火墙使 IPv4 和 IPv6 流量完全分离。 这些存储在不同的表中。 决定数据包最终命运的规则由正在使用的协议版本决定。
这对服务器的管理员意味着当启用版本 6 时必须维护一个单独的规则集。 ip6tables
命令与 iptables
命令共享相同的语法,因此在版本 6 表中实施相同的一组限制通常很简单。 但是,您必须确保匹配指向您的 IPv6 地址的流量,才能正常工作。
NFTables
虽然 iptables 长期以来一直是 Linux 环境中防火墙的标准,但最近在 Linux 内核中添加了一个名为 nftables 的新防火墙。 这是制作 iptables 的同一团队的一个项目,旨在最终取代 iptables。
nftables 防火墙尝试实现比其 iptables 前身更具可读性的语法,并将 IPv4 和 IPv6 支持实现到同一个工具中。 虽然此时大多数版本的 Linux 都没有提供足够新的内核来实现 nftables,但它很快就会变得非常普遍,您应该尝试熟悉它的用法。
使用 SSH 远程安全登录
在管理您没有本地访问权限的服务器时,您需要远程登录。 在 Linux 系统上实现此目的的标准、安全的方法是通过称为 SSH 的协议,它代表安全外壳。
SSH 提供端到端加密、通过安全连接传输不安全流量的能力、X 转发(通过网络连接的图形用户界面)等等。 基本上,如果您无法访问本地连接或带外管理,那么 SSH 应该是您与机器交互的主要方式。
虽然协议本身非常安全并且经过了广泛的研究和代码审查,但您的配置选择可能有助于或阻碍服务的安全性。 我们将在下面讨论一些选项。
密码与 SSH 密钥登录
SSH 具有灵活的身份验证模型,允许您使用多种不同的方法登录。 两个最流行的选择是密码和 SSH 密钥身份验证。
虽然密码身份验证可能是大多数用户最自然的模式,但它也是这两种选择中不太安全的。 密码登录允许潜在的入侵者不断猜测密码,直到找到成功的组合。 这被称为暴力破解,并且可以很容易地被潜在的攻击者使用现代工具自动化。
另一方面,SSH 密钥通过生成安全密钥对来运行。 创建公钥作为一种测试来识别用户。 它可以毫无问题地公开共享,并且只能用于识别用户并允许使用匹配的私钥登录用户。 私钥应保密,用于通过相关公钥的测试。
基本上,您可以在服务器上添加您的公共 SSH 密钥,它将允许您使用匹配的私钥登录。 这些密钥非常复杂,以至于暴力破解是不切实际的。 此外,您可以选择将长密码短语添加到您的密钥中,以增加安全性。
要了解有关 如何使用 SSH 的更多信息,请单击此处,并查看此链接以了解 如何在您的服务器上设置 SSH 密钥 。
实施 fail2ban 以禁止恶意 IP 地址
有助于提高 SSH 配置的一般安全性的一个步骤是实施类似 fail2ban 的解决方案。 Fail2ban 是一项监控日志文件的服务,以确定远程系统是否可能不是合法用户,然后暂时禁止来自相关 IP 地址的未来流量。
设置合理的 fail2ban 策略可以让您标记持续尝试登录失败的计算机,并添加防火墙规则以在设定的时间段内丢弃来自它们的流量。 这是阻止经常使用的蛮力方法的一种简单方法,因为它们在被禁止时必须休息一段时间。 这通常足以阻止进一步的蛮力尝试。
您可以在此处了解 如何在 Ubuntu 上实施 fail2ban 策略。 Debian 和 CentOS 这里有类似的指南。
实施入侵检测系统以检测未经授权的进入
要记住的一个重要考虑因素是制定检测未经授权使用的策略。 您可能已经采取了预防措施,但您还需要知道它们是否失败了。
入侵检测系统(也称为 IDS)会在处于已知良好状态时对配置和文件详细信息进行编目。 然后,它与这些记录的状态进行比较,以确定文件是否已更改或设置已被修改。
有相当多的入侵检测系统。 我们将在下面介绍一些。
绊线
最著名的 IDS 实现之一是tripwire。 Tripwire 编译系统文件数据库并使用一组密钥保护其配置文件和二进制文件。 选择配置详细信息并定义异常后,后续运行会通知其监视的文件的任何更改。
策略模型非常灵活,允许您根据环境调整其属性。 然后,您可以通过 cron 作业配置tripwire 运行,甚至在发生异常活动时实施电子邮件通知。
在此处了解有关 如何实现tripwire 的更多信息。
助手
IDS 的另一个选择是 Aide。 与tripwire 类似,Aide 通过构建数据库并将当前系统状态与其存储的已知良好值进行比较来运行。 当出现差异时,它可以将问题通知管理员。
Aide 和tripwire 都针对同一问题提供了类似的解决方案。 查看文档并尝试两种解决方案,找出您更喜欢的解决方案。
有关 如何将 Aide 用作 IDS 的指南,请查看此处。
悲伤
psad 工具关注的系统部分与上面列出的工具不同。 psad 不会监控系统文件,而是密切关注防火墙日志以尝试检测恶意活动。
例如,如果用户试图通过端口扫描来探测漏洞,psad 可以检测到此活动并动态更改防火墙规则以锁定违规用户。 该工具可以记录不同的威胁级别,并根据问题的严重性做出响应。 它还可以选择向管理员发送电子邮件。
要了解 如何使用 psad 作为网络 IDS,请点击此链接。
兄弟
基于网络的 IDS 的另一个选择是 Bro。 Bro 实际上是一个网络监控框架,可以用作网络 IDS 或用于其他目的,例如收集使用情况统计信息、调查问题或检测模式。
Bro系统分为两层。 第一层监控活动并生成它认为的事件。 第二层通过一个策略框架运行生成的事件,该框架指示应该对流量执行什么操作(如果有的话)。 它可以生成警报、执行系统命令、简单地记录事件或采用其他路径。
要了解 如何将 Bro 用作 IDS,请单击此处。
RK猎人
虽然在技术上不是入侵检测系统,但 rkhunter 在许多与基于主机的入侵检测系统相同的原理上运行,以检测 rootkit 和已知恶意软件。
虽然病毒在 Linux 世界中很少见,但恶意软件和 rootkit 无处不在,它们可能会破坏您的机器或允许继续访问成功的利用者。 RKHunter 下载已知漏洞列表,然后根据数据库检查您的系统。 如果在某些常见应用程序中检测到不安全的设置,它还会提醒您。
您可以查看这篇文章以了解 如何在 Ubuntu 上使用 RKHunter。
一般安全建议
虽然上述工具和配置可以帮助您保护系统的某些部分,但良好的安全性并不仅仅来自于实施一个工具并忘记它。 良好的安全性体现在一定的心态中,是通过勤奋、审查和参与安全作为一个过程来实现的。
有一些通用规则可以帮助您在安全使用系统方面朝着正确的方向前进。
注意更新,定期更新
几乎在您系统上可能拥有的每一种软件中都经常发现软件漏洞。 发行版维护者通常会很好地跟上最新的安全补丁并将这些更新推送到他们的存储库中。
但是,如果您没有下载并安装更新,那么在存储库中提供安全更新对您的服务器没有好处。 尽管许多服务器都受益于稳定、经过充分测试的系统软件版本,但不应推迟安全补丁,而应将其视为关键更新。
大多数发行版都提供安全邮件列表和单独的安全存储库,仅用于下载和安装安全补丁。
在官方渠道之外下载软件时要小心
大多数用户将坚持使用官方存储库中提供的软件进行分发,并且大多数发行版都提供签名包。 用户通常可以信任分发维护者,并将他们的注意力集中在官方渠道之外获得的软件的安全性上。
您可以选择信任您的发行版中的软件包或项目官方网站上提供的软件,但请注意,除非您自己审核每个软件,否则存在风险。 大多数用户认为这是可接受的风险水平。
另一方面,从您不认识的个人或组织维护的随机存储库和 PPA 获取的软件可能会带来巨大的安全风险。 没有固定规则,大多数非官方软件来源可能是完全安全的,但请注意,只要您信任另一方,您就是在冒险。
确保您可以向自己解释为什么您信任来源。 如果您无法做到这一点,请考虑权衡您的安全风险,而不是您将获得的便利。
了解您的服务并限制它们
尽管运行服务器的全部目的可能是提供您可以访问的服务,但将您机器上运行的服务限制为您使用和需要的服务。 将每个启用的服务都视为可能的威胁向量,并尝试在不影响核心功能的情况下尽可能多地消除威胁向量。
这意味着如果您正在运行无头(未连接显示器)服务器并且不运行任何图形(非 Web)程序,您应该禁用并可能卸载您的 X 显示服务器。 在其他领域也可以采取类似措施。 没有打印机? 禁用“lp”服务。 没有 Windows 网络共享? 禁用“samba”服务。
您可以通过多种方式发现您的计算机上运行了哪些服务。 本文介绍了如何在“创建需求列表”部分下检测启用的服务。
不要使用 FTP; 改用 SFTP
对于许多人来说,这可能很难接受,但 FTP 是一种本质上不安全的协议。 所有身份验证都以纯文本形式发送,这意味着任何监视您的服务器和本地计算机之间的连接的人都可以看到您的登录详细信息。
只有极少数情况下可以实现 FTP。 如果您正在运行一个匿名的、公开的、只读的下载镜像,那么 FTP 是一个不错的选择。 另一种选择 FTP 的情况是,当您只是在启用 NAT 的防火墙后面的两台计算机之间传输文件,并且您相信您的网络是安全的。
在几乎所有其他情况下,您应该使用更安全的替代方案。 SSH 套件附带了一个名为 SFTP 的替代协议,该协议在表面上以类似的方式运行,但它基于 SSH 协议的相同安全性。
这允许您以与传统使用 FTP 相同的方式在服务器之间传输信息,但没有风险。 大多数现代 FTP 客户端也可以与 SFTP 服务器通信。
要了解 如何使用 SFTP 安全传输文件 ,请查看本指南。
实施明智的用户安全策略
在管理用户时,您可以采取许多步骤来更好地保护您的系统。
一种建议是禁用 root 登录。 由于 root 用户存在于任何类似 POSIX 的系统上,并且它是一个全能的帐户,因此它对许多攻击者来说是一个有吸引力的目标。 在您配置了 sudo 访问权限之后,或者如果您习惯使用 su 命令,禁用 root 登录通常是一个好主意。 许多人不同意这个建议,但请检查它是否适合您。
可以在 SSH 守护进程中禁用远程 root 登录或禁用本地登录,您可以在 /etc/securetty
文件中进行限制。 您还可以将 root 用户的 shell 设置为非 shell 以禁用 root shell 访问,并设置 PAM 规则来限制 root 登录。 RedHat 有一篇关于 如何禁用 root 登录 的精彩文章。
使用用户帐户实施的另一个好策略是为每个用户和服务创建唯一帐户,并仅授予他们完成工作的最低权限。 锁定他们不需要访问的所有内容,并取消所有特权,以免削弱他们。
这是一项重要的策略,因为如果一个用户或服务受到威胁,它不会导致多米诺骨牌效应,从而允许攻击者获得对更多系统的访问权限。 这种分隔系统可以帮助您隔离问题,就像舱壁和水密门系统可以帮助防止船体在船体破裂时沉没一样。
与我们上面讨论的服务策略类似,您还应该注意禁用任何不再需要的用户帐户。 当您卸载软件或用户不再有权访问系统时,可能会发生这种情况。
注意权限设置
文件权限是许多用户感到沮丧的一大原因。 在允许您做您需要做的事情而又不让自己受到伤害的情况下找到权限平衡可能很困难,并且需要在每种情况下都仔细注意和思考。
设置一个合理的 umask 策略(定义新文件和目录的默认权限的属性)可以大大有助于创建良好的默认值。 您可以在此处了解 权限如何工作以及如何调整您的 umask 值。
一般来说,在将任何内容设置为全球可写之前,您应该三思而后行,尤其是当它可以以任何方式访问互联网时。 这可能会产生极端后果。 此外,除非您绝对知道自己在做什么,否则不应在权限中设置 SGID 或 SUID 位。 此外,请检查您的文件是否具有所有者和组。
您的文件权限设置将根据您的具体使用情况而有很大差异,但您应该始终尝试查看是否有一种方法可以使用更少的权限。 这是最容易出错的事情之一,也是互联网上流传着很多糟糕建议的地方。
定期检查服务器上的恶意软件
虽然 Linux 通常不像 Windows 那样成为恶意软件的目标,但它绝不会免受恶意软件的攻击。 结合实施 IDS 来检测入侵企图,扫描恶意软件可以帮助识别表明您的计算机上安装了非法软件的活动痕迹。
有许多可用于 Linux 系统的恶意软件扫描程序可用于定期验证服务器的完整性。 Linux Malware Detect,也称为 maldet
或 LMD,是一种流行的选项,可以轻松安装和配置以扫描已知的恶意软件签名。 它可以手动运行以执行一次性扫描,也可以被守护以运行定期计划的扫描。 这些扫描的报告可以通过电子邮件发送给服务器管理员。
如何保护您正在使用的特定软件
尽管本指南不够大,无法详细介绍保护每种服务或应用程序的具体细节,但在线提供了许多教程和指南。 您应该阅读您打算在系统上实施的每个项目的安全建议。
此外,流行的服务器软件(如 Web 服务器或数据库管理系统)具有专门用于安全性的整个网站和数据库。 通常,您应该在将每项服务上线之前阅读并保护其安全。
您可以查看我们的 安全部分 以获取有关您正在使用的软件的更具体建议。
结论
您现在应该对可以在 Linux 服务器上实施的一般安全实践有一个不错的了解。 虽然我们努力提及许多高度重要的领域,但归根结底,您将不得不自己做出许多决定。 当您管理服务器时,您必须对服务器的安全负责。
这不是您一开始就可以快速配置的东西,它是一个过程和一个持续的练习,用于审核您的系统、实施解决方案、评估日志和警报、重新评估您的需求等。 您需要警惕保护您的系统,并始终评估和监控解决方案的结果。