如何在 Ubuntu 16.04 上使用 Cloudflare 和 Nginx 托管网站

作者选择了 Electronic Frontier Foundation作为 Write for Donations计划的一部分接受捐款。

介绍

Cloudflare是一个服务,位于访问者和网站所有者的服务器之间,作为网站的反向代理服务器。

Nginx是一個受歡迎的網頁伺服器,負責在互聯網上一些最大的和流量最高的網站。

在本教程中,您将使用来自Cloudflare的Origin CA证书保护您的网站,并配置 Nginx以使用身份验证的拉动请求。使用此设置的优点是您可以从Cloudflare的CDN和快速的DNS分辨率中受益,同时确保所有连接都通过Cloudflare。

前提条件

要完成本教程,您将需要以下内容:

步骤 1 – 生成原始 CA TLS 证书

Cloudflare Origin CA 允许您生成由 Cloudflare 签名的免费 TLS 证书,将其安装在您的 Nginx 服务器上。

要使用 Origin CA 生成证书,请前往 Cloudflare 仪表板的 Crypto 部分,从那里点击 Create Certificate 按钮,在 Origin Certificates 部分:

Create certificate option in the Cloudflare dashboard

留下默认选项 ** 让 CloudFlare 生成私钥和 CSR** 选项。

Origin CA GUI options

点击 ** 下一步**,您将看到一个对话框 ** 原始证书和 ** 私钥.您需要将原始证书和私钥从 CloudFlare 传输到您的服务器。

Dialog showing the origin certificate and private key

我们将使用服务器上的/etc/ssl/certs目录来保留原始证书。/etc/ssl/private目录将保留私钥文件。

首先,复制浏览器中的对话框中显示的原产地证书的内容。

然后,在您的服务器上,打开 /etc/ssl/certs/cert.pem 来编辑:

1sudo nano /etc/ssl/certs/cert.pem

将证书内容粘贴到文件中,然后保存并退出编辑器。

然后返回浏览器并复制隐私密钥的内容. 打开文件 /etc/ssl/private/key.pem 进行编辑:

1sudo nano /etc/ssl/private/key.pem

将密钥粘贴到文件中,保存文件,然后离开编辑器。

<$>[警告] 警告: Cloudflare 的原始 CA 证书仅由 Cloudflare 信任,因此只能由与 Cloudflare 积极连接的原始服务器使用。

现在您已将密钥和证书文件复制到您的服务器,您需要更新 Nginx 配置以使用它们。

步骤 2 — 在 Nginx 中安装 Origin CA 证书

在上一节中,您使用Cloudlfare的仪表板生成了原始证书和私钥,并将文件保存到您的服务器上。

Nginx 在安装过程中创建默认服务器块,如果它存在的话,请删除它,因为您已经为您的域配置了自定义服务器块:

1sudo rm /etc/nginx/sites-enabled/default

接下来,打开您的域的 Nginx 配置文件:

1sudo nano /etc/nginx/sites-available/example.com

檔案應該是這樣的:

 1[label /etc/nginx/sites-available/example.com]
 2server {
 3        listen 80;
 4        listen [::]:80;
 5
 6        root /var/www/example.com/html;
 7        index index.html index.htm index.nginx-debian.html;
 8
 9        server_name example.com www.example.com;
10
11        location / {
12                try_files $uri $uri/ =404;
13        }
14}

我们将修改 Nginx 配置文件以执行以下操作:

  • 倾听端口 80 并重定向所有请求使用 https
  • 倾听端口 443 并使用您在上一节添加的原始证书和私钥

更改文件,以便它看起来如下:

 1[label /etc/nginx/sites-available/example.com]
 2server {
 3    listen 80;
 4    listen [::]:80;
 5    server_name example.com www.example.com;
 6    return 302 https://$server_name$request_uri;
 7}
 8
 9server {
10
11    # SSL configuration
12
13    listen 443 ssl http2;
14    listen [::]:443 ssl http2;
15    ssl on;
16    ssl_certificate         /etc/ssl/certs/cert.pem;
17    ssl_certificate_key     /etc/ssl/private/key.pem;
18
19    server_name example.com www.example.com;
20
21    root /var/www/example.com/html;
22    index index.html index.htm index.nginx-debian.html;
23
24    location / {
25            try_files $uri $uri/ =404;
26    }
27}

保存文件并离开编辑器。

