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自定义页面的时候,终于解决了所有的问题,才有了第一步的解决方案

相关推荐
腾讯蓝鲸智云7 小时前
【运维自动化-节点管理】节点管理的插件策略如何使用
运维·自动化·云计算·sass·paas
疯狂成瘾者9 小时前
服务器的单体和集群
运维·服务器
liuhuizuikeai9 小时前
可视化门禁---Linux/Qt+SqLite篇
linux·运维·qt
charlie11451419112 小时前
嵌入式Linux驱动开发——新 API 字符设备驱动完整教程 - 从设备结构体到应用测试
linux·运维·驱动开发
飞Link13 小时前
2000 亿砸向算力:字节跳动 AI 基建跨越,后端与运维的“万亿 Token”生死战
运维·人工智能
SWAGGY..13 小时前
Linux系统编程:(二)基础指令详解
linux·运维·服务器
张文君14 小时前
上古世纪服务端编译安装AAEmu docker编译安装
运维·docker·容器
雾岛心情14 小时前
小铭邮件管理工具箱的界面(公司版)
运维·服务器·工具·o365·小铭邮件工具箱(公司版)
一只鹿鹿鹿14 小时前
数据库运维与管理规范(WORD)
运维·数据库
King's King15 小时前
自动化立体仓库系统项目施工要点
运维·自动化