nginx 安全:如何強化服務器配置

當前,nginx是最流行的 Web服務器,最近擊敗了Apache。它輕量級,快速,強大,并支持所有主要操作系統。它是Netflix,WordPress.com和其他高流量站點的首選Web服務器。Nginx服務器可以輕松地處理10,000個不活動的HTTP連接,而其內存只有2.5 MB。我們將提供關于nginx服務器安全的技巧,向你展示如何保護你的ngin
為此,請在安裝過程中使用configure選項。在下面的示例中,我們禁用了自動索引模塊,該模塊會生成自動目錄列表,然后重新編譯nginx。
# ./configure --without-http_autoindex_module
# make
# make install
步驟2.禁用nginx server_tokens
默認情況下,nginx中的server_tokens指令顯示nginx版本號。它在所有自動生成的錯誤頁面中直接可見,但也出現在Server標頭中的所有HTTP響應中。
這可能會導致信息泄露–未經授權的用戶可能會了解您使用的nginx版本。您應該通過設置禁用Nginx配置文件中的server_tokens指令server_tokens off。
步驟3.控制資源和限制
為了防止對nginx進行潛在的DoS攻擊,您可以為所有客戶端設置緩沖區大小限制。您可以使用以下指令在nginx配置文件中執行此操作:
- client_body_buffer_size –使用此偽指令指定客戶端請求主體緩沖區的大小。默認值是8k或16k的,但建議設置該低1K:
client_body_buffer_size 1k。 - client_header_buffer_size –使用此偽指令為客戶端請求標頭指定標頭緩沖區大小。1k的緩沖區大小足以應付大多數請求。
- client_max_body_size –使用此偽指令為客戶端請求指定可接受的最大正文大小。1k指令應足夠,但如果通過POST方法接收文件上傳,則需要增加該數值。
- large_client_header_buffers –使用此偽指令指定用于讀取大型客戶端請求標頭的緩沖區的最大數量和大小。甲
large_client_header_buffers 2 1k指令集緩沖器的2的最大數目,每個具有1K的最大尺寸。該指令將接受2 kB數據URI。
注意:一些消息來源建議,如果在nginx中發現了此類漏洞,則設置此類限制可能會防止潛在的緩沖區溢出攻擊。
步驟4.禁用所有不需要的HTTP方法
我們建議您禁用將不被使用并且不需要在Web服務器上實現的任何HTTP方法。如果在nginx虛擬主機配置文件的位置塊中添加以下條件,則服務器將僅允許GET,HEAD和POST方法,并將過濾掉DELETE和TRACE等方法。
location / {
limit_except GET HEAD POST { deny all; }
}
另一種方法是在服務器部分(或服務器塊)中添加以下條件。它可以被認為是更通用的,但是您應該小心if位置上下文中的語句。
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444; }
步驟5.為您的Nginx Web服務器安裝ModSecurity
ModSecurity是充當Web應用程序防火墻的開源模塊。它的功能包括過濾,服務器身份屏蔽和空字節攻擊防護。該模塊還允許您執行實時流量監控。我們建議您遵循ModSecurity手冊來安裝mod_security模塊,以增強安全性選項。
請注意,如果ModSecurity無法滿足您的需求,您還可以使用其他免費的WAF解決方案s)。
步驟6.設置和配置nginx訪問和錯誤日志
Nginx訪問和錯誤日志默認情況下處于啟用狀態,分別位于logs / error.log和logs / access.log中。如果要更改位置,可以在nginx配置文件中使用error_log指令。您還可以使用此偽指令來指定將根據其嚴重性級別記錄的日志。例如,一個暴擊的嚴重性級別會導致nginx的登錄關鍵問題和具有比更高的嚴重性級別的所有問題的暴擊。要將嚴重級別設置為crit,請如下設置error_log指令:
error_log logs/error.log crit;
您可以在Nginx *官方文檔中找到error_log*嚴重性級別的完整列表。
您還可以修改nginx配置文件中的access_log指令,以為訪問日志指定非默認位置。最后,您可以使用log_format指令來配置已記錄消息的格式。
步驟7.監視nginx訪問和錯誤日志
如果您持續監視和管理Nginx日志文件,則可以更好地了解對Web服務器的請求,并注意到任何遇到的錯誤。這將幫助您發現任何攻擊嘗試,并確定可以采取哪些措施來優化服務器性能。
您可以使用日志管理工具(例如logrotate)來旋轉和壓縮舊日志并釋放磁盤空間。同樣,ngx_http_stub_status_module模塊提供對基本狀態信息的訪問。您還可以投資Nginx的商業版本nginx Plus,它提供對流量,負載和其他性能指標的實時活動監視。
步驟8.將Nginx配置為包括安全標題
為了進一步加強Nginx Web服務器的性能,您可以添加幾個不同的HTTP標頭。這是我們推薦的一些選項。
X框架選項
您可以使用X-Frame-Options HTTP響應標頭指示是否應允許瀏覽器在*或中*呈現頁面。這可以防止點擊劫持攻擊。因此,我們建議您為Nginx服務器啟用此選項。
為此,請將以下參數添加到服務器部分的nginx配置文件中:
add_header X-Frame-Options "SAMEORIGIN";
嚴格的運輸安全
HTTP嚴格傳輸安全性(HSTS)是網站用來聲明僅應使用安全連接(HTTPS)訪問它們的一種方法。如果網站聲明了HSTS策略,則瀏覽器必須拒絕所有HTTP連接并阻止用戶接受不安全的SSL證書。要將HSTS標頭添加到您的nginx服務器,可以在服務器部分添加以下指令:
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
CSP和X-XSS保護
內容安全策略(CSP)保護您的Web服務器免受某些類型的攻擊,包括跨站點腳本攻擊(XSS)和數據注入攻擊。您可以通過添加以下示例Content-Security-Policy標頭來實現CSP (請注意,實際標頭應配置為符合您的獨特要求):
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
IE和Safari支持HTTP X-XSS-Protection標頭,如果您具有強大的內容安全策略,則對于現代瀏覽器而言則不是必需的。但是,為防止在較舊的瀏覽器(尚不支持CSP)中使用XSS,可以將X-XSS Protection標頭添加到服務器部分:
add_header X-XSS-Protection "1; mode=block";
步驟9.配置SSL和密碼套件
Nginx 的默認配置允許您使用不安全的舊版TLS協議(根據官方文檔:ssl_protocols TLSv1 TLSv1.1 TLSv1.2)。這可能導致諸如BEAST攻擊之類的攻擊。因此,我們建議您不要使用舊的TLS協議,并更改配置以僅支持更新的安全TLS版本。
為此,請在nginx配置文件的server部分中添加以下指令:
ssl_protocols TLSv1.2 TLSv1.3;
此外,您應指定密碼套件,以確保不支持任何易受攻擊的套件。要選擇最佳的密碼套件,請閱讀有關TLS密碼強化的文章,并在服務器部分添加ssl_ciphers指令以選擇密碼(如關于密碼強化的文章中所建議)。我們還建議您將以下指令添加到服務器部分:
該指令將使使用哪種密碼的決定在服務器端而不是客戶端。
## 步驟10.定期更新服務器
與任何其他軟件一樣,我們建議您始終將nginx服務器更新為最新的穩定版本。新更新通常包含對先前版本中標識的漏洞的修復,例如在0.7.63之前的nginx版本和在0.8.17之前的0.8.x中存在的目錄遍歷漏洞(CVE-2009-3898)。更新還經常包括新的安全功能和改進。在nginx.org網站上,您可以[在專門的部分中找到安全公告,并在主頁上找到有關最新更新的新聞。
## 步驟11.使用Gixy檢查您的配置
Gixy是一個開源工具,可讓您檢查nginx Web服務器中是否存在典型的錯誤配置。準備好nginx配置后,最好使用Gixy對其進行檢查。
## 步驟12。您不必手動進行
如果您不想手動配置nginx,則可以使用DigitalOcean提供的免費在線視覺配置工具。