接下来,测试以确保您的任何 Nginx 配置文件中没有语法错误:

1sudo nginx -t

如果没有发现任何问题,请重新启动 Nginx 以启用您的更改:

1sudo systemctl restart nginx

现在,进入 Cloudflare 仪表板的 Crypto 部分,并将 SSL 模式更改为 Full. 这会告知 Cloudflare 始终加密 Cloudflare 和您的源 Nginx 服务器之间的连接。

Enable Full SSL mode in the Cloudflare Dashboard

现在,请访问您的网站在https://example.com,以确认它是正确设置的。您将看到您的主页显示,浏览器将报告该网站是安全的。

在下一节中,您将设置 Authenticated Origin Pulls 来验证您的原始服务器确实在与 Cloudflare 交谈,而不是其他服务器。

步骤 3 – 设置身份验证的起源提取器

Origin CA 证书将帮助 Cloudflare 验证它是否正在与正确的原始服务器进行交谈,但您的原始 Nginx 服务器如何可以验证它是否实际上正在与 Cloudflare 进行交谈?输入 TLS 客户端身份验证。

在客户端认证的 TLS 握手中,双方都提供要验证的证书。原始服务器配置为仅接受使用 Cloudflare 有效客户端证书的请求。未通过 Cloudflare 的请求将被删除,因为它们将没有 Cloudflare 证书。

Cloudflare 提供由 CA 签署的证书,具有以下证书:

 1-----BEGIN CERTIFICATE-----
 2MIIGBjCCA/CgAwIBAgIIV5G6lVbCLmEwCwYJKoZIhvcNAQENMIGQMQswCQYDVQQG
 3EwJVUzEZMBcGA1UEChMQQ2xvdWRGbGFyZSwgSW5jLjEUMBIGA1UECxMLT3JpZ2lu
 4IFB1bGwxFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgNVBAgTCkNhbGlmb3Ju
 5aWExIzAhBgNVBAMTGm9yaWdpbi1wdWxsLmNsb3VkZmxhcmUubmV0MB4XDTE1MDEx
 6MzAyNDc1M1oXDTIwMDExMjAyNTI1M1owgZAxCzAJBgNVBAYTAlVTMRkwFwYDVQQK
 7ExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmlnaW4gUHVsbDEWMBQGA1UE
 8BxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZvcm5pYTEjMCEGA1UEAxMa
 9b3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
10DwAwggIKAoICAQDdsts6I2H5dGyn4adACQRXlfo0KmwsN7B5rxD8C5qgy6spyONr
11WV0ecvdeGQfWa8Gy/yuTuOnsXfy7oyZ1dm93c3Mea7YkM7KNMc5Y6m520E9tHooc
12f1qxeDpGSsnWc7HWibFgD7qZQx+T+yfNqt63vPI0HYBOYao6hWd3JQhu5caAcIS2
13ms5tzSSZVH83ZPe6Lkb5xRgLl3eXEFcfI2DjnlOtLFqpjHuEB3Tr6agfdWyaGEEi
14lRY1IB3k6TfLTaSiX2/SyJ96bp92wvTSjR7USjDV9ypf7AD6u6vwJZ3bwNisNw5L
15ptph0FBnc1R6nDoHmvQRoyytoe0rl/d801i9Nru/fXa+l5K2nf1koR3IX440Z2i9
16+Z4iVA69NmCbT4MVjm7K3zlOtwfI7i1KYVv+ATo4ycgBuZfY9f/2lBhIv7BHuZal
17b9D+/EK8aMUfjDF4icEGm+RQfExv2nOpkR4BfQppF/dLmkYfjgtO1403X0ihkT6T
18PYQdmYS6Jf53/KpqC3aA+R7zg2birtvprinlR14MNvwOsDOzsK4p8WYsgZOR4Qr2
19gAx+z2aVOs/87+TVOR0r14irQsxbg7uP2X4t+EXx13glHxwG+CnzUVycDLMVGvuG
20aUgF9hukZxlOZnrl6VOf1fg0Caf3uvV8smOkVw6DMsGhBZSJVwao0UQNqQIDAQAB
21o2YwZDAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4E
22FgQUQ1lLK2mLgOERM2pXzVc42p59xeswHwYDVR0jBBgwFoAUQ1lLK2mLgOERM2pX
23zVc42p59xeswCwYJKoZIhvcNAQENA4ICAQDKDQM1qPRVP/4Gltz0D6OU6xezFBKr
24LWtDoA1qW2F7pkiYawCP9MrDPDJsHy7dx+xw3bBZxOsK5PA/T7p1dqpEl6i8F692
25g//EuYOifLYw3ySPe3LRNhvPl/1f6Sn862VhPvLa8aQAAwR9e/CZvlY3fj+6G5ik
263it7fikmKUsVnugNOkjmwI3hZqXfJNc7AtHDFw0mEOV0dSeAPTo95N9cxBbm9PKv
27qAEmTEXp2trQ/RjJ/AomJyfA1BQjsD0j++DI3a9/BbDwWmr1lJciKxiNKaa0BRLB
28dKMrYQD+PkPNCgEuojT+paLKRrMyFUzHSG1doYm46NE9/WARTh3sFUp1B7HZSBqA
29kHleoB/vQ/mDuW9C3/8Jk2uRUdZxR+LoNZItuOjU8oTy6zpN1+GgSj7bHjiy9rfA
30F+ehdrz+IOh80WIiqs763PGoaYUyzxLvVowLWNoxVVoc9G+PqFKqD988XlipHVB6
31Bz+1CD4D/bWrs3cC9+kk/jFmrrAymZlkFX8tDb5aXASSLJjUjcptci9SKqtI2h0J
32wUGkD7+bQAr+7vr8/R+CBmNMe7csE8NeEX6lVMF7Dh0a1YKQa6hUN18bBuYgTMuT
33QzMmZpRpIBB321ZBlcnlxiTJvWxvbCPHKHj20VwwAz7LONF59s84ZsOqfoBv8gKM
34s0s5dsq5zpLeaw==
35-----END CERTIFICATE-----

