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

زنجیرها و جداول iptables به همراه روند اجرا
زنجیرها و جداول iptables به همراه روند اجرا

(منبع عکس)

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

مفاهیمی که برای کار با iptables باید با آن آشنایی داشته باشید عبارتند از

  1. جدول یا Table
  2. زنجیر یا Chain
  3. قاعده یا Rule

جداول یا Tables

  • ابتدا به آشنایی با جداول موجود می‌پردازیم. این ابزار از ۵ جدول ساخته شده است که سه مورد آن از جمله جداول اصلی انگاشته می‌شوند. اولین آن‌ها جدول Filter است. قواعد این جدول بررسی می‌کند که آیا پکت دریافتی باید به مقصد مورد نظر برسد یا اینکه از ادامه آن جلوگیری شود.
  • جدول بعدی مربوط به NAT است. اگر با پروتکل NAT آشنایی داشته باشید، می‌دانید که این امکان را فراهم می‌کند تا چند دستگاه که IP قابل دسترس ندارند (به اصطلاح آدرس از بازه محلی دارند) از طریق یک درگاه که آن متصل به شبکه اینترنت است و IP قابل مسیریابی را در اختیار دارد با شبکه در ارتباط باشند. بیان کامل پروتکل NAT از حوصل این پست خارج است. این جدول برای انجام ترجمه و نگاشت لازم آدرس‌ها توسط پروتکل NAT استفاده می‌شود.
  • جدول بعدی Mangle نام دارد. این جدول قواعدی برای تغییر اطلاعات بخش هدر (header) مربوط به پروتکل IP را در خود جای می‌دهد. (منبع عکس ویکی‌پدیا)

دو جدول بعدی Raw و Security نام دارند. این دو از جدوال اصلی نیستند و در این پست به جزئیات آن‌ها پرداخته نمی‌شود.

زنجیر‌ها یا Chains

در iptables شما امکان این را دارید که در ۵ مرحله مختلف به اعمال قواعد بپردازید. این مراحل عبارتند از

  1. قبل از مسیریابی / Pre Routing
  2. ورودی / Input
  3. ارسال / Forward
  4. خروجی / Output
  5. بعد از مسیریابی / Pos Routing

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

  • زنجیر Pre Routing: بر روی تمام پکت‌های ورودی اعمال می‌شود. و این اتفاق قبل از اینکه تصمیمات مسیریابی صورت بگیرد اجرا می‌شود.
  • زنجیر Input: بعد از ورود پکت به سیستم این زنجیر اجرا می‌شود. این زنجیر بعد از Pre Routing است.
  • زنجیر Forward: برای پکت‌هایی که به سیستم ما آمده‌اند و ما می‌خواهیم آن را به آدرس ماشین دیگری ارسال کنیم (Foward کنیم).
  • زنجیر Output: برای پکت‌هایی که توسط ماشین شما ایجاد شده است و ارسال می‌شوند اجرا می‌شود.
  • زنجیر Post Routing: برای پکت‌هایی که قرار است بر روی درگاه خروج قرار بگیرند اجرا می‌شود. هم Output و هم Forward را در بر می‌گیرد و بعد از این دو زنجیر قرار دارد.

قواعد

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

  1. پذیرش / Accept: پکت را به سیستم راه می‌دهد.
  2. لغو / Drop: از ادامه پردازش پکت سر باز می‌زند و پکت حذف می‌شود.
  3. بازگشت / Return: ادامه فعالیت در این زنجیر متوقف می‌شود و قواعد دیگر برای این پکت بررسی می‌شوند

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

با تشکر از وقتی که صرف کردید.

جعبه جادویی


پی‌نوشت

برای اطلاعات بیشتر می‌توانید به این مرجع نگاه کیند.