天天看点

如何保护Ubuntu 16.04上的NGINX Web服务器

如何保护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.pem:cert.pem和 chain.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_name 是 example.com。

编辑 nginx 配置

编辑默认虚拟主机文件:

如下:

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 的 web 服务器,它由 certbot 和 let’s encrypt 提供加密。这只是一个基本配置,当然你可以使用许多 nginx 配置参数来个性化所有东西,但这取决于特定的 web 服务器要求。

作者:giuseppe molica

来源:51cto

继续阅读