解决运维痛点,提高运维安全性-雷池 SafeLine WAF新功能身份认证深度体验

解决运维痛点,提高运维安全性-雷池 SafeLine WAF新功能身份认证深度体验

王忘杰
2025-05-22 / 0 评论 / 54 阅读 / 正在检测是否收录...

雷池介绍

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

近期雷池 SafeLine WAF重点更新了身份认证功能,并提供了SSO单点登录认证,因此本次对此功能进行深度体验。

业务痛点

在公司运维中,会部署一些独立的自开发运维工具,如MQ消息队列监控工具、JVM虚拟机内存监控工具、交换机巡检备份工具;本次介绍我自己开发使用的MQ消息队列监控工具结合雷池的使用。

MQ消息队列监控工具

整个工具由下面几部分组成
MQ消息队列-Agent采集写入数据库、分析、企业微信webhook告警(python)-企业微信webhook消息配置为PHP网页-PHP网页可视化展示最近的MQ分析数据库

由于开发的工具较多,均没有配置独立的身份认证,即任何人都可以通过连接访问
mays0fj0.png

雷池WAF身份认证

为防止隐私泄露,本次全新安装雷池WAF

雷池WAF安装

安装docker

使用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.io

2、配置docker网段和加速源

/etc/docker/daemon.json

{
        "bip": "192.168.120.1/24",
        "registry-mirrors": [
                "https://docker.1panel.live"
        ]
}

3、启动服务

systemctl enable --now docker

4、关闭防火墙

systemctl disable --now firewalld

安装雷池

yum install python3
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"

maysejlr.png

部署完成
maysl5ob.png

MQ消息队列监控工具部署

部署php环境

yum install httpd php php-mysqli php-json
systemctl enable --now httpd

将MQ查询的PHP程序放入/var/www/html/index.php,运行正常
mays0fj0.png

雷池WAF身份认证配置

添加应用防护
mayx30ah.png
可配置基础账号密码认证
mayx44yi.png
也可配置三方账号密码认证,注意个人免费版和收费版可配置项不同
mayx7621.png

配置基础身份认证演示

mayx4o28.png

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

直接访问效果

mayx5n8w.png

错误账号密码效果

mayx6956.png

通过验证效果

显示正在进入并跳转
mayxa8n8.png

审批授权效果

配置为审批授权
mayxhwqd.png
登陆提示未授权
mayxkckt.png
雷池-身份认证 进行授权
mayxlf9n.png

mayxlmz9.png
审批通过后,页面自动跳转,访问成功

微信开放平台对接效果

由于微信开放平台需要实名认证,这里无法演示,最终效果为扫码登录
mayxfq19.png

身份认证高级功能-特定条件身份认证

可设置条件、IP范围、地理范围
mayy2xg1.png

身份认证高级功能-用户认证信息传递

官方文档

如何配置将用户认证信息传递给应用服务器?
用户认证成功后,雷池会重定向到以下地址,其中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: 成功,非0: 失败
    "msg": "错误描述",
    "data": {
        "id": 1,
        "username": "username"
    }
}
应用成功获取到用户信息之后缓存登录信息,用于后续判断当前用户是否登录,然后重定向到 redirect_uri

注意

GET http://safeline-console.com/

这里域名是应用的域名,不是雷池控制台,即

GET http://example.com/.safeline/auth/api/user?code=123456

简单DEMO实现获取雷池身份验证用户名
auth.php

<?php
// 打印更多报错信息
error_reporting(E_ALL); ini_set('display_errors', 1);
// 判断是否是HTTPS
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "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 !== 200){
    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);

配置回调地址
maz333l1.png

登陆测试

登录heihei
maz30aph.png

返回用户名heihei

Array ( [code] => 0 [msg] => [data] => Array ( [id] => 2 [username] => heihei ) )

拿到用户名后,下一步可以写入session或cookie,跳转页面,完成权限认证操作

意见与建议

1、登录界面无法直接回车登录,需要鼠标点击登录,建议改为回车登录
2、身份认证审核信息,建议使用浏览器消息通知机制,直接在标签页弹消息提醒

小结

太强大了!

0

评论

博主关闭了所有页面的评论