18 個 Apache Web 伺服器安全性和加固提示

Apache 網頁伺服器是最流行和廣泛使用的網頁伺服器之一,用於托管檔案和網站。它易於安裝和配置,以滿足您的托管需求。然而,預設設置並不安全,無法提供您的網站所需的必要保護。

在本指南中,我們將介紹一些 Apache 伺服器加固技巧和技巧,以加強您的網頁伺服器的安全性。

1. 如何隱藏 Apache 版本和作業系統資訊

預設情況下,Apache 網頁伺服器會在您瀏覽網站的錯誤 URL 時顯示其版本。以下是一個示例,顯示無法找到網站上的頁面的錯誤頁面。最後一行顯示了 Apache 版本、主機作業系統、IP 地址以及它正在監聽的埠。

Show Apache Version Info

顯示您的網頁伺服器資訊絕對不是一個好主意,因為這可能成為黑客在其偵察任務中的好禮物。為了增加一層安全性並使黑客更難以入侵,建議隱藏網頁伺服器資訊。

要做到這一點,在基於 Debian 的發行版上打開默認的 Apache 配置文件。

$ sudo vim /etc/apache2/apache2.conf

對於基於 RHEL 系統,例如 RHELFedoraCentOSRockyAlmaLinux

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

在文件末尾添加以下行。

ServerTokens Prod
ServerSignature Off

保存更改並重新啟動 Apache 網絡伺服器。

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

現在重新加載網站,這次網絡伺服器信息將不會顯示。

Check Apache Version Info

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,我們將能夠查看目錄列表。

Disable Apache Directory Listing

要禁用目錄列表,請前往 Apache 的主配置文件並搜索 ‘ 目錄 ‘ 屬性。如所示,將 ‘ 選項 ‘ 參數設置為 '-Indexes'

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

重新加載 Apache,這一次,當您訪問 URL 時,目錄將不再顯示。

Disable Directory Listing in Apache

3. 定期更新 Apache

始終建議將您的所有應用程序保持最新,因為最新應用程序附帶的錯誤修復和安全補丁可以解決舊軟件版本中存在的潛在漏洞。

因此,建議定期將您的應用程序升級到它們的最新版本。

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

4. 在Apache上使用HTTPS加密

Apache,默認情況下使用的是HTTP協議,這是一種脆弱且不安全的協議,容易被竊聽。為了提高您的網站安全性,更重要的是,提高您的Google SEO排名,請考慮使用SSL證書加密您的網站。

這樣做將默認的HTTP協議切換到HTTPS,從而使任何人更難截取和解密從服務器發送和接收的通信。

查看如何在Linux上使用Let’s Encrypt SSL來保護Apache網絡服務器。

5. 為Apache啟用HTTP嚴格傳輸安全性(HSTS)

除了使用TLS/SSL證書加密您的網站外,請考慮在HTTPS之上實施HSTS網絡安全機制。

HTTP Strict Transport SecurityHSTS)是一種策略機制,可以保護網站免受中間人攻擊和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連接確保了有效的帶寬利用率,即使傳輸多個數據流。

查看如何在Apache Web服務器上啟用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>

在上述配置中,Require all denied拒絕了任何試圖訪問/sensitive_directory中文件的訪問。

保存更改並退出文件。然後重新啟動Apache以使更改生效。

禁用Apache中的ServerSignature指令

Apache配置文件中的ServerSignature指令会在由服务器生成的文档末尾附加一个页脚,其中包含有关您的Web服务器配置的信息,如版本和运行的操作系统。将关键细节暴露给恶意行为者将大大增加受攻击的可能性。

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

ServerSignature Off

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

$ sudo systemctl restart apache2

设置’ServerTokens’指令为’Prod’

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

您希望向公众公开的最少信息是Web服务器是Apache。其他任何信息都将使您的服务器暴露于潜在的攻击。因此,建议将Apache配置文件中的’ServerTokens‘指令设置为’prod‘。

ServerTokens Off

像往常一样保存更改,并确保重新启动Apache。

用Fail2ban保护Apache

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

Fail2ban可以通過不斷監控Apache日誌中的登錄失敗嘗試並暫時禁止有問題的IP來保護Apache免受DoS攻擊。

查看如何在Linux上安裝Fail2ban使用:

11. 禁用不必要的模塊

Apache模塊只是加載以擴展Web服務器功能的程序。模塊擴展的功能包括基本身份驗證、內容緩存、加密、安全等。

始終建議禁用所有當前未使用的模塊,以最小化成為攻擊目標的可能性。

要查看所有已啟用的模塊,運行以下命令:

$ apache2ctl -M
View Apache Modules

要檢查特定模塊是否已啟用,例如重寫模塊,運行以下命令。

$ apache2ctl -M | grep rewrite
Check Apache Module

要禁用模塊,請運行以下命令:

$ sudo a2dismod rewrite 
Disable Apache Module

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 遵循符号链接,我们可以关闭此功能以及 -Includes 功能和 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 MPMs中都可用。默認值為256
  • KeepAliveTimeout – 這個指令指定伺服器在關閉連接之前等待後續請求的時間。默認值為5秒。
  • LimitRequestFields – 此指令設定客戶端接受的 HTTP 請求標頭字段數量上限。默認值為 100。如果由於過多的 HTTP 請求標頭而發生 DDoS 攻擊,建議降低此值。
  • LimitRequestFieldSize – 此指令設定 HTTP 請求標頭的大小限制。

18. 定期執行漏洞掃描

保護您的 Web 伺服器的另一種方法是定期進行漏洞掃描測試。這有助於識別可能被駭客利用以獲取對敏感文件訪問權限或注入惡意軟件的潛在安全漏洞。

漏洞掃描工具還有助於指出不安全的配置設置並進行合規審計。常見的漏洞掃描工具包括 Acutenix, Nessus, Nexpose, Sucuri 等等。

結論

這些是一些可以在您的 Web 伺服器上實施的 Apache 加固提示,以提供額外的保護層並防止入侵。

Source:
https://www.tecmint.com/apache-security-tips/