Linux & Open Source

بخش‌بندی شبکه با اعتماد صفر در لینوکس: پیاده‌سازی اجرای سیاست مبتنی بر eBPF برای کوبرنِتس

مدل امنیتی محیطی سنتی منسوخ شده است. در معماری‌های بومی ابری (Cloud-Native) مدرن، اتکا به مرزهای شبکه برای عایق‌سازی بارهای کاری حساس دیگر کافی نیست. مهاجمانی که پایگاهی در داخل خوشه کسب می‌کنند، اغلب می‌توانند به‌صورت افقی در سراسر شبکه حرکت کنند. برای مقابله با این تهدید، ما می‌بایست از معماری اعتماد صفر (Zero-Trust) استفاده کنیم، جایی که هر بسته تا زمانی که صریحاً مجاز نباشد، به عنوان غیرقابل اعتماد در نظر گرفته می‌شود.

در لینوکس، فناوری فیلتر بسته‌های برکلی گسترش‌یافته هسته (eBPF) امنیت شبکه را متحول کرده است. با اجرای برنامه‌های ساندباکس‌شده مستقیماً در هسته، eBPF امکان اجرای سیاست با عملکرد بالا و سربار کم را بدون سوئیچ‌های زمینه‌ای (Context Switches) مرتبط با iptables سنتی یا پروکسی‌های فضای کاربر فراهم می‌کند. این پست وبلاگ بررسی می‌کند که چگونه از eBPF برای میکرو-بخش‌بندی (Micro-segmentation) دقیق در خوشه‌های کوبرنِتس استفاده کنیم.

چرا eBPF برای میکرو-بخش‌بندی؟

قوانین فایروال سنتی لینوکس، مانند آن‌هایی که توسط iptables مدیریت می‌شوند، از پیچیدگی جستجوی O(N) رنج می‌برند. با افزایش تعداد قوانین، عملکرد به‌طور قابل توجهی کاهش می‌یابد. با این حال، eBPF امکان جستجوی O(1) را با استفاده از نقشه‌های هش (Hash Maps) فراهم می‌کند. مهم‌تر از آن، برنامه‌های eBPF می‌توانند در سطح سوکت (قبل از شکل‌گیری کامل بسته) یا در سطح XDP (مسیر داده سریع) عمل کنند و دید و کنترلی را ارائه دهند که با netfilter به تنهایی غیرممکن است.

در زمینه کوبرنِتس، پروژه‌هایی مانند Cilium و Calico از eBPF برای ارائه شبکه مبتنی بر هویت استفاده کرده‌اند. به جای اتکا صرف به آدرس‌های IP که پویا و مدیریت دشواری دارند، eBPF به ما امکان می‌دهد متادیتا (هویت‌های امنیتی) را به بارهای کاری متصل کنیم. سپس سیاست‌ها بر اساس این هویت‌ها ارزیابی می‌شوند و اطمینان حاصل می‌شود که پاد "فرانت‌اند" فقط می‌تواند با پاد "بک‌اند" ارتباط برقرار کند، صرف‌نظر از آدرس‌های IP زیربنایی آن‌ها.

پیاده‌سازی سیاست‌ها با Cilium

Cilium استاندارد واقعیت (De facto standard) برای شبکه مبتنی بر eBPF در کوبرنِتس است. این ابزار یک API اعلانی برای تعریف سیاست‌های شبکه ارائه می‌دهد. بیایید یک مثال عملی از اجرای میکرو-بخش‌بندی بین دو استقرار (Deployment) را بررسی کنیم.

اول، یک Network Policy را در YAML تعریف می‌کنیم که ترافیک ورودی (Ingress) را به backend-service محدود می‌کند و فقط اجازه می‌دهد ترافیک از frontend-service عبور کند.

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: backend-restrict
  namespace: production
spec:
  endpointSelector:
    matchLabels:
      app: backend-service
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend-service
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP

وقتی این سیاست اعمال می‌شود، Cilium این قوانین را به نقشه‌های eBPF کامپایل می‌کند. برنامه eBPF متصل به لایه سوکت پادهای backend-service هویت مبدأ هر بسته ورودی را بررسی می‌کند. اگر هویت مبدأ با برچسب frontend-service مطابقت نداشته باشد، بسته به‌صورت خاموش حذف می‌شود. این اجرا در داخل هسته اتفاق می‌افتد و در مقایسه با پروکسی‌های L7 فضای کاربر، تأخیر ناچیزی ایجاد می‌کند.

تأیید اجرای سیاست

یکی از قدرتمندترین جنبه‌های سیستم‌های مبتنی بر eBPF، مشاهده‌پذیری (Observability) است. شما می‌توانید با بازرسی نقشه‌های eBPF یا استفاده از CLI سیلیوم برای دنبال کردن جریان‌های شبکه، تأیید کنید که سیاست‌ها در حال اجرا هستند.

cilium monitor --follow --related-to-endpoint production/backend-service

این دستور رویدادهای بلادرنگ را نشان می‌دهد که بسته‌ها پذیرفته یا رد شده‌اند. شما ورودی‌هایی را مشاهده خواهید کرد که نشان می‌دهند ترافیک از منابع غیرمجاز حذف می‌شود و تأیید می‌کند که سیاست اعتماد صفر فعال است. علاوه بر این، می‌توانید با استفاده از ابزارهایی مانند bpftool اجرای خود برنامه eBPF را ردیابی کنید تا مشکلات پیچیده سیاست را در سطح هسته عیب‌یابی کنید.

چالش‌ها و بهترین روش‌ها

اگرچه eBPF عملکرد برتری ارائه می‌دهد، اما پیاده‌سازی آن نیازمند در نظر گرفتن دقیق نسخه‌های هسته و سازگاری درایورها است. تمام ویژگی‌های هسته مورد نیاز برای عملکرد پیشرفته eBPF در توزیع‌های قدیمی‌تر در دسترس نیستند. توصیه می‌شود گره‌های کوبرنِتس را روی نسخه‌های هسته 4.19 یا بالاتر اجرا کنید، با 5.4+ به عنوان ایده‌آل برای برابری کامل ویژگی‌ها.

علاوه بر این، مدیریت برنامه‌های eBPF نیازمند مجموعه مهارت‌های جدیدی است. توسعه‌دهندگان باید چرخه‌های عمر نقشه‌ها، محدودیت‌های وریفایر و ایمنی حافظه را درک کنند. ابزارهایی مانند BCC و BPFtrace برای عیب‌یابی و درک رفتار این برنامه‌های هسته بی‌نظیر هستند. در نهایت، همیشه قبل از اجرای سیاست‌ها با حالت ممیزی (Audit Mode) شروع کنید تا اطمینان حاصل کنید که مسیرهای ارتباطی حیاتی را خراب نمی‌کنید.

نتیجه‌گیری

بخش‌بندی شبکه با اعتماد صفر دیگر فقط یک بهترین روش نظری نیست؛ بلکه یک الزام برای امنیت محیط‌های ابری مدرن است. با استفاده از eBPF در لینوکس، می‌توانیم میکرو-بخش‌بندی دقیق و مبتنی بر هویت را با سرعت سیم (Wire Speed) اجرا کنیم. ابزارهایی مانند Cilium این فناوری را برای کاربران کوبرنِتس در دسترس قرار می‌دهند و اطمینان امنیتی را فراهم می‌کنند که بارهای کاری ما به‌طور طراحی عایق هستند، نه فقط به‌طور پیش‌فرض.

با ادامه تکامل eBPF، می‌توان انتظار داشت که قابلیت‌های امنیتی پیچیده‌تری، از جمله آگاهی از L7 و یکپارچگی عمیق‌تر با فناوری‌های سرویس مش (Service Mesh)، ارائه شوند. برای توسعه‌دهندگان لینوکس و بومی ابری، تسلط بر eBPF به یک مهارت ضروری در مسیر حرکت به سمت زیرساخت امن و مقاوم تبدیل شده است.

Share: