在LNMP(Linux, Nginx, MySQL, PHP)環境中配置安全策略是確保網站和應用程序安全性的關鍵步驟。以下是一些關鍵的安全策略和最佳實踐:
軟件版本更新
- 實時更新:定期更新Nginx、MySQL、PHP及操作系統至最新版本,及時修補已知漏洞。
PHP安全加固
- 更新PHP及擴展:保證所有PHP擴展和依賴庫為最新版本。
- 強化PHP配置:
- 禁用危險函數,例如
eval()、system()、exec()等。
- 設置
error_reporting 為 E_ALL & E_NOTICE & E_DEPRECATED & E_STRICT & E_USER_NOTICE & E_USER_DEPRECATED,顯示所有錯誤和警告信息。生產環境下,將 display_errors 設置為 Off,避免錯誤信息暴露給用戶。
- 啟用
log_errors,并將錯誤日志寫入文件。
- 文件權限控制:
- Web服務器用戶(例如
www-data)對PHP文件、配置文件及日志文件的權限設置為640或644。
- 目錄權限設置為750或755,確保Web服務器用戶擁有寫入權限。
- open_basedir限制:限制PHP僅能訪問特定目錄,防止目錄穿越攻擊。
Nginx安全設置
- 精簡模塊:禁用不必要的Nginx模塊,降低安全風險。
- 安全響應頭:
- 配置
Content-Security-Policy(CSP)防止跨站腳本攻擊(XSS)及其他代碼注入攻擊。
- 設置
X-Content-Type-Options防止MIME類型嗅探攻擊。
- 設置
X-Frame-Options防止點擊劫持攻擊。
- 訪問控制:僅允許信任的IP地址訪問Nginx和MySQL服務。
數據庫安全策略
- 強密碼策略:所有數據庫用戶密碼必須復雜且唯一。
- 預處理語句:防止SQL注入攻擊。
- 權限精細化:每個數據庫用戶僅擁有其所需權限。
文件上傳安全機制
- 文件類型及大小驗證:嚴格驗證上傳文件的MIME類型及大小。
- 文件存儲位置:避免將上傳文件存儲在Web服務器目錄下。
- 文件名唯一性:使用唯一文件名存儲上傳文件。
- 權限設置:確保上傳目錄權限設置正確。
日志監控與分析
- 日志分析:定期檢查和分析PHP錯誤日志,及時發現并處理異常行為。
- 監控工具:使用Prometheus、Grafana等工具監控服務器性能和安全狀況。
定期安全審計
- 安全審計與滲透測試:定期進行安全審計和滲透測試,發現并修補潛在的安全漏洞。
其他安全建議
- 修改SSH端口:將SSH默認端口修改為其他非標準端口,例如2222,并限制允許登錄的IP。
- 啟用防火墻:使用ufw防火墻,允許必要的端口(如22、80、443和3306),并禁止外部訪問MySQL。
- 啟用HTTPS加密:配置SSL證書,使用HTTPS協議加密數據傳輸,保障用戶數據安全和隱私。
通過以上步驟,可以顯著提升LNMP環境中網站和應用程序的安全性。切記定期更新和維護,以應對不斷變化的安全威脅。