网站搜索

18 个 Apache Web 服务器安全和强化技巧


Apache Web 服务器是最流行和广泛使用的用于托管文件和网站的 Web 服务器之一。它易于安装和配置,可以满足您的托管需求。但是,默认设置并不安全,无法提供您网站所需的急需保护。

在本指南中,我们将介绍一些 Apache 服务器强化提示和技巧,您可以实施它们来增强 Web 服务器的安全性。

1. 如何隐藏 Apache 版本和操作系统信息

默认情况下,Apache Web 服务器会显示其版本,以防您浏览错误的网站 URL。以下是错误页面的示例,指示在网站上找不到该页面。最后一行指示 Apache 版本、主机操作系统、IP 地址及其正在侦听的端口。

显示网络服务器的信息并不是一个好主意,因为这对于黑客的侦察任务来说是一个很好的礼物。为了增加一层安全性并使黑客更难攻击,建议隐藏 Web 服务器信息。

为此,请打开基于 Debian 的发行版上的默认 Apache 配置文件。

sudo vim /etc/apache2/apache2.conf

适用于基于 RHEL 的系统,例如 RHELFedoraCentOSRockyAlmaLinux强>。

sudo vim /etc/httpd/conf/httpd.conf

在文件末尾添加以下行。

ServerTokens Prod
ServerSignature Off

保存更改并重新启动 Apache Web 服务器。

sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

现在重新加载站点,这一次,Web 服务器信息将不会显示。

2. 禁用 Apache 中的目录列表

默认情况下,Apache 允许目录列表,访问者可能会看到文档根 目录中可能拥有的任何文件或目录。

为了演示这一点,我们将创建一个名为 test 的目录。

sudo mkdir -p /var/www/html/test

接下来,我们将导航到该目录并创建一些文件。

cd /var/www/html/test
sudo touch app.py main.py

现在,如果我们访问 URL http://localhost/test,我们将能够查看目录列表。

要禁用目录列表,请转到 Apache 的主配置文件并搜索“Directory”属性。将“Options”参数设置为'-Indexes',如图所示。

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

重新加载 Apache,这一次,当您访问 URL 时,将不再显示目录。

3.定期更新Apache

始终建议使所有应用程序保持最新状态,因为最新的应用程序附带错误修复和安全补丁,可以解决旧软件版本中存在的潜在漏洞。

因此,建议定期将您的应用程序升级到最新版本。

sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

4.在Apache上使用HTTPS加密

Apache默认使用HTTP协议,该协议是一种弱且不安全的协议,容易被窃听。为了提高网站的安全性,更重要的是提高 Google SEO 排名,请考虑使用 SSL 证书加密您的网站。

通过这样做,它将默认的 HTTP 协议切换为 HTTPS,从而使任何人都更难拦截和破译从服务器来回发送的通信。

了解如何在 Linux 上使用 Let’s Encrypt SSL 保护 Apache Web 服务器。

  • 如何在 RHEL 上使用 Let's Encrypt SSL 证书保护 Apache
  • 如何在 Ubuntu 和 Debian 上使用免费的 Let’s Encrypt SSL 证书保护 Apache

5. 为 Apache 启用 HTTP 严格传输安全 (HSTS)

除了使用 TLS/SSL 证书加密您的网站之外,还可以考虑在 HTTPS 之上实施 HSTS 网络安全机制。

HTTP 严格传输安全 (HSTS) 是一种保护网站免受中间人攻击和 Cookie 劫持的策略机制。当攻击者将 HTTPS 协议降级为不安全的 HTTP 协议时,就会发生这种情况。

HSTS 使 Web 服务器能够严格声明 Web 浏览器只能通过 HTTPS 与其交互,而不能通过 HTTP 协议与其交互。

要启用 HSTS,请确保您的网站正在运行 HTTPS 并具有有效的 TLS/SSL 证书。

接下来,启用 Apache 的标头模块:

sudo a2enmod headers

然后重新加载 Apache 以应用更改。

sudo systemctl restart apache2

接下来,访问您域的虚拟主机配置文件。

sudo vim /etc/apache2/sites-available/mydomain.conf

接下来,在 块中添加以下行:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

这看起来如下。

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

max-age 参数指示网络浏览器在接下来的一年(31536000=1 年)内仅使用 HTTPS 访问您的网站。

最后,重新启动Apache以使HSTS策略生效。

