如何提高nginx的安全性


前言

2020年,四大主流浏览器计划不再支持 TLS 1.0 和 1.1。这些旧版本容易受到攻击和利用,不再具备实用性。

现在请尽快启用或升级到 TLS 1.2 或 1.3,以防止中断、停机和用户不满的事件发生。

本文分享一下如何加固nginx的安全性,从如何检测网站安全性说起

工具

myssl,提供了各种工具,其中包含了网站安全检测工具。

mozilla-ssl-config,生成各服务器SSL配置的工具。

ssllabs,网站检测工具


NGINX提高安全性

针对nginx的配置


全站HTTPS

建议全站使用https,漏网之鱼会大大降低整体安全性


使用高TLS版本

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

注意:

  • ssl_protocols一定去掉TLSv1.0和TLSv1.1,以及更老旧的SSL协议

  • nginx下不允许出现有个别server指定了更低版本的ssl_protocols,否则可能会导致启用失败

  • 如果要使用TLSv1.3版本,则必须升级OpenSSL到支持TLSv1.3的1.1.1以后的版本

    nginx依赖OpenSSL,nginx这里配置了TLSv1.3,那么OpenSSL首先要支持TLSv1.3才行

  • ssl_ciphers指定通信加密使用的算法,可以从openssl ciphers -v命令的返回结果中挑选

    可同时指定多个算法,以冒号分隔

    openssl ciphers -v返回结果要注意算法支持的TLS协议版本要和ssl_protocols内指定的相同

  • ssl_prefer_server_ciphers,是否由服务器决定采用哪种加密算法,设置为off


严格的HTTPS连接(HSTS)

HTTP Strict Transport Security (HSTS)

指示浏览器只使用 HTTPS 连接到目标服务器。这可以防止一些潜在的中间人攻击,包括 SSL 剥离,会话 cookie 窃取(如果没有被 适当保护)。如果遇到任何与证书相关的错误,它还可以阻止浏览器连接到网站。当浏览器访问一个设置相应 HTTP header 的 HTTPS 网站时,HSTS 将被激活。

建议设置 HSTS header 长的生命周期,最好是半年及以上。

add_header Strict-Transport-Security "max-age=31536000";

控制Frame策略

控制站点是否可以放置在 <iframe><frame><object> 标签。不允许使用框架可以防止 clickjacking 攻击。例如,从 2015 年 2 月起,Internet Explorer’s universal cross-site-scripting bug 就被这个消息头减轻了。

X-Frame-Options 是一个非标准的 header,在内容安全策略级别 2 中被 frame ancestor 指令所取代。然而,frame ancestor 还没有得到普遍的支持,而 X-Frame-Options 得到了广泛的支持。

如果你确定,网站将不会被用于内嵌在frame中,则可以设置:

add_header X-Frame-Options deny;

如果网站有页面会需要内嵌在frame中,则需要相对宽松的设置:

add_header X-Frame-Options SAMEORIGIN;

禁止XSS

跨站点脚本(XSS 或 CSS)的保护被构建到大多数流行的浏览器中,除了 Firefox 之外。这种保护是用户可配置的,可以关闭。因此,明确要求浏览器在你的网站上使用它的 XSS 过滤器是个好主意。

add_header X-Xss-Protection: "1; block";

隐藏nginx版本号

隐藏nginx的版本号,能提高一些安全性

server_tokens off;

配置OCSP Stapling

OCSP的全称是Online Certificate Status Protocol,即在线证书状态协议

在服务器上部署OCSP Stapling能极大的提高安全稳定性能、降低客户端验证请求延迟,减少等待查询结果的响应时间,用户体验更好

ssl_stapling on;
ssl_stapling_verify on;

参考

myssl

nginx-config-doc


文章作者: lcok
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lcok !
打赏
  目录