Linux系統安全(七):Nginx 安全

Nginx是Web服務器領域的後起之秀,以其現代軟件架構設計所提供的高性能和靈活性而被越來越多的網站所採用,在2018年2月活躍網站中的使用比例已達到21.23%(數據來源:Netcraft),是繼Apache之後的第二大Web服務器軟件。在該部分,我們重點關注2個方面的Nginx的安全設置:使用HTTPS加密和使用NAXSI加固。

使用HTTPS加密網站

從CA簽發機構購買了SSL證書後,在Nginx上配置HTTPS的方法是在配置文件nginx.conf中,添加以下配置項:

ssl on;
ssl_certificate /opt/cert/server.crt; #指定證書存儲位置
ssl_certificate_key /opt/cert/server.key; #指定私鑰存儲位置
ssl_session_timeout 5m; #指定SSL會話超時時間
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL協議版本
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#指定SSL加密算法
ssl_prefer_server_ciphers on; #指定優先採用服務器端加密算法

在配置完成後,使用nginx -t檢查配置項是否有誤。如無報錯,則可以通過重啓nginx進程來使配置文件生效。

使用NAXSI加固Web

NAXSI是Nginx服務器上常見的Web應用防火牆。NAXSI的含義是“Nginx Anti XSS & SQL Injection”(Nginx防禦跨站腳本和SQL注入),其官方網站是https://github.com/nbs-system/naxsi。從技術上來說,NAXSI是Nginx的第三方模塊,適用於很多類UNIX的操作系統平臺上。

NAXSI和ModSecurity相比,有如下的不同點:

  • NAXSI可以通過學習模式建立白名單機制,從而使用默認拒絕的方式來最大化的保障Web安全。這通常適用於網站代碼和功能不頻繁變化的場景,否則極易產生誤報。

  • 在黑名單模式下,NAXSI規則更加簡潔,它通過對HTTP請求體中出現的所有惡意字符設置分數並求和、達到一定閾值則拒絕請求的方式來實現安全防禦;而在ModSecurity使用場景下,通常通過設置精細的正則表達式在一條規則中即判斷是放行或者禁止。

NAXSI的核心規則集下載地址是:https://github.com/nbs-system/naxsi/blob/master/naxsi_config/naxsi_core.rules。

我們通過以下規則來熟悉NAXSI的原理:

MainRule "str:\"" "msg:double quote" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8,$XSS:8" id:1001;
 MainRule "str:0x" "msg:0x, possible hex encoding" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:2" id:1002;
MainRule "str:'" "msg:simple quote" "mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1013;

其中:

  • id爲1001的規則表示,如果在請求體(BODY)、統一資源定位符(URL)、請求參數(ARGS)、請求頭部(Cookie)任何地方出現了雙引號("),那麼就把該請求可能是SQL注入、跨站腳本攻擊的判斷分數分別設置爲8

  • id爲1002的規則表示,如果在請求體(BODY)、統一資源定位符(URL)、請求參數(ARGS)、請求頭部(Cookie)任何地方出現了雙引號("),那麼就把該請求可能是SQL注入判斷分數設置爲2

  • id爲1013的規則表示,如果在請求體(BODY)、統一資源定位符(URL)、請求參數(ARGS)、請求頭部(Cookie)任何地方出現了單引號(’),那麼就把該請求可能是SQL注入的判斷分數設置爲4並且把跨站腳本攻擊的判斷分數設置爲8

通過在Nginx配置文件中加入以下示例片段即可根據每條規則得出來的分數累加值加以控制,也就是放行或者禁止:

CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;

關注Nginx漏洞情報

Nginx漏洞信息會由官方發佈,筆者建議Nginx管理員重點下相關漏洞。在出現高危漏洞時,及時進行版本升級。

本文內容來自作者圖書作品《Linux 系統安全:縱深防禦、安全掃描與入侵檢測》,點擊購買

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章