被他人错误解析域名到雷池 WAF网关的处理办法

作者:田逸

最近一些项目的站点经常发告警短信,提示网站无法访问。通过排查,发现后端数据库资源都被耗尽(连接数上千,正常情况是小于100),负载也高得吓人,如下图所示。

“load average”数值最高的时候,能超过1000。再排查访问异常站点的Web日志,大致判断是被人盯上了。为了解决这个问题,在不能增加任何投入的情况下,决定部署一套开源的WAF。通过综合评估,最终选择雷池作为安全防范工具,部署在网络的边界处。由于项目涉及的项目很多,重新解析域名会带来麻烦,因此我决定将负载均衡的公网VIP迁移到WAF网关,而负载均衡器的VIP设置成内网地址。这样一来,后端的网络结构一概不用改变,大大降低了操作风险。下图为添加WAF前与添加WAF的结构对比。

因为没有经费支持,只好找了一个有公网地址的Proxmox VE单节点系统,创建好虚拟机并安装好操作系统Centos 7,系统能正常远程正常访问后,以网络方式安装好WAF平台雷池。这个WAF雷池安装非常简单,就一条指令“bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"”解决问题(如下图所示)。

指令正常执行完毕以后,用浏览器访问WAF的公网IP并加默认端口号“9433”进入管理后台登录界面(如下图所示)。

设置好站点防护以后,确实起到了很大的作用,数据库并发连接数恢复到几十个,而数据库所在系统的“load average”保持在3以下,即便各种非正常访问请求任然猖獗(如下图所示)。

所有项目的网站在WAF的保护下运行平稳,大家以为可以稍微松一口气了,突然,相关人员接到IDC机房打来的电话,告知提供网关服务的WAF所使用的公网地址,同时被解析到不相干的域名,需要立即处理,不然就要封IP,而且给出了时限(限定一个小时内处理)。再半小时内,接连来了好几个电话。经运营人员排查,是某个注册用户,错误地将他个人域名解析到WAF所绑定的公网地址。运行人员根据平台上的注册信息,多次联系该用户,无果。IDC机房的人给了一个折中的方案,当访问这个被错误解析过来的域名,返回错误代码“403”就可以应付过去。

登录WAF Web管理后天,防护站点添加错误解析过来的域名“secooler.cn”,端口号“80”,并随意填写一个上游服务器的内网地址,如下图所示。

提交这个设置,然后以SSH客户端登录到WAF所在的宿主系统。进入WAF后台Web工具Nginx相关的配置目录,此目录默认的安装位置为“/data/safeline/resources/nginx”,在这个目录里,有Nginx的主配置文件“nginx.conf”,这个文件的最后几行,以包含方式将我们从WAF管理后台添加的“防护站点”作为分支配置,如下图所示。

因为WAF是在Docker下管理和运行Nginx服务的,所以配置文件的目录实际为“/data/safeline/resources/nginx/sites-enabled”等。进入这个目录,以关键字“secooler”在此目录检索,看其具体存在于哪个文件,方便做进一步的定位,如下图所示。

根据输出,手动从WAF Web管理后天添加的这个被错误解析过来的域名,存在于文件“IF_backend_20”。打开文本文件“IF_backed_20”,大概在这个文件的第45行,有一个http跳转,如下图所示。

乘热打铁,切换到目录“/data/safeline/resources/nginx/custom_params”,找到文件backend_20(这个文件也是在WAF Web添加域名后,自动生成的),默认情况下,它是个空文件。编辑这个文件,插入文本行“return 403;”如下图所示。

保存修改,执行命令“docker exec -it safeline-tengine nginx -t”进行Nginx的语法检查,无误后继续执行命令“docker exec -it safeline-tengine nginx –s reload”重启Nginx服务。

用浏览器或者命令行访问www.secooler.cn,返回http状态码403,IDC机房那边来消息说可以了,问题解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring-IOC-xml方式

简介 **控制反转**(Inversion of Control,缩写为**IoC**),是[面向对象编程]中的一种设计原则,可以用来减低计算机[代码]之间的[耦合度]。其中最常见的方式叫做[依赖注入]Dependency Injection,简称DI&#…

照着这几步做,轻松搭建企业知识库

在当今信息爆炸的时代,企业面临着海量的知识和信息。如何高效地管理和利用这些知识成为了企业发展的关键。而搭建一个适合企业的知识库,可以帮助企业更好地组织和共享知识,提高工作效率和竞争力。下面将为大家介绍一些简单的步骤,…

Xshell 从github克隆项目:使用ssh方式。

接上文: https://blog.csdn.net/liu834189447/article/details/135247868 是能克隆项目了,但是速度太磕碜了,磕碜到难以直视。 找到另外一种办法,使用SSH克隆项目 速度嘎嘎猛。 首先得能进得去github网站,不能点上边…

Centos7:Jenkins+gitlab+node项目启动(1)

Centos7:Jenkinsgitlabnode项目启动(1) Centos7:Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7:Jenkinsgitlabnode项目启动(2) Centos7:Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7:Jenkinsgitlabnode项目启…

uni-app/vue封装etc车牌照输入,获取键盘按键键值

