本节主要讲述网关相关自定义配置的使用并展示效果:
管理人员登录系统,进入管理门户,点击菜单“配置管理”>“服务器配置”,选择类型为“Gateway”的服务器组,页面展示当前服务器组“基本信息”、“网关重定向”、“黑白名单”、“多端口设置”、“证书管理”、“安全设置”、“告警设置”、“通知设置”、“跨域配置”、“网关保护”等方面信息。
# 基本信息
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“基本信息”页签,显示该服务器组的基本信息。
参数 说明 服务器组名称 Server服务组名称 服务器组编码 Server服务组编码 服务器组类型 服务器类型目前有两种,分别是ESB与Gateway,此处类型为Gateway 对外地址 通常是IP+端口号的形式或者与其绑定的域名保持一致,如:192.168.×××.×××:9999。 状态 服务器组状态,“启动”、“停用” 描述 服务器组描述
# 网关重定向
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“网关重定向”页签,根据业务需求添加网关重定向记录。
参数 说明 添加 是否添加网关重定向记录 访问状态码 指网关在处理相关请求出现异常时抛出异常的异常码 地址 指当前请求在出现相关异常时的重定向地址
网关重定向可依据所选不同的状态码,而重定向到不同的路径。当网关出现对应异常时,网关服务器会将当前请求重定向到对应的地址。相关操作步骤及效果如下:
配置网关重定向:勾选“添加”,选择状态码,并配置要跳转的路径,点击保存。
此处选择Token校验失败状态,重定向地址是一个测试接口,返回”网关出现异常了“提示
携带Token请求成功示例:
不携带Token出现异常示例:
1、请求重定向后是一个GET请求且默认为HTTP协议,如要使用HTTPS请在请求地址前加https://
2、网关异常重定向的请求不会记录日志
# 黑白名单
# 新增黑白名单
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“黑白名单”页签,进入黑白名单管理页面。
点击“新增”按钮,进入“黑白名单”新增页面,参考字段说明表格完成黑白名单配置,点击“确定”按钮保存。
参数 说明 黑白名单名称 黑白名单名称 黑白名单类型 黑白名单类型:白名单、黑名单 IP列表 IP列表 域名列表 域名列表
# 修改黑白名单
在“黑白名单”页签,选择一条黑白名单记录,点击操作列”编辑“按钮,弹出黑白名单修改页面。
修改黑白名单信息完成后,点击”确定“按钮进行黑白名单信息保存。
# 删除黑白名单
在“黑白名单”页签,选择一条黑白名单记录,点击操作列”删除“按钮,弹出删除确认页面。
点击”确定“按钮删除黑白名单信息。
# 批量删除黑白名单
在“黑白名单”页签,选择多条黑白名单记录,点击”批量删除“按钮,弹出批量删除确认页面。
点击“”按钮,完成黑白名单批量删除操作。
# 黑白名单使用示例
点击新增,填写对应信息,此处我们以黑名单为例,IP规则为192.168.*,之后点击保存,点击启用并确认。具体效果如下:
1、 可以配置多个黑白名单,但同一时间只能启用一个 2、此处黑白名单对网关所有路由都生效 3、IP配置有三种方式,表示范围有两种,如192.168.*和192.168.1.1~192.168.255.255(注意区分是波浪线~,前后顺序无关),配置*意味着拦截/放行所有请求
# 多端口设置
添加需要开通的端口点击保存(不可与网关配置文件端口号冲突),重启之后可通过网关添加的端口进行请求转发,勾选https首先需要配置https证书,详情请见本章节内 证书管理 。
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“多端口设置”页签,根据业务需求操作多端口设置记录。
参数 说明 多端口 是否开启多端口功能 网关端口 指给网关添加 其他请求通道的端口号,建议范围 1025~65535 Https 勾选表示对应端口开启https协议
# 开启多端口的效果
服务器日志
请求接口:
新增端口应避免与当前系统已占用端口冲突、避免与常见服务端口冲突,如:MySQL的3306端口,redis的6379端口等。
# 证书管理
通过证书配置可以更改网关支持的协议,从而进一步保证信息传输安全,当前网关服务器同时支持标准SSL协议以及国密SSL协议,此处展示标准https证书的配置及效果
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“证书管理”页签,根据业务需求修改证书管理配置。
将证书放置在:../APIGateway_Server/certificate路径下。
密钥库直接填写证书的名称即可,如下图所示:
输入证书信息,点击“保存”按钮保存证书信息。
# 证书使用效果
重启网关后可通过https请求网关,相关效果如下:
使用自签名证书需要关闭此处SSL证书校验
通过https请求网关进行请求转发:
通过http请求网关:
配置证书和信任库需要将相关证书上传至网关介质的keystore目录下
# 国密证书配置
国密证书配置更新后,需重启才可生效。
为方便演示重新发布了一个GET请求(请求成功返回“访问成功”提示),网关重启后进行测试
使用postman请求效果:
使用国密安全浏览器(此处使用360浏览器)效果:
安全设置里开启国密协议支持
发送https请求
国密实验室证书配置操作步骤与华为毕昇国密基本一致。
几种证书配置在使用上并无太大差别(原因:为用户省略了很多配置),如果用户希望自定义有关证书配置如:开启的协议、安全套接字等请咨询相关售后人员
1、此处使用的证书均为本地生成的自签名证书,相关命令如下: keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 36500 keytool -genkeypair -alias test -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore1.p12 -validity 365 -dname "CN=yourhostname" -ext SAN=IP:yourIP,DNS:yourDNS
附带测试国密证书: sm2.server1.both.pfx 密码12345678 ,类型PKCS12
1、验证国密https需要使用360浏览器或者奇安信浏览器,下载链接 360安全浏览器 https://down.360safe.com/se/360se13.1.5101.0.exe 奇安信可信浏览器 https://dl.qianxin.com/c8a52014-99d3-57ff/国密适配已授权/Windows版/qaxbrowser_1.1.40060.52.exe 2、相关证书配置须正确填写,否则将导致网关服务器启动失败 3、华为国密要求jdk版本在8u292、11.0.11及以上 4、受信证书校验较为严格,受信证书需与目标机器的IP或者域名进行绑定
参数 参数说明 Https 可选,勾选表示网关默认端口将使用当前证书开启https Provider 安全策略提供者,用于使用国密证书时选择初始化相关国密提供者 密钥库相关配置 报括密钥库文件名(包括后缀),密钥库密码以及类型, 信任库相关配置 可选配置,当网关路由的服务开启https时填写,包括所信任库文件名(下游服务使用的密钥库文件名),密钥库密码以及类型
# 安全配置
通过配置安全设置,来拦截可能存在危险的请求。
- “服务器配置”页面,选择类型为“Gateway”的服务器组,进入“安全设置”页签,主要包括以下配置:
# 1、禁止命令注入
命令注入攻击原理
漏洞允许攻击者在 被攻击方的主机操作系统 (OS) 上执行任意系统命令。
- 访问系统
- 获取敏感信息
- 在服务器上执行程序
- 系统接管
此处禁止的命令为"testcom",当请求参数或请求报文中包含相关命令,网关会拦截当前请求
# 2、禁止SQL注入
攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。
例如:
`System.Text.StringBuilder query = new System.Text.StringBuilder("SELECT * from Users WHERE login = '") Append(txtLogin.Text).Append("' AND password='") Append(txtPassword.Text).Append("'")`
当用户名和密码输入为"'或'1'='1"之类的内容之类的内容时,会自动跳过验证,获取到用户信息,当请求参数或请求报文中包含相关SQL命令,网关会拦截当前请求
# 3、禁止任意文件下载和读取
攻击原理
一些网站由于业务需求,往往需要提供文件查看或下载功能。一般来说在文件下载或查看功能处,当文件名参数可控,且系统未对参数进行严格过滤或者过滤不严格时,就能够实现下载服务器上的任何文件,产生任意文件下载漏洞,黑客可以利用( ../ )跳出程序本身的限制目录实现下载任意文件。拦截效果:
# 4、禁止文件目录列出
攻击原理
攻击者可以通过使用特殊字符来绕过服务器的安全机制,从而访问到受限目录,甚至可以执行命令 cmd.exe /c 提取目录信息,或在Web服务器的根目录外执行命令。
# 5、禁止任意文件上传
攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本到服务器上,然后访问这些恶意脚本中包含的恶意代码,从而获得了执行服务器端命令的能力,进一步影响服务器安全。
此处配置了.doc和pdf文件放行,相关效果如下:
# 6、防止CSRF攻击
CSRF全称为跨站请求伪造(Cross-site request forgery),是一种网络攻击方式,也被称为 one-click attack 或者 session riding。
CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登录的Web应用程序,去执行并非用户本意的操作。
此时白名单配置未包含本机IP,相关效果如下:
# 7、禁止反射型XSS
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制–例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知
相关效果如下:
# 8、禁止SDOS(慢请求服务拒绝)
慢攻击就是相对于DDOS的快而言的,并不是只有量大速度快才能把服务器搞挂,使用慢攻击有时候也能到达同一效果。比如:在POST提交方式中,允许在HTTP的头中声明content-length,也就是POST内容的长度。 在提交了头以后,将后面的body部分卡住不发送,这时服务器在接受了POST长度以后,就会等待客户端发送POST的内容,攻击者保持连接并且以10S-100S一个字节的速度去发送,就达到了消耗资源的效果,因此不断地增加这样的链接,就会使得服务器的资源被消耗。
相关效果:
# 9、禁用trace方法
拦截TRACE请求
# 10、支持X-Fream-Options属性设置
参考链接:X-Frame-Options - HTTP | MDN (mozilla.org) (opens new window)
X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 , 或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。
X-Frame-Options三个参数:
- DENY
表示该页面不允许在frame中展示,即便是在相同域名的页面中嵌套也不允许。
- SAMEORIGIN
表示该页面可以在相同域名页面的frame中展示。
- ALLOW-FROM uri
表示该页面可以在指定来源的frame中展示。
效果如下:
# 11、HTTP严格传输安全(HSTS)
参考链接:Strict-Transport-Security - HTTP | MDN (mozilla.org) (opens new window)
HTTP严格传输安全(英语:HTTP Strict Transport Security,缩写:HSTS)是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。
HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议(HTTP)响应头中包含Strict-Transport-Security字段。非加密传输时设置的HSTS字段无效。
Strict-Transport-Security三个参数
- max-age
必选参数,可以是 ‘0’ 以上的任何值,一般设定缓存 180 天。这个变量定义HSTS 响应头在浏览器中的缓存时间。
- includeSubDomains
可选参数,表示浏览器将此策略应用于当前域名的所有子域。
- repload
可选参数,表示使用 preload 预加载功能,此域名同意申请加入浏览器发发起的 Preload List
效果参考[X-Fream-Options属性设置]
# 告警设置
网关告警规则可搭配网关通知设置,在网关运行情况超出相关阈值时通知到有关运维、管理人员。
# 新增告警规则
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“告警规则”页签,进入告警规则管理页面。
点击“新增”按钮,进入“告警规则”新增页面,参考字段说明完成告警规则配置,点击“确定”按钮保存。
- 告警指标分为分为四种类型:系统指标、插件异常、网关异常以及攻击拦截。
- 其中系统指标分为CPU使用率告警和内存使用率告警。
- 攻击拦截对应着网关开启安全防护遭到攻击时的异常信息。
- 新建监控告警规则,应用默认30秒询问一次网关的使用情况,选择监控类型后,阈值和操作符表示,使用率大于还是小于这个值,周期和次数表示,在多少分钟内触发了几次,才会产生告警。
- 新建网关告警规则,选择异常类型后,选择对应的错误码,周期和次数与前文相同。
- 新建攻击拦截告警规则,只需要配置需要的错误码类型,周期与次数同上。
# 修改告警设置
在“告警设置”页签,选择一条告警指标记录,点击操作列”编辑“按钮,弹出告警指标修改页面。
修改告警规则信息完成后,点击”确定“按钮进行告警规则信息保存。
# 删除告警规则
在“告警规则”页签,选择一条告警规则记录,点击操作列”删除“按钮,弹出删除确认页面。
点击”确定“按钮删除告警规则信息。
# 批量删除告警规则
在“告警规则”页签,选择多条告警规则记录,点击”批量删除“按钮,弹出批量删除确认页面。
点击“确定”按钮,完成告警规则批量删除操作。
# 通知设置
当前通知方式只支持邮件通知,配置通知之前须在全局配置里配置邮件服务。
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“通知设置”页签,进入通知设置管理页面。
此处使用的内存使用率过高异常码
通知设置配置
勾选开启通知,依次选择通知方式、通知对象的邮箱、通知信息,通知对象邮箱格式要正确,点击保存后当网关出现相关异常时系统会通过邮件提醒相关人员,效果如下:
# 跨域配置
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“跨域配置”页签,进入跨域配置管理页面。
参数 说明 来源 必填,即请求发起方,可填默认全部,或IP+端口,IP+,如:合同谈判http://localhost:、http://192.168. 路径 必填,即请求路径,可为/**或/api/**等 cookie 可选,是否允许请求携带cookie 请求方式 多选,即允许跨域的请求方式 请求头 可选,只允许携带相关请求头的请求跨域,可填*即不做约束 响应头 同请求头 预检有效期 可选,即预检请求有效期(一段时间内不再发送预检请求)默认为1.8s 使用效果
此处通过前端发送一个/api开头的GET请求,并携带请求头Token,具体效果如下:
跨域成功:效果
跨域失败:效果
此处将get请求取消勾选
也可以尝试修改其他配置,比如将请求头的header改为header1或其他
附跨域测试页面:跨域测试.html
# 网关保护配置
此配置可通过监控应用的 Load、总体平均 RT、入口 QPS 和线程数等几个维度的监控指标,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
参考链接:system-adaptive-protection | Sentinel (sentinelguard.io) (opens new window)
“服务器配置”页面,选择类型为“Gateway”的服务器组,进入“跨域配置”页签,进入跨域配置管理页面。
参数 说明 系统容量 (仅对 Linux/Unix-like 机器生效):当系统 load 超过阈值,且系统当前的并发线程数超过系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt
计算得出。设定参考值一般是CPU cores * 2.5
响应时间 当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒 线程数 当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护 入口QPS 当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护 CPU使用率 当系统 CPU 使用率超过阈值即触发系统保护(取值范围 1-100)
# 效果展示
此处用CPU使用率作为演示,将其他值设为9999(保证不被触发),将CPU使用率设为1,具体效果如下:
1、此配置建议建议使用者结合自身机器性能配置使用。 2、这种系统自适应算法对于低 load 的请求,它的效果是一个“兜底”的角色。对于不是应用本身造成的 load 高的情况(如其它进程导致的不稳定的情况),效果不明显。