使用雷池 SafeLine WAF已经两年多了,在1.5.x版本时就已经开始测试使用,并在推出LTS版本后转入LTS分支。

近期雷池 SafeLine WAF重点更新了身份认证功能,并提供了SSO单点登录认证,因此本次对此功能进行深度体验。
在公司运维中,会部署一些独立的自开发运维工具,如MQ消息队列监控工具、JVM虚拟机内存监控工具、交换机巡检备份工具;本次介绍我自己开发使用的MQ消息队列监控工具结合雷池的使用。
整个工具由下面几部分组成 MQ消息队列-Agent采集写入数据库、分析、企业微信webhook告警(python)-企业微信webhook消息配置为PHP网页-PHP网页可视化展示最近的MQ分析数据库
由于开发的工具较多,均没有配置独立的身份认证,即任何人都可以通过连接访问

为防止隐私泄露,本次全新安装雷池WAF
使用anolis8.10操作系统,关闭防火墙,安装docker
关闭防火墙是为了防止干扰实验结果
1、安装docker
yum install -y yum-utils
#阿里云加速源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io2、配置docker网段和加速源
/etc/docker/daemon.json
{
"bip":"192.168.120.1/24",
"registry-mirrors":[
"https://docker.1panel.live"
]
}3、启动服务
systemctl enable --now docker4、关闭防火墙
systemctl disable --now firewalldyum install python3
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
部署完成

部署php环境
yum install httpd php php-mysqli php-json
systemctl enable --now httpd将MQ查询的PHP程序放入/var/www/html/index.php,运行正常

添加应用防护

可配置基础账号密码认证

也可配置三方账号密码认证,注意个人免费版和收费版可配置项不同


可配置授权访问或直接访问


显示正在进入并跳转

配置为审批授权

登陆提示未授权

雷池-身份认证 进行授权


审批通过后,页面自动跳转,访问成功
由于微信开放平台需要实名认证,这里无法演示,最终效果为扫码登录

可设置条件、IP范围、地理范围

官方文档
如何配置将用户认证信息传递给应用服务器?
用户认证成功后,雷池会重定向到以下地址,其中http://example.com/application是在应用配置的认证回调地址:
http://example.com/application?code=123456&redirect_uri=用户原访问地址
在雷池控制台 通用设置-控制台管理 页面找到 API Token ,获取 Token
应用在 认证回调地址 中实现用 code 来请求雷池的/.safeline/auth/api/user接口获取认证用户信息,code 只能使用一次
// 请求:
GET http://safeline-console.com/.safeline/auth/api/user?code=123456
X-SLCE-API-TOKEN: safeline-api-token
// 响应:
Content-Type: application/json
{
"code":,// 0: 成功,非0: 失败
"msg":"错误描述",
"data":{
"id":,
"username":"username"
}
}
应用成功获取到用户信息之后缓存登录信息,用于后续判断当前用户是否登录,然后重定向到 redirect_uri注意
GET http://safeline-console.com/这里域名是应用的域名,不是雷池控制台,即
GET http://example.com/.safeline/auth/api/user?code=简单DEMO实现获取雷池身份验证用户名 auth.php
<?php
// 打印更多报错信息
error_reporting(E_ALL);ini_set('display_errors',);
// 判断是否是HTTPS
$protocol=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off'||$_SERVER['SERVER_PORT']==)?"https://":"http://";
// 获取域名和请求URI
$currentUrl=$protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$parsedUrl=parse_url($currentUrl);
$queryString=$parsedUrl['query'];
parse_str($queryString,$queryParams);
$code=isset($queryParams['code'])?$queryParams['code']:null;
$url='http://这里是我的应用域名/.safeline/auth/api/user?code='.urlencode($code);// 替换为实际API地址
$ch=curl_init();
curl_setopt_array($ch,[
CURLOPT_URL=>$url,
CURLOPT_HTTPHEADER=>[
'X-SLCE-API-TOKEN: 这里是我的密钥'
],
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_SSL_VERIFYHOST=>false
]);
$response=curl_exec($ch);
if(curl_errno($ch)){
die('CURL Error: '.curl_error($ch));
}
$httpCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);
if($httpCode!==){
die('HTTP Error: '.$httpCode);
}
print_r($response);
$data=json_decode($response,true);
if(json_last_error()!==JSON_ERROR_NONE){
die('JSON解析失败: '.json_last_error_msg());
}
print_r($data);
curl_close($ch);配置回调地址

登录heihei

返回用户名heihei
Array([code]=>[msg]=>[data]=>Array([id]=>[username]=> heihei ))拿到用户名后,下一步可以写入session或cookie,跳转页面,完成权限认证操作
1、登录界面无法直接回车登录,需要鼠标点击登录,建议改为回车登录 2、身份认证审核信息,建议使用浏览器消息通知机制,直接在标签页弹消息提醒
太强大了!