您也可以直接从Cloudflare下载证书(https://support.cloudflare.com/hc/en-us/article_attachments/201243967/origin-pull-ca.pem)。

复制此证书。

然后创建文件 /etc/ssl/certs/cloudflare.crt 以保留 Cloudflare 证书:

1sudo nano /etc/ssl/certs/cloudflare.crt

将证书粘贴到文件中,然后保存文件并退出编辑器。

现在更新您的 Nginx 配置以使用 TLS Authenticated Origin Pulls. 打开您的域的配置文件:

1sudo nano /etc/nginx/sites-available/example.com

添加ssl_client_certificatessl_verify_client指令,如下示例所示:

 1[label /etc/nginx/sites-available/example.com]
 2. . .
 3
 4server {
 5
 6    # SSL configuration
 7
 8    listen 443 ssl http2;
 9    listen [::]:443 ssl http2;
10    ssl on;
11    ssl_certificate         /etc/ssl/certs/cert.pem;
12    ssl_certificate_key     /etc/ssl/private/key.pem;
13    ssl_client_certificate /etc/ssl/certs/cloudflare.crt;
14    ssl_verify_client on;
15
16    . . .

保存文件并离开编辑器。

接下来,测试以确保您的 Nginx 配置中没有语法错误。

1sudo nginx -t

如果没有发现任何问题,请重新启动 Nginx 以启用您的更改:

1sudo systemctl restart nginx

最后,要启用认证提取,请在 Cloudflare 仪表板中打开 Crypto 部分,然后切换 Authenticated Origin Pulls 选项。

Enable Authenticated Origin Pulls

现在,请访问您的网站在https://example.com,以确认它是正确设置的。 就像以前一样,您将看到您的主页显示。

要验证您的服务器只接受 Cloudflare 的 CA 签署的请求,请切换 Authenticated Origin Pulls 选项以禁用它,然后重新加载您的网站。

Error message

如果请求未由 Cloudflare 的 CA 签署,您的源服务器会引发错误。

现在你知道它正常工作了,回到Cloudflare仪表板的 Crypto部分,然后重新切换 Authenticated Origin Pulls选项来启用它。

结论

在本教程中,您通过使用来自 Cloudflare 的 Origin CA 证书来加密 Cloudflare 和 Nginx 服务器之间的流量来保护您的 Nginx 驱动的网站,然后在 Nginx 服务器上设置 Authenticated Origin Pulls,以确保它只接受来自 Cloudflare 服务器的请求,从而防止任何人直接连接到 Nginx 服务器。

Published At
Categories with 技术
comments powered by Disqus