Apache APISIX يتكامل مع open-appsec WAF

Christopher Lutat

Christopher Lutat

October 21, 2024

Ecosystem

مقدمة

يسر open-appsec WAF أن تعلن عن تكامل جديد مع بوابة API مفتوحة المصدر Apache APISIX.

يسمح هذا التعاون الجديد بين فريقَي open-appsec وAPI7 للمستخدمين بحماية واجهات برمجة التطبيقات (APIs) الخاصة بهم والخدمات الأخرى المعروضة عبر Apache APISIX ضد أنواع الهجمات المعروفة والمجهولة بشكل فعال، وذلك باستخدام تقنية open-appsec المتقدمة القائمة على التعلم الآلي. كما يضيف هذا التكامل عدة قدرات أمان محسّنة.

حول Apache APISIX

Apache APISIX هو حل حديث ومرن وعالي الأداء لبوابة API مفتوحة المصدر، مصمم للتعامل مع حالات استخدام متنوعة في بنى المايكروسيرفيس والبنى السحابية. هدفه الرئيسي هو تسهيل إدارة APIs من خلال العمل كبوابة لإدارة وتأمين وتحسين حركة المرور بين العملاء والخدمات الخلفية.

تشمل حالات الاستخدام الأخرى لـ APISIX كبوابة API موازنة الحمل، والحد من المعدل، والمصادقة، والتفويض. يوفر ميزات شاملة مثل التحكم في حركة المرور، والتحكم الديناميكي في الخدمات الخلفية، وإمكانية توسيع الوظائف عبر الإضافات، مما يسمح للمطورين بتخصيص وتوسيع الوظائف وفقًا لاحتياجاتهم الخاصة.

حول open-appsec WAF

open-appsec WAF يوفر حماية تلقائية واستباقية من التهديدات ويتكامل مع أنواع مختلفة من الخوادم العكسية مثل NGINX وكذلك بوابات API مثل APISIX. يعتمد على التعلم الآلي، مما يعني أنه لا يحتاج إلى توقيعات (أو تحديثات) على الإطلاق. هذا يسمح له بتوفير حماية تلقائية ومتقدمة حتى ضد الهجمات الصفرية الحقيقية، مع تقليل الجهد الإداري وكمية الإنذارات الكاذبة بشكل كبير.

بالإضافة إلى ذلك، يوفر open-appsec العديد من طبقات الأمان الإضافية مثل AntiBot، والحد من المعدل، وإنفاذ المخططات، ودعم توقيعات snort، والقواعد/الاستثناءات المخصصة، والمزيد. يمكن إدارة open-appsec بشكل مركزي باستخدام واجهة ويب مقدمة كخدمة SaaS، وأيضًا محليًا باستخدام ملف تكوين تصريحي.

تكامل Apache APISIX مع open-appsec

مع هذا التكامل الجديد، سيتمكن مستخدمو APISIX الآن من الوصول إلى open-appsec WAF كحل متكامل ومتقدم قائم على التعلم الآلي لحماية واجهات برمجة التطبيقات والتطبيقات الويب الخاصة بهم.

يمكنهم الآن استخدام الإصدار المجاني والمفتوح المصدر "Community Edition" من open-appsec للحصول على حماية فعالة قائمة على الذكاء الاصطناعي ضد الهجمات المعروفة والمجهولة لكل ما يتم عرضه عبر بوابة APISIX، مع تقليل كمية الإنذارات الكاذبة بشكل كبير وتخفيف العبء عن المسؤول من المهام المملة مثل إنشاء الاستثناءات وتحديث السياسات القائمة على التوقيعات التقليدية والمزيد.

سيكون هذا التكامل متاحًا لجميع المنصات الشائعة: Linux، Docker، وKubernetes.

Linux

للنشر المدمج على Linux لـ APISIX، سيقوم مثبت open-appsec بإضافة وحدة "open-appsec attachment" إلى تثبيت APISIX الحالي، كما سيتم تثبيت "open-appsec agent" بجانبه، والذي سيتلقى حركة المرور من الوحدة المرفقة، ويفحصها، ويعيد القرار النهائي لحظر أو السماح بحركة المرور إلى APISIX أو الوحدة المرفقة المتكاملة معها.

