本文將示範如何在Google雲端服務上建置一個常用的LAMP網站解決方案,並為此網站伺服器加入以開放原始碼開發的網頁防火牆軟體(WAF),以提高網站伺服器的防護能力。
這時就能夠以SSH的方式與虛擬機器連線,接著執行如下的指令來安裝系統所需要的套件。由於GCP無法以root的權限登入,但有將使用者的帳號加進超級使用者(Super User)的群組中,因此可利用sudo指令以超級使用者的身分來執行,在登入虛擬機器後,即可安裝系統所需要的套件:
成功安裝好相關套件後,繼續安裝MySQL軟體。這裡並不是要使用MySQL資料庫的功能(因為Google須為資料庫獨立另外建立一個虛擬機器),而是要讓PHP編譯時能支援MySQL的連接功能,在此安裝的版本是MySQL 5.52。先至MySQL官方網站下載原始碼,再執行以下的指令來安裝MySQL軟體(其中#為註解):
成功安裝後,在「/usr/local/mysql5」目錄下應該會有MySQL的相關檔案及程式,接著再安裝Apache網站伺服器,這裡所安裝的版本為2.4.23,指令內容如下:
最後,執行如下指令來安裝PHP軟體(5.6.20版):
在編譯PHP的過程中,筆者曾經遇到記憶體被耗盡(Memory Exhausted)的錯誤,這是因為如果選擇的虛擬機器等級過低(選擇最低的配備),由於系統並未切割Swap空間,所以當系統資源不足時,在編譯的過程就可能會發生此類的錯誤。可以手動的方式新增Swap空間來替代記憶體的空間,以解決記憶體被耗盡的問題,如圖6所示。當然如果選擇較高階的系統資源,就不會出現此類的問題。相關設定指令,實際內容如下:
|
▲圖6 新增Swap空間來替代記憶體空間,以解決記憶體耗盡的問題。 |
在編譯完成後,修改httpd.conf來為Apache引入(include) PHP模組,在httpd.conf內加入以下的幾行設定:
安裝至此,一個傳統的LAMP環境就建構完成了。隨著資安意識的覺醒,有越來越多的人注重網站伺服器的安全,因此接著為Apache加上ModSecurity模組,如此一來,就可以為Apache增添網頁防火牆的功能。
安裝ModSecurity模組
早期的ModSecurity模組版本主要實作成Apache的模組(Module),為Apache加上網頁防火牆的功能,時至今日,ModSecurity模組已進化成支援多種網站伺服器的功能,除了支援Apache外,也可支援如IIS及NGINX等常見網站伺服器,其主要功能說明如下:
可即時記錄HTTP的流量資訊
ModSecurity模組可即時地監控網站伺服器上的HTTP流量資訊,並記錄相關的稽核紀錄(Audit Log),為管理者提供詳盡的資訊。
可即時阻擋具有惡意的HTTP流量
ModSecurity模組可即時監控網站伺服器上的HTTP流量資訊,並根據管理者所定義的規則(Rule),從中辨識出惡意的行為並加以阻擋,提供如下所述的安全偵測模型:
‧負面表列安全模型(Negative Security Model):首先ModSecurity模組會給予一個門檻值來界定惡意行為,接著針對所有的個別來源進行處理(例如來源IP或應用程式的Session等),如果這些來源從事了異常行為或攻擊行為,就將這些動作以分數的形式加總起來,一旦所加總的分數超過此門檻值,即將該來源判定為惡意行為。
‧正面表列安全模型(Positive Security Model):設定僅允許某些行為可通過ModSecurity模組的檢查,例如設定僅允許某些來源才可以存取網站伺服器。
‧已知的攻擊行為:如果已確認某些惡意行為的樣式,即可以設定規則(Rule)的方式來定義該惡意行為,並即時監控網站伺服器上來往的HTTP流量資訊。一旦發現符合所定義的規則,便進行封鎖等處理。
可以規則為基礎提供有彈性的規則引擎
ModSecurity模組允許以文字描述的方式來定義規則,並提供LUA腳本語言(Script)來描述更複雜的規則。此外,ModSecurity模組提供了獨立防火牆和嵌入式的方式部署。
本次實作會將ModSecurity編譯成Apache的模組(嵌入式),並掛載至Apache上,相關架構圖如圖7所示。
|
▲圖7 架構示意圖。 |