先看下效果如下&#xff1a; 动态图如下 uniapp的keyup获取不到keyCode和compositionstart&#xff0c;compositionend&#xff0c;所以需要监听input节点的keyup事件&#xff0c; 思路以及代码如下&#xff1a; 1.将每一个字符用文本框输入&#xff0c;代码如下 <view …

centos 配置 git 连接 github

centos 配置 git 连接 github 首先安装 git 创建 ssh key ssh-keygen -t rsa复制公钥 cat ~/.ssh/id_rsa.pub # 打印出公钥内容然后复制配置 github 登录网页 github 账号&#xff1b;进入 setting&#xff1b;点击 SSH and GPG keys&#xff0c;点击 New SSH keytitile 随便填…

TCP的三次握手

TCP 是一种面向连接的单播协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的“连接”&#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息&#xff0c;如 IP 地址、端口号等。 TCP 可以看成是一种字节流&#xff0c;它…

反序列化漏洞分析

接着昨天的来说&#xff0c;由于fastjson调试起来过程比较复杂&#xff0c;在这里直接看关键点&#xff1a;首先会获取字符串的第一对引号中的内容 如果内容为type就会加载下一对引号中的类 在JavaBeanInfo.class中会获取类中所有详细详细 在这里匹配以set开头的方法 methodNam…

Amazon CodeWhisperer 免费 AI 代码生成助手体验分享

今年上半年&#xff0c;亚马逊云科技正式推出了实时AI编程助手 Amazon CodeWhisperer&#xff0c;还提供了供所有开发人员免费使用的个人版版本。经过一段时间的体验&#xff0c;我觉得 CodeWhisperer 可以处理编程工作中遇到的很多问题&#xff0c;并且帮助开发人员提高编程效…

锁表的时候会一直锁吗

1.前言 当数据库锁定表格时&#xff0c;锁定的持续时间取决于特定情况和具体实现。锁表的持续时间可以是短暂的&#xff0c;也可以是较长的。 在某些情况下&#xff0c;数据库会立即释放对表格的锁定。例如&#xff0c;在事务中&#xff0c;一旦事务完成或回滚&#xff0c;数…

Mybatis-Plus中怎么使用MySQL的内置函数

使用MySQL的内置函数处理数据很方便&#xff0c;但是通过Mybatis-Plus去使用内置函数&#xff0c;而不想通过在xml里面写SQL&#xff0c;那我们应该怎么做呢&#xff1f; 假设我想使用MySQL的FIND_IN_SET函数&#xff1a; import com.baomidou.mybatisplus.core.conditions.qu…

C/C++学习笔记十三 C++中的重载运算符

1、什么是运算符重载&#xff1f; 运算符重载是 C 中的一项功能&#xff0c;使运算符&#xff08;例如 、- 等&#xff09;能够处理用户定义的数据类型。这种机制称为编译时多态性&#xff0c;并提供了为不同数据类型定制运算符行为的优点。 例如&#xff0c;我们可以重载“”运…

【算法题】20. 有效的括号

题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类…

VueRouter的路由模式有哪几种

VueRouter的路由模式有三种&#xff1a;hash模式、history模式和abstract模式。 hash模式&#xff1a;在URL中的路径部分以 # 符号开头。比如&#xff1a;http://www.example.com/#/home。在hash模式下&#xff0c;URL的hash部分的改变不会导致浏览器向服务器发送请求&#xff…

cpp初始化一个结构体

一开始我是直接定义一个结构体指针&#xff0c;给其进行初始化&#xff0c;但是一直报错&#xff0c;最后改为结构体后就好了 结构体定义&#xff1a; struct graph {// Number of edges in the graphint num_edges;// Number of vertices in the graphint num_nodes;// The n…

Maven - expected START_TAG or END_TAG not TEXT (position: TEXT seen …

问题描述 expected START_TAG or END_TAG not TEXT (position: TEXT seen … 原因分析 由于我们复制 pom.xml 过程中&#xff0c;空格的格式不规范&#xff0c;或者格式有问题&#xff0c;maven 会出现加载错误&#xff0c;导致我们的 jar 包也不能正确导入而报红 解决方案 只…

使用Vue3开发学生管理系统模板2 新增学生信息

实现新增学生的功能 第一步&#xff1a;点击新增按钮&#xff0c;弹窗新增学生的页面 function openNew() {student.value {id: "1",student_id: "1",chinese_id: "5222xxx",name: "张三",age: 13,gender: "男",height: …

Flink1.17实战教程(第二篇:DataStream API)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

双向循环链表实现C语言关键字中英翻译机 ฅ( ̳• · • ̳ฅ)

目录 1.双向循环链表的声明与定义&#xff1a; 2. 创建链表并对节点中的数据赋初值 3. 插入节点并链接 4.中英翻译 5. 小游戏的实现 6.菜单的实现 7. 释放内存 8.在主函数中用刚才定义的函数实现各种代码 输入样例&#xff1a; 实现方法&#xff1a;双向循环链表来实…

对话面试官----jvm模型

JVM&#xff08;Java Virtual Machine&#xff09;是 Java 虚拟机的缩写&#xff0c;它是一个运行 Java 字节码的虚拟计算机。JVM 提供了一个平台独立的执行环境&#xff0c;能够在不同的操作系统上运行 Java 程序。JVM 模型由类加载器、运行时数据区域、执行引擎等组成&#x…