写点什么

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

评论

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

思维导图学《Linux性能优化实战》

Yano

Linux 后端

当dubbo多注册中心碰上标签路由

捉虫大师

dubbo

用jdk8的stream实现斐波那契数列

编号94530

jdk stream 斐波那契 fibonacci

18个PPT,29个提问解答,都在这儿啦!

Apache Flink

大数据 flink 流计算 实时计算

SpringBoot中如何优雅的使用多线程

读钓

Java spring Spring Boot

记一次spring注解@Value不生效的深度排查

捉虫大师

spring Spring Boot dubbo

LeetCode 前1000题二叉树题目系统总结

Yano

面试 算法 LeetCode 二叉树 刷题

在Kubernetes上运行SpringBoot应用

铁花盆

Docker Kubernetes Spring Boot

读书·行路·问心·求道

黄崇远@数据虫巢

读书笔记 个人成长 读书

零基础应该如何学习爬虫技术?

极客时间

Python 编程 爬虫

一个工程师向电信公司的维权

D

XOR异或运算在计算机中的应用

wangkx

XOR 异或运算 对称加密

centos7.6操作系统安装

桥哥技术之路

Linux

nacos的一致性协议distro介绍

捉虫大师

nacos

一次漫长的dubbo网关内存泄露排查经历

捉虫大师

dubbo 内存泄露

Ledge:这可能是距今最好的『DevOps + 研发效能』知识平台

Phodal

DevOps 敏捷开发 软件开发 研发效能

Python 有哪些黑魔法?

极客时间

Python 编程语言

Sentinel在docker中获取CPU利用率的一个BUG

捉虫大师

Java sentinel cpu

项目实施要避免哪些坑?

顾强

项目管理

IPFS 星际传输协议的入门(二)

AIbot

区块链 分布式数据库

Docker运行常用软件:MySQL,Redis,Nginx,RabbitMQ,Neuxs,Gitlab

读钓

MySQL nginx Docker gitlab

什么是物联网中台

老任物联网杂谈

物联网中台 IOT Platform 物联网平台

以为是青铜,没想到是王者的dubbo标签路由

捉虫大师

dubbo

Linux系统优化

桥哥技术之路

Linux

skywalking内存泄露排查

捉虫大师

dubbo 内存泄露

身为程序员,怎么接私活赚外快?

爱看书的小代码

一行代码实现网站可编辑,并解决网站禁止复制的限制

wangkx

复制 破解 DOM

Apache Beam 大数据处理一站式分析

李孟聊AI

Java 大数据 数据中台 数据交换 Beam

MacOS配置网络命令

编程随想曲

macos network

如何在非 sudo 用户下运行 docker 命令?

愚一

Docker DevOps

都在说实时数据架构,你了解多少?

Apache Flink

大数据 flink 流计算 实时计算

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