顯示網絡服務器的信息并不是一個好主意,因為這對于黑客的偵察任務來說是一個很好的禮物。為了增加一層安全性并使黑客更難攻擊,建議隱藏 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 允許目錄列表,訪問者可能會看到文檔根目錄中可能擁有的任何文件或目錄。
為了演示這一點,我們將創建一個名為 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 時,將不再顯示目錄。

始終建議使所有應用程序保持最新狀態,因為最新的應用程序附帶錯誤修復和安全補丁,可以解決舊軟件版本中存在的潛在漏洞。
因此,建議定期將您的應用程序升級到最新版本。
$ sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint] $ sudo dnf upgrade [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Apache 默認使用 HTTP 協議,該協議是一種弱且不安全的協議,容易被竊聽。為了提高網站的安全性,更重要的是提高 Google SEO 排名,請考慮使用 SSL 證書加密您的網站。
通過這樣做,它將默認的 HTTP 協議切換為 HTTPS,從而使任何人都更難攔截和破譯從服務器來回發送的通信。
了解如何在 Linux 上使用 Let’s Encrypt SSL 保護 Apache Web 服務器。
除了使用 TLS/SSL 證書加密您的網站之外,還可以考慮在 HTTPS 之上實施 HSTS Web 安全機制。
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
接下來,在 <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 瀏覽器在接下來的一年內僅使用 HTTPS 訪問您的網站(31536000 = 1 年)。
最后,重新啟動Apache以使HSTS策略生效。
$ sudo systemctl restart apache2
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:
您可能采取的另一個安全措施是限制對可能包含敏感信息(例如用戶數據、日志和配置文件)的目錄的訪問。
<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 指令將頁腳附加到服務器生成的文檔中,其中包含有關 Web 服務器配置的信息,例如版本和運行它的操作系統。向惡意行為者公開有關您的網絡服務器的重要詳細信息將顯著增加遭受攻擊的機會。
為了防止此類信息泄露,您需要在 Apache 配置文件中禁用該指令:
ServerSignature Off
保存更改并再次重新啟動 Apache 以使更改生效。
$ sudo systemctl restart apache2
“ServerTokens”指令控制服務器發送的信息,包括 Apache 版本(主要版本和次要版本)、操作系統和運行的 Web 服務器類型。
您希望向公眾公開的最少信息是 Web 服務器是 Apache。其他任何事情只會讓您的服務器遭受潛在的攻擊。因此,建議將 Apache 配置文件中的“ServerTokens”指令設置為“prod”。
ServerTokens Off
一如既往地保存更改并確保重新啟動 Apache。
Fail2ban 是一款開源入侵防御應用程序,可保護 Linux 系統免受 DoS 和暴力攻擊等外部威脅。它的工作原理是不斷監視系統日志中的惡意活動,并禁止與模仿攻擊行為的模式匹配的主機。
可以將 Fail2ban 配置為通過持續監控 Apache 日志以查找失敗的登錄嘗試并暫時禁止違規 IP,來保護 Apache 免受 DoS 攻擊。
查看如何使用以下命令在 Linux 上安裝 Fail2ban:
Apache模塊只是加載以擴展Web服務器功能的程序。模塊擴展的功能包括基本身份驗證、內容緩存、加密、安全等。
始終建議禁用當前未使用的所有模塊,以最大程度地減少成為攻擊受害者的機會。
要查看所有啟用的模塊,請運行命令
$ apache2ctl -M

要檢查特定模塊(例如重寫模塊)是否啟用,請運行該命令。
$ apache2ctl -M | grep rewrite

要禁用該模塊,請運行以下命令:
$ sudo a2dismod rewrite

您可以啟用 mod_security 和 mod_evasive 模塊來保護 Apache 免受暴力攻擊或 DDoS 攻擊。
閱讀有關如何使用 mod_security 和 mod_evasive 模塊保護 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。
保護 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) 攻擊的一種形式。
日志記錄提供有關客戶端請求的所有詳細信息以及與 Web 服務器性能相關的任何其他信息。如果出現問題,這可以提供有用的信息。啟用 Apache 日志(尤其是虛擬主機文件中的日志)可讓您在 Web 服務器出現問題時查明問題。
要啟用日志記錄,您需要包含 mod_log_config 模塊,該模塊提供兩個主要日志記錄指令。
您可以在虛擬主機文件的虛擬主機部分中使用這些屬性來啟用日志記錄。
<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 路徑。
作為單獨的用戶和組運行 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 攻擊。但是,這里有一些指南可以幫助您減輕和管理它們。
保護 Web 服務器的另一種方法是定期進行漏洞掃描測試。這有助于識別黑客可能利用的潛在安全漏洞來訪問敏感文件或注入惡意軟件。
漏洞掃描工具還有助于指出不安全的配置設置并幫助審核合規性。流行的漏洞掃描工具包括 Acutenix、Nessus、Nexpose、Sucuri 等。
這些是一些 Apache 強化技巧,您可以在 Web 服務器上實施這些技巧,以提供額外的保護層并防止入侵。

