Nginx

Nginx 知识量:8 - 22 - 84

5.1 安全隔离><

使用SSL对流量进行加密- 5.1.1 -

要使用Nginx对流量进行加密,需要配置Nginx以使用SSL(Secure Sockets Layer)。以下是一般步骤:

1. 获取SSL证书:需要从受信任的证书颁发机构(CA)获取SSL证书。可以选择免费的证书,如Let's Encrypt,或者付费的商业证书。

2. 安装SSL证书:将获取到的SSL证书和私钥文件(通常是.crt和.key文件)放置在Nginx服务器上的适当位置。

3. 配置Nginx:打开Nginx配置文件(通常位于/etc/nginx/nginx.conf或/etc/nginx/sites-available/default),并进行以下更改:

  • 在适当的server块内,添加"listen 443 ssl;"指令,这将使Nginx监听443端口上的SSL连接。

  • 添加"ssl_certificate"指令,指向SSL证书文件的路径。

  • 添加"ssl_certificate_key"指令,指向私钥文件的路径。

  • 根据需要,添加其他SSL相关指令,如"ssl_protocols"、"ssl_ciphers"等,以指定使用的SSL协议和密码套件。

以下是一个示例配置:

server {  
    listen 443 ssl;  
    server_name example.com;  
  
    ssl_certificate /path/to/ssl_certificate.crt;  
    ssl_certificate_key /path/to/ssl_certificate.key;  
  
    ssl_protocols TLSv1.2 TLSv1.3;  
    ssl_ciphers HIGH:!aNULL:!MD5;  
  
    # 其他配置项...  
}

4. 保存并关闭配置文件后,重新加载Nginx配置以使更改生效:

sudo service nginx reload

现在,Nginx服务器已经配置为使用SSL对流量进行加密。需要确保将实际的主机名、SSL证书路径和私钥路径替换为适当的值。

使用SSL进行客户端身份验证- 5.1.2 -

要在Nginx中使用SSL进行客户端身份验证,需要配置Nginx以使用客户端证书。以下是一般步骤:

1. 获取客户端证书和私钥:需要从受信任的证书颁发机构(CA)获取客户端证书和私钥文件。

2. 安装客户端证书和私钥:将客户端证书和私钥文件放置在Nginx服务器上的适当位置。

3. 配置Nginx:打开Nginx配置文件(通常位于/etc/nginx/nginx.conf或/etc/nginx/sites-available/default),并进行以下更改:

  • 在适当的server块内,添加"ssl_verify_client"指令,并将其设置为"on"或"optional",以启用客户端身份验证。

  • 添加"ssl_client_certificate"指令,指向客户端证书文件的路径。

  • 根据需要,添加其他SSL相关指令,如"ssl_protocols"、"ssl_ciphers"等,以指定使用的SSL协议和密码套件。

以下是一个示例配置:

server {  
    listen 443 ssl;  
    server_name example.com;  
  
    ssl_certificate /path/to/ssl_certificate.crt;  
    ssl_certificate_key /path/to/ssl_certificate.key;  
  
    ssl_protocols TLSv1.2 TLSv1.3;  
    ssl_ciphers HIGH:!aNULL:!MD5;  
  
    ssl_verify_client on;  
    ssl_client_certificate /path/to/client_certificate.crt;  
  
    # 其他配置项...  
}

4. 保存并关闭配置文件后,重新加载Nginx配置以使更改生效:

sudo service nginx reload

现在,Nginx服务器已经配置为使用SSL进行客户端身份验证。请确保将实际的主机名、SSL证书路径、私钥路径和客户端证书路径替换为适当的值。

注意:启用客户端身份验证可能会增加服务器的负载,因为每个连接都需要验证客户端证书。此外,需要确保客户端证书和私钥的安全性,并定期更新和撤销过期的证书。

基于原始IP地址阻止流量- 5.1.3 -

要基于原始IP地址阻止流量,可以使用Nginx的访问控制列表(ACL)功能。以下是一般步骤:

1. 配置Nginx:打开Nginx配置文件(通常位于/etc/nginx/nginx.conf或/etc/nginx/sites-available/default),并进行以下更改:

  • 在http块内,添加一个新的ACL,使用"deny"指令指定要阻止的IP地址或IP地址范围。可以使用CIDR表示法指定IP地址范围。

  • 添加一个"allow"指令,指定允许访问的IP地址或IP地址范围。可以将其设置为"all"以允许所有其他IP地址。

  • 将"deny all;"指令添加到ACL的末尾,以确保除了明确允许的IP地址之外,其他所有流量都被阻止。

  • 将该ACL应用于适当的server块或location块,以便对特定的服务器或URL路径进行访问控制。

以下是一个示例配置:

http {  
    # ...  
  
    # 定义ACL  
    geo $blocked_ips {  
        default          0;  
        192.168.0.0/24   1;  
        10.0.0.0/8       1;  
    }  
  
    map $blocked_ips $limit {  
        1          deny;  
        default    allow;  
    }  
  
    # 应用ACL到server块  
    server {  
        # ...  
  
        location / {  
            # ...  
  
            # 应用访问控制  
            if ($limit = deny) {  
                return 403; # Forbidden  
            }  
        }  
    }  
}

在上述示例中,定义了一个名为$blocked_ips的geo变量,它指定了要阻止的IP地址范围。然后,使用map指令将$blocked_ips映射到一个名为$limit的变量,该变量将包含"deny"或"allow"值。最后,在适当的location块内,使用if指令检查$limit变量的值,如果为"deny",则返回HTTP 403 Forbidden响应。
2. 保存并关闭配置文件后,重新加载Nginx配置以使更改生效:

sudo service nginx reload

现在,Nginx将根据原始IP地址阻止或允许流量。需要确保将实际的IP地址范围、服务器块和位置块与配置相匹配。