写点什么

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:508301

评论

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

前端leetcde算法面试套路之双指针

js2030code

JavaScript LeetCode

Python中图像平滑方法的两种非线性滤波:中值滤波、双边滤波

华为云开发者联盟

Python 人工智能 华为云 12 月 PK 榜

React源码分析(一)Fiber

flyzz177

React

高级前端一面经典手写面试题汇总

helloworld1024fd

JavaScript

IoT 设备定位服务——设备管理类

阿里云AIoT

物联网 API 定位技术

鸿蒙开发实例 | 鸿蒙原子化服务卡片开发完美体验

TiAmo

华为 鸿蒙 12月月更

多线程永动任务设计与实现

小小怪下士

Java 多线程

前端常见内存泄漏及解决方法

达摩

Web 内存泄露

基于云原生的集群自愈系统 Flink Cluster Inspector

阿里云大数据AI技术

机器学习 flink 运维 云原生 12 月 PK 榜

高级前端一面必会react面试题(持续更新中)

beifeng1996

React

写个JS深拷贝,面试备用

helloworld1024fd

JavaScript

轻量级的架构决策记录机制

京东科技开发者

团队管理 架构 软件架构 架构设计 架构决策

超大规模大数据集群管理平台的架构优化及实践

移动云大数据

每日一题之Vue数据劫持原理是什么?

bb_xiaxia1998

Vue

React-Hooks源码深度解读

flyzz177

React

Go语言性能剖析利器--pprof实战

京东科技开发者

Go pprof 优化技巧 Go 语言 #go

一天梳理完React所有面试考察知识点

beifeng1996

React

前端高频手写面试题集锦

helloworld1024fd

JavaScript

看透react源码之感受react的进化

flyzz177

React

假如面试官要你手写一个promise

helloworld1024fd

JavaScript

2022 年度“用 TDengine,写 TDengine”征文!

爱倒腾的程序员

数据库 tdengine 时序数据库

从react源码看hooks的原理

flyzz177

React

从recat源码角度看setState流程

flyzz177

React

前端leetcde算法面试套路之二叉树

js2030code

保护客户代码和应用安全,CodeArts有7招

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜 华为CodeArts

预训练时代的自然语言处理 魔搭社区NLP模型全解析

阿里技术

自然语言处理 NLP 大模型

从源码角度看React-Hydrate原理

flyzz177

React

前端vue面试题汇总

bb_xiaxia1998

Vue

转转用户画像平台实践

转转技术团队

大数据 用户画像 用户画像分析

当云原生成为一种显学,对象存储和数据湖如何顺势而为

云布道师

对象存储 云存储

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue

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