点击上方蓝字,关注我们~
一
准备工作
****01
版本要求
Safeline >= 5.6.0
****02
修改雷池服务
安装雷池文档:保护您的Web应用:使用雷池(SafeLine)WAF的入门指南
社区版雷池的检测引擎默认以 unix socket 的方式提供服务,我们需要把他修改为 tcp 方式,供 t1k 插件调用。
进入雷池检测引擎的配置目录:
`cd /data/safeline/resources/detector/ `
用文本编辑器打开目录里的 detector.yml 文件,我们需要将 bind 方式从 unix socket 改为 tcp,添加如下配置:
`bind_addr: 0.0.0.0 listen_port: 8000 `
detector配置的属性值将覆盖容器内默认配置文件的同名属性值。这样我们就把雷池引擎的服务监听到了 8000 端口。
现在只需要把容器内的 8000 端口映射到宿主机即可,首先进入雷池的安装目录
`cd /data/safeline `
然后用文本编辑器打开目录里的 compose.yaml 文件,为 detector 容器增加 ports 字段,暴露其 8000 端口,参考如下:
`...... detect: ...... ports: - 8000:8000 ...... `
OK,改好了,在雷池安装目录下执行以下命令重启雷池即可生效。
`docker compose down docker compose up -d `
二
准备SafeLine配置
使用 ConfigMap 配置 Safeline 插件需要的检测引擎 host 和 port,内容如下:
`cat <<EOF | sudo tee safeline.yaml apiVersion: v1 kind: ConfigMap metadata: name: safeline namespace: ingress-nginx data: host: "detector_host" # 雷池检测引擎的地址 port: "8000" EOF `
`kubectl create namespace ingress-nginx kubectl apply -f safeline.yam `
三
安装Helm
https://helm.sh/docs/intro/install/
`curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash `
四
安装Ingress-nginx
****01
使用Helm安装Ingress-Nginx
使用下面的 ingress-nginx-values.yaml 进行镜像替换和插件配置:
`cat <<EOF | sudo tee ingress-nginx-values.yaml controller: hostNetwork: true kind: DaemonSet image: registry: registry.cn-shanghai.aliyuncs.com image: kubesec/chaitin-ingress-nginx-controller tag: v1.10.1 digest: "" extraEnvs: - name: SAFELINE_HOST valueFrom: configMapKeyRef: name: safeline key: host - name: SAFELINE_PORT valueFrom: configMapKeyRef: name: safeline key: port service: externalTrafficPolicy: Local # 便于获取真实客户端 IP config: plugins: safeline admissionWebhooks: patch: image: registry: registry.cn-shanghai.aliyuncs.com image: kubesec/chaitin-ingress-nginx-kube-webhook-certgen tag: v1.4.1 digest: "" EOF `
`helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace -f ingress-nginx-values.yaml `
****02
测试SafeLine插件
使用下面的safeline-test.yaml部署nginx服务
`cat <<EOF | sudo tee safeline-test.yaml apiVersion: v1 kind: Namespace metadata: name: safeline-test --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: safeline-test labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-shanghai.aliyuncs.com/kubesec/nginx:1.14.2 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx namespace: safeline-test spec: selector: app: nginx type: NodePort ports: - name: http protocol: TCP nodePort: 30080 port: 80 targetPort: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx namespace: safeline-test spec: ingressClassName: nginx rules: - host: www.safeline-test.org http: paths: - backend: service: name: nginx port: number: 80 path: / pathType: ImplementationSpecific EOF `
执行部署命令
`kubectl create -f safeline-test.yaml `
通过构造恶意请求测试 Safeline 插件是否生效,例如:(首先做本地域名解析)
`curl http://www.safeline-test.org/ -H "Host: example.com" -H "User-Agent: () { :; }; echo; echo; /bin/bash -c 'echo hello'" `
你会看到返回 403 Forbidden,说明 Safeline 插件生效了。
`{"code": 403, "success":false, "message": "blocked by Chaitin SafeLine Web Application Firewall", "event_id": "009efd8d2bf44a07b5cb7ed4cf18fb84"} `
在雷池的控制台界面,可以看到雷池记录了完整的攻击信息。
五
自动化测试防护结果
使用 blazehttp 自动化工具进行批量测试
`docker pull registry.cn-shanghai.aliyuncs.com/kubesec/chaitin-blazehttp:v0.2.0 docker run --rm --net=host registry.cn-shanghai.aliyuncs.com/kubesec/chaitin-blazehttp:v0.2.0 /app/blazehttp -t http://www.safeline-test.org/ `
将看到如下输出内容
`sending 100% |██████████████████████████████| (33677/33677, 1160 it/s) [29s:0s] 总样本数量: 33677 成功: 33677 错误: 0 检出率: 83.87% (恶意样本总数: 558 , 正确拦截: 468 , 漏报放行: 90) 误报率: 0.07% (正常样本总数: 33119 , 正确放行: 33096 , 误报拦截: 23) 准确率: 99.66% (正确拦截 + 正确放行)/样本总数 平均耗时: 8.47毫秒 `
在雷池后台查看攻击事件
参考资料:
https://waf-ce.chaitin.cn/docs/
https://waf-ce.chaitin.cn/docs/guide/test
https://waf-ce.chaitin.cn/docs/practice/ingress-nginx
END
<
PAST · 往期推荐
>
保护您的Web应用:使用雷池(SafeLine)WAF入门指南
转载是一种动力 分享是一种美德~