本文介绍了Linux服务器安全的关键措施,包括使用防火墙(如UFW和iptables)、采用SSH进行远程登录、实施fail2ban防止恶意IP,以及部署入侵检测系统如Tripwire、Aide和Psad。同时强调了定期更新、谨慎下载软件和优化用户权限的重要性。
简介
掌控自己的 Linux 服务器是一个尝试新事物并利用强大平台的机会。然而,Linux 服务器管理员必须像对待任何网络连接的机器一样谨慎,以保持其安全性和稳定性。
有许多不同的安全主题属于“Linux 安全”这一总类,并且对于 Linux 服务器的适当安全级别有许多不同的看法。
最重要的是,你将不得不自行决定哪些安全保护措施是必要的。在这之前,你应该意识到风险和权衡,并决定对于你来说,可用性和安全性之间的平衡是合理的。
本文旨在帮助你了解 Linux 服务器环境中一些最常见的安全措施。这不是一个详尽的清单,也不涵盖推荐的配置,但它将提供更详尽的资源链接,并讨论为什么每个组件是许多系统中重要的一部分。
使用防火墙阻止访问
向所有用户推荐的最简单步骤之一是启用和配置防火墙。防火墙充当互联网的一般流量和你的机器之间的屏障。它们检查进出服务器的流量,并决定是否允许信息传递。
它们通过检查用户配置的一组规则来执行此操作。通常,服务器只会使用一些特定的网络端口来进行合法服务。其余的端口未被使用,应该安全地保护在防火墙后面,防火墙将拒绝所有前往这些位置的流量。
这使你能够丢弃你不期望的数据,甚至在某些情况下有条件地使用你的真实服务。合理的防火墙规则为网络安全提供了良好的基础。
有许多防火墙解决方案可用。我们将简要讨论一些更受欢迎的选项。
UFW
UFW 代表 uncomplicated firewall。它的目标是在不使用其他解决方案复杂语法的情况下提供良好的保护。
UFW,以及大多数 Linux 防火墙,实际上是一个用于控制 Linux 内核中包含的 netfilter 防火墙的前端。对于那些尚未熟悉 Linux 防火墙解决方案的人来说,这通常是一个简单易用的防火墙,通常是一个不错的选择。
你可以通过点击此链接了解如何启用和配置 UFW 防火墙,并了解更多信息。
IPTables
也许最著名的 Linux 防火墙解决方案是 iptables。IPTables 是用于管理 Linux 内核中包含的 netfilter 防火墙的另一个组件。它已经存在很长时间,并经历了严格的安全审计以确保其安全性。还有一个名为 ip6tables 的 iptables 版本用于创建 IPv6 限制。
在你管理 Linux 机器的时间里,你可能会遇到 iptables 配置。起初,语法可能很复杂,但它是一个非常强大的工具,可以配置非常灵活的规则集。
你可以在此处了解如何在 Ubuntu 或 Debian 系统上实施一些 iptables 防火墙规则,或者在此处了解如何在基于 CentOS/Fedora/RHEL 的发行版上使用 iptables。
IP6Tables
如上所述,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 应该是你与机器交互的主要方式。
虽然协议本身非常安全,并经过了广泛的研究和代码审查,但你的配置选择可能会在服务的安全性方面有所帮助或阻碍。我们将在下面讨论一些选项。
密码 vs SSH 密钥登录
SSH 具有灵活的身份验证模型,允许您使用多种不同的方法进行登录。其中最流行的两种选择是密码和 SSH 密钥身份验证。
虽然对于大多数用户来说,密码身份验证可能是最自然的模型,但它也是这两种选择中较不安全的一种。密码登录允许潜在的入侵者不断猜测密码,直到找到成功的组合。这被称为暴力破解,可以很容易地被潜在攻击者用现代工具自动化。
另一方面,SSH 密钥通过生成一个安全的密钥对来运作。公钥被创建为一种用于识别用户的标识。它可以公开共享而不会出现问题,并且不能用于除了识别用户和允许使用匹配的私钥登录用户之外的任何其他用途。私钥应保密,并用于通过其关联的公钥的测试。
基本上,您可以在服务器上添加您的公共 SSH 密钥,它将允许您使用匹配的私钥进行登录。这些密钥非常复杂,暴力破解是不切实际的。此外,您还可以选择为您的密钥添加长的口令,以增加更多的安全性。
要了解更多关于如何使用 SSH 的信息,请点击这里,并查看此链接以了解如何在服务器上设置 SSH 密钥。
实施 fail2ban 来禁止恶意 IP 地址
提高 SSH 配置的一般安全性的一步是实施类似 fail2ban 的解决方案。Fail2ban 是一个监视日志文件以确定远程系统是否可能不是合法用户的服务,然后暂时禁止与相关 IP 地址的未来流量。
设置合理的 fail2ban 策略可以让您标记那些持续尝试无法成功登录的计算机,并添加防火墙规则以在一段时间内阻止来自它们的流量。这是一种简单的方式来阻碍经常使用的暴力破解方法,因为它们在被禁止时将不得不休息相当长的时间。这通常足以阻止进一步的暴力破解尝试。
您可以在此处了解如何在 Ubuntu 上实施 fail2ban 策略。Debian 和 CentOS 也有类似的指南。
实施入侵检测系统以检测未经授权的进入
需要考虑的一个重要问题是制定一种策略来检测未经授权的使用。您可能已经采取了预防措施,但您还需要知道它们是否失败了。
入侵检测系统,也称为 IDS,会在已知良好状态时记录配置和文件详细信息。然后,它会对这些记录的状态进行比较,以找出文件是否已更改或设置是否已修改。
有很多入侵检测系统。我们将在下面介绍一些。
Tripwire
最著名的 IDS 实现之一是 Tripwire。Tripwire 编译系统文件的数据库,并使用一组密钥保护其配置文件和二进制文件。在选择配置详细信息并定义异常后,后续运行将通知任何对其监视的文件进行了任何更改。
策略模型非常灵活,允许您将其属性塑造成适合您环境的样子。然后,您可以通过 cron 作业配置 Tripwire 运行,甚至在出现异常活动时实施电子邮件通知。
了解更多关于如何实施 Tripwire 的信息,请点击这里。
Aide
IDS 的另一个选择是 Aide。与 Tripwire 类似,Aide 通过构建数据库并比较当前系统状态与其存储的已知良好值来运作。当出现差异时,它可以通知管理员有问题。
Aide 和 Tripwire 都提供了相似的解决方案来解决同样的问题。查看文档并尝试这两种解决方案,找出您更喜欢哪一种。
要了解如何将 Aide 用作 IDS,请查看此处的指南。
Psad
Psad 工具关注的是系统的不同部分,而不是上述工具所列的监视系统文件。Psad 监视防火墙日志,以尝试检测恶意活动。
例如,如果用户尝试使用端口扫描来探测漏洞,Psad 可以检测到此活动并动态地更改防火墙规则以锁定有问题的用户。该工具可以注册不同的威胁级别,并根据问题的严重程度来响应。它还可以选择向管理员发送电子邮件。
要了解如何将 Psad 用作网络 IDS,请点击此处。
Bro
作为网络 IDS 的另一个选择是 Bro。Bro 实际上是一个网络监控框架,可用作网络 IDS 或用于其他目的,如收集使用统计信息、调查问题或检测模式。
Bro 系统分为两层。第一层监视活动并生成其认为是事件的内容。第二层通过策略框架运行生成的事件,该框架规定了应该对流量采取什么行动,如果有的话。它可以生成警报、执行系统命令、仅记录发生的情况,或采取其他路径。
要了解如何将 Bro 用作 IDS,请点击此处。
RKHunter
虽然技术上来说不是入侵检测系统,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 受到的恶意软件攻击较少,但这并不意味着它对恶意软件免疫。与实施入侵检测系统以检测入侵尝试相结合,扫描恶意软件可以帮助识别表明您的机器上安装了非法软件的活动痕迹。
对于 Linux 系统,有许多恶意软件扫描器可用于定期验证服务器的完整性。Linux Malware Detect,也称为 maldet
或 LMD,是一种流行的选项,可以轻松安装和配置以扫描已知的恶意软件签名。它可以手动运行以执行一次性扫描,也可以作为守护进程运行以定期进行扫描。这些扫描的报告可以通过电子邮件发送给服务器管理员。
如何保护您正在使用的特定软件
尽管本指南不足以详细介绍保护每种服务或应用程序的具体方法,但在线上有许多教程和指南可供参考。您应该阅读您打算在系统上实施的每个项目的安全建议。
此外,像 Web 服务器或数据库管理系统这样的流行服务器软件有专门致力于安全性的整个网站和数据库。总的来说,您应该在将其上线之前阅读并保护每项服务。
您可以查看我们的安全部分,了解您正在使用的软件的更具体建议。
结论
现在,您应该对您可以在 Linux 服务器上实施的一般安全实践有了相当的了解。虽然我们努力提及了许多重要领域,但归根结底,您将不得不自行做出许多决定。当您管理服务器时,您必须对服务器的安全性负责。
这不是您可以在一开始快速配置的事情,而是一个审计系统、实施解决方案、评估日志和警报、重新评估您的需求等过程和持续的锻炼。您需要警惕地保护您的系统,并始终评估和监控您解决方案的结果。