Nginx安全配置

  • 基于配置的解决方式
    • Nginx 隐藏版本信息
    • Nginx禁用不相关的请求方式
    • Nginx 中的Host header attack
    • Nginx + Tomcat 架构下配置通用错误页面

基于配置的解决方式

Nginx 隐藏版本信息

在一般的应用场景中我们需要隐藏掉Nginx的版本信息,因为攻击者可能会根据版本信息中的版本去找到相关版本的漏洞,然后利用这个漏洞对服务器进行攻击。

http {#不显示版本号server_tokens off;
}

配置前效果展示


添加配置的效果如下:

ps:如果想要将响应头中的server中的nginx修改成其它的值,需要修改源文件。

 vi src/http/ngx_http_header_filter_module.c  # 49-50行
// 内容:
static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;// 更改为:
static char ngx_http_server_string[] = "Server: unknow" CRLF;
static char ngx_http_server_full_string[] = "Server: unknow" CRLF;
static u_char ngx_http_server_build_string[] = "Server: unknow" CRLF;

重新编译后效果如下图:

Nginx禁用不相关的请求方式

我们知道http的请求方式有如下几种:

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体
2 HADE 类似GET求情,返回的的响应中没有具体内容,只用来获取报头
3 POST 向指定资源提交数据进行处理请求,如:表单请求或者上传文件;数据呗包含在请求体重。POST请求可能会导致新的资源的建立或者旧资源的修改。
4 PUT 从客户端向服务器传送的数据取代文档指定的内容
5 DELETE 请求服务器删除指定的页面
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
8 TRACE 回显服务器收到的请求,主要用于测试或诊断

nginx的server中添加配置禁用除GET|POST|PUT|DELETE之外的请求方法。

if ($request_method !~* GET|POST|PUT|DELETE) {return 403;}

一般来说nginx中配置了多个反向代理,如果配置在nginx中可能会多多个项目造成影响。如果是nginx + tomcat 的部署方式,我想只针对一个项目做配置的话,我们可以直接配置在项目的web.xml中。具体配置如下:

<security-constraint>  <web-resource-collection>  <url-pattern>/*</url-pattern>  <http-method>HEAD</http-method>             <http-method>PUT</http-method>  <http-method>DELETE</http-method>  <http-method>OPTIONS</http-method>  <http-method>TRACE</http-method></web-resource-collection>  <auth-constraint>  </auth-constraint>
</security-constraint>

Nginx 中的Host header attack

在server模块配置:

if ($host !~* xxx.xxx.xxx|xxx.ddd.ddd.ddd) {return 403;
}

或者

if ($http_Host !~* xxx.xxx.xxx:port|xxx.ddd.ddd.ddd:port) {return 403;
}

xxx.xxx.xxx:代表域名
xxx.ddd.ddd.ddd:代表IP
根据需求,可以只写一个或多个条件。
$host不对端口进行判断,$http_Host则对端口进行判断,根据需求选用。

Nginx + Tomcat 架构下配置通用错误页面

如果是单独的nginx架构,只需要通过如下配置就能配置400类错误信息的通用页面

error_page 404  /404.html

但是如果是通过nginx反向代理tomcat时,上述配置就将失效,需要通过手动开启proxy_intercept_errors配置来实现。具体配置如下。

proxy_intercept_errors on;
error_page  400 401 404      /40x.html;
location = /40x.html {root   html;
}

具体原因是400类错误是由tomcat报错来的,而且proxy_intercept_errors 参数默认是关闭的。

nginx中proxy_intercept_errors 参数含义:
当上游服务器响应头回来后,可以根据响应状态码的值进行拦截错误处理,与error_page 指令相互结合。用在访问上游服务器出现错误的情况下。

Nginx 常见漏洞解决方式相关推荐

  1. Linux下启动程序常见问题,linux系统启动流程及常见故障解决方式

    Linux系统中启动的流程: 1.加载bios的硬件信息以及进行自我检测  并根据设置取得第一个启动的设备 2.若以硬盘方式引导  读取并执行引导扇区 MBR 3.加载grub(引导程序)启动菜单(/ ...

  2. linux常用命令 和 常见错误解决方式

    目录 1.常用命令 1):cd命令集 2):ls查看目录和文件 3):目录操作 4):vim创建/查看/编辑文件 5):删除文件 6):复制和移动文件 7):浏览文件 8):打包解压命令 9):gre ...

  3. 哈希冲突的常见解决方式

    哈希 Hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间 ...

  4. Java(web)项目安全漏洞及解决方式【面试+工作】

    Java(web)项目安全漏洞及解决方式[面试+工作] 一.安全性问题层次关系 大家经常会听到看到很多很多有关安全性方面的信息,可以说形形色色,对于在网络安全方面不太专业的同志来说,有点眼花缭乱,理不 ...

  5. nginx 上传文件漏洞_浅谈文件上传漏洞(其他方式绕过总结)

    前言 上一篇文章简单的介绍了绕过客户端检测,现在总结一下其他方式绕过. 正文 1.1 服务端MIME类型检测绕过 检测原理:用户上传文件时,服务器会获取这个文件的MIME值,与事先设置好的进行比对,如 ...

  6. Web开发常见的几个漏洞解决方法

    平时工作,多数是开发Web项目,由于一般是开发内部使用的业务系统,所以对于安全性一般不是看的很重,基本上由于是内网系统,一般也很少会受到攻击,但有时候一些系统平台,需要外网也要使用,这种情况下,各方面 ...

  7. 一些常见的问题错误及解决方式

    一.数据库: 报错码: 1.error10013 就是端口被占用,换个端口就OK. 2.error10061 就是数据库没打开. 3.error10053的问题是与socket有关,但是不记得怎么解决 ...

  8. Nginx常见的错误及解决方法

    1.Nginx 常见启动错误 有的时候初次安装nginx的时候会报这样的错误 sbin/nginx -c conf/nginx.conf 报错内容:sbin/nginx: error while lo ...

  9. 常见浏览器兼容性问题与解决方式

    所谓的浏览器兼容性问题,是指由于不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,不管用户用什么浏览器来查看我们的站点或者登陆我们的系统,都应该是统一的 ...

最新文章

  1. 谈Linux的安全设置
  2. 一个 NAND flash写函数
  3. 数据结构-简单选择排序(C语言)
  4. android edittext seterror,EditText之setError方法一二
  5. ad20中怎么多选操作改层_在操作系统中CPU是怎么调度的
  6. 使用boost模板函数实现读写锁
  7. Android开发笔记(一百五十九)Android7.0的分屏模式
  8. Vue属性绑定~非常详细
  9. php之sprintf的用法,PHP之sprintf函数用法详解
  10. pano2vr保存的html打不开,pano2VR输出文件打不开
  11. 图像分类经典卷积神经网络—SENet论文翻译(纯中文版)—Squeeze-and-Excitation Networks(挤压和激励网络)
  12. mongoose视频教程
  13. 相同分数排相同名次C语言,实验六 按成绩输出名次
  14. Baltimore System of Classifications of Viruses
  15. 10 个 Flutter 优秀组件
  16. pytest官方文档 6.2 中文翻译版(第十章):警告捕捉
  17. FZU2132 - LQX的作业(概率论)
  18. unity3d实现像素游戏的精确碰撞判定
  19. fastapi获取访客真实ip
  20. 推荐一款不错的TP5开源是CMS

热门文章

  1. 基于python的贝叶斯分类器_Python实现朴素贝叶斯分类器的方法详解
  2. 数字孪生技术:WebGL vs. 游戏引擎
  3. 软件测试方法——等价类划分法详解
  4. 艾迪康通过上市聆讯:曾靠疫情检测两年赚20亿 凯雷为大股东
  5. 一篇充满碎碎念的短期自我总结(三)【tencent产品笔试+游戏群面总结】
  6. int argc,char* argv[] 详解
  7. linux udev
  8. NextInt()和NextLine()
  9. 【活动公告】Hackathon —— 腾讯云AI API接入迷你赛
  10. 使用OAuth 2.0访问谷歌的API