跳至内容

Apache 加固 Web 服务器

先决条件和假设

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

简介

无论您是为客户托管许多网站,还是为您的企业托管一个重要的网站,加固您的 Web 服务器都将使您高枕无忧,但需要管理员多做一些前期工作。

当您的客户上传了许多网站时,其中一个很可能上传了具有潜在漏洞的内容管理系统(CMS)。大多数客户专注于易用性,而不是安全性,结果是更新他们自己的 CMS 成为了一个完全被他们忽略的优先级事项。

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

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

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

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

其他注意事项

这里概述的一些工具具有免费和付费选项。您可能需要根据您的需求或支持要求考虑付费版本。研究市面上的产品并权衡所有选项后做出决定是最佳策略。

购买硬件设备来提供这些选项中的许多也是可能的。如果您不想费心安装和维护自己的系统,除了这里概述的选项之外,还有其他选择。

本文档使用 firewalld 防火墙。提供了 firewalld 指南。其中一篇允许熟悉 iptables 的用户 在此处将他们所知道的内容迁移到 firewalld,另一篇则 专门为初学者准备。您可能想在开始之前回顾其中一个过程。

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

这些示例使用私有 IP 地址来模拟公共 IP 地址,但您也可以通过硬件防火墙上的一对一 NAT 来实现相同的功能,并将 Web 服务器连接到该硬件防火墙,而不是连接到网关路由器,并使用私有 IP 地址。

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

约定

  • IP 地址: 使用私有网段:192.168.1.0/24 来模拟公共 IP 地址,并使用 LAN IP 地址网段 10.0.0.0/24。由于这些 IP 网段仅用于私有用途,因此无法在 Internet 上路由它们,但如果没有分配给公司或组织的真实 IP 地址,则无法模拟公共 IP 网段。请记住,就我们的目的而言,192.168.1.0/24 网段是“公共”IP 网段,而 10.0.0.0/24 是“私有”IP 网段。

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

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

    注意

    如今,使用 SFTP 是最佳方法。您可以从 本文档中了解如何安全地使用 SFTP

  • 最后重新加载防火墙

结论

有许多方法可以加固 Apache Web 服务器以提高其安全性。它们每个都独立于其他方法,因此安装和选择您想要的内容由您决定。

每个都要求进行一些配置和调整以满足您的特定需求。由于 Web 服务不断受到不道德的攻击者的攻击,实施其中一些措施至少可以帮助管理员高枕无忧。

作者:Steven Spencer

贡献者:Ezequiel Bruni, Ganna Zhyrnova