Apache Web服务器是最流行和广泛使用的用于托管文件和网站的Web服务器之一,它易于安装和配置,可以满足站长网站的托管需求。但是,Apache默认设置并不安全,无法提供网站所需的隐私保护。
在本文当中,小编将介绍一些 Apache服务器安全强化方案和技巧,你可以通过这些设置来增强Web服务器的安全性,从而保证网站数据安全。
1、隐藏Apache版本和操作系统
默认情况下,Apache Web服务器会显示其版本,以防止你浏览错误的网站URL。以下是错误页面的示例,指示在网站上找不到该页面。最后一行指示Apache版本、主机操作系统、IP地址及其正在侦听的端口信息。
显示网络服务器的信息并不是一个好事情,因为这对于黑客的侦察任务来说是一个很不错的途径。为了增加一层安全性并使黑客更难攻击,建议隐藏Web服务器信息。为此,请打开基于Debian的发行版上的默认Apache配置文件。
$ sudo vim /etc/apache2/apache2.conf
$ sudo vim /etc/httpd/conf/httpd.conf
在文件末尾添加以下行:
ServerTokens Prod ServerSignature Off
保存更改并重新启动Apache Web服务器,命令如下:
$ sudo systemctl restart apache2 [Debian、Ubuntu和Mint] $ sudo systemctl restart httpd [RHEL/CentOS/Fedora和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 update [Debian、Ubuntu和Mint] $ sudo dnf upgrade [RHEL/CentOS/Fedora和Rocky/AlmaLinux]
4、在Apache上使用HTTPS加密
Apache默认使用 HTTP协议,这是一种弱且不安全的协议,很容易被窃听。为了提高网站的安全性,更重要的是,提高百度、Google SEO排名,请考虑使用 SSL证书加密网站。
通过这样做,它将默认的HTTP协议切换为HTTPS,从而使任何人都更难拦截和破译从服务器来回发送的通信。
查看如何在Linux上使用Let’s Encrypt SSL保护Apache Web服务器,示例如下:
5、在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:
6、限制对Apache中敏感目录的访问
你可能采取的另一个安全措施是限制对可能包含敏感信息(例如用户数据、日志和配置文件)的目录的访问。使用“Allow”和“Deny”属性,可以限制对例如根目录的访问,如下所示:
<Directory /> Options None Order deny,allow Deny from all </Directory>
这些选项的详细含义如下解释:
- None:这限制用户启用任何可选功能。
- Order deny,allow :“ Deny ”指令优先,然后是“ allow ”指令。
- Deny from all:限制所有人访问根目录。
保存更改并退出文件。然后重新启动Apache以使更改生效。
7、在Apache中禁用ServerSignature指令
Apache配置文件中的ServerSignature指令将页脚附加到服务器生成的文档中,该文档包含有关Web服务器配置的信息,例如版本和运行它的操作系统。向恶意行为者公开有关你的网络服务器的重要详细信息将显着增加遭受攻击的机会。
为了防止此类信息泄露,需要在Apache配置文件中禁用该指令:
ServerSignature Off
保存更改并再次重新启动Apache以使更改生效,命令如下:
$ sudo systemctl restart apache2
8、将“ServerTokens”指令设置为“Prod”
“ ServerTokens ”指令控制服务器发送的信息,包括Apache版本(主要版本和次要版本)、操作系统和运行的Web服务器类型。你希望向公众公开的最少信息是Apache Web服务器。其它任何事情只会让你的服务器遭受潜在的攻击。因此,建议将Apache配置文件中的“ ServerTokens ”指令设置为“ prod ”。
ServerTokens Off
记住,需要保存更改并确保重新启动Apache。
9、使用Fail2ban保护 Apache
Fail2ban是一款开源入侵防御应用程序,可保护Linux系统免受DoS和暴力攻击等外部威胁。它的工作原理是不断监视系统日志中的恶意活动,并禁止与模仿攻击行为的模式匹配的主机。
可以将Fail2ban配置为通过持续监控Apache日志以查找失败的登录尝试并暂时禁止违规IP来保护Apache免受DoS攻击。
查看如何使用以下命令在Linux上安装Fail2ban:
10、禁用不需要的模块
Apache模块只是加载以扩展Web服务器功能的程序。模块扩展的功能包括基本身份验证、内容缓存、加密、安全等。始终建议禁用当前未使用的所有模块,以最大程度地减少遭受攻击的可能性。要查看所有启用的模块,请运行命令:
$ apache2ctl -M
要检查特定模块(例如重写模块)是否启用,请运行该命令:
$ apache2ctl -M | grep rewrite
要禁用该模块,请运行以下命令:
$ sudo a2dismod rewrite
11、使用mod_security和mod_evasive模块来保护Apache
可以启用mod_security和mod_evasive模块来保护Apache免受暴力攻击或DDoS攻击。
- mod_security模块的作用类似于Web应用程序防火墙 ( WAF ),并阻止可疑和不需要的流量进入您的网站。
- mod_evasive模块可保护您的服务器免受暴力破解和拒绝服务攻击 (DoS)。
12、限制Apache中不需要的服务
为了进一步保护Apache,请考虑禁用某些服务,例如符号链接和CGI执行(如果当前不需要)。默认情况下,Apache遵循符号链接,可以在一行中关闭此功能以及-Includes
功能和CGI。
为此,请在“ Directory ”部分中添加'-ExecCGI -FollowSymLinks -Includes'
“Options”指令行。
<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。
13、限制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) 攻击的一种形式。
14、在 Apache中启用日志记录
日志记录提供有关客户端请求的所有详细信息以及与Web服务器性能相关的任何其他信息。如果出现问题,这可以提供有用的信息。启用Apache日志(尤其是虚拟主机文件中的日志)可让你在Web服务器出现问题时查明问题。
要启用日志记录,需要包含mod_log_config模块,该模块提供两个主要日志记录指令。
- ErrorLog–指定错误日志文件的路径。
- CustomLog–创建并格式化日志文件。
可以在虚拟主机文件的虚拟主机部分中使用这些属性来启用日志记录,例如:
<VirtualHost 172.16.23.125:443> ServerName idccoupon.com DocumentRoot /var/www/html/idccoupon/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
另外,Debian系统中的指令{APACHE_LOG_DIR}
定义为/var/log/apache2路径。
15、作为单独的用户和组运行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 #对于RHEL/CentOS $ sudo systemctl restart apache2 #对于Debian/Ubuntu
16、防护DDOS攻击和加固
的确,你无法完全保护网站免受DDoS攻击。但是,这里有一些指南可以帮助你减轻和管理它们。
- TimeOut – 该指令允许你指定服务器在返回错误之前等待某些事件完成的持续时间。默认值为300秒。对于容易受到DDoS攻击的站点,建议保持较低的值。但是,适当的设置很大程度上取决于你的网站收到的请求的性质。注意:超时过低可能会导致某些CGI脚本出现问题。
- MaxClients – 该指令设置可以同时服务的连接数量的限制。任何超出此限制的新连接都将排队。它在Prefork和Worker MPM中都可用,默认值为256。
- KeepAliveTimeout – 该指令指定服务器在关闭连接之前等待后续请求的持续时间,默认值为5秒。
- LimitRequestFields – 该指令设置客户端接受的HTTP请求标头字段的数量限制。默认值为100。如果由于HTTP请求头过多而导致DDoS攻击,建议减小该值。
- LimitRequestFieldSize – 该指令设置HTTP请求标头的大小限制。
总结
以上就是整理的一些Apache安全强化技巧,你可以在Web服务器上实施这些技巧,以提供额外的保护层并防止入侵。当然,如果你有其它关于保护Apache安全的方法技巧,也可以分享出来或者私信给小编,一起为站长的网站安全保驾护航!