Nginx Web服务器安全性和强化指南

本文概述

Nginx安全最佳实践。

Nginx是业界增长最快的Web服务器, 目前, 它在市场份额中排名第三。

它最初于2004年发布, 此后赢得了良好的声誉, 并在数百万个最繁忙的站点中使用。

Nginx Web服务器安全性和强化指南2

这是有原因的-Nginx快速发展。

在本文中, 我将讨论保护Nginx Web服务器安全的一些基本指南。因此, 让我们开始吧。

SSL/TLS

实施SSL证书

Web安全的第一步是实现SSL, 以便你可以使用https访问Web应用程序并在通信中添加加密层。

  • 使用OpenSSL生成具有2048位和sha-2的CSR
openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr
  • 上面的命令将直接在当前工作时生成CSR和密钥文件。不要忘记更改.csr和.key文件名。

获得由证书颁发机构签名的CSR, 一旦获得签名证书, 就可以在Nginx中实现它们, 如下所示。

  • 登录到Nginx服务器
  • 转到ssl.conf文件所在的conf文件夹。

注意:在Linux上的默认安装中, 该文件将位于/etc/nginx/conf.d下。

  • 编辑文件并添加以下内容, 这将使Nginx能够监听443端口
server {
listen       443 ssl;
   server_name bestflare.com;
   ssl                 on;
   ssl_certificate     /opt/cert/bestflare.pem;
   ssl_certificate_key /opt/cert/bestflare.key;
   }

注意:不要忘记更改证书和密钥文件的路径。

  • 保存配置并重新启动Nginx。 SSL证书已成功实施。
bestflare-ssl-cert

SSL/TLS优化

拥有SSL并不意味着它是完全安全的, 而作为网络安全专家, 你需要应用配置来保护网络服务器的安全。

首先, 我建议对网站进行SSL扫描, 以找到分数和基本漏洞。

ssl-labs-rating-c

因此, 当前的SSL Labs评级为” C”, 目标是使其达到” A”。

禁用SSL 3并仅保留TLS

SSL 3容易受到攻击, 我们将只允许使用强大的TLS协议。

  • 编辑ssl.conf文件并在服务器块中添加以下内容
ssl_protocols       TLSv1.2;
  • 保存ssl.conf文件并重新启动Nginx

禁用弱密码套件

弱密码套件可能会导致类似logjam的漏洞, 这就是为什么我们只需要允许强密码的原因。

  • 将以下内容添加到ssl.conf文件中的服务器块中
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
  • 保存文件并重新启动Nginx

安装链证书

没有链式证书也会影响整体评分, 这在使用Chrome之类的现代浏览器进行浏览时可能会显示错误。你需要从授权机构获得链证书。通常, 你会在他们的网站上找到, 或者只是在Google上找到它。

  • 如下所示, 将链证书内容添加到网站证书中。在我的示例中, 它是/opt/cert/bestflare.pem
证书链
  • 保存文件并重新启动Nginx

TLS的安全Diffie-Hellman

Diffie-Hellman的安全性不如人们想象的那样。最近添加到列表中的最佳实践之一是保护Diffie-hellman。生成唯一的DH GROUP并在ssl.conf文件中添加ssl_dhparam即可。

  • 使用OpenSSL生成唯一的DH组
openssl dhparam -out dhparams.pem 4096
  • 这将花费几分钟, 并将在当前工作目录中生成文件dhparams.pem
  • 将dhparams.pem复制到cert文件夹
  • 修改ssl.conf并在服务器块中添加以下内容
ssl_dhparam    /opt/cert/dhparams.pem;
  • 保存文件并重新启动Nginx

这足以进行SSL/TLS优化, 让我们再次测试URL以查看等级。

ssllabs-a-rating

ho!现在, 你可以看到SSLLabs将其评为” A”级。做得好!

这是完整的ssl.conf

# HTTPS server configuration
server {
   listen       443 ssl;
   server_name bestflare.com;
   ssl                 on;
   ssl_certificate     /opt/cert/bestflare.pem;
   ssl_certificate_key /opt/cert/bestflare.key;
   ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers   on;
   ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
   ssl_dhparam     /opt/cert/dhparams.pem;
}

信息泄漏

在默认的Nginx安装中, 你将显示很多敏感信息, 这可以帮助黑客为攻击做准备。

如果你在PCI合规性环境中工作, 则这被视为信息泄漏漏洞, 必须对其进行修复。

你必须使用server_tokens off禁用信息泄漏。我已经在上一篇文章中对此进行了解释。从Nginx中的服务器标题横幅中删除版本

Web应用安全

默认的Nginx配置不是完美的, 并且可能存在许多漏洞, 这就是为什么我们对其进行强化以使其安全的原因。

禁用不需要的HTTP方法

大多数时候, 你在Web应用程序中只需要GET, HEAD和POST HTTP请求。允许TRACE或DELETE是有风险的, 因为它可以允许跨站点跟踪攻击, 并可能使黑客窃取cookie信息。

  • 修改default.conf并在服务器块下添加以下内容
if ($request_method !~ ^(GET|HEAD|POST)$ )
{
       return 405;
}

保存文件并重新启动Nginx。现在, 如果有人尝试使用TRACE, DELETE, PUT和OPTIONS, 这将显示405不允许。

Chandans-iMac:~ chandan$ telnet bestflare.com 80
Trying 128.199.100.162...
Connected to bestflare.com.
Escape character is '^]'.
TRACE / HTTP/1.1
Host: testing
HTTP/1.1 405 Not Allowed
Server: nginx
Date: Sat, 11 Jul 2015 06:04:34 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

点击劫持攻击

你可以在HTTP标头中注入X-FRAME-OPTIONS, 以防止点击劫持攻击。

这是通过在nginx.conf文件中添加以下内容来实现的

add_header X-Frame-Options "SAMEORIGIN";

上面的标头将指示浏览器仅从同一来源加载资源。

X-XSS保护

注入具有X-XSS保护的HTTP标头, 以缓解跨站点脚本攻击。

  • 修改default.conf或ssl.conf文件以添加以下内容
add_header X-XSS-Protection "1; mode=block";
  • 保存配置文件并重新启动Nginx。你可以使用标头测试工具在实施后进行验证。

你可能还对实现OWASP建议的安全标头感兴趣, 在此介绍了这些标头。

实施Mod Security WAF

通过使用OWASP Core Rule Set实施Web应用程序防火墙ModSecurity, 可以增加一层安全性。

或者, 如果你考虑在Nginx服务器之前使用基于云的安全性, 例如SUCURI。

保持Nginx为最新

最后但并非最不重要的一点是, 由于许多性能增强功能, 安全修复程序和新功能正在添加中, 因此你需要使Nginx保持最新。

我希望这可以帮助你确保Nginx的安全。

接下来, 你可能有兴趣学习从头开始构建Nginx以实现高性能。

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?