sudo systemctl restart apache2

6. 在 Apache 上启用 HTTP/2

2015 年,HTTP/2 发布,这是 HTTP 协议的新版本,旨在解决或解决 HTTP/1.1 的创建者没有预见到的多个问题。

虽然 HTTP/1.1 仍在广泛使用,但它与使用多个 TCP 连接处理来自浏览器的多个请求相关的性能问题相关,这会导致客户端资源开销较高,导致网络性能下降。

随着应用程序的复杂性和功能不断增加,HTTP/2 的诞生是为了解决 HTTP/1.1 的缺点,包括长 HTTP 标头、网页加载速度慢以及性能一般降解。

HTTP/2 比其前身提供了更多的保护和隐私。同样重要的是通过使用多路复用数据流来增强性能。使用 HTTP/2,单个 TCP 连接可确保有效的带宽利用,即使在传输多个数据流时也是如此。

查看如何使用以下命令在 Apache Web 服务器上启用 HTTP/2:

  • 如何在 Ubuntu 上的 Apache 中启用 HTTP/2

7. 限制对 Apache 中敏感目录的访问

您可能采取的另一个安全措施是限制对可能包含敏感信息(例如用户数据、日志和配置文件)的目录的访问。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

在上述配置中,要求全部拒绝拒绝任何试图访问 /sensitive_directory 中文件的人。

保存更改并退出文件。然后重新启动 Apache 以使更改生效。

8. 在 Apache 中禁用 ServerSignature 指令

Apache 配置文件中的 ServerSignature 指令将页脚附加到服务器生成的文档中,其中包含有关 Web 服务器配置的信息,例如版本和运行它的操作系统。向恶意行为者公开有关您的网络服务器的重要详细信息将显着增加遭受攻击的机会。

为了防止此类信息泄露,您需要在 Apache 配置文件中禁用该指令:

ServerSignature Off

保存更改并再次重新启动 Apache 以使更改生效。

sudo systemctl restart apache2

9. 将“ServerTokens”指令设置为“Prod”

ServerTokens”指令控制服务器发送的信息,包括 Apache 版本(主要版本和次要版本)、操作系统和运行的 Web 服务器类型。

您希望向公众公开的最少信息是 Web 服务器是 Apache。其他任何事情只会让您的服务器遭受潜在的攻击。因此,建议将 Apache 配置文件中的“ServerTokens”指令设置为“prod”。

ServerTokens Off

一如既往地保存更改并确保重新启动 Apache。

10. 使用 Fail2ban 保护 Apache

Fail2ban 是一款开源入侵防御应用程序,可保护 Linux 系统免受 DoS 和暴力攻击等外部威胁。它的工作原理是不断监视系统日志中的恶意活动,并禁止与模仿攻击行为的模式匹配的主机。

可以配置Fail2ban,通过持续监控 Apache 日志以查找失败的登录尝试并暂时禁止违规 IP,来保护 Apache 免受 DoS 攻击。

查看如何使用以下命令在 Linux 上安装 Fail2ban

  • 如何使用 Fail2ban 保护您的 Linux 服务器

11.禁用不需要的模块

Apache模块只是加载以扩展Web服务器功能的程序。模块扩展的功能包括基本身份验证、内容缓存、加密、安全等。

始终建议禁用当前未使用的所有模块,以最大程度地减少成为攻击受害者的机会。

要查看所有启用的模块,请运行命令

apache2ctl -M

要检查特定模块(例如重写模块)是否启用,请运行该命令。

apache2ctl -M | grep rewrite

要禁用该模块,请运行以下命令:

sudo a2dismod rewrite 

12. 使用 mod_security 和 mod_evasive 模块来保护 Apache

您可以启用 mod_securitymod_evasive 模块来保护 Apache 免受暴力攻击或 DDoS 攻击。

  • mod_security 模块的作用类似于 Web 应用程序防火墙 (WAF),并阻止可疑和不需要的流量进入您的网站。
  • mod_evasive 模块可保护您的服务器免受暴力破解和拒绝服务攻击 (DoS)。

阅读有关如何使用 mod_security 和 mod_evasive 模块保护 Apache 的更多信息。

13. 限制 Apache 中不需要的服务

为了进一步保护 Apache,请考虑禁用某些服务,例如符号链接和 CGI 执行(如果当前不需要)。默认情况下,Apache 遵循符号链接,我们可以在一行中关闭此功能以及 -Inincludes 功能和 CGI。

为此,请为“Directory”部分中的“Options”指令添加行'-ExecCGI -FollowSymLinks -Includes'

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

这也可以在目录级别实现。例如,在这里,我们关闭 “/var/www/html/mydomain1” 目录的 Includes 和 Cgi 文件执行。

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

保存更改并重新启动 Apache。

14. 限制 Apache 中的文件上传大小

保护 Web 服务器安全的另一种方法是限制从客户端发送到 Web 服务器的 HTTP 请求正文的总大小。您可以在服务器、每个目录、每个文件或每个位置的上下文中设置它。

例如,如果您想允许文件上传到特定目录,例如/var/www/domain.com/wp-uploads目录,并将上传文件的大小限制为4M=4194304Bytes,将以下指令添加到您的 Apache 配置文件或 .htaccess 文件中。

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

保存更改并记得重新启动 Apache。

您可以在服务器、每个目录、每个文件或每个位置的上下文中设置它。该指令可防止异常客户端请求行为,这种行为有时可能是拒绝服务 (DoS) 攻击的一种形式。

15. 在 Apache 中启用日志记录

日志记录提供有关客户端请求的所有详细信息以及与 Web 服务器性能相关的任何其他信息。如果出现问题,这可以提供有用的信息。启用 Apache 日志(尤其是虚拟主机文件中的日志)可让您在 Web 服务器出现问题时查明问题。

要启用日志记录,您需要包含 mod_log_config 模块,该模块提供两个主要日志记录指令。

  • ErrorLog – 指定错误日志文件的路径。
  • CustomLog – 创建并格式化日志文件。

您可以在虚拟主机文件的虚拟主机部分中使用这些属性来启用日志记录。

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Debian 系统中的 {APACHE_LOG_DIR} 指令定义为 /var/log/apache2 路径。

16. 作为单独的用户和组运行 Apache

作为单独的用户和组运行 Apache 是一种常见的安全实践。通过这样做,您可以将 Web 服务器进程与其他系统进程隔离,并最大限度地减少 Web 服务器受到威胁时的潜在损害。

首先,您需要专门为 Apache 创建一个新用户和组。

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

接下来,您需要编辑 Apache 配置文件以指定新用户和组。

User apacheuser
Group apachegroup

由于您要更改 Apache 运行的用户和组,因此您可能需要更新 Web 目录和文件的所有权,以确保 Apache 仍然可以读取它们。

sudo chown -R apacheuser:apachegroup /var/www/html

进行这些更改后,重新启动 Apache 以应用它们:

sudo systemctl restart httpd      # For RHEL/CentOS
sudo systemctl restart apache2    # For Debian/Ubuntu

17. 防护DDOS攻击和加固

确实,您无法完全保护您的网站免受 DDoS 攻击。但是,这里有一些指南可以帮助您减轻和管理它们。

  • TimeOut – 该指令允许您指定服务器在返回错误之前等待某些事件完成的持续时间。默认值为 300 秒。对于容易受到 DDoS 攻击的站点,建议保持较低的值。但是,适当的设置很大程度上取决于您的网站收到的请求的性质。注意:超时过低可能会导致某些 CGI 脚本出现问题。
  • MaxClients – 该指令设置可以同时提供服务的连接数量的限制。任何超出此限制的新连接都将排队。它在 PreforkWorker MPM 中都可用。默认值为256
  • KeepAliveTimeout – 该指令指定服务器在关闭连接之前等待后续请求的持续时间。默认值为 5 秒。
  • LimitRequestFields – 该指令设置客户端接受的 HTTP 请求标头字段的数量限制。默认值为100。如果由于HTTP请求头过多而导致DDoS攻击,建议减小该值。
  • LimitRequestFieldSize – 该指令设置 HTTP 请求标头的大小限制。

18. 定期执行漏洞扫描

保护 Web 服务器的另一种方法是定期进行漏洞扫描测试。这有助于识别黑客可能利用的潜在安全漏洞来访问敏感文件或注入恶意软件。

漏洞扫描工具还有助于指出不安全的配置设置并帮助审核合规性。流行的漏洞扫描工具包括 Acutenix、Nessus、Nexpose、Sucuri 等。

结论

这些是一些 Apache 强化技巧,您可以在 Web 服务器上实施这些技巧,以提供额外的保护层并防止入侵。