写点什么

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

评论

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

2024年最新Java面试八股文总结,让你少走99%的弯路

采菊东篱下

java面试

支付能力用小程序实现并非最佳技术方案

FinFish

小程序容器 超级app 小程序技术 app支付能力

写了本书,准备连载

FunTester

淘宝商品描述优化与拍立淘API接口探索:开启智能购物新时代

代码忍者

API 接口 pinduoduo API

舍得酒业×奇点云|最佳大数据平台供应商

奇点云

大数据

如何使用 NocoBase 构建应用程序?

NocoBase

开源 零代码 无代码 应用程序 宠物追踪

中小企业如何优化业务流程和充分利用ERP系统?

积木链小链

企业管理 数字化 ERP 中小企业

软件测试丨JUnit5动态测试与生命周期解析

测试人

软件测试

Sensei for Mac(实用的系统优化清理工具)中文版

Mac相关知识分享

图片渐进式加载优化实践指南

Immerse

图片 加载 图片优化 渐进式

揭秘1688商品详情关键字搜索API接口:精准定位,高效营销

代码忍者

API 接口 pinduoduo API

天润融通解决方案:如何避免门店投诉升级为消费者维权

天润融通

FlowJo 10 for Mac(mac流式细胞分析软件)

Mac相关知识分享

淘宝购物新视角:关键字搜索与商品评论的API接口揭秘

代码忍者

API 接口 pinduoduo API

存算分离的过去、现在和未来

Databend

揭秘淘宝item_get_app_pro:解锁淘宝APP商品详情高级版API接口的奥秘

代码忍者

API 接口 pinduoduo API

如何选择合适的数据集成工具或平台来实现全域数据的高效整合

Aloudata

数据仓库 数据分析 数据开发 数据集成 数据编织

探索1688拍立淘API接口:图像搜索技术引领电商新潮流

代码忍者

API 接口 pinduoduo API

Redis大Key问题如何排查?如何解决?

王磊

终于能随时解决信息焦虑了

最新动态

快递员上门取件API接口接口Domo下载

快递鸟

快递

MyZip Pro for Mac(专业解压缩工具)

Mac相关知识分享

《一文讲透》第 4-2 期:KWDB 数据库运维 —— 集群参数

KWDB数据库

集群 数据库集群 配置文件 数据库集群方案介绍 数据库集群技术

openEuler 发出全球可持续发展倡议,共建AI时代数据安全生态

科技热闻

洞悉数据,守护安全!和鲸助力2024年浙江省交通投资集团数字化主题活动圆满闭幕

ModelWhale

人工智能 交通 数据竞赛

如何绘制产品架构图?盘点9个产品架构图模板!

职场工具箱

在线白板 架构图 办公软件 绘图软件 产品架构图

数据驱动与并行策略:用 JUnit 5 让软件测试更高效

测试人

软件测试

全域数据整合下的数据治理:提升数据开发管理效率与质量的策略

Aloudata

数据仓库 数据分析 数据开发 数据集成 数据编织

天润融通携手挚达科技:AI技术重塑客户服务体验

天润融通

第三代指标平台相较于前两代的显著优势分析

Aloudata

指标管理 指标平台 指标开发

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