📜  NGINX安全控件

📅  最后修改于: 2021-01-07 06:14:38             🧑  作者: Mango

Nginx安全控制

当我们的内容有价值时,我们理所当然地关心用户的隐私和安全,那么我们可以使用Nginx来控制和保护我们的服务和我们管理的数据的访问。

Nginx SSL终止

SSL(安全套接字层)连接在将加密的数据从客户端计算机发送到Web服务器之前,使用证书进行身份验证。 SSL终止是SSL卸载(解密)的一种形式,将部分责任从Web服务器转移到另一台计算机上。 SSL终止用于识别加密的数据。

在本节中,我们将描述如何在NGINX Plus和NGINX上配置HTTPS服务器。

要在我们的nginx.conf文件中设置HTTPS服务器,请将ssl参数添加到服务器块中的listen指令中,然后指定服务器证书和私钥文件的位置:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    #...
}

服务器证书是公共实体。它被发送到连接到Nginx Plus或Nginx的每个客户端。

私钥是安全密钥或实体,应存储在具有受限访问权限的文件中。但是,nginx的主进程必须能够读取此文件。我们还可以将私钥与证书存储在同一文件中。

ssl_certificate     www.example.com.cert;
ssl_certificate_key www.example.com.cert;

ssl_protocol和ssl_ciphers指令可用于要求客户端在建立连接时仅使用SSL / TLS的强版本和密码。

TCP上游服务器的SSL终止

获取SSL证书

首先,我们需要获取服务器证书和私钥,并将它们放在服务器上。可以从受信任的CA(证书颁发机构)获得证书,也可以使用SSL库(例如OpenSSL)生成证书。

配置Nginx Plus

要配置SSL终止,请在Nginx Plus配置中包括以下指令:

启用SSL

要启用SSL,请为将连接传递到上游服务器组的TCP服务器定义listen指令的ssl参数:

stream {

    server {
        listen     12345 ssl;
        proxy_pass backend;
        #...
    }
}

添加SSL证书

要添加SSL证书,请使用ssl_certificate指令定义证书的路径,并在ssl_certificate_key指令中指定私钥的路径:

server {
    #...
    ssl_certificate        /etc/ssl/certs/server.crt;
    ssl_certificate_key    /etc/ssl/certs/server.key;
}

此外,ssl_protocols和ssl_ciphers指令可用于限制连接并仅添加SSL / TLS的强版本和密码:

server {
    #...
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers    HIGH:!aNULL:!MD5;
}

使用HTTP基本身份验证限制访问

我们可以通过执行用户名和密码验证来限制对我们网站或网站某些部分的访问。用户名和密码取自由密码文件创建工具(例如apache2-utils)创建并填充的文件。

创建密码文件

要创建用户名-密码对,请使用密码文件创建实用程序,例如httpd-tools或apache2-utils:

1.首先,确认已安装httpd-tools或apache2-utils。

2.创建一个密码文件和第一个用户,运行带有-c标志的htpasswd实用程序,该标志用于创建新文件,文件路径名作为第一个参数,用户名作为第二个参数。

$ sudo htpasswd -c /etc/apache2/.htpasswd user1

按Enter,然后在提示时输入user1的密码。

3.创建其他用户名-密码对。省略-c标志,因为该文件已经存在:

$ sudo htpasswd /etc/apache2/.htpasswd user2

4.我们可以确保文件包含成对的用户名和加密的密码:

$ cat /etc/apache2/.htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/

为HTTP基本身份验证配置Nginx Plus和Nginx

1.在我们要保护的位置内,定义auth_basic指令,并为受密码保护的区域命名。询问凭据时,该区域的名称将显示在用户名和密码对话框窗口中。

location /api {
    auth_basic "Administrator's Area";
    #...
}\

2.使用包含用户/密码对的.htpasswd文件的路径定义auth_basic_user_file指令:

location /api {
    auth_basic           "Administrator's Area";
    auth_basic_user_file /etc/apache2/.htpasswd; 
}