Supercharge K8s Security: SafeLine WAF + Ingress-nginx

مراحل آماده سازی:
سرویس SafeLine را تغییر دهید
1. برای نصب، مستندات SafeLine را دنبال کنید
2. نسخه جامعه موتور تشخیص SafeLine خدمات را از طریق سوکت یونیکس به طور پیش فرض ارائه می کند. ما باید این را به حالت TCP تغییر دهیم.
- به فهرست پیکربندی موتور آشکارساز SafeLine بروید:
cd /data/safeline/resources/detector/
- را باز کنید
detector.yml
فایل با ویرایشگر متن ما باید آن را تغییر دهیمbind
روش ازunix socket
بهtcp
:
bind_addr: 0.0.0.0
listen_port: 8000
3. ویژگیهای پیکربندی آشکارساز، ویژگیهای پیشفرض در ظرف را لغو میکنند. به این ترتیب، موتور SafeLine در پورت 8000 گوش می دهد.
- فقط باید پورت 8000 کانتینر را به هاست نقشه برداری کنیم. ابتدا به فهرست نصب SafeLine بروید:
cd /data/safeline
- بعد، را باز کنید
compose.yaml
فایل در دایرکتوری با یک ویرایشگر متن. را اضافه کنیدports
میدان بهdetector
کانتینری برای نمایش پورت 8000. به این صورت:
......
detect:
......
ports:
- 8000:8000
......
- خوب، SafeLine را با اجرای دستورات زیر راه اندازی مجدد کنید:
docker compose down
docker compose up -d
تنظیمات SafeLine را آماده کنید
1. از یک ConfigMap برای پیکربندی افزونه SafeLine با میزبان و پورت موتور تشخیص لازم استفاده کنید:
cat
2. SafeLine ConfigMap را ایجاد کنید:
kubectl create namespace ingress-nginx
kubectl apply -f safeline.yaml
Helm را نصب کنید
دستورالعمل های موجود در مستندات Helm را دنبال کنید.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Ingress-nginx را نصب کنید
1. Ingress-nginx را با استفاده از Helm نصب کنید
- برای جایگزینی تصویر و پیکربندی افزونه از فایل ingress-nginx-values.yaml زیر استفاده کنید:
cat
- دستور نصب را اجرا کنید
helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace -f ingress-nginx-values.yaml
2. تست پلاگین SafeLine
- سرویس nginx را با استفاده از موارد زیر مستقر کنید
safeline-test.yaml
فایل:
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
- دستور Deployment را اجرا کنید
kubectl create -f safeline-test.yaml
- برای آزمایش اینکه آیا افزونه SafeLine کار می کند، یک درخواست مخرب ایجاد کنید. (رزولوشن DNS محلی را تنظیم کنید، سپس اجرا کنید)
curl http://www.safeline-test.org/ -H "Host: example.com" -H "User-Agent: () { :; }; echo; echo; /bin/bash -c 'echo hello'"
- شما باید a را ببینید
403 Forbidden
پاسخ، نشان می دهد که افزونه SafeLine فعال است.
{
"code": 403,
"success": false,
"message": "blocked by Chaitin SafeLine Web Application Firewall",
"event_id": "009efd8d2bf44a07b5cb7ed4cf18fb84"
}
در کنسول SafeLine، می توانید اطلاعات دقیق حمله ثبت شده توسط SafeLine را مشاهده کنید.
تست خودکار نتایج حفاظت
استفاده کنید 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]
Total samples: 33677 Success: 33677 Errors: 0
Detection rate: 83.87% (Total malicious samples: 558, Correctly blocked: 468, Missed: 90)
False positive rate: 0.07% (Total benign samples: 33119, Correctly allowed: 33096, False positives: 23)
Accuracy: 99.66% (Correctly blocked + Correctly allowed) / Total samples
Average response time: 8.47 ms
برای رویدادهای حمله دقیق، کنسول SafeLine را بررسی کنید.
وب سایت: https://waf.chaitin.com
GitHub: https://github.com/chaitin/SafeLine