写点什么

Linux 系统安全(七):Nginx 安全

  • 2019-08-23
  • 本文字数:1544 字

    阅读完需:约 5 分钟

Linux系统安全(七):Nginx 安全

Nginx 是 Web 服务器领域的后起之秀,以其现代软件架构设计所提供的高性能和灵活性而被越来越多的网站所采用,在 2018 年 2 月活跃网站中的使用比例已达到 21.23%(数据来源:Netcraft),是继 Apache 之后的第二大 Web 服务器软件。在该部分,我们重点关注 2 个方面的 Nginx 的安全设置:使用 HTTPS 加密和使用 NAXSI 加固。

使用 HTTPS 加密网站

从 CA 签发机构购买了 SSL 证书后,在 Nginx 上配置 HTTPS 的方法是在配置文件 nginx.conf 中,添加以下配置项:


ssl on;ssl_certificate /opt/cert/server.crt; #指定证书存储位置ssl_certificate_key /opt/cert/server.key; #指定私钥存储位置ssl_session_timeout 5m; #指定SSL会话超时时间ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL协议版本ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#指定SSL加密算法ssl_prefer_server_ciphers on; #指定优先采用服务器端加密算法
复制代码


在配置完成后,使用 nginx -t 检查配置项是否有误。如无报错,则可以通过重启 nginx 进程来使配置文件生效。

使用 NAXSI 加固 Web

NAXSI 是 Nginx 服务器上常见的 Web 应用防火墙。NAXSI 的含义是“Nginx Anti XSS & SQL Injection”(Nginx 防御跨站脚本和 SQL 注入),其官方网站是https://github.com/nbs-system/naxsi。从技术上来说,NAXSI 是 Nginx 的第三方模块,适用于很多类 UNIX 的操作系统平台上。


NAXSI 和 ModSecurity 相比,有如下的不同点:


  • NAXSI 可以通过学习模式建立白名单机制,从而使用默认拒绝的方式来最大化的保障 Web 安全。这通常适用于网站代码和功能不频繁变化的场景,否则极易产生误报。

  • 在黑名单模式下,NAXSI 规则更加简洁,它通过对 HTTP 请求体中出现的所有恶意字符设置分数并求和、达到一定阈值则拒绝请求的方式来实现安全防御;而在 ModSecurity 使用场景下,通常通过设置精细的正则表达式在一条规则中即判断是放行或者禁止。


NAXSI 的核心规则集下载地址是:https://github.com/nbs-system/naxsi/blob/master/naxsi_config/naxsi_core.rules。


我们通过以下规则来熟悉 NAXSI 的原理:


MainRule "str:\"" "msg:double quote" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8,$XSS:8" id:1001; MainRule "str:0x" "msg:0x, possible hex encoding" "mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:2" id:1002;MainRule "str:'" "msg:simple quote" "mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie" "s:$SQL:4,$XSS:8" id:1013;
复制代码


其中:


  • id 为 1001 的规则表示,如果在请求体(BODY)、统一资源定位符(URL)、请求参数(ARGS)、请求头部(Cookie)任何地方出现了双引号("),那么就把该请求可能是 SQL 注入、跨站脚本攻击的判断分数分别设置为 8

  • id 为 1002 的规则表示,如果在请求体(BODY)、统一资源定位符(URL)、请求参数(ARGS)、请求头部(Cookie)任何地方出现了双引号("),那么就把该请求可能是 SQL 注入判断分数设置为 2

  • id 为 1013 的规则表示,如果在请求体(BODY)、统一资源定位符(URL)、请求参数(ARGS)、请求头部(Cookie)任何地方出现了单引号(’),那么就把该请求可能是 SQL 注入的判断分数设置为 4 并且把跨站脚本攻击的判断分数设置为 8


通过在 Nginx 配置文件中加入以下示例片段即可根据每条规则得出来的分数累加值加以控制,也就是放行或者禁止:


CheckRule "$SQL >= 8" BLOCK;CheckRule "$RFI >= 8" BLOCK;CheckRule "$TRAVERSAL >= 4" BLOCK;CheckRule "$EVADE >= 4" BLOCK;CheckRule "$XSS >= 8" BLOCK;
复制代码

关注 Nginx 漏洞情报

Nginx 漏洞信息会由官方发布,笔者建议 Nginx 管理员重点下相关漏洞。在出现高危漏洞时,及时进行版本升级。


本文内容来自作者图书作品《Linux 系统安全:纵深防御、安全扫描与入侵检测》,点击购买


2019-08-23 09:508371

评论

发布
暂无评论
发现更多内容

是什么,让中国成为一台超级计算机?

脑极体

Java J.U.C 学习笔记-使用篇(一)

U2647

面试官:可以谈谈乐观锁和悲观锁吗

JAVA活菩萨

面试官

连续三次 | 灵雀云入选Gartner中国ICT技术成熟度曲线报告

York

云计算 云原生 数字化转型 ICT Gartner

线程池原理与实践|从入门到放弃,深度解析

领创集团Advance Intelligence Group

线程池 内存溢出 线程池工作原理

一款好用的FAQ搭建工具

Geek_da0866

2022-Java后端工程师必会知识点-(Lunix)

自然

Lniux 8月月更

开源一夏 | 计算机网络:物理层

是Dream呀

开源

Spring Boot整合Mybatis

JAVA活菩萨

Java 程序员 后端

竞赛:糖尿病遗传风险检测挑战赛(科大讯飞)

Lingxw

数据挖掘 Kaggle 8月月更

Axure9的元件用法

乔乔

签约计划第三季 8月月更

关于 01 背包问题

HelloWorld杰少

8月月更

千万级QPS下服务如何才能平滑启动

HelloGeek

微服务架构 Service Mesh 高并发优化

从技术全景到场景实战,透析「窄带高清」的演进突破

阿里云CloudImagine

云计算 直播 视频

什么是现场服务管理系统(FSM)?有什么好处?

优秀

企业管理系统 现场管理

深入理解IO流(第一篇)

JAVA活菩萨

Java 程序员

MyBatis操作数据库

JAVA活菩萨

Java 程序员 后端

读书笔记之《你想过怎样的一生?》

宇宙之一粟

读书笔记 8月月更

实现客户服务自助,打造产品知识库

Baklib

4KMILES加入艾盛集团,以更强劲的数字商务能力,加速中国跨境电商的全域全效增长

极客天地

企业云成本管控,你真的做对了吗?

Kyligence

云成本管控 云成本分析

麦聪DaaS平台 3.7.0 Release 正式发布:全面支持国际化

雨果

DaaS数据即服务

【CSS】基础选择器,包括标签选择器、类选择器、id选择器和通配符选择器...

翼同学

CSS html 前端 HTML5, CSS3 8月月更

魔豹联盟:佛萨奇2.0dapp系统开发模式详情

开发微hkkf5566

DevOps之代码检查

凌云Cloud

DevOps 研发管理 代码检查器

2022-Java后端工程师必会知识点-(Docker)

自然

Docker 镜像 8月月更

Linux Lab 编译 riscv-gnu-toolchain

贾献华

8月月更

MOSN 反向通道详解

SOFAStack

开源 网络安全 Go 语言 社区贡献 MOSN

开源一夏 |【云原生】DevOps(五):集成Harbor

是Dream呀

开源一夏 | Web开发(七):登录实现及功能测试

是Dream呀

Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、编译和使用

JAVA活菩萨

Java 程序员 后端

Linux系统安全(七):Nginx 安全_安全_胥峰_InfoQ精选文章