如何在 Ubuntu 18.04 上使用 Cloudflare 和 Nginx 托管网站
作者选择了Electronic Frontier Foundation作为[Write for DOnations](https://do. co/w4do-cta) 程序. 介绍 Cloudflare 是一种位于访问者和网站所有者服务器之间的服务,充当网站的反向代理。 Cloudflare 提供内容交付网络 (CDN),以及 DDoS 缓解和分布式域名服务器服务。 Nginx 是一种流行的 We
作者选择了Electronic Frontier Foundation作为[Write for DOnations](https://do. co/w4do-cta) 程序.
介绍
Cloudflare 是一种位于访问者和网站所有者服务器之间的服务,充当网站的反向代理。 Cloudflare 提供内容交付网络 (CDN),以及 DDoS 缓解和分布式域名服务器服务。
Nginx 是一种流行的 Web 服务器,负责托管 Internet 上一些最大和流量最高的网站。组织使用 Nginx 为网站提供服务并使用 Cloudflare 作为 CDN 和 DNS 提供商是很常见的。
在本教程中,您将使用 来自 Cloudflare 的原始 CA 证书 保护由 Nginx 服务的网站,然后配置 Nginx 以使用经过身份验证的拉取请求。使用此设置的优点是您可以从 Cloudflare 的 CDN 和快速 DNS 解析中受益,同时确保所有连接都通过 Cloudflare。这可以防止任何恶意请求到达您的服务器。
先决条件
要完成本教程,您需要以下内容:
-
按照 Ubuntu 18.04 初始服务器设置指南 设置一台 Ubuntu 18.04 服务器,包括一个
sudo
非 root 用户和防火墙。 -
Nginx 安装在您的服务器上。您可以按照 我们关于如何在 Ubuntu 18.04 上安装 Nginx 的指南。
-
Cloudflare 帐户。
-
添加到您的 Cloudflare 帐户的注册域,指向您的 Nginx 服务器。我们关于 [如何使用 Cloudflare 缓解针对您的网站的 DDoS 攻击] 的指南(https://www.digitalocean.com/community/tutorials/how-to-mitigate-ddos-attacks-against-your-website-with-cloudflare)可以帮助您进行设置。 我们对 DNS 术语、组件和概念的介绍 也可以提供帮助。
-
为您的域配置的 Nginx 服务器块,您可以按照 如何在 Ubuntu 18.04 上安装 Nginx 的第 5 步 进行操作-on-ubuntu-18-04#step-5-%E2%80%93-setting-up-server-blocks-(推荐))。
步骤 1 — 生成 Origin CA TLS 证书
Cloudflare Origin CA 允许您生成由 Cloudflare 签名的免费 TLS 证书,以安装在您的 Nginx 服务器上。通过使用 Cloudflare 生成的 TLS 证书,您可以保护 Cloudflare 的服务器和您的 Nginx 服务器之间的连接。
要使用 Origin CA 生成证书,请在 Web 浏览器中登录您的 Clouflare 帐户。选择要保护的域并导航到 Cloudflare 仪表板的 SSL/TLS 部分。从那里,导航到 Origin Server 选项卡,然后单击 Create Certificate 按钮:
保留 让 Cloudflare 生成私钥和 CSR 的默认选项处于选中状态。
单击 Next,您将看到一个对话框,其中包含 Origin Certificate 和 Private key。您需要将原始证书和私钥从 Cloudflare 传输到您的服务器。出于安全考虑,Private Key信息将不会再次显示,所以请在点击Ok之前将密钥复制到您的服务器。
我们将使用服务器上的 /etc/ssl
目录来保存原始证书和私钥文件。该文件夹已存在于服务器上。
首先,复制浏览器对话框中显示的Origin Certificate的内容。
然后,在您的服务器上,在您喜欢的文本编辑器中打开“/etc/ssl/cert.pem”:
Sudonano / et c / sl / se rt。佩姆
将证书内容添加到文件中。然后保存并退出编辑器。
然后返回浏览器并复制私钥的内容。打开文件/etc/ssl/key.pem
进行编辑:
须藤野/等/Tsl/Ky。佩姆
将私钥粘贴到文件中,保存文件,然后退出编辑器。
注意: 有时,当您从 Cloudflare 仪表板复制证书和密钥并将其粘贴到服务器上的相关文件中时,会插入空行。 Nginx 会将此类证书和密钥视为无效,因此请确保您的文件中没有空行。
警告: Cloudflare 的 Origin CA 证书仅受 Cloudflare 信任,因此只能由主动连接到 Cloudflare 的原始服务器使用。如果您在任何时候暂停或禁用 Cloudflare,您的 Origin CA 证书将引发不受信任的证书错误。
现在您已将密钥和证书文件复制到服务器,您需要更新 Nginx 配置以使用它们。
步骤 2 — 在 Nginx 中安装 Origin CA 证书
在上一节中,您使用 Cloudlfare 的仪表板生成了原始证书和私钥,并将文件保存到您的服务器。现在,您将更新站点的 Nginx 配置,以使用原始证书和私钥来保护 Cloudflare 的服务器与您的服务器之间的连接。
首先,确保 UFW 将允许 HTTPS 流量。启用“Nginx Full”,这将打开端口“80”(HTTP)和端口“443”(HTTPS):
sudo ufw 允许'Nginx Full'
现在重新加载 UFW:
sudo ufw 重新加载
最后,检查您的新规则是否被允许并且 UFW 是否处于活动状态:
须藤 ufw 状态
你会看到这样的输出:
输出状态:活动
采取行动
-- ------ ----
OpenSSH 允许任何地方
Nginx Full 允许任何地方
OpenSSH (v6) 允许在任何地方 (v6)
Nginx Full (v6) 允许任何地方 (v6)
现在您已准备好调整您的 Nginx 服务器块。 Nginx 在安装过程中会创建一个默认的服务器块。如果它仍然存在,请删除它,因为您已经为您的域配置了自定义服务器块:
sudo rm /etc/nginx/sites-enabled/default
接下来,打开您的域的 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/your_domain
该文件应如下所示:
/etc/nginx/sites-available/your_domain
服务器 {
听 80;
听 [::]:80;
根 /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
地点 / {
try_files $uri $uri/ u003d404;
}
}
我们将修改 Nginx 配置文件以执行以下操作:
-
监听端口
80
并将所有请求重定向到使用https
。 -
监听端口
443
并使用您在上一节中添加的原始证书和私钥。
修改文件,使其如下所示:
/etc/nginx/sites-available/your_domain
服务器 {
听 80;
听 [::]:80;
server_name your_domain www.your_domain;
返回 302 https://$server_name$request_uri;
}
服务器 {
#SSL 配置
听 443 ssl http2;
听 [::]:443 ssl http2;
开启ssl;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
server_name your_domain www.your_domain;
根 /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
地点 / {
try_files $uri $uri/ u003d404;
}
}
保存文件并退出编辑器。
接下来,测试以确保您的任何 Nginx 配置文件中都没有语法错误:
须藤 nginx -t
如果没有发现问题,重新启动 Nginx 以启用您的更改:
sudo systemctl 重启 nginx
现在转到 Cloudflare 仪表板的 SSL/TLS 部分,导航到 Overview 选项卡,然后将 SSL/TLS 加密模式 更改为 Full(严格)。这会通知 Cloudflare 始终加密 Cloudflare 和您的原始 Nginx 服务器之间的连接。
现在访问您的网站“https://your_domain”以验证它是否设置正确。您将看到您的主页显示,并且浏览器将报告该站点是安全的。
在下一部分中,您将设置 Authenticated Origin Pulls 以验证您的源服务器确实在与 Cloudflare 而不是其他服务器通信。通过这样做,Nginx 将被配置为仅接受使用来自 Cloudflare 的有效客户端证书的请求;所有未通过 Cloudflare 的请求都将被丢弃。
第 3 步 — 设置经过身份验证的来源拉取
Origin CA 证书将帮助 Cloudflare 验证它是否正在与正确的源服务器通信。此步骤将使用 TLS 客户端身份验证来验证您的原始 Nginx 服务器是否正在与 Cloudflare 通信。
在经过客户端身份验证的 TLS 握手中,双方都提供要验证的证书。源服务器配置为仅接受使用来自 Cloudflare 的有效客户端证书的请求。未通过 Cloudflare 的请求将被丢弃,因为它们没有 Cloudflare 的证书。这意味着攻击者无法绕过 Cloudflare 的安全措施并直接连接到您的 Nginx 服务器。
Cloudflare 提供由 CA 签名的证书和以下证书:
-----开始证书-----
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQawgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42 TZXRKH14ZZZrObl/KKHO46XD/LogGenVPdZXSKRTGZZSW0XZLGBNBQBQZZ0Y
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
蹲着
Dakoume, Mohkou, Jadzefa, Qosuji, Sabj, Jilkah, Hessouks, Ezzatul 02, Hess, Takskard, Shahshafjern
Al-Akhnijoder02YGTPJEXOOBSERVOOTABDUGOLOVO4BUGGJJJJJJJ1//AGI/串
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
搞笑
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
FACCCDJGBJGCSHELBEVWAQISLIUGV45YABL0TAHMGVT1W/准备DKNXYE4BDA
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/ou003d
-----结束证书-----
您也可以直接从 Cloudflare 此处 下载证书。
复制此证书。
然后创建文件 /etc/ssl/cloudflare.crt
文件来保存 Cloudflare 的证书:
Sudonano / 等 / sl / 代码 df 是。 crt
将证书添加到文件中。然后保存文件并退出编辑器。
现在更新您的 Nginx 配置以使用 TLS Authenticated Origin Pulls。打开您的域的配置文件:
sudo nano /etc/nginx/sites-available/your_domain
添加 ssl_client_certificate
和 ssl_verify_client
指令,如以下示例所示:
/etc/nginx/sites-available/your_domain
. . .
服务器 {
#SSL 配置
听 443 ssl http2;
听 [::]:443 ssl http2;
开启ssl;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client 开启;
. . .
保存文件并退出编辑器。
接下来,测试以确保您的 Nginx 配置中没有语法错误:
须藤 nginx -t
如果没有发现问题,重新启动 Nginx 以启用您的更改:
sudo systemctl 重启 nginx
最后,要启用 Authenticated Pulls,打开 Cloudflare 仪表板中的 SSL/TLS 部分,导航到 Origin Server 选项卡并切换 Authenticated Origin Pulls 选项。
现在访问您的网站“https://your_domain”以验证它是否已正确设置。和以前一样,您会看到您的主页显示。
要验证您的服务器是否只接受由 Cloudflare 的 CA 签名的请求,请切换 Authenticated Origin Pulls 选项以禁用它,然后重新加载您的网站。您应该收到以下错误消息:
如果请求未由 Cloudflare 的 CA 签名,您的源服务器会引发错误。
注意: 大多数浏览器都会缓存请求,因此要查看上述更改,您可以在浏览器中使用隐身/隐私浏览模式。要防止 Cloudflare 在您设置网站时缓存请求,请导航到 Cloudflare 仪表板中的 Overview 并切换 Development Mode。
既然您知道它可以正常工作,请返回 Cloudflare 仪表板中的 SSL/TLS 部分,导航到 Origin Server 选项卡并再次切换 Authenticated Origin Pulls 选项以启用它。
结论
在本教程中,您通过使用 Cloudflare 的 Origin CA 证书加密 Cloudflare 和 Nginx 服务器之间的流量来保护您的 Nginx 支持的网站。然后,您在 Nginx 服务器上设置 Authenticated Origin Pulls 以确保它只接受来自 Cloudflare 服务器的请求,从而防止其他任何人直接连接到 Nginx 服务器。
更多推荐
所有评论(0)