تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نگاهی عمیق به معماری Iptables و Netfilter


۱۸ فروردین ۱۴۰۴

فایروال‌ها ابزارهای مهمی هستند که می‌توان آن‌ها را برای محافظت از سرورها و زیرساخت‌های شما پیکربندی کرد. در اکوسیستم لینوکس، iptables یکی از فایروال‌های پرکاربرد است که با چارچوب فیلترگذاری بسته netfilter در هسته سیستم‌عامل کار می‌کند. ایجاد سیاست‌های امنیتی مطمئن برای فایروال می‌تواند چالش برانگیز باشد، زیرا این فرآیند شامل دستوراتی با ساختار پیچیده و اجزای متعددی است که به هم مرتبط هستند.

در این راهنما، به بررسی معماری iptables پرداخته شده است تا درک آن برای کاربرانی که قصد دارند سیاست‌های فایروال خود را تنظیم کنند آسان تر شود. در این مقاله نحوه تعامل iptables با netfilter بررسی شده و توضیح داده شده است که چگونه اجزای مختلف این سیستم کنار هم یک مکانیزم فیلتر گذاری جامع را فراهم می‌کنند.

در ادامه خواهید خواند:

  • IPTables و Netfilter چیست؟
  • هوک‌های Netfilter
  • جدول‌ها و زنجیره‌های IPTables
  • کدام جدول‌ها در دسترس هستند؟
  • روابط بین زنجیره‌ها و جدول‌ها
  • قوانین IPTables
  • پرش به زنجیره‌های تعریف‌شده توسط کاربر
  • IPTables و رهگیری اتصالات
  • جمع بندی

IPTables و Netfilter چیست؟

برای سال‌ها، iptables یکی از رایج‌ترین نرم‌افزار فایروال در لینوکس بود. در برخی از توزیع‌های لینوکسی، این ابزار با ابزار جدیدتری به نام netfilter جایگزین شده است. اما همچنان iptables به عنوان یک مبنا در ساخت قوانین فایروال مورد استفاده قرار می‌گیرد. این فایروال با هوک‌های فیلترگذاری بسته (packet filtering hooks) در پشته شبکه (networking stack) کرنل لینوکس تعامل دارد. این هوک‌های کرنل تحت عنوان چارچوب netfilter شناخته می‌شود.

هر بسته‌ای که از لایه شبکه عبور می‌کند (ورودی یا خروجی) این هوک‌ها را فعال می‌کند و به برنامه‌ها اجازه می‌دهد که در نقاط کلیدی با ترافیک شبکه تعامل داشته باشند. ماژول های کرنل مرتبط با iptables در این هوک‌ها ثبت شده و بررسی می‌کنند که آیا ترافیک عبوری با شریط تعیین شده در قوانین فایروال مطابقت دارد یا خیر.

Iptables و Netfilter

هوک‌های Netfilter

پنج هوک‌ netfilter وجود دارد که برنامه‌ها می‌توانند در آن‌ها ثبت شوند. هنگامی که بسته‌ها در پشته شبکه حرکت می‌کنند، ماژول‌های کرنل که در این هوک‌ها ثبت شده‌اند، فعال می‌شوند. هوک‌هایی که یک بسته فعال می‌کند، بستگی به این دارد که بسته ورودی یا خروجی باشد، مقصد آن کجاست و آیا در نقطه‌ای قبلی رد (dropped) یا رد شده (rejected) است یا خیر.

هوک‌های زیر، نقاط مشخص‌شده در پشته شبکه را نشان می‌دهند:

  • NF_IP_PRE_ROUTING: این هوک‌ برای هر ترافیک ورودی بلافاصله پس از ورود به پشته شبکه فعال می‌شود. پردازش این هوک‌ قبل از انجام هرگونه تصمیم‌گیری مسیریابی درباره مقصد بسته انجام می‌شود.
  • NF_IP_LOCAL_IN: این هوک‌ زمانی فعال می‌شود که یک بسته ورودی پس از مسیریابی مشخص شود که مقصد آن سیستم محلی است.
  • NF_IP_FORWARD: این هوک‌ زمانی فعال می‌شود که یک بسته ورودی پس از مسیریابی مشخص شود که باید به یک میزبان دیگر ارسال شود.
  • NF_IP_LOCAL_OUT: این هوک‌ برای هر ترافیک خروجی که به‌صورت محلی تولید شده است، بلافاصله پس از ورود به پشته شبکه فعال می‌شود.
  • NF_IP_POST_ROUTING: این هوک‌ برای هر ترافیک خروجی یا ترافیکی که قرار است ارسال شود، بعد از فرآیند مسیریابی و درست قبل از ارسال در شبکه فعال می‌شود.

ماژول‌های کرنل که نیاز دارند در این هوک‌ها ثبت شوند، باید یک عدد اولویت نیز ارائه دهند تا ترتیب اجرای آن‌ها در هنگام فعال شدن هوک‌ مشخص شود. این قابلیت باعث می‌شود که چندین ماژول مختلف (یا چندین نمونه از یک ماژول) بتوانند به یک هوک‌ متصل شوند و ترتیب پردازش آن‌ها به صورت مشخص و کنترل‌شده تعیین شود. هر ماژول پس از پردازش، یک تصمیم به چارچوب netfilter ارائه می‌دهد که مشخص می‌کند با بسته چه باید کرد.

جدول‌ها و زنجیره‌های IPTables

فایروال iptables از جداول برای سازمان‌دهی قوانین خود استفاده می‌کند. این جداول، قوانین را بر اساس نوع تصمیماتی که قرار است گرفته شود، طبقه‌بندی می‌کنند. به عنوان مثال، اگر یک قانون مربوط به ترجمه آدرس شبکه (NAT) باشد، در جدول nat قرار می‌گیرد. اگر قانونی تعیین کند که آیا یک بسته اجازه دارد به مقصد خود برسد یا نه، احتمالاً در جدول filter اضافه می‌شود.

در هر جدول iptables، قوانین به‌صورت جداگانه در زنجیره‌های مختلف (chains) سازمان‌دهی می‌شوند. در حالی که جداول بر اساس هدف کلی قوانین تعریف می‌شوند، زنجیره‌های داخلی به هوک‌های netfilter متصل هستند و مشخص می‌کنند که قوانین چه زمانی ارزیابی شوند.

نام‌های زنجیره‌های داخلی با نام هوک‌های netfilter که به آن‌ها مرتبط هستند، مطابقت دارند:

  • PREROUTING: فعال‌شده توسط هوک NF_IP_PRE_ROUTING
  • INPUT: فعال‌شده توسط هوک NF_IP_LOCAL_IN
  • FORWARD: فعال‌شده توسط هوک NF_IP_FORWARD
  • OUTPUT: فعال‌شده توسط هوک NF_IP_LOCAL_OUT
  • POSTROUTING: فعال‌شده توسط هوک NF_IP_POST_ROUTING

زنجیره‌ها به مدیر سیستم این امکان را می‌دهند که تعیین کند یک قانون در کدام بخش از مسیر پردازش بسته‌ها بررسی شود. از آنجا که هر جدول شامل چندین زنجیره است، می‌تواند در نقاط مختلفی از پردازش بسته‌ها تأثیر بگذارد. از آنجایی که برخی تصمیمات فقط در نقاط خاصی از پشته شبکه (network stack) منطقی هستند، هر جدول در تمام هوک‌های کرنل زنجیره‌ای ثبت نمی‌کند.

کرنل netfilter فقط پنج هوک دارد، بنابراین چندین جدول ممکن است زنجیره‌هایی را در یک هوک ثبت کنند. برای مثال، سه جدول دارای زنجیره PREROUTING هستند. هنگامی که این زنجیره‌ها در هوک NF_IP_PRE_ROUTING ثبت می‌شوند، اولویت آن‌ها مشخص می‌کند که ترتیب پردازش زنجیره‌های PREROUTING چگونه باشد. تمام قوانین موجود در زنجیره‌ای با بالاترین اولویت به‌ترتیب پردازش می‌شوند و سپس نوبت به زنجیره بعدی می‌رسد. در ادامه، ترتیب اجرای این زنجیره‌ها را بررسی خواهیم کرد.

کدام جدول‌ها در دسترس هستند؟

بیایید کمی عقب برویم و نگاهی به جداول مختلف iptables بیندازیم. این جداول، مجموعه‌ای مجزا از قوانین را ارئه می‌دهند که بر اساس حوزه عملکردشان سازمان‌دهی شده‌اند و برای ارزیابی بسته‌های شبکه به کار می‌روند.

جدول فیلتر (Filter Table)

جدول filter یکی از پرکاربردترین جداول در iptables است. این جدول برای تصمیم گیری دباره عبور یا مسدودسازی بسته‌ها استفاده می‌شود. در اصطلاحات فایروال، این فرآیند به عنوان فیلتر کردن بسته‌ها شناخته می‌شود. این جدول بخش اصلی عملکرد یک فایروال را ارائه می‌دهد و معمولا همان چیزی است که افراد هنگام بحث درباره فایروال‌ها به آن فکر می‌کنند.

جدول NAT

جدول nat برای پیاده سازی قوانین ترجمه آدرس شبکه استفاده می‌شود. زمانی که بسته‌‌ها وارد استک شبکه می‌شوند، قوانین این جدول تعیین می‌کنند که آیا آدرس مبدا یا مقصد بسته باید تغییر کند یا خیر. این تغییرات می‌توانند مسیر بسته و ترافیک پاسخ آن را تحت تاثیر قرار دهند. از جدول NAT اغلب برای هدایت بسته‌ها به شبکه‌هایی که در دسترسی مستقیم به آن‌ها امکان‌پذیر نیست استفاده می‌شود.

جدول Mangle

جدول mangle برای تغییر هدرهای IP بسته‌ها به روش‌های مختلف به کار می‌رود. برای مثال، می‌توان مقدار TTL (زمان حیات بسته) را تغییر داد، به این صورت که تعداد پرش‌های مجاز بسته در شبکه افزایش یا کاهش یابد. همچنین، سایر هدرهای IP نیز می‌توانند به روش‌های مشابه اصلاح شوند.

این جدول همچنین می‌تواند یک “علامت داخلی کرنل” روی بسته قرار دهد تا در جداول دیگر یا ابزارهای شبکه‌ای برای پردازش بیشتر استفاده شود. این علامت تغییری در خود بسته ایجاد نمی‌کند، بلکه فقط در نمایش کرنل از بسته ثبت می‌شود.

جدول Raw

فایروال iptables یک فایروال حالت‌مند (stateful) است، به این معنی که بسته‌ها را بر اساس ارتباطشان با بسته‌های قبلی ارزیابی می‌کند. ویژگی‌های رهگیری اتصال (connection tracking) که بر پایه netfilter ساخته شده‌اند، به iptables این امکان را می‌دهند که بسته‌ها را به عنوان بخشی از یک ارتباط یا جلسه در نظر بگیرد، نه به عنوان یک جریان جداگانه از بسته‌های بی‌ارتباط. معمولاً منطق رهگیری اتصال خیلی زود پس از رسیدن بسته به رابط شبکه اعمال می‌شود.

جدول raw یک عملکرد بسیار محدود و مشخص دارد. تنها هدف آن فراهم کردن مکانیزمی برای علامت‌گذاری بسته‌ها به‌منظور خارج کردن آن‌ها از فرآیند رهگیری اتصال است.

جدول Security

جدول security برای تنظیم مارکرهای امنیتی SELinux روی بسته‌ها استفاده می‌شود. این مارکرها تعیین می‌کنند که SELinux یا سایر سیستم‌هایی که قابلیت تفسیر این مارکرها را دارند، چگونه بسته‌ها را پردازش کنند. این مارکرهای امنیتی می‌توانند روی هر بسته یا کل یک ارتباط اعمال شوند.

هوک‌های Netfilter

روابط بین زنجیره‌ها و جدول‌ها

اگر سه جدول دارای زنجیره PREROUTING باشند، به چه ترتیبی ارزیابی می‌شوند؟

جدول زیر زنجیره‌هایی را که در هر جدول iptables موجود هستند نشان می‌دهد. این جدول را از چپ به راست که بخوانیم، مشخص می‌شود که کدام زنجیره‌ها در هر جدول وجود دارند. برای مثال، می‌توانیم ببینیم که جدول raw دارای زنجیره‌های PREROUTING و OUTPUT است. اگر از بالا به پایین خوانده شود، ترتیب پردازش زنجیره‌ها را زمانی که هوک netfilter مربوطه فعال می‌شود، نمایش می‌دهد.

چند نکته قابل توجه است. در نمایش زیر، جدول nat برای وضوح بیشتر به دو بخش تقسیم شده است:

  • DNAT (تغییر آدرس مقصد بسته)
  • SNAT (تغییر آدرس مبدأ بسته)

همچنین، ردیف‌هایی برای نقاطی که تصمیم‌گیری‌های مسیریابی انجام می‌شوند و ویژگی رهگیری اتصال فعال می‌شود، اضافه شده‌اند تا نمای کاملی از فرایندها ارائه شود.

جداول ↓ / زنجیره‌ها →PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
(تصمیم‌گیری مسیریابی)
raw
(رهگیری اتصال فعال می‌شود)
mangle
nat (DNAT)
(تصمیم‌گیری مسیریابی)
filter
security
nat (SNAT)

هنگامی که یک بسته هوک netfilter را فعال می‌کند، زنجیره‌های مرتبط به ترتیب از بالا به پایین پردازش می‌شوند.

هوک‌هایی که یک بسته فعال می‌کند، به موارد زیر بستگی دارد.

  • بسته ورودی یا خروجی باشد
  • تصمیمات مسیریابی
  • اینکه بسته از فیلترهای مشخص شده عبور کند یا نه

در برخی شرایط، یک زنجیره از یک جدول در طول پردازش نادیده گرفته می‌شود. برای مثال، فقط اولین بسته در یک اتصال با قوانین NAT بررسی می‌شود. تصمیمات NAT گرفته‌شده برای اولین بسته به تمام بسته‌های بعدی در همان اتصال اعمال می‌شود و دیگر نیازی به ارزیابی مجدد نیست.

پاسخ‌های مربوط به اتصال NAT شده به طور خودکار قوانین معکوس NAT را اعمال می‌کنند تا مسیر بسته‌ها به درستی تنظیم شود.

ترتیب عبور از زنجیره‌ها

اگر سرور بداند که چگونه یک بسته را مسیریابی کند و قوانین فایروال نیز اجازه عبور بسته را بدهند، مسیرهای زیر بسته به شرایط مختلف طی خواهند شد:

  • بسته‌های ورودی که مقصدشان خود سرور است: PREROUTING -> INPUT
  • بسته‌های ورودی که باید به یک میزبان دیگر هدایت شوند: PREROUTING -> FORWARD -> POSTROUTING
  • بسته‌هایی که در خود سرور ایجاد شده‌اند: OUTPUT -> POSTROUTING

با ترکیب اطلاعات بالا و ترتیب پردازش ارائه‌شده در جدول قبل، می‌توان نتیجه گرفت:

یک بسته ورودی که مقصد آن سیستم محلی است، ابتدا در زنجیره‌های PREROUTING از جداول rawmangle, nat بررسی می‌شود. سپس، در زنجیره‌های INPUT از جداول  manglefiltersecurity و nat پردازش شده و در نهایت به سوکت محلی تحویل داده می‌شود.

قوانین IPTables

قوانین در یک زنجیره خاص از یک جدول خاص قرار می‌گیرند. زمانی که هر زنجیره فراخوانی می‌شود، بسته موردنظر به‌ترتیب با هر قانون در زنجیره بررسی می‌شود. هر قانون شامل دو بخش است.

  • بخش تطبیق (Matching)
  • بخش اقدام (Action یا Target)

تطبیق (Matching)

بخش تطبیق در یک قانون، معیارهایی را مشخص می‌کند که یک بسته باید داشته باشد تا اقدام مرتبط (یا همان Target) اجرا شود.

سیستم تطبیق در iptables بسیار انعطاف‌پذیر است و می‌توان آن را با افزونه‌های iptables به میزان زیادی گسترش داد. قوانین را می‌توان بر اساس نوع پروتکل، آدرس مقصد یا مبدأ، پورت مقصد یا مبدأ، شبکه مقصد یا مبدأ، رابط ورودی یا خروجی، هدرها، وضعیت اتصال و بسیاری معیارهای دیگر ایجاد کرد. این معیارها را می‌توان ترکیب کرد تا مجموعه قوانینی پیچیده برای تشخیص ترافیک‌های مختلف ایجاد شود.

اهداف (Targets)

هدف یا Target به اقدامی اشاره دارد که در صورت تطبیق بسته با معیارهای یک قانون، اجرا می‌شود.

اهداف به دو دسته کلی تقسیم می‌شوند:

  • اهداف خاتمه‌دهنده (Terminating Targets):
    این نوع اهداف یک اقدام انجام می‌دهند که ارزیابی بسته را در زنجیره متوقف می‌کند و کنترل را به netfilter hook بازمی‌گردانند. بسته به مقدار بازگشتی، ممکن است بسته حذف شود یا اجازه ادامه پردازش داده شود.
  • اهداف غیرخاتمه‌دهنده (Non-Terminating Targets):
    این اهداف یک اقدام را انجام می‌دهند اما بررسی بسته در زنجیره ادامه پیدا می‌کند.
    هر زنجیره باید در نهایت یک تصمیم خاتمه‌دهنده برای بسته بگیرد، اما هر تعداد هدف غیرخاتمه‌دهنده می‌تواند پیش از آن اجرا شود.

محدودیت‌ها و شرایط استفاده از اهداف

در دسترس بودن اهداف مختلف به عوامل زیر بستگی دارد:

  • جدول و نوع زنجیره ممکن است تعیین کند که کدام اهداف قابل استفاده هستند.
  • افزونه‌های فعال‌شده در قانون نیز می‌توانند در امکان‌پذیری استفاده از اهداف مختلف تأثیر بگذارند.
  • عبارات تطبیق (Matching Clauses) که در قانون مشخص شده‌اند، می‌توانند محدوده اهداف قابل انتخاب را تغییر دهند.

پرش به زنجیره‌های تعریف‌شده توسط کاربر

یک کلاس خاص از تارگت‌های غیر پایانی وجود دارد که به آن تارگت پرش گفته‌ می‌شود. تارگت‌های پرش، اقداماتی هستند که باعث می‌شوند به یک چین دیگر برای ارزیابی بیشتر منتقل شود.

قبلا به چین‌های داخلی اشاره شده است که به هوک‌های nerfilter متصل هستند و هنگام وقوع یک رویداد خاص، فعال می‌شوند. اما iptables به مدیران سیستم این امکان را می‌دهد که چین‌های مخصوص به خودشان را برای سازمان‌دهی بهتر ایجاد کنند.

قوانین را می‌توان در چین‌های تعریف‌شده توسط کاربر به همان روش قرار داد که چین‌های داخلی ثبت‌ می‌شوند. تفاوت اینجا است که این چین‌ها مستقیما توسط یک هوک netfilter فعال نمی‌شوند، بلکه تنها از طریق یک پرش از قوانین دیگر قابل دسترس هستند.

چین‌های تعریف شده توسط کاربر به عنوان امتداد چین فراخواننده عمل می‌کنند. به این معنا که اگر در این چین‌ها لیست قوانین تا انتها پردازش شود یا یک قانون دارای تارگت RETURN باشد، پردازش به چین فراخواننده بازمی‌گردد. همچنین، پردازش می‎‌‌‌تواند به چین‌های تعریف شده دیگر نیز پرش کند.

این قابلیت باعث سازمان‌دهی بهتر قوانین و فراهم کردن یک چارچوب انعطاف‌پذیرتر برای مدیریت مسیرهای مختلف پردازش بسته‌ها می‌شود.

IPTables و رهگیری اتصالات

در بخش‌های قبلی، سیستم پیگیری اتصال (Connection Tracking) را که بر روی فریمورک netfilter پیاده‌سازی شده است، هنگام بررسی جدول raw و معیارهای تطبیق وضعیت اتصال معرفی کردیم. سیستم پیگیری اتصال به iptables اجازه می‌دهد که بسته‌های شبکه را در بستر یک اتصال فعال بررسی کرده و بر اساس آن‌ها تصمیم‌گیری کند. این قابلیت، امکان اجرای عملیات Stateful را در iptables فراهم می‌کند.

پیگیری اتصال خیلی زود پس از ورود بسته‌ها به استک شبکه انجام می‌شود. تنها زنجیره‌های جدول raw و برخی بررسی‌های اولیه، قبل از ارتباط بسته‌ها با یک اتصال، پردازش می‌شوند.

سیستم هر بسته را با مجموعه‌ای از اتصالات موجود مقایسه می‌کند. در صورت لزوم، وضعیت اتصال را به‌روزرسانی کرده و در صورت نیاز، اتصال جدیدی را به سیستم اضافه می‌کند. بسته‌هایی که در یکی از زنجیره‌های جدول raw با هدف NOTRACK علامت‌گذاری شده باشند، از مراحل پیگیری اتصال عبور نمی‌کنند.

وضعیت‌های موجود در سیستم پیگیری اتصال

اتصالاتی که توسط سیستم پیگیری اتصال مدیریت می‌شوند، می‌توانند در یکی از وضعیت‌های زیر قرار بگیرند.

  • NEW: بسته‌ای که به یک اتصال موجود مرتبط نیست اما به‌عنوان اولین بسته معتبر تشخیص داده می‌شود، با این برچسب وارد سیستم می‌شود. این وضعیت هم برای پروتکل‌های ارتباط‌محور مانند TCP و هم برای پروتکل‌های بدون اتصال مانند UDP اعمال می‌شود.
  • ESTABLISHED: یک اتصال NEW زمانی به وضعیت ESTABLISHED تغییر می‌کند که یک پاسخ معتبر از سمت مقابل دریافت کند. برای TCP، این شامل دریافت SYN/ACK است و برای UDP و ICMP، زمانی اتفاق می‌افتد که یک پاسخ با جابجایی آدرس مبدأ و مقصد بسته اصلی دریافت شود.
  • RELATED: بسته‌هایی که بخشی از یک اتصال موجود نیستند اما به یک اتصال در سیستم مرتبط هستند، با برچسب RELATED مشخص می‌شوند. این می‌تواند شامل اتصالات کمکی مانند اتصال انتقال داده در FTP یا پاسخ‌های ICMP به درخواست‌های اتصال توسط پروتکل‌های دیگر باشد.
  • INVALID: اگر یک بسته با هیچ اتصال فعالی مرتبط نباشد و همچنین برای ایجاد اتصال جدید مناسب نباشد، نتوان آن را شناسایی کرد، یا قابل مسیریابی نباشد، با وضعیت INVALID علامت‌گذاری می‌شود.
  • UNTRACKED: اگر بسته‌ای در یکی از زنجیره‌های جدول raw به‌گونه‌ای تنظیم شده باشد که از پیگیری اتصال عبور کند، وضعیت آن UNTRACKED خواهد بود.
  • SNAT: این یک وضعیت مجازی است که زمانی اعمال می‌شود که آدرس مبدأ بسته توسط عملیات NAT تغییر کرده باشد. سیستم پیگیری اتصال از این وضعیت استفاده می‌کند تا هنگام ارسال پاسخ‌های مربوطه، آدرس مبدأ را بازنویسی کند.
  • DNAT: این نیز یک وضعیت مجازی است که زمانی اعمال می‌شود که آدرس مقصد بسته توسط عملیات NAT تغییر کرده باشد. سیستم پیگیری اتصال از این وضعیت استفاده می‌کند تا هنگام مسیریابی بسته‌های پاسخ، آدرس مقصد را اصلاح کند.

وضعیت‌های ذخیره‌شده در سیستم پیگیری اتصال به مدیران شبکه امکان می‌دهد که قوانینی را برای نقاط خاصی از چرخه عمر یک اتصال تعریف کنند. این ویژگی، توانایی موردنیاز برای ایجاد قوانین ایمن‌تر و دقیق‌تر را فراهم می‌کند.

قوانین IPTables

جمع بندی

فریمورک فیلتر بسته netfilter و فایروال iptables، پایه‌ی اصلی اکثر راهکارهای فایروال در سرورهای لینوکسی هستند. netfilter با قرارگیری در سطح پایین شبکه، امکان کنترل قدرتمند بسته‌های داده را فراهم می‌کند و iptables از این قابلیت‌ها برای اعمال سیاست‌های امنیتی به هسته‌ی سیستم‌عامل استفاده می‌کند. با درک نحوه‌ی ارتباط این اجزا، می‌توانید امنیت سرورهای خود را بهتر مدیریت کنید.

برای آشنایی بیشتر با نحوه‌ی انتخاب سیاست‌های مؤثر iptables، می‌توانید این راهنما را مطالعه کنید. همچنین، این منابع به شما در پیاده‌سازی قوانین iptables کمک خواهند کرد.

به اشتراک بگذارید