百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Apache Web服务器安全和强化技巧分享

suiw9 2024-11-06 20:25 25 浏览 0 评论

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

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

1.如何隐藏 Apache

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

显示 Apache 版本信息

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

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

$ sudo vim /etc/apache2/apache2.conf

对于基于RHEL的系统,例如 RHEL, Fedora、CentOS、Rocky和AlmaLinux。

$ 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 服务器信息将不会显示。

检查 Apache 版本信息

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列出目录

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

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

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

禁用 Apache 中的目录列表

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服务器的安全。

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

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

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

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

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

接下来,为Apache启用headers模块:

$ sudo a2enmod headers

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

$ sudo systemctl restart apache2

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

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

接下来,在 <VirtualHost *:443> 块中添加此行:

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参数指示web浏览器在接下来的一年内(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连接也能确保有效的带宽利用率。

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>

在上述配置中,Require all denied拒绝任何试图访问/sensitive_directory 中文件的人。

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

8.在Apache中禁用ServerSignature指令

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 攻击。

11.禁用不需要的模块

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

始终建议禁用当前未使用的所有模块,以最大程度地减少遭受攻击的可能性。

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

$ apache2ctl -M

查看 Apache 模块

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

$ apache2ctl -M | grep rewrite

检查 Apache 模块

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

$ sudo a2dismod rewrite 

禁用 Apache 模块

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

您可以启用mod_security和mod_evasive模块保护 Apache 免受暴力攻击或 DDoS 攻击。

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

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

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

要执行此操作,请在“Directory”部分为“Options”指令添加行“-ExcCGI-FlowSymLinks-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=4194304字节,请将以下指令添加到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 – 该指令设置可同时提供服务的连接数限制。任何超出此限制的新连接都将排队。它在 Prefork 和 Worker MPM 中均可用。默认值为256。
  • KeepAliveTimeout – 该指令指定服务器在关闭连接之前等待后续请求的持续时间。默认值为 5 秒。
  • LimitRequestFields – 该指令设置客户端接受的 HTTP 请求标头字段的数量限制。默认值为100。如果由于HTTP请求头过多而导致DDoS攻击,建议减小该值。
  • LimitRequestFieldSize – 该指令设置 HTTP 请求标头的大小限制。

18.定期执行漏洞扫描

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

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

结论

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



相关推荐

俄罗斯的 HTTPS 也要被废了?(俄罗斯网站关闭)

发布该推文的ScottHelme是一名黑客,SecurityHeaders和ReportUri的创始人、Pluralsight作者、BBC常驻黑客。他表示,CAs现在似乎正在停止为俄罗斯域名颁发...

如何强制所有流量使用 HTTPS一网上用户

如何强制所有流量使用HTTPS一网上用户使用.htaccess强制流量到https的最常见方法可能是使用.htaccess重定向请求。.htaccess是一个简单的文本文件,简称为“.h...

https和http的区别(https和http有何区别)

“HTTPS和HTTP都是数据传输的应用层协议,区别在于HTTPS比HTTP安全”。区别在哪里,我们接着往下看:...

快码住!带你十分钟搞懂HTTP与HTTPS协议及请求的区别

什么是协议?网络协议是计算机之间为了实现网络通信从而达成的一种“约定”或“规则”,正是因为这个“规则”的存在,不同厂商的生产设备、及不同操作系统组成的计算机之间,才可以实现通信。简单来说,计算机与网络...

简述HTTPS工作原理(简述https原理,以及与http的区别)

https是在http协议的基础上加了一层SSL(由网景公司开发),加密由ssl实现,它的目的是为用户提供对网站服务器的身份认证(需要CA),以至于保护交换数据的隐私和完整性,原理如图示。1、客户端发...

21、HTTPS 有几次握手和挥手?HTTPS 的原理什么是(高薪 常问)

HTTPS是3次握手和4次挥手,和HTTP是一样的。HTTPS的原理...

一次安全可靠的通信——HTTPS原理

为什么HTTPS协议就比HTTP安全呢?一次安全可靠的通信应该包含什么东西呢,这篇文章我会尝试讲清楚这些细节。Alice与Bob的通信...

为什么有的网站没有使用https(为什么有的网站点不开)

有的网站没有使用HTTPS的原因可能涉及多个方面,以下是.com、.top域名的一些见解:服务器性能限制:HTTPS使用公钥加密和私钥解密技术,这要求服务器具备足够的计算能力来处理加解密操作。如果服务...

HTTPS是什么?加密原理和证书。SSL/TLS握手过程

秘钥的产生过程非对称加密...

图解HTTPS「转」(图解http 完整版 彩色版 pdf)

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。...

HTTP 和 HTTPS 有何不同?一文带你全面了解

随着互联网时代的高速发展,Web服务器和客户端之间的安全通信需求也越来越高。HTTP和HTTPS是两种广泛使用的Web通信协议。本文将介绍HTTP和HTTPS的区别,并探讨为什么HTTPS已成为We...

HTTP与HTTPS的区别,详细介绍(http与https有什么区别)

HTTP与HTTPS介绍超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的...

一文让你轻松掌握 HTTPS(https详解)

一文让你轻松掌握HTTPS原文作者:UC国际研发泽原写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。...

如何在Spring Boot应用程序上启用HTTPS?

HTTPS是HTTP的安全版本,旨在提供传输层安全性(TLS)[安全套接字层(SSL)的后继产品],这是地址栏中的挂锁图标,用于在Web服务器和浏览器之间建立加密连接。HTTPS加密每个数据包以安全方...

一文彻底搞明白Http以及Https(http0)

早期以信息发布为主的Web1.0时代,HTTP已可以满足绝大部分需要。证书费用、服务器的计算资源都比较昂贵,作为HTTP安全扩展的HTTPS,通常只应用在登录、交易等少数环境中。但随着越来越多的重要...

取消回复欢迎 发表评论: