长亭百川云 - 文章详情

Ingress-nginx集成雷池(SafeLine)WAF

KubeSec

72

2024-07-05

点击上方蓝字,关注我们~

准备工作


****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   `

  • 创建saafeline ConfigMap
`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入门指南

转载是一种动力 分享是一种美德~

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2