إليك مخطط بسيط لنشر Linux.

مخطط لنشر Linux

Docker

للنشر القائم على Docker لـ APISIX مع open-appsec WAF، هناك صورة حاوية خاصة لـ APISIX متاحة، والتي تمت إضافة وحدة open-appsec attachment إليها بالفعل، بالإضافة إلى ملف docker-compose محسّن، والذي يقوم بنشر كل من حاوية بوابة APISIX وكذلك وكيل open-appsec الذي يقوم بفحص الأمان ويعيد القرارات النهائية إلى بوابة APISIX للسماح أو حظر حركة المرور.

إليك مخطط بسيط للنشر على Docker.

مخطط للنشر القائم على Docker

Kubernetes

للنشر القائم على Kubernetes لـ APISIX المتكامل مع open-appsec، هناك مخطط Helm متاح، والذي يعتمد على مخطط Helm الرسمي لـ APISIX وتم تحسينه ليشمل أيضًا وحدة open-appsec attachment في حاوية بوابة APISIX، كما يقوم بنشر وكيل open-appsec. بالإضافة إلى ذلك، ستكون لديك خيار تكوين open-appsec بطريقة تصريحية "DevOps-style" باستخدام موارد مخصصة في K8s كبديل لاستخدام واجهة الويب المركزية لإدارة open-appsec.

إليك مخطط بسيط للنشر على Kubernetes.

مخطط لنشر Kubernetes

إضافة open-appsec WAF إلى APISIX على Linux

لتثبيت open-appsec على نظام Linux مع تثبيت APISIX، يرجى اتباع الخطوات التالية:

1. المتطلبات الأساسية

  • يجب أن تكون المنصة Linux Ubuntu 22.04.
  • تأكد من تثبيت APISIX.

يمكنك العثور على قائمة إصدارات APISIX المدعومة هنا: https://downloads.openappsec.io/packages/supported-apisix.txt.

إذا لم يكن لديك APISIX مثبتًا بعد، يمكنك استخدام الأوامر التالية لإجراء تثبيت APISIX في "الوضع التقليدي". من خلال تشغيل هذه الأوامر، ستقوم أولاً بتثبيت قاعدة بيانات etcd لـ APISIX، ثم إضافة المستودعات المطلوبة قبل تثبيت وتشغيل APISIX.

تثبيت قاعدة بيانات etcd

ETCD_VERSION='3.5.4'
wget https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz
tar -xvf etcd-v${ETCD_VERSION}-linux-amd64.tar.gz && cd etcd-v${ETCD_VERSION}-linux-amd64
cp -a etcd etcdctl /usr/bin/
nohup etcd >/tmp/etcd.log 2>&1 &
etcd

إضافة وتحديث مستودعات الحزم

apt install gnupg
echo "deb http://openresty.org/package/debian bullseye openresty" | tee /etc/apt/sources.list.d/openresty.list
wget -O - https://openresty.org/package/pubkey.gpg | apt-key add -
wget -O - http://repos.apiseven.com/pubkey.gpg | apt-key add -
echo "deb http://repos.apiseven.com/packages/debian bullseye main" | tee /etc/apt/sources.list.d/apisix.list
apt update

تثبيت وتهيئة وتشغيل APISIX

apt install apisix=3.9.1-0
apisix init
apisix start

2. تنزيل مثبت open-appsec

wget https://downloads.openappsec.io/open-appsec-install && chmod +x open-appsec-install

3. تثبيت open-appsec

قم بتثبيت open-appsec للتكامل مع تثبيت APISIX الحالي.

لاحظ أن العلم --prevent سيؤدي إلى تثبيت open-appsec مع سياسة افتراضية مضبوطة على وضع "منع".

./open-appsec-install --auto --prevent

4. الحصول على مفتاح إدارة APISIX وتخزينه

احصل على مفتاح إدارة APISIX من ملف التكوين config.yaml لـ APISIX وقم بتخزينه في متغير البيئة APISIX_KEY.

export APISIX_KEY=$(awk '/key:/{ if ($2 ~ /^edd1/) print $2 }' /usr/local/apisix/conf/config.yaml )

5. تكوين مسار لعرض الخدمات

قم بتكوين مسار مثال في بوابة APISIX لعرض خدمة ويب خارجية أو واجهة برمجة تطبيقات. في هذا المثال، نستخدم httpbin.org كخدمة خلفية.

curl http://127.0.0.1:9180/apisix/admin/routes/100 -H "X-API-KEY:$APISIX_KEY" -X PUT -d '{
    "methods": [
      "GET"
    ],
    "uri": "/anything",
    "upstream": {
      "type": "roundrobin",
      "nodes": {
        "httpbin.org:80": 1
      }
    }
  }'

6. التحقق

لنرى إذا كان هذا المسار يعمل من خلال الوصول إليه.

curl -s -v -G --data-urlencode email=user@domain.abc http://localhost:9080/anything

7. محاكاة هجوم حقن SQL

الآن دعونا نحاول محاكاة هجوم حقن SQL (انظر 'OR '1'='1' في طلب HTTP أدناه) ضد خدمة httpbin.org المعروضة عبر بوابة APISIX المحمية الآن بواسطة open-appsec WAF.

curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://localhost:9080/anything

تم حظر هذا الهجوم المحاكى بنجاح بواسطة محرك WAF القائم على التعلم الآلي في open-appsec.

8. مراجعة ملفات السجلات

تحقق من ملفات السجلات المقابلة التي تظهر "منع" لطلب HTTP مع الهجوم المحاكى الذي أرسلناه للتو.

tail -f /var/log/nano_agent/cp-nano-http-transaction-handler.log*| grep -i user@domain.abc

بدلاً من ذلك، يمكنك استخدام أداة open-appsec-ctl:

open-appsec-ctl --view-logs | grep -i user@domain.abc

9. الاتصال بـ open-appsec للإدارة المركزية (اختياري)

يمكنك اختياريًا توصيل نشرك الآن بـ https://my.openappsec.io لإدارة open-appsec بشكل مركزي باستخدام واجهة ويب سهلة الاستخدام، ومراقبة أحداث الأمان، والمزيد. راجع قسم كيفية إدارة نشر open-appsec WAF بشكل مركزي؟ أدناه للحصول على مزيد من المعلومات.

تهانينا! لقد نجحت في إضافة open-appsec WAF إلى تثبيت APISIX الحالي الخاص بك وتحقق من أن خدمات الويب المعروضة عبر بوابة APISIX محمية الآن ضد هجمات الويب.

نشر APISIX مع open-appsec WAF على المنصات المعتمدة على الحاويات (Docker)

لتثبيت APISIX المتكامل مع open-appsec على Docker، يمكنك اتباع الخطوات الموضحة أدناه.

على عكس المثال السابق، هنا نقوم بنشر APISIX في "الوضع المستقل"، مما يعني أنه يتم تكوينه تصريحيًا باستخدام نقطة تركيب حجم docker مع ملف yaml يحوي التكوينات، وبالتالي لن يتطلب نشر قاعدة بيانات etcd.

لاحظ أن APISIX يدعم كلاً من الوضع التقليدي والمستقل في جميع أنواع النشر (Linux، Docker، …)

1. المتطلبات الأساسية

تأكد من وجود منصة Linux مع تثبيت أدوات Docker و docker-compose.

2. إنشاء مجلد لـ open-appsec

ضمن الدليل الذي تريد استخدامه للنشر، قم بإنشاء مجلد appsec-localconfig والذي سيحمل ملف التكوين التصريحي لـ open-appsec:

mkdir ./appsec-localconfig

3. تنزيل ملف open-appsec في المجلد

قم بتنزيل ملف التكوين التصريحي الأولي لـ open-appsec في هذا المجلد.

wget https://raw.githubusercontent.com/openappsec/openappsec/main/config/linux/latest/prevent/local_policy.yaml -O appsec-localconfig/local_policy.yaml

لاحظ أن ملف التكوين التصريحي هذا مضبوط بالفعل على منع الهجمات.

4. إنشاء مجلد لـ APISIX

قم بإنشاء مجلد آخر apisix-localconfig والذي سيحمل ملف التكوين التصريحي لـ APISIX: mkdir ./apisix-localconfig.

5. تنزيل ملف APISIX في المجلد

لنقم بتنزيل ملف تكوين تصريحي بسيط أيضًا لـ APISIX حتى نتمكن من التحقق من حماية open-appsec بعد النشر.

wget https://raw.githubusercontent.com/openappsec/openappsec/main/deployment/apisix/apisix-example-config/apisix-standalone.yaml -O ./apisix-localconfig/apisix-standalone.yaml

6. إنشاء ملف docker-compose.yaml

قم بإنشاء ملف docker-compose.yaml بالمحتوى أدناه، والذي يمكن تنزيله كما يلي:

wget https://raw.githubusercontent.com/openappsec/openappsec/main/deployment/apisix/docker-compose.yaml
version: "3"

services:
  apisix:
    container_name: apisix
    image: "ghcr.io/openappsec/apisix-attachment:latest"
    ipc: service:appsec-agent
    restart: always
    volumes:
      - ./apisix-localconfig/apisix-standalone.yaml:/usr/local/apisix/conf/apisix.yaml:ro
    environment:
      - APISIX_STAND_ALONE=true
    ports:
      - "9180:9180/tcp"
      - "9080:9080/tcp"
      - "9091:9091/tcp"
      - "9443:9443/tcp"

  appsec-agent:
    container_name: appsec-agent
    image: 'ghcr.io/openappsec/agent:latest'
    ipc: shareable
    restart: unless-stopped
    environment:
      # اضف بريدك الإلكتروني أدناه
      - user_email=user@email.com
      - registered_server="APISIX Server"
    volumes:
      - ./appsec-config:/etc/cp/conf
      - ./appsec-data:/etc/cp/data
      - ./appsec-logs:/var/log/nano_agent
      - ./appsec-localconfig:/ext/appsec
    command: /cp-nano-agent

7. تحديث عنوان بريدك الإلكتروني (اختياري)

قم بتحرير ملف docker-compose.yaml واستبدل "user@email.com" بعنوان بريدك الإلكتروني الخاص، حتى نتمكن من تقديم المساعدة في حالة وجود أي مشاكل مع النشر المحدد في المستقبل وتقديم معلومات بشكل استباقي حول open-appsec.

هذه معلمة اختيارية ويمكن إزالتها. إذا قمنا بإرسال رسائل بريد إلكتروني تلقائية، فسيتم أيضًا تضمين خيار إلغاء الاشتراك لتلقي اتصالات مماثلة في المستقبل.

8. تشغيل جميع الحاويات

قم بتشغيل docker-compose up لبدء نشر جميع الحاويات ذات الصلة:

docker-compose up -d

9. التحقق من حالة الحاويات

تحقق مما إذا كانت حاويات apisix-attachment و appsec-agent تعمل.

docker ps

10. التحقق من التكوين المستقل

لنرى إذا كان التكوين المستقل يعمل من خلال الوصول إليه.

curl -s -v -G --data-urlencode email=user@domain.abc http://localhost:9080/anything

11. محاكاة هجوم حقن SQL

الآن دعونا نحاول محاكاة هجوم حقن SQL ضد خدمة httpin.org المعروضة عبر حاوية بوابة APISIX المحمية الآن بواسطة open-appsec.

curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://localhost:9080/anything

12. الاتصال بـ open-appsec للإدارة المركزية (اختياري)

يمكنك اختياريًا توصيل نشرك الآن بـ https://my.openappsec.io لإدارة open-appsec بشكل مركزي باستخدام واجهة ويب سهلة الاستخدام، ومراقبة أحداث الأمان، والمزيد. راجع قسم كيفية إدارة نشر open-appsec WAF بشكل مركزي؟ أدناه للحصول على مزيد من المعلومات.

نشر APISIX مع open-appsec WAF على Kubernetes باستخدام Helm

1. المتطلبات الأساسية

تأكد من توفر منصة Kubernetes وأداة Helm.

2. تنزيل open-appsec

قم بتنزيل open-appsec لمخطط Helm لـ APISIX هنا.

wget https://downloads.openappsec.io/packages/helm-charts/apisix/open-appsec-k8s-apisix-latest.tgz

3. تثبيت مخطط Helm

هذا الأمر helm install المثال يقوم بتثبيت open-appsec لمخطط Helm لـ APISIX والذي يعتمد على نسخة موسعة من مخطط Helm الرسمي لـ APISIX.

سيقوم بنشر بوابة APISIX كـ APISIX Ingress Controller، بالإضافة إلى open-appsec WAF المتكامل معها. كما يوفر خيار تكوين إضافي خاص بـ open-appsec WAF (انظر values.yaml داخل مخطط Helm ووثائق open-appsec docs).

بعد النشر، يمكنك تعيين موارد K8s ingress الخاصة بك إلى بوابة APISIX عن طريق تكوينها لاستخدام فئة ingress التالية: appsec-apisix.

helm install open-appsec-k8s-apisix-latest.tgz \
--name-template=appsec-apisix \
--set rbac.create=true \
--set appsec.mode=standalone \
--set service.type=LoadBalancer \
--set appsec.persistence.enabled=false \
--set ingress-controller.enabled=true \
--set ingress-controller.config.ingressClass=appsec-apisix \
--set appsec.userEmail=<your-email-address>\
--set appsec.agentToken= \
--create-namespace \
-n appsec-apisix

استبدل في أمر تثبيت Helm أعلاه بعنوان بريدك الإلكتروني الخاص، حتى نتمكن من إرسال أخبار وتحديثات متعلقة بـ open-appsec ودعمك بشكل أفضل مع نشرك إذا لزم الأمر! يمكنك إلغاء الاشتراك في أي وقت أو ببساطة إزالة هذا السطر إذا كنت تفضل عدم تقديم بريدك الإلكتروني.

4. التحقق

تحقق من أن الحاويات تم نشرها بشكل صحيح وهي في حالة جاهزة:

kubectl get pods -n appsec-apisix

5. إنشاء مورد سياسة open-appsec

قم بتشغيل الأمر التالي لإنشاء "open-appsec-best-practice-policy" في K8s.

لاحظ أن هذه السياسة المثال مضبوطة مسبقًا على منع الهجمات.

kubectl apply -f https://raw.githubusercontent.com/openappsec/openappsec/main/config/k8s/v1beta1/open-appsec-k8s-prevent-config-v1beta1.yaml

يمكنك أيضًا إنشاء سياسة مخصصة خاصة بك، هنا تجد كل التفاصيل.

6. جلب اسم المورد المستهدف

اكتشف اسم مورد ingress ذي الصلة الذي تريد حمايته:

kubectl get ing -A

7. تحرير مورد ingress

kubectl edit ing/<ingress name> -n <ingress namespace>

8. تغيير ingressClassname

قم بتغيير ingressClassname لاستخدام open-appsec:

spec: ingressClassName: appsec-apisix

9. إضافة تعليق إلى مورد ingress

أضف هذا التعليق إلى مورد ingress لتفعيل open-appsec لهذا ingress عن طريق تحديد مورد سياسة open-appsec المطلوب.

openappsec.io/policy: open-appsec-best-practice-policy

10. التحقق من التكوين المستقل

لنرى إذا كان التكوين المستقل يعمل من خلال الوصول إليه:

curl -s -v -G --data-urlencode email=user@domain.abc http://[YOUR-INGRESS-HOSTNAME]

11. محاكاة هجوم حقن SQL

الآن دعونا نحاول محاكاة هجوم حقن SQL ضد خدمة httpin.org المعروضة عبر حاوية بوابة APISIX المحمية الآن بواسطة open-appsec.

curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://[YOUR-INGRESS-HOSTNAME]

استبدل [YOUR-INGRESS-HOSTNAME] في الأمر أعلاه باسم المضيف الذي قمت بتعيينه في مورد ingress الذي قمت بحمايته باستخدام open-appsec WAF في الخطوات السابقة، وغير "http" إلى "https" إذا لزم الأمر.

تهانينا! لقد نجحت في نشر APISIX المتكامل مع open-appsec WAF وتحقق من أن خدمات الويب المعروضة عبر بوابة APISIX محمية الآن ضد الهجمات.

كيفية إدارة نشر open-appsec WAF بشكل مركزي؟

إذا كنت ترغب، يمكنك أيضًا إدارة نشر open-appsec WAF (المتكامل مع APISIX) بشكل مركزي باستخدام واجهة الويب الخاصة بـ open-appsec (خدمة SaaS) المتاحة على https://my.openappsec.io، عن طريق توصيل وكيل open-appsec بملف تعريف نشر في واجهة الويب المركزية.

يمكنك أيضًا الاستمرار في إدارة نشرك محليًا ولكن مع الاتصال بملف تعريف واجهة الويب المركزية في "الوضع التصريحي" بحيث يمكنك رؤية التكوين المحلي (للقراءة فقط) في واجهة الويب.

إلى جانب تكوين open-appsec، تسمح لك واجهة الويب برؤية المزيد من المعلومات مثل حالة وكلاء open-appsec المنشورين، وسجلات الأمان، ولوحات التحكم، والمزيد.

للحصول على تعليمات حول كيفية توصيل نشرك بواجهة الويب المركزية، راجع وثائق open-appsec المتاحة على https://docs.openappsec.io.

أدناه ستجد بعض لقطات الشاشة لواجهة الويب.

واجهة open-websec 1

واجهة open-websec 2

ملخص

في هذه المدونة، شرحنا كيف يمكن لـ open-appsec التكامل مع Apache APISIX على جميع ما يلي: النشرات القائمة على Linux العادية، والنشرات المعتمدة على الحاويات (Docker)، وكذلك بيئات Kubernetes.

بعد اتباع خطوات النشر لـ APISIX مع open-appsec WAF، قمنا بمحاكاة هجمات حقن SQL، والتي تم منعها بشكل فعال بواسطة تقنية WAF القائمة على التعلم الآلي في open-appsec.

بالإضافة إلى ذلك، تم شرح فوائد الاتصال بواجهة الويب المركزية لـ open-appsec للإدارة، والمراقبة، وتحليل السجلات، وإعداد التقارير.

نأمل أن تكون هذه التكاملات الجديدة مفيدة جدًا لتعزيز أمان بوابة APISIX API والخدمات الويب المعروضة عبر واجهات برمجة التطبيقات والتطبيقات الويب باستخدام WAF القائم على التعلم الآلي من open-appsec.

نرحب بك للتواصل معنا إذا كان لديك أي ملاحظات، أو أسئلة، أو واجهت بعض التحديات الفنية التي تريد منا المساعدة فيها. يمكنك الوصول إلى فريق open-appsec عبر الدردشة على https://www.openappsec.io أو عبر البريد الإلكتروني إلى: info@openappsec.io.

موارد إضافية

open-appsec WAF

الموقع: https://www.openappsec.io

GitHub: https://github.com/openappsec

الوثائق: https://docs.openappsec.io

الملاعب: https://www.openappsec.io/playground

المدونات: https://www.openappsec.io/blogs

Apache APISIX

الموقع: https://apisix.apache.org

GitHub: https://github.com/apache/apisix

الوثائق: https://apisix.apache.org/docs/

المدونات: https://apisix.apache.org/blog/

Tags: