在k8s上运行「免费WAF」雷池社区版

ge031310月前 ⋅ 2097 阅读

原文地址: 在k8s上运行雷池社区版

前言

最近在学习k8s,想着在k8s上部署一些应用练练手,于是就用雷池社区版上手试了一下,简单把本次整理的配置过程都整理出来。

运行环境

系统:Unbuntu 22.04
配置:2C8G
磁盘:40G
使用工具:minikube v1.31.1
雷池社区版v2.4.0

配置文件和相关配置

配置文件通过对 kompose 工具生成后的 yaml 进行一定的修改得到,其中分为两个部分,一是WAF的主要运行模块配置文件,二是存储数据库配置文件。由于数据库的配置并没有具体地做信息持久化的配置,因此如果有自己的数据库集群可以参考第二步的1和2对相应配置进行相应更改。

下载配置文件后移动到相应目录后自行解压:

tar -xzvf safeline-ce-k8s-configs.tar.gz
tar -xzvf safeline-ce-k8s-db.tar.gz

第一步 上传镜像

首先需要将离线镜像上传到docker仓库中,然后用以下脚本将其加载到minikube的工作集群中。(离线镜像的下载去官网就能找到)

minikube image load chaitin/safeline-tengine \
                    chaitin/safeline-mgt-api \
                    chaitin/safeline-mario \
                    chaitin/safeline-detector \

当运行完成后,运行minikube image ls可以查看到对应的镜像。

第二步 修改数据库信息

  1. 打开文件management-deployment.yaml。将其中safeline-ce:${POSTGRES_PASSWORD}替换成你的数据库的用户和密码,@safeline-postgres中@后的部分改成你k8s集群中postgres数据库服务的域名。

  2. 打开文件mario-deployment.yaml。类似的,将其中safeline-ce:${POSTGRES_PASSWORD}${REDIS_PASSWORD}替换成相应数据库的信息。同时用相应域名替换@后的部分。

  3. 如果集群中还没有相应的数据库,可以使用提供的数据库配置文件来简单测试。(长期使用的话请自行斟酌)使用测试的数据库的话前两步只需要更改密码。首先需要先运行下面的脚本生成随机密码:

echo "POSTGRES_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> .env
echo "REDIS_PASSWORD=$(LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 32)" >> .env
cat .env

然后分别打开postgres-deployment.yaml和redis-deployment.yaml并将密码复制到对应位置。

postgres-deployment:

redis-deployment:

第三步 启动容器

首先要确保数据库已经启动,然后再来启动waf,快速使用所有配置文件的脚本为:

# 先cd到配置文件目录下
kubectl apply -f .

我也在 safeline-ce-k8s-configs 下写了一个简单的脚本来启动,运行bash ./start.sh即可。

具体运行状况可以通过kubectl get all来查看,以下为启动后的pod情况

第四步 测试使用

首先可以在雷池配置文件目录下运行kubectl apply -f test-server.yaml打开一个服务器。该服务器运行了python3 -m http.server 8089,在配置中又打开了一个30007的节点端口。

打开 management-deployment.yaml 查看其中 user-port 下的 nodePort 项,这一项可以更改,也可以由k8s自动分配。

然后运行kubectl get node -o wide,得到运行节点的ip地址,然后通过<ip>:<nodePort>可以访问waf管理界面,比如这里可以访问192.168.49.2:30018

然后运行kubectl get node -o wide,得到运行节点的ip地址,然后通过<ip>:<nodePort>可以访问waf管理界面,比如这里可以访问192.168.49.2:30018

ps.

  • 以上是通过nodePort的访问方式,如果需要直接访问内部的port,如其中management的9443端口,可以运行脚本:kubectl port-forward service/safeline-management 9440:9443。然后打开一个新终端就可以通过 localhost:9440 来访问。
  • 更多访问方式可以查询 kubectl proxy,以及k8s相关文档:https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/

打开管理页面后可以配置站点:

此时通过curl 192.168,49,2:30080可以访问到服务器。这是由于配置中打开了tengine 容器的80端口到节点30080端口的映射,因此成功通过tengine转发。

整理和总结

  • 虽然代理成功,但是从攻击测试来看,tengine向detector的流量转发没有成功,攻击语句没有被拦截,说明detector应该没有接到流量,这可能与tengine内部的nginx配置有关。

全部评论: 0

    相关推荐