色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何通過優化Nginx配置來提高網絡環境的安全性

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2025-02-14 17:49 ? 次閱讀

簡介:在當今數字化時代,網絡安全至關重要。Nginx作為流行的Web服務器,不僅提供高性能,還具備強大的安全保障功能。然而,默認配置可能無法抵御所有安全威脅,因此對Nginx進行安全加固尤為重要。本文為系統管理員、開發者等提供詳盡的安全加固指南,涵蓋基礎到高級策略,包括隱藏版本號信息、限制敏感目錄訪問、啟用HTTPS、配置錯誤頁面、應用內容安全策略(CSP)、設置正確文件權限、添加安全HTTP響應頭、限制連接數、配置IP白名單、優化SSL配置、確保文件上傳安全、防止常見攻擊。通過這些措施,可以有效提升Nginx的安全性,保護網站和應用程序免受潛在威脅。

引言

在當今數字化的世界中,網絡安全已成為每一個組織和個人不可忽視的重要議題。作為最流行的Web服務器之一,Nginx不僅因為其高性能而被廣泛使用,還因為它能夠提供強大的安全保障。然而,默認配置下的Nginx可能無法抵御所有潛在的安全威脅。為了確保您的網站和應用程序能夠在互聯網上穩健運行,對Nginx進行適當的安全加固顯得尤為重要。

本文旨在為系統管理員、開發者以及任何對提升Nginx安全性感興趣的讀者提供一份詳盡的安全加固路線圖。我們將探討從基礎到高級的各種策略,包括但不限于正確的權限設置、限制對外暴露的信息、啟用加密連接、配置防火墻等關鍵措施。無論您是希望保護個人博客免受攻擊,還是為企業的在線服務構建堅固的防線,本文都將為您提供寶貴的實踐指導和技術支持。讓我們一起深入了解如何通過優化Nginx配置來提高您的網絡環境的安全性吧。

隱藏版本號信息

默認情況下,Nginx會在HTTP響應頭中暴露其版本號。攻擊者可以利用這些信息來尋找特定版本的漏洞。通過在配置文件中的http、server或location塊內添加server_tokens off;來關閉這個功能。

步驟

打開Nginx配置文件:通常位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf,具體位置取決于你的安裝方式。

編輯配置文件:找到http塊,并在其中添加server_tokens off;指令。如果你有多個server塊,也可以在每個server塊中單獨設置這個選項,以確保它在整個服務器范圍內生效。

保存并退出編輯器:完成修改后保存更改。

檢查配置語法:使用命令nginx -t來測試配置文件是否有語法錯誤。

重新加載Nginx:如果配置文件沒有問題,使用命令nginx -s reload來應用新的配置。

# nginx.conf 或者某個特定的 server 配置文件

http {
   
    # 其他配置...

    # 關閉版本信息顯示
    server_tokens off;

    # 更多其他配置...

    server {
   
        listen 80;
        server_name example.com;

        # 在 server 塊內也可以設置 server_tokens
        # server_tokens off;

        location / {
   
            root /var/www/html;
            index index.html index.htm;
        }
    }
}

限制訪問敏感目錄

為了防止外部用戶訪問敏感資源,比如.htaccess文件或.git目錄,你可以使用Nginx的location塊和deny all;指令來實現。以下是如何配置的具體示例代碼以及一個實際案例說明。

下面的例子展示了如何在Nginx配置中添加規則以阻止對.git目錄和.htaccess文件的訪問:

server {
   
    listen 80;
    server_name example.com;

    # 根目錄設置
    root /var/www/html;

    # 禁止訪問.git目錄
    location ~ /.git {
   
        deny all;
    }

    # 禁止訪問.htaccess文件
    location ~ /.ht {
   
        deny all;
    }

    # 其他location配置...
}

在這個例子中,我們使用了正則表達式匹配來定位.git和.htaccess文件,并通過deny all;指令拒絕所有請求到這些資源的訪問。

假設你有一個基于Git版本控制的Web項目部署在你的服務器上,并且你不希望任何訪問者能夠看到.git目錄下的內容,因為這可能包含敏感信息如提交歷史、開發者郵箱等。同樣地,如果你不小心將.htaccess文件留在了你的Web根目錄下,你也希望能夠阻止外部訪問這個文件。

按照上述配置,當你嘗試直接訪問http://example.com/.git/或http://example.com/.htaccess時,Nginx會返回403 Forbidden錯誤,從而保護這些敏感資源不被公開訪問。

此外,如果你想提供一個友好的錯誤頁面而不是默認的403錯誤頁面,可以結合使用error_page指令。例如:

server {
   
    listen 80;
    server_name example.com;

    # 根目錄設置
    root /var/www/html;

    # 定義自定義403錯誤頁面
    error_page 403 /custom_403.html;

    # 禁止訪問.git目錄
    location ~ /.git {
   
        deny all;
    }

    # 禁止訪問.htaccess文件
    location ~ /.ht {
   
        deny all;
    }

    # 自定義403錯誤頁面的位置
    location = /custom_403.html {
   
        allow all;
        root /usr/share/nginx/html;
    }
}

