Apache 加固 Web 服务器¶
先决条件和假设¶
- 运行 Apache 的 Rocky Linux Web 服务器
- 对从命令行发出命令、查看日志和其他一般的系统管理员职责有很高的熟悉度
- 熟悉命令行编辑器(我们的示例使用
vi
,它通常会运行vim
编辑器,但您可以替换为您喜欢的编辑器) - 假定使用
firewalld
作为包过滤防火墙 - 假定使用网关硬件防火墙,我们的受信任设备将位于其后面
- 假定 Web 服务器直接分配有公共 IP 地址。(此处我们的示例使用私有 IP 地址)
简介¶
无论您是为客户托管许多网站,还是为您的企业托管一个重要的网站,加固您的 Web 服务器都将使您高枕无忧,但需要管理员多做一些前期工作。
当您的客户上传了许多网站时,其中一个很可能上传了具有潜在漏洞的内容管理系统(CMS)。大多数客户专注于易用性,而不是安全性,结果是更新他们自己的 CMS 成为了一个完全被他们忽略的优先级事项。
虽然对于拥有大型 IT 团队的公司来说,通知客户其 CMS 中存在的漏洞是可能的,但这对于小型 IT 团队来说可能不现实。最好的防御就是加固 Web 服务器。
Web 服务器加固可以采取多种形式,包括这里列出的全部或部分工具,以及可能未定义的其他工具。
您可能只使用其中的一些工具,而不使用其他工具。为了清晰和易读,本文档将每个工具拆分为单独的文档。例外情况是主文档中的基于包的防火墙(firewalld
)。
- 一个良好的基于端口的包过滤防火墙(iptables、firewalld 或硬件防火墙 - 我们的示例使用
firewalld
)。请参阅本文档稍后的firewalld
过程。 - 一个主机入侵检测系统 (HIDS),在此情况下为 ossec-hids Apache 加固 Web 服务器 - ossec-hids
- 一个基于 Web 的应用程序防火墙 (WAF),带有
mod_security
规则 Apache 加固 Web 服务器 - mod_security - 数据库安全(此处使用
mariadb-server
) MariaDB 数据库服务器 - 一个安全的 FTP 或 SFTP 服务器(此处使用
vsftpd
) 安全 FTP 服务器 - vsftpd 您也可以在此处使用 sftp 和 SSH 加固过程
此过程不会取代 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)访问我们的受信任设备。定义此设备超出了本文档的范围。作者已在专用硬件上成功地将 PfSense 和 OPNSense 用于此设备。此设备将分配两个 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 进行模拟
图表显示了我们的总体布局。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