跳到内容

Apache 加固的 Web 服务器

先决条件和假设

  • 运行 Apache 的 Rocky Linux Web 服务器
  • 对从命令行发出命令、查看日志和其他一般系统管理员职责有很高的舒适度
  • 对命令行编辑器感到舒适(我们的示例使用 `vi`,它通常会运行 `vim` 编辑器,但您可以用您喜欢的编辑器替换它)
  • 假设使用 `firewalld` 作为数据包过滤器防火墙
  • 假设使用网关硬件防火墙,我们的受信任设备将位于其后面
  • 假设将公用 IP 地址直接应用于 Web 服务器。(在我们的示例中使用私有 IP 地址)

简介

无论您是为客户托管多个网站,还是为您的企业托管一个重要的网站,加固您的 Web 服务器都会让您高枕无忧,这会让管理员付出更多前期工作。

由于客户上传了大量网站,其中一个可能会上传具有漏洞的 CMS(内容管理系统)。大多数客户关注的是易用性,而不是安全性,最终会发生的事情是,更新他们自己的 CMS 成为他们优先事项列表中完全被忽略的过程。

虽然通知客户其 CMS 中的漏洞对于拥有大量 IT 人员的公司来说是可能的,但这对于小型 IT 团队来说可能并不现实。最好的防御就是加固的 Web 服务器。

Web 服务器加固可以采取多种形式,包括这里列出的任何或所有工具,以及可能未定义的其他工具。

您可能会使用其中一些工具,而不是其他工具。为了清晰和可读性,本文档将每个工具拆分为单独的文档。例外情况是此主文档中的基于数据包的防火墙 (`firewalld`)。

此过程不会取代 Apache Web 服务器多站点设置,而是为其添加这些安全元素。如果您还没有阅读它,请在继续之前花一些时间回顾一下。

其他注意事项

本文档中概述的一些工具具有免费和付费选项。您可能需要根据您的需求或支持要求考虑付费版本。研究现有的选项并在权衡所有选项后做出决定是最好的做法。

购买许多这些选项的硬件设备也是可能的。如果您不想麻烦地安装和维护自己的系统,可以选择本文档中概述的以外的其他选项。

本文档使用 `firewalld` 防火墙。`firewalld` 指南是可用的。其中一个指南允许了解 `iptables` 的人 将他们对 `firewalld` 的了解转让到这里,另一个指南则专门针对 初学者。您可能需要在开始之前查看这些过程之一。

您需要为您的系统调整所有这些工具。要实现这一点,需要仔细监控日志以及您的客户报告的 Web 体验。此外,您会发现需要进行持续调整。

这些示例使用私有 IP 地址来模拟公用 IP 地址,但您也可以在硬件防火墙上进行一对一 NAT,并将 Web 服务器连接到该硬件防火墙,而不是连接到网关路由器,并使用私有 IP 地址。

解释这一点需要深入研究所示的硬件防火墙,这超出了本文档的范围。

约定

  • **IP 地址:** 在此使用私有块模拟公用 IP 地址:192.168.1.0/24,并使用 LAN IP 地址块 10.0.0.0/24。由于这些 IP 块用于私有用途,因此无法通过互联网路由这些 IP 块,但无法在没有分配给某些公司或组织的真实 IP 地址的情况下模拟公用 IP 块。请记住,出于我们的目的,192.168.1.0/24 块是“公用”IP 块,而 10.0.0.0/24 块是“私有”IP 块。

  • **硬件防火墙:** 这是控制来自您受信任的网络对您服务器机房设备访问的防火墙。这与您的基于数据包的防火墙不同,尽管它可能是另一台机器上运行的另一个 `firewalld` 实例。此设备允许 ICMP(ping)和 SSH(安全 shell)访问我们的受信任设备。定义此设备超出了本文档的范围。作者已成功使用 PfSenseOPNSense 并将其安装在专用硬件上。此设备将分配两个 IP 地址。一个连接到互联网路由器的模拟公用 IP(192.168.1.2),另一个连接到我们的局域网,即 10.0.0.1。

  • **互联网路由器 IP:** 使用 192.168.1.1/24 模拟此地址
  • **Web 服务器 IP:** 这是分配给我们的 Web 服务器的“公用”IP 地址。同样,使用私有 IP 地址 192.168.1.10/24 模拟此地址

Hardened web server

该图显示了我们的总体布局。`firewalld` 基于数据包的防火墙运行在 Web 服务器上。

安装软件包

每个单独的软件包部分都列出了所需的安装文件以及任何配置过程。

配置 `firewalld`

firewall-cmd --zone=trusted --add-source=192.168.1.2 --permanent
firewall-cmd --zone=trusted --add-service=ssh --permanent
firewall-cmd --zone=public --remove-service=ssh --permanent
firewall-cmd --zone=public --add-service=dns --permanent
firewall-cmd --zone=public --add-service=http --add-service=https --permanent
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-port=20/tcp --permanent
firewall-cmd --zone=public --add-port=7000-7500/tcp --permanent
firewall-cmd --reload

以下是正在发生的事情

  • 将我们的受信任区域设置为硬件防火墙的 IP 地址
  • 从我们的受信任网络接受 SSH(端口 22),即硬件防火墙后面的设备(只有一个 IP 地址)
  • 从公用区域接受 DNS(可以通过指定服务器 IP 地址或本地 DNS 服务器来进一步限制,如果您有这些服务器)
  • 从任何地方通过端口 80 和 443 接受 Web 流量。
  • 接受标准 FTP(端口 20-21)和在 FTP 中进行双向通信所需的被动端口(7000-7500)。这些端口可以根据您的 ftp 服务器配置任意更改为其他端口。

    注意

    现在使用 SFTP 是最好的方法。您可以从 此文档 中了解如何安全地使用 SFTP。

  • 最后重新加载防火墙

结论

有很多方法可以加强 Apache Web 服务器,使其更安全。每个方法都是独立运行的,您可以根据需要进行安装和选择。

每个方法都需要一些配置和调整才能满足您的特定需求。由于 Web 服务不断受到不法分子的攻击,实施其中至少一些方法将有助于管理员安心。

作者:Steven Spencer

贡献者:Ezequiel Bruni,Ganna Zhyrnova