Linux中國

如何保護 Ubuntu 16.04 上的 NGINX Web 伺服器

什麼是 Let』s Encrypt

Let』s Encrypt 是互聯網安全研究組織 (ISRG) 提供的免費證書認證機構。它提供了一種輕鬆自動的方式來獲取免費的 SSL/TLS 證書 - 這是在 Web 伺服器上啟用加密和 HTTPS 流量的必要步驟。獲取和安裝證書的大多數步驟可以通過使用名為 Certbot 的工具進行自動化。

特別地,該軟體可在可以使用 shell 的伺服器上使用:換句話說,它可以通過 SSH 連接使用。

在本教程中,我們將看到如何使用 certbot 獲取免費的 SSL 證書,並在 Ubuntu 16.04 伺服器上使用 Nginx

安裝 Certbot

第一步是安裝 certbot,該軟體客戶端可以幾乎自動化所有的過程。 Certbot 開發人員維護自己的 Ubuntu 倉庫,其中包含比 Ubuntu 倉庫中存在的軟體更新的軟體。

添加 Certbot 倉庫:

# add-apt-repository ppa:certbot/certbot

接下來,更新 APT 源列表:

# apt-get update

此時,可以使用以下 apt 命令安裝 certbot

# apt-get install certbot

Certbot 現已安裝並可使用。

獲得證書

有各種 Certbot 插件可用於獲取 SSL 證書。這些插件有助於獲取證書,而證書的安裝和 Web 伺服器配置都留給管理員。

我們使用一個名為 Webroot 的插件來獲取 SSL 證書。

在有能力修改正在提供的內容的情況下,建議使用此插件。在證書頒發過程中不需要停止 Web 伺服器。

配置 NGINX

Webroot 會在 Web 根目錄下的 .well-known 目錄中為每個域創建一個臨時文件。在我們的例子中,Web 根目錄是 /var/www/html。確保該目錄在 Let』s Encrypt 驗證時可訪問。為此,請編輯 NGINX 配置。使用文本編輯器打開 /etc/nginx/sites-available/default

# $EDITOR /etc/nginx/sites-available/default

在該文件中,在 server 塊內,輸入以下內容:

 location ~ /.well-known {
    allow all;
 }

保存,退出並檢查 NGINX 配置:

# nginx -t

沒有錯誤的話應該會顯示如下:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重啟 NGINX:

# systemctl restart nginx

使用 Certbot 獲取證書

下一步是使用 Certbot 的 Webroot 插件獲取新證書。在本教程中,我們將保護示例域 www.example.com。需要指定應由證書保護的每個域。執行以下命令:

# certbot certonly --webroot --webroot-path=/var/www/html -d www.example.com

在此過程中,Cerbot 將詢問有效的電子郵件地址,用於進行通知。還會要求與 EFF 分享,但這不是必需的。在同意服務條款之後,它將獲得一個新的證書。

最後,目錄 /etc/letsencrypt/archive 將包含以下文件:

  • chain.pem:Let』s Encrypt 加密鏈證書。
  • cert.pem:域名證書。
  • fullchain.pemcert.pemchain.pem 的組合。
  • privkey.pem:證書的私鑰。

Certbot 還將創建符號鏈接到 /etc/letsencrypt/live/domain_name/ 中的最新證書文件。這是我們將在伺服器配置中使用的路徑。

在 NGINX 上配置 SSL/TLS

下一步是伺服器配置。在 /etc/nginx/snippets/ 中創建一個新的代碼段。 snippet 是指一段配置,可以包含在虛擬主機配置文件中。如下創建一個新的文件:

# $EDITOR /etc/nginx/snippets/secure-example.conf

該文件的內容將指定證書和密鑰位置。粘貼以下內容:

ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;

在我們的例子中,domain_nameexample.com

編輯 NGINX 配置

編輯默認虛擬主機文件:

# $EDITOR /etc/nginx/sites-available/default

如下:

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name www.example.com
 return 301 https://$server_name$request_uri;

 # SSL configuration
 #
 listen 443 ssl default_server;
 listen [::]:443 ssl default_server;
 include snippets/secure-example.conf
 #
 # Note: You should disable gzip for SSL traffic.
 # See: https://bugs.debian.org/773332
 # ...  
}

這將啟用 NGINX 加密功能。

保存、退出並檢查 NGINX 配置文件:

# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重啟 NGINX:

# systemctl restart nginx

總結

按照上述步驟,此時我們已經擁有了一個安全的基於 NGINX 的 Web 伺服器,它由 Certbot 和 Let』s Encrypt 提供加密。這只是一個基本配置,當然你可以使用許多 NGINX 配置參數來個性化所有東西,但這取決於特定的 Web 伺服器要求。

via: https://www.unixmen.com/encryption-secure-nginx-web-server-ubuntu-16-04/

作者:Giuseppe Molica 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國