這樣,當發生403錯誤時,用戶將會看到位于/usr/share/nginx/html/custom_403.html的自定義錯誤頁面,而不是默認的Nginx 403錯誤提示。

配置錯誤頁面

配置自定義錯誤頁面是提升用戶體驗和增強安全性的重要措施。下面將通過具體的Nginx配置示例來說明如何設置404、500等錯誤頁面,并確保這些頁面不會泄露過多的服務器信息。

首先,你需要編輯Nginx的配置文件(通常是nginx.conf或位于sites-available目錄下的某個站點配置文件)。以下是一個簡單的配置示例:

server {
   
    listen 80;
    server_name example.com;

    # 根目錄設置
    root /var/www/html;
    index index.html index.htm;

    # 隱藏Nginx版本信息
    server_tokens off;

    # 定義自定義錯誤頁面
    error_page 404 /custom_404.html;
    error_page 500 502 503 504 /custom_50x.html;

    # 自定義404錯誤頁面的位置
    location = /custom_404.html {
   
        root /usr/share/nginx/html;
        internal;
    }

    # 自定義50x錯誤頁面的位置
    location = /custom_50x.html {
   
        root /usr/share/nginx/html;
        internal;
    }

    # 其他location配置...
}

在這個例子中,我們使用了error_page指令來指定當發生404或500系列錯誤時應該顯示的頁面。internal;指示Nginx只在內部重定向到這個位置,不允許直接訪問這些錯誤頁面。

假設你正在運營一個在線商店,網站偶爾會因為各種原因出現臨時性的問題,比如數據庫連接失敗導致的500內部服務器錯誤。為了確保即使在這種情況下也能提供良好的用戶體驗,你可以創建一個設計精美的500錯誤頁面,它不僅告訴用戶當前遇到了問題,還提供了幫助鏈接或者聯系客服的方式。

同樣地,對于404錯誤,一個好的做法是提供一個搜索框或者導航鏈接,讓用戶可以方便地找到他們可能感興趣的內容,而不是簡單地顯示“頁面未找到”。

例如,你的custom_404.html頁面可能包含如下內容:



    
    Page Not Found


    

Oops! Page not found.

We're sorry, but the page you were looking for doesn't exist.

Go back to homepage

而custom_50x.html可能會這樣設計:



    
    Server Error


    

Something went wrong!

Our team has been notified and is working on fixing the issue as quickly as possible.

Return to homepage

Contact us if you need further assistance.

啟用HTTPS

啟用HTTPS對于保護數據傳輸的安全性至關重要。這通常涉及到幾個步驟:獲取SSL證書、安裝SSL證書以及在Nginx配置中設置以支持HTTPS連接。下面,我將通過具體的代碼示例和實際案例來詳細說明這個過程。

獲取并安裝SSL證書

首先,你需要從一個可信的證書頒發機構(CA)獲取SSL證書。你可以選擇付費的SSL證書提供商,如DigiCert、Comodo等,或者使用Let's Encrypt提供的免費SSL證書。

生成CSR文件

在申請SSL證書之前,你需要生成一個證書簽名請求(CSR)。以下是使用OpenSSL工具生成CSR文件的命令:

openssl req -new -newkey rsa:2048 -nodes -out yourdomain.csr -keyout yourdomain.key

系統會提示你輸入一些信息,例如國家、組織名稱、域名等。

提交CSR并下載證書

完成上述步驟后,提交生成的CSR給選定的CA,并按照其指示進行身份驗證。一旦驗證通過,你會收到一個或多個證書文件,包括服務器證書和中間證書。

在Nginx中啟用HTTPS

假設你已經獲取了SSL證書并且準備好了所有必要的文件(如yourdomain.crt和yourdomain.key),接下來需要在Nginx配置中啟用HTTPS。

Nginx配置示例

以下是一個基本的Nginx配置示例,展示了如何設置HTTPS支持:

server {
   
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    # 將HTTP請求重定向到HTTPS
    return 301 https://$host$request_uri;
}

server {
   
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /path/to/yourdomain.crt;
    ssl_certificate_key /path/to/yourdomain.key;
    ssl_trusted_certificate /path/to/intermediate.crt;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCMAES256+EECDH:AES256+EDH';

    location / {
   
        # 你的網站根目錄和其他配置
        root /var/www/html;
        index index.html index.htm;
    }
}

在這個配置中,我們首先定義了一個監聽80端口的服務器塊,用于處理HTTP請求并將它們重定向到HTTPS。然后,我們定義了另一個服務器塊,它監聽443端口,并啟用了SSL/TLS加密。這里指定了證書文件的位置以及一些額外的安全參數。

應用內容安全策略(CSP)

內容安全策略(CSP)是一個額外的安全層,用于檢測并削弱某些特定類型的攻擊,包括跨站腳本(XSS)和數據注入攻擊等。通過在Nginx配置中應用CSP,你可以指定哪些資源是允許加載的,從而防止潛在的惡意代碼執行。

設置CSP的基本步驟

首先,你需要定義一個適合你網站需求的CSP策略。這通常涉及到指定哪些源可以加載腳本、樣式、圖片等資源。然后,將這個策略添加到你的Nginx配置文件中。

示例代碼

假設你有一個簡單的博客網站,并且希望確保所有的資源都來自相同的源(即self),除了圖片可以從任何地方加載外,其他資源都不允許內聯或使用eval()函數。以下是如何在Nginx中設置這樣一個CSP的例子:

server {
   
    listen 80;
    server_name example.com;

    # 其他配置...

    add_header Content-Security-Policy "default-src 'self'; img-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval'";

    # 其他location配置...
}

在這個例子中,我們設置了以下規則:

default-src 'self':默認情況下,只允許從當前域名加載資源。

img-src*:允許圖片從任何源加載。

script-src 'self' 'unsafe-inline' 'unsafe-eval':允許腳本從當前域名加載,并允許內聯腳本和eval()函數。然而,在實際生產環境中應盡量避免使用unsafe-inline和unsafe-eval,因為它們會增加XSS攻擊的風險。

假設一個在線銀行系統,它需要非常嚴格的安全措施來保護用戶的數據。在這種情況下,銀行可能會采取如下的CSP策略:

add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trustedscripts.example.com; style-src 'self' https://trustedstyles.example.com; img-src 'self' data: https://trustedimages.example.com; connect-src 'self' https://api.example.com; object-src 'none'; frame-src 'none';";

這里,我們做了如下限制:

只允許從當前域加載所有類型的內容(default-src 'self')。

腳本只能從當前域和一個可信的第三方腳本提供者加載(script-src 'self'https://trustedscripts.example.com)。

樣式表也受到類似的限制(style-src 'self'https://trustedstyles.example.com)。

圖片可以從當前域、data URI以及一個可信的圖片服務器加載(img-src 'self' data:https://trustedimages.example.com)。

API請求只能發送到當前域或一個可信的API端點(connect-src 'self'https://api.example.com)。

禁止加載插件內容(object-src 'none')以減少潛在的安全風險。

不允許頁面被嵌入到任何iframe中,防止點擊劫持攻擊(frame-src 'none')。

監控與調整

一旦部署了CSP,重要的是要監控其表現。通過使用report-uri指令,你可以讓瀏覽器向你指定的URL報告任何違反CSP的行為,這樣就可以及時發現并修復問題。例如:

add_header Content-Security-Policy "default-src 'self'; report-uri /csp-report-endpoint";

這將指示瀏覽器將任何CSP違規報告發送到/csp-report-endpoint路徑上。定期審查這些報告有助于優化你的CSP策略,確保既不過于寬松也不過于嚴格。

請根據實際情況調整CSP策略,逐步實施新的限制,并測試對網站功能的影響,同時保持對新威脅的關注并適時更新策略。

設置正確的文件權限

設置正確的文件權限是確保Nginx服務安全運行的重要步驟。這涉及到配置文件、日志文件以及網站根目錄下的文件和目錄的權限設置。以下是一些指導原則和具體的代碼示例,用于幫助你正確地設置這些權限。

文件和目錄權限的一般規則

文件權限:通常推薦將文件權限設為644,這意味著所有者可以讀寫(rw-),而組用戶和其他人只能讀取(r--)。

目錄權限:目錄權限通常設為755,允許所有者讀寫執行(rwx),組用戶和其他人只能讀取和執行(r-x)。

所有者和組:所有者應設置為運行Nginx服務的非root用戶,例如nginx或www-data,具體取決于你的系統配置。

設置文件和目錄權限的命令

Linux系統中,你可以使用chmod命令來修改文件或目錄的權限,使用chown命令來更改文件或目錄的所有者和所屬組。

假設你有如下結構:

/var/www/html/  # 網站根目錄
/etc/nginx/nginx.conf  # Nginx主配置文件
/var/log/nginx/access.log  # 訪問日志文件

你可以使用以下命令來設置權限:

# 設置文件權限為644
sudo chmod 644 /var/www/html/index.html
sudo chmod 644 /etc/nginx/nginx.conf
sudo chmod 644 /var/log/nginx/access.log

# 設置目錄權限為755
sudo chmod 755 /var/www/html/

更改文件所有者和組

如果你需要更改文件的所有者和組,可以使用chown命令:

# 假設nginx運行用戶為nginx,組也為nginx
sudo chown nginx:nginx /var/www/html/index.html
sudo chown root:nginx /etc/nginx/nginx.conf  # 主配置文件可能由root擁有,但屬于nginx組
sudo chown nginx:nginx /var/log/nginx/access.log

假設正在維護一個基于Nginx的WordPress博客。為了確保安全性,你需要正確設置文件和目錄的權限。

首先,確定Nginx是以哪個用戶運行的。可以通過查看Nginx配置文件中的user指令得知,通常是nginx或www-data。

grep 'user' /etc/nginx/nginx.conf

然后,應用適當的權限設置:

# 設置WordPress安裝目錄下的文件和目錄權限
find /var/www/html -type f -exec chmod 644 {
   } ;
find /var/www/html -type d -exec chmod 755 {
   } ;

# 更改所有權
sudo chown -R nginx:nginx /var/www/html

# 設置Nginx日志文件權限
sudo chmod 640 /var/log/nginx/*.log
sudo chown nginx:nginx /var/log/nginx/*.log

在這個例子中,我們對WordPress安裝目錄下的所有文件設置了644權限,對目錄設置了755權限,并且將所有權更改為Nginx用戶。對于日志文件,我們采用了稍微嚴格的權限640,以限制訪問。

配置安全Headers

添加安全相關的HTTP響應頭,可以有效防御常見的Web攻擊:

# 防止點擊劫持
add_header X-Frame-Options SAMEORIGIN;
add_header Content-Security-Policy "frame-ancestors 'self';";

# 強化XSS防護
# 注意:根據實際情況決定是否保留X-XSS-Protection,因為現代瀏覽器支持程度不同
add_header X-XSS-Protection "1; mode=block";

# 防止MIME類型混淆攻擊
add_header X-Content-Type-Options nosniff;

# 增強隱私保護
add_header Referrer-Policy "strict-origin-when-cross-origin";

# 強化的CSP策略
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'; upgrade-insecure-requests;";

限制連接數

為了防止DoS(拒絕服務)攻擊,可以通過限制單個IP的連接數和請求頻率來減少惡意流量對服務器的影響。

Nginx提供了兩個模塊來進行這種類型的限制:ngx_http_limit_conn_module和ngx_http_limit_req_module。前者用于限制連接數,后者用于限制請求頻率。

以下是一個簡單的Nginx配置片段,用于限制每個客戶端IP的最大并發連接數為10:

http {
   
    # 定義一個名為addr的共享內存區域,大小為10MB,鍵值為$binary_remote_addr
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
   
        location / {
   
            # 每個IP地址最多允許10個并發連接
            limit_conn addr 10;
        }
    }
}

下面是一個限制請求頻率的例子,它限制了每個客戶端IP每秒最多發起20次請求,并且設置了突發緩沖區為5次請求:

http {
   
    # 定義一個名為req_zone的共享內存區域,大小為10MB,鍵值為$binary_remote_addr,速率限制為每秒20次請求
    limit_req_zone $binary_remote_addr zone=req_zone:10m rate=20r/s;

    server {
   
        location / {
   
            # 應用名為req_zone的限制規則,允許突發請求量為5
            limit_req zone=req_zone burst=5 nodelay;
        }
    }
}

配置白名單

配置IP白名單是一種有效的安全措施,特別是對于管理后臺等敏感區域。通過只允許特定的、受信任的IP地址訪問這些區域,可以大大減少未經授權訪問的風險。

如果你使用Nginx作為你的Web服務器,可以通過以下方式限制對某些路徑的訪問僅限于指定的IP地址:

server {
   
    listen 80;
    server_name yourdomain.com;

    location /admin/ {
   
        allow 192.168.1.1; # 允許的IP地址
        deny all; # 拒絕所有其他IP地址
        proxy_pass http://backend;
    }
}

上述配置會使得只有來自192.168.1.1的請求能夠訪問/admin/路徑下的資源,而所有其他IP地址的請求都將被拒絕。

優化SSL配置

優化SSL配置是確保網站安全性和性能的關鍵步驟。以下是一些具體的建議和代碼示例,用于增強SSL/TLS的安全性:

禁用舊版本的SSL/TLS協議(如SSLv3, TLS 1.0, 和 TLS 1.1),因為它們存在已知的安全漏洞。

在Nginx中,你可以通過以下配置來實現:

server {
   
    listen 443 ssl http2;
    ssl_protocols TLSv1.2 TLSv1.3;

    # 其他配置...
}

選擇強加密套件以保護數據傳輸。避免使用含有MD5、RC4等不安全算法的套件。

server {
   
    listen 443 ssl http2;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384ECDHE-ECDSA-CHACHA20-POLY1305ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;

    # 其他配置...
}

在線證書狀態協議(OCSP)Stapling允許服務器預先獲取證書吊銷狀態,并將其提供給客戶端,從而減少客戶端查詢時間。

server {
   
    listen 443 ssl http2;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 10s;

    # 其他配置...
}

HSTS告訴瀏覽器總是使用HTTPS訪問你的站點,即使用戶嘗試通過HTTP訪問。

server {
   
    listen 443 ssl http2;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # 其他配置...
}

會話票據可以加快后續連接的速度,因為它們允許跳過完整的TLS握手過程。

server {
   
    listen 443 ssl http2;
    ssl_session_tickets on;

    # 其他配置...
}

文件上傳安全

為了確保Nginx配置能夠防止通過上傳大文件耗盡服務器資源,并且保證上傳目錄的權限配置正確,我們需要從幾個方面入手:限制上傳文件大小、設置正確的目錄權限以及確保上傳的文件不會被執行。

在Nginx中,我們可以通過client_max_body_size指令來控制允許客戶端上傳的最大文件大小。這個指令可以在http, server, 或者 location塊中進行設置。以下是一個示例配置:

http {
   
    # 其他配置...

    client_max_body_size 10m; # 設置最大上傳文件大小為10MB

    server {
   
        listen       80;
        server_name  example.com;

        location /upload {
   
            # 將請求轉發給后端處理文件上傳的應用服務器
            proxy_pass http://backend_server;

            # 確保這里也設置了client_max_body_size以覆蓋默認值
            client_max_body_size 10m;
        }

        # 其他配置...
    }
}

上述配置將所有上傳請求的最大文件大小限制為10MB。如果用戶嘗試上傳超過此大小的文件,Nginx會返回413 (Request Entity Too Large)錯誤。

為了保護上傳的文件不被惡意執行,應該對上傳目錄設置適當的權限,并禁止該目錄下的腳本執行。以下是如何在Nginx配置中做到這一點的一個例子:

server {
   
    listen       80;
    server_name  example.com;

    location /uploads {
   
        alias /path/to/uploads; # 指定上傳目錄的實際路徑

        # 防止任何PHP或類似腳本被執行
        location ~* .(php|pl|py|jsp|asp|sh|cgi)$ {
   
            deny all; # 對匹配這些擴展名的文件返回403 Forbidden
        }
    }
}

在這個配置中,任何試圖訪問具有.php, .pl, .py, .jsp, .asp, .sh, 或 .cgi擴展名的文件都會被拒絕訪問,即使這些文件位于/uploads目錄下。這可以有效避免由于文件上傳而導致的安全風險。

防止常見攻擊

防止DDoS攻擊

http {
   
    # 設置請求速率限制
    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;

    server {
   
        location /login.html {
   
            # 應用請求速率限制
            limit_req zone=one;
        }

        # 設置并發連接數限制
        limit_conn_zone $binary_remote_addr zone=addr:10m;

        location /shopping/ {
   
            limit_conn addr 10; # 每個IP最多允許10個并發連接
        }

        # 關閉慢連接
        client_body_timeout 5s;
        client_header_timeout 5s;
    }
}

通過這種方式,可以有效地減少惡意用戶發起的大量請求對服務器造成的壓力。

防止SQL注入

雖然SQL注入主要是應用程序層面的問題,但是Nginx也可以通過過濾特定的查詢字符串來輔助防護:

location / {
       
# 檢查URL中是否包含特殊字符    
# 如果包含分號、單引號、尖括號等字符,返回444狀態碼    
# 444是Nginx特殊狀態碼,表示關閉連接而不發送響應頭    
if ($request_uri ~* [;'<>] ) {
           
return 444;    
}       
# 檢查查詢字符串中的特殊字符    
if ($args ~* [;'<>] ) {
          
 return 444;    }       
 # 保護敏感URI    
location ~* /(admin|backup|config|db|src)/ {
          
 deny all;    
}}

這會阻止包含有潛在危險字符的請求到達后端服務。

防止跨站腳本攻擊(XSS)

可以通過設置HTTP響應頭來增加安全性:

add_header X-XSS-Protection "1; mode=block";

這個頭部告訴瀏覽器啟用XSS過濾,并在檢測到XSS攻擊時阻止渲染頁面。

點擊劫持(Clickjacking)防御

通過設置X-Frame-Options響應頭來防止點擊劫持:

add_header X-Frame-Options SAMEORIGIN;

這樣可以確保你的網站只能被嵌入到相同域名下的iframe中,增加了額外的安全層

防止目錄遍歷

防止目錄遍歷攻擊是Nginx配置中的一個重要方面,這種攻擊允許攻擊者通過構造特殊的URL訪問Web服務器上的未授權文件或目錄。

禁用目錄列表(autoindex off)

默認情況下,Nginx不會列出目錄內容,但是如果你不小心啟用了autoindex on,則可能暴露敏感信息。確保在所有相關位置塊中禁用目錄列表:

server {
   
    listen 80;
    server_name example.com;

    location / {
   
        autoindex off; # 確保目錄瀏覽被關閉
        root /var/www/html;
    }
}

使用正則表達式阻止包含../的請求

你可以使用正則表達式匹配并拒絕任何試圖進行目錄遍歷的請求:

location ~ /../ {
   
    deny all; # 拒絕所有包含“../”的請求
}

正確配置別名(alias)和根路徑(root)

當使用alias時,確保正確地添加斜杠以避免潛在的目錄遍歷漏洞:

location /static/ {
    # 注意這里的斜杠
    alias /var/www/static_files/; # 確保這里也有斜杠
}

啟用基于IP的訪問控制

你可以限制對特定目錄的訪問,只允許某些IP地址訪問:

location /admin/ {
   
    allow 192.168.1.100; # 允許特定IP訪問
    deny all; # 拒絕其他所有IP訪問
}

URL解碼過濾

雖然Nginx默認會對URL進行解碼,但你仍然可以添加額外的安全層來確保路徑中的特殊字符不會導致問題:

if ($uri ~* "..") {
   
    return 403; # 如果URI包含“..”,返回403 Forbidden
}

假設你有一個網站托管在Nginx上,并且你希望保護你的服務器不受目錄遍歷攻擊的影響。你的網站有一個公開可訪問的靜態資源目錄/static/images/,以及一個后臺管理面板/admin/。為了防止目錄遍歷攻擊,你可以采取以下措施:

對于靜態資源目錄,確保autoindex被關閉,并且正確配置了別名:

location /static/ {
   
    alias /var/www/static_files/;
    autoindex off; # 確保目錄瀏覽被關閉
}

對于后臺管理面板,你可以設置基于IP的訪問控制:

location /admin/ {
   
    allow 192.168.1.100; # 只允許特定IP訪問
    deny all; # 拒絕其他所有IP訪問
}

全局防護,在整個服務器配置中添加針對目錄遍歷的防護規則:

server {
   
    listen 80;
    server_name yoursite.com;

    # 拒絕不含斜杠的父級目錄嘗試
    location ~ /../ {
   
        deny all;
    }

    # 正常的站點配置...
}

這些配置能夠幫助你構建一個更加安全的環境,有效地防止目錄遍歷攻擊。

日志安全

在Nginx中,通過配置訪問日志和錯誤日志,可以有效地記錄用戶行為和系統狀態,這對于安全分析至關重要。下面我將提供具體的代碼示例來說明如何配置這些日志。

為了詳細記錄訪問信息,你可以自定義log_format來包含盡可能多的相關字段,并使用access_log指令指定日志文件的位置以及使用的格式。以下是一個詳細的訪問日志配置示例:

http {
   
    # 定義一個名為'main'的日志格式,包含多種有用的信息
    log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" '
                    '"$http_x_forwarded_for" "$msec" '
                    '"$connection" "$connection_requests" '
                    '"$upstream_addr" "$upstream_response_time" '
                    '"$request_time" "$gzip_ratio"';

    # 指定使用'main'格式記錄訪問日志到特定位置
    access_log /var/log/nginx/access.log main buffer=32k flush=1m;

    server {
   
        listen 80;
        server_name example.com;

        location / {
   
            root /var/www/html;
            index index.html;
        }
    }
}

在這個例子中,我們定義了一個叫做main的復雜日志格式,它包括了客戶端IP地址、請求時間、請求詳情、響應狀態碼、發送給客戶端的數據大小、來源頁面、用戶代理、X-Forwarded-For頭(如果有的話)、毫秒級的時間戳、連接序列號、通過該連接發出的請求數量、上游服務器地址、上游響應時間、整個請求處理時間和壓縮率等。

對于錯誤日志,你需要根據實際情況選擇合適的日志級別。例如,在生產環境中,你可能希望設置為warn或error級別,以減少不必要的信息并專注于實際問題。以下是配置錯誤日志級別的示例:

http {
   
    # 設置全局錯誤日志級別為warn
    error_log /var/log/nginx/error.log warn;

    server {
   
        listen 80;
        server_name example.com;

        location / {
   
            root /var/www/html;
            index index.html;
        }

        # 可以為特定虛擬主機設置不同的錯誤日志級別
        error_log /var/log/nginx/example.error.log error;
    }
}

在這個配置中,全局錯誤日志被設置為warn級別,這意味著只有警告及以上級別的消息會被記錄。而對于特定的虛擬主機(如example.com),錯誤日志被設置為更嚴格的error級別,這樣可以集中關注那些真正可能導致服務中斷的問題。

其他安全措施

禁止執行腳本

在Nginx中,你可以通過配置location塊來限制特定目錄下的腳本執行權限。下面是一個示例,展示了如何阻止在/uploads目錄下執行PHP腳本:

server {
   
    listen 80;
    server_name example.com;

    location /uploads/ {
   
        # 禁止訪問任何php腳本
        location ~* .php$ {
   
            deny all;
        }

        # 或者使用以下方式直接返回403錯誤給所有嘗試執行php腳本的請求
        # location ~* .php$ {
   
        #     return 403;
        # }

        # 其他靜態資源處理規則...
    }

    # 其他server配置...
}

另一種方法是使用偽靜態規則來實現同樣的目的,這在寶塔面板等管理工具中較為常見:

location ~ /(uploads)/.*.(php|php5)$ {
   
    deny all; # 返回403 Forbidden
}

配置超時時間

設置合理的超時參數是防御慢速攻擊(Slow HTTP DoS Attack)的關鍵措施之一。慢速攻擊利用了HTTP協議的特性,通過緩慢地發送請求或響應數據來消耗服務器資源,導致服務器無法處理正常請求。以下是針對不同層面配置超時時間以防止此類攻擊的方法和示例。

在Nginx中,可以通過調整以下參數來防御慢速攻擊:

client_body_timeout: 設置客戶端與服務器建立連接后發送request body的超時時間。

client_header_timeout: 設置客戶端向服務器發送一個完整的request header的超時時間。

send_timeout: 設置服務端向客戶端傳輸數據的超時時間。

keepalive_timeout: 設置每個TCP連接最多可以保持多長時間。

client_max_body_size: 限制客戶端能夠上傳的最大文件大小。

limit_rate: 限制連接速率,防止客戶端過快地使用帶寬。

下面是一個基本的Nginx配置示例:

http {
   
    # 設置客戶端主體讀取超時時間為10秒
    client_body_timeout 10s;

    # 設置客戶端頭部讀取超時時間為10秒
    client_header_timeout 10s;

    # 設置發送給客戶端的數據超時時間為10秒
    send_timeout 10s;

    # 設置Keep-Alive連接的超時時間為60秒
    keepalive_timeout 60s;

    # 設置允許客戶端上傳的最大文件大小為1M
    client_max_body_size 1M;

    # 限制每秒傳輸的數據量為100KB
    limit_rate 100k;

    server {
   
        listen 80;
        server_name example.com;

        location / {
   
            # 其他配置...
        }
    }
}

總結

綜上所述,通過禁用不必要的HTTP方法、隱藏版本信息、設置緩沖區大小限制、屏蔽不受歡迎的爬蟲、限制IP訪問、控制并發連接數及速度、調整超時時間,并采用HTTPS協議與優化SSL/TLS策略等措施,可以顯著增強Nginx的安全性。同時,配置安全頭部字段如Content Security Policy (CSP)有助于防御跨站腳本攻擊和其他代碼注入威脅。確保Nginx及其模塊保持最新,遵循最小權限原則運行服務,并定期審計系統日志,對于構建堅固的安全防線至關重要。實施這些策略不僅能夠有效抵御已知威脅,也為應對未知挑戰提供了有力保障。

鏈接:https://developer.aliyun.com/article/1650977?spm=5176.21213303.J_v8LsmxMG6alneH-O7TCPa.5.4a5f2f3dvsDvvQ&scm=20140722.S_community@@%E6%96%87%E7%AB%A0@@1650977._.ID_1650977-RL_nginx-LOC_search~UND~community~UND~item-OR_ser-PAR1_2150422117395193796102487ec1a7-V_4-P0_4-P1_0

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網絡安全
    +關注

    關注

    11

    文章

    3301

    瀏覽量

    61139
  • nginx
    +關注

    關注

    0

    文章

    163

    瀏覽量

    12504

原文標題:總結

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    Nginx服務優化教程

    隱藏Nginx版本號,避免安全漏洞泄漏:修改配置文件法;修改源碼法
    的頭像 發表于 03-12 15:57 ?448次閱讀
    <b class='flag-5'>Nginx</b>服務<b class='flag-5'>優化</b>教程

    EulerOS+Nginx+MySQL 部署 GLPI 資產管理系統

    1. 部署環境說明 ??本次環境選擇使用華為云 Flexus 云服務器 X 實例,因為其具有高性能的計算能力、靈活的資源配置、穩定的運行環境、高效的
    的頭像 發表于 01-03 09:28 ?603次閱讀
    EulerOS+<b class='flag-5'>Nginx</b>+MySQL 部署 GLPI 資產管理系統

    提高網絡性能的阻抗優化技巧

    提高網絡性能的阻抗優化技巧涉及多個層面,包括電路板設計、網絡架構設計、以及具體設備配置等。以下是一些關鍵的阻抗
    的頭像 發表于 12-10 10:09 ?715次閱讀

    電池的安全性測試項目有哪些?

    電池的安全性測試是保證電池在實際使用過程中穩定、安全的重要手段。通過一系列嚴格的測試項目,能夠有效評估電池在不同條件下的表現,并提前發現潛在的安全隱患。對于消費者而言,了解這些測試項目
    的頭像 發表于 12-06 09:55 ?1801次閱讀
    電池的<b class='flag-5'>安全性</b>測試項目有哪些?

    「服務器」Nginx Proxy Manager申請cloudflare泛域名

    ,可以快速添加和管理代理主機(即反向代理規則)。SSL管理:支持通過Let'sEncrypt自動獲取和續訂SSL/TLS證書,以保護網站的安全性。訪問控制:可以對代理
    的頭像 發表于 12-06 01:03 ?512次閱讀
    「服務器」<b class='flag-5'>Nginx</b> Proxy Manager申請cloudflare泛域名

    如何配置modem設備以提高網絡速度

    配置Modem設備以提高網絡速度可以通過多個方面進行,以下是一些建議的步驟: 一、硬件選擇與優化 高性能Modem :選擇性能卓越的Mode
    的頭像 發表于 11-22 16:08 ?779次閱讀

    在電氣安裝中通過負載箱實現最大效率和安全性

    性能,通過負載箱,可以模擬各種實際的運行條件,對設備進行全面的性能測試。這不僅可以發現設備的潛在的問題,還可以優化設備的運行參數,提高設備的運行效率和穩定性。 通過負載箱,可以實現電氣
    發表于 11-20 15:24

    如何配置 VLAN 以提高網絡安全

    配置虛擬局域網(VLAN)是一種在交換網絡提高網絡安全的有效方法。VLAN通過網絡劃分為多個
    的頭像 發表于 11-19 09:17 ?1311次閱讀

    nginx負載均衡配置介紹

    目錄 nginx負載均衡 nginx負載均衡介紹 反向代理與負載均衡 nginx負載均衡配置 Keepalived高可用nginx負載均衡器
    的頭像 發表于 11-10 13:39 ?654次閱讀
    <b class='flag-5'>nginx</b>負載均衡<b class='flag-5'>配置</b>介紹

    恒訊科技分析:IPSec與SSL/TLS相比,安全性如何?

    IPSec和SSL/TLS都是用于保護網絡通信安全的協議,但它們在實現方式、安全性側重點、兼容以及使用場景上存在一些顯著的區別。1、安全性
    的頭像 發表于 10-23 15:08 ?801次閱讀
    恒訊科技分析:IPSec與SSL/TLS相比,<b class='flag-5'>安全性</b>如何?

    ipsec組網通過其加密和驗證機制提供高安全性

    ipsec組網是一種在公用網絡上建立專用網絡的技術,它通過在IP層對數據包進行加密和驗證保證通信的安全性。IPSec VPN
    的頭像 發表于 10-18 10:37 ?756次閱讀

    在跨境電商中,如何確保網絡節點的安全性和合規

    在跨境電商中,確保網絡節點的安全性和合規是至關重要的。以下是一些關鍵措施: 1、數據保護:加強數據保護是提高安全性的重要方面。這包括確保所有敏感數據都
    的頭像 發表于 09-25 13:45 ?1032次閱讀

    通過實時盲區檢測提高車輛安全性

    車載汽車安全系統通過檢測駕駛員盲區中是否存在相鄰車輛,并警告駕駛員可能發生的事故防止發生車禍。駕駛員可以使用此信息來安全地變道。在本文中,我們將討論盲區檢測技術。
    的頭像 發表于 08-30 16:39 ?1509次閱讀
    <b class='flag-5'>通過</b>實時盲區檢測<b class='flag-5'>提高</b>車輛<b class='flag-5'>安全性</b>

    請問DM平臺訪問安全性如何控制?

    DM平臺訪問安全性如何控制?
    發表于 07-25 06:10

    藍牙模塊的安全性與隱私保護

    據傳輸過程中的安全性問題,分析隱私保護方面的挑戰和解決方案,并介紹一些提高藍牙模塊安全性和隱私保護的先進技術。 藍牙模塊在數據傳輸過程中的安全性問題 藍牙模塊在數據傳輸過程中采用了加密
    的頭像 發表于 06-14 16:06 ?992次閱讀
    主站蜘蛛池模板: 日本69xxxxx| 国产成人永久免费视频 | 116美女写真午夜电影z | 国产成人8x视频一区二区 | 最近日本MV字幕免费观看视频 | 欧美精品色婷婷五月综合 | 亚洲精品青青草原avav久久qv | 麻豆成人久久精品二区三区网站 | 亚洲天堂久久久 | 日本内射精品一区二区视频 | 善良的小峓子2在钱免费中文字 | 国产精品麻豆a啊在线观看 国产精品麻豆AV | 樱桃视频影院在线播放 | 天天干夜夜曰 | 精品亚洲麻豆1区2区3区 | 99re6久久热在线视频 | 欧美精品一区二区三区视频 | 免费在线视频a | 99久久免费国内精品 | 日韩精品无码免费专区 | 性肥胖BWBWBW| YELLOW日本免费观看播放 | 午夜向日葵高清在线观看 | 被窝伦理午夜电影网 | 美女扒开尿口让男生添动态图 | 日韩av无码在线直播 | 护士喂我吃乳液我脱她内裤 | 免费人成视频X8X8国产更快乐 | 三叶草成人 | 手机在线观看毛片 | 亚洲成人在线免费观看 | 国产AV亚洲精品久久久久软件 | 性女传奇快播 | 国产精品久久久久久人妻香蕉 | 美女裸露胸部100%无遮挡 | 成人在线免费 | 中文字幕午夜福利片 | 日本韩国欧美一区 | 在线免费看a | 伊人久久99热这里只有精品 | 天天爽夜夜爽夜夜爽 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品