nginx解决非人类使用http打开的443,解决网安漏扫时误扫443端口带来的问题

一、问题描述

正常访问https的站点时,使用网址https://www.baidu.com,但会有一种错误的访问请求http://www.baidu.com:443,一般都是非人类所为,如漏洞扫描工具,那么请求以后带来的后果是个错误页面

400 Bad Request

The plain HTTP request was sent to HTTPS port

如图:

通常我们部署的nginx,会用add_header添加一些安全类属性,由于上面的错误是nginx直接返回的错误,因此不带有这些安全属性,那么漏洞扫描工具就会报告网站或主机不安全,解决起来也很麻烦,本人通过不断搜索+尝试,最终完美解决

二、解决方法

1、直接给你答案

配置默认站点
server {
listen 80 default_server;listen 443 ssl default_server;server_name _;
#这里可以补充自己要添加的安全性设置等

#修改自定义的497页面
error_page 497 /497.html;location = /497.html{return 200 "非法https请求";}

default_type text/html;return 403 "源站不存在或不可访问";
}

返回的默认400错误页太丑了,这里加了自定义,是想告诉你,虽然我们看到是400错误,实际上它并不是400错误代码,而是497代码,此前我一直自定义400,但还是显示默认页,网上找了很多教程,终于见到一位大神的回复,说是497错误,来源于:https://q.cnblogs.com/q/112867

最主要的问题是:如果不去自定义497的话,那么根据上面的配置,不会抛出403页面,一直是显示400页面,按理说上面已经监听到了,就应该返回才对,不知道算不算bug

2、尝试过程中走的弯路

当上面不配置497的时候,返回的是400,于是我第一个想到的可能性是默认配置监听不到http://xxx:443,于是误区就开始了

从请求地址http://xxx:443来分析,它应该是监听不带ssl的443端口,即listen 443;

带证书的监听是listen 443 ssl;所以我尝试添加一条只listen 443;的,确实可以监听到,也可以返回我要的结果,比如返回403或跳转等

此时,觉得问题已经解决了,然后发现,后面的配置有其它ssl站点的全都打不开了,看了日志,原来是443冲突了

listen 443和其它块中的listen 443 ssl是冲突的,不能同时使用,于是进入了误区2

尝试listen 443增加ip,我用的是腾讯云,有内网ip,如10.0.1.1,于是使用

listen 10.0.1.1:443,这里居然可以了,其它ssl站点也正常了,此时,觉得问题又解决了

但是当我把此功能在另一台服务器上配置,居然又监听不到了,另一台服务器没有内网ip,直接用的是公网绑定,于是我这样监听

listen 122.122.122.122:443,发现这样不行,又是冲突了,于是我改为

listen 127.0.0.1:443,发现其它ssl站点正常了,但是400错误又出现了

于是又不断的搜索,当我碰到497自定义页面的时候,终于解决了所有的问题,才有了第一步的解决方案

相关推荐
minji...1 分钟前
linux 进程控制(一) (fork进程创建,exit进程终止)
linux·运维·服务器·c++·git·算法
wanhengidc2 分钟前
巨 椰 云手机功能丰富 高性价比
运维·服务器·科技·智能手机·云计算
I · T · LUCKYBOOM4 分钟前
21.Linux网络设置
linux·运维·网络
Likeyou76 分钟前
关于Linux下的Oracle的rman备份操作指南
linux·运维·oracle
峰顶听歌的鲸鱼10 分钟前
13.docker部署
linux·运维·笔记·docker·容器·云计算
虚神界熊孩儿18 分钟前
linux下创建用户和用户组
linux·运维·服务器
hhwyqwqhhwy20 分钟前
linux 驱动 rtc
linux·运维·实时音视频
python百炼成钢22 分钟前
53.Linux regmap驱动框架
linux·运维·服务器·驱动开发
python百炼成钢25 分钟前
54.Linux IIO驱动框架
linux·运维·服务器·驱动开发