برنامه نویسی

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا