如何使用 Apache2 虛擬主機在伺服器的裸 IP 上提供 nothing?
我在執行 Apache 的機器上託管了幾個項目站點。當然,我使用的是虛擬主機,它們按預期工作。但是,目前訪問機器的裸 IP 會按字母順序生成第一個虛擬主機(正如預期的那樣)。我遇到了惡意行為者隨機(可能迭代)到我機器的 IP 和垃圾郵件登錄頁面或試圖造成麻煩的問題。我不想為任何試圖連接到機器 IP 的人提供任何服務。
我嘗試了一個名為“000-nodomain.conf”的虛擬主機,它在埠 80 上為一個帶有空白 index.html 的目錄提供服務。但是我想消除該目錄,讓伺服器只響應自己,而不用擔心閱讀從磁碟。在最理想的情況下,我希望伺服器完全拒絕沒有域名的請求,儘管我不確定這是否可能。
作為一個附帶問題,沒有我的 IP 的 SSL 證書(昂貴!)任何嘗試通過埠 443 訪問裸 IP 的人仍然會得到一個真實站點,因為它是第一個匹配埠 443 的虛擬主機。是否可以執行埠 443 上的“正常”http 虛擬主機?我不關心通過裸 IP 連接的任何人的最終使用者體驗,但它不會影響任何其他正在服務的站點。
添加一個額外的虛擬主機作為預設站點是正確的。為了安全起見,您應該確保拒絕此虛擬主機的所有內容(無一例外):
<directory "/"> Require all denied </directory>
這將導致
403 Access Denied
客戶端嘗試的所有內容。讓文件根不存在也無妨:
DocumentRoot "/does_not_exist"
這仍將允許 Aapche 需要查找的少量磁碟訪問
/does_not_exist
,但在發生 DOS 攻擊時會被記憶體並且不會影響系統性能。它當然不應該讓任何資訊從您的系統中逸出。
查看fail2ban。具體來說,您應該將預設虛擬主機設置為寫入不同的訪問日誌文件。然後你可以設置 fail2ban 來監控它並阻止任何潛在的攻擊者通過防火牆。這應該可以防止他們嘗試過去對裸 IP 的前幾個請求。
關於如何處理“裸 IP”虛擬主機上的 443 埠。從理論上講,您可以通過任何埠(包括埠 443)提供正常 HTTP。但是,許多 HTTP 客戶端會因此而絆倒。我認為生成自簽名證書實際上會更好(無論您喜歡什麼主題,甚至是您的 IP)。這讓期望通過 SSL 的 HTTP 伺服器正常執行的客戶端。
我不會重複使用您的任何實際站點的證書;這將為攻擊者(機器人)提供有關您託管的站點的更多資訊,並可用於他們使用“正確”域名重試。