آشنایی کامل با فایروال Iptables
Iptables and Netfilter Architecture
فایروال ها ابزار مهمی هستند که می توانند به منظور حفاظت از سرورها و زیرساخت ها پیکربندی شوند. در اکوسیستم لینوکس، ابزار iptables به عنوان فایروال به طور گسترده ای استفاده می شود که با چارچوب فیلترینگ بسته netfilter هسته (kernel) سیستم عامل در ارتباط است.
در این مقاله ما در مورد چگونگی استفاده از iptables و تعامل آن با netfilter و چگونگی ارتباط اجزای مختلف فیلترینگ و سیستم mangling در کنار یکدیگر صحبت خواهیم کرد.
Netfilter Hooks
5 قلاب یاhook برای netfilter تعریف شده است که برنامه میتواند با آن ها کار کند. هر پکتی که وارد فرایند پردازش میشود با یکی از hook ها در kernel قلاب (hook) میشود. بسته به نوع هر پکت input, output و یا forward قلابی به آن اختصاص داده میشود.
در ادامه قلاب هاییکه در پشته پروتکلی شبکه تعریف می شوند به اختصار بیان شده است:
- NF_IP_PRE_ROUTING
این قلاب توسط هر ترافیک ورودی بلافاصله پس از وارد شدن به پشته شبکه ایجاد خواهد شد. این قلاب قبل از هر تصمیم گیری مسیریابی در مورد ارسال بسته ساخته شده و پردازش می شود.
- NF_IP_LOCAL_IN
این قلاب بر روی بسته هایی اعمال می شود که مقصد نهایی آنها سیستم لوکال (local) است (Input).
- NF_IP_FORWARD
این قلاب بر روی بسته هایی اعمال می شود که مقصد نهایی آنها هاست دیگری می باشد (forward).
- NF_IP_LOCAL_OUT
این قلاب بر روی بسته هایی خروجی از سیستم اعمال می شود (Output).
- NF_IP_POST_ROUTING
این قلاب بر روی بسته های خروجی یا forward شده درست قبل از خروج از سیستم اعمال می شود.
به منظور اولویت بندی اجرای ماژول های هسته بر روی قلاب ها می بایست یک شماره اولویتی برای هر قلاب متصل به آن تعیین شود.
IPTables Tables and Chains
فایروال iptables با استفاده از جداولی برای سازماندهی قوانین عمل میکند. این جداول قوانین را طبق نوع تصمیمات طبقه بندی میکند. به عنوان مثال، اگر یک قاعده مربوط به ترجمه آدرس شبکه باشد، آن را به nat table تبدیل می کند.
در هر جدول iptables، قوانین در زنجیره های (chain) جداگانه سازماندهی می شوند. در حالی که جداول iptables یک سری قوانین کلی را شامل می شوند، زنجیره های مرتبط با قلاب های netfilter نیز آنها را کنترل می کنند. به طور اساسی chain ها تعیین می کنند که قوانین چه زمانی ارزیابی شوند.
همانطور که در ادامه می توان دید، نام های هر chain در netfilterبا نام hook آنها مرتبط است:
- PREROUTING
آغاز راه اندازی توسط قلاب NF_IP_PRE_ROUTING
- INPUT
آغاز راه اندازی توسط قلاب NF_IP_LOCAL_IN
- FORWARD
آغاز راه اندازی توسط قلاب NF_IP_FORWARD
- OUTPUT
آغاز راه اندازی توسط قلاب NF_IP_LOCAL_OUT
- POSTROUTING
آغاز راه اندازی توسط قلاب NF_IP_POST_ROUTING
تنها پنج hook در kernel مربوط به netfilter وجود دارد، بنابراین chain ای از Tableهای متعدد در هر یک از hook ها ثبت می شود.به عنوان مثال، سه Table دارای زنجیرهای PREROUTING هستند. هنگامی که این زنجیرها در hook NF_IP_PRE_ROUTING مربوطه ثبت می شوند، آنها یک اولویت را تعیین می کنند که هر کدام یک table’s PREROUTING chain نامیده می شود. هر یک از قوانین درون زنجیره PREROUTING با بالاترین اولویت قبل از حرکت به زنجیره PREROUTING بعدی ارزیابی می شود.
در ادامه قوانین و نظم هر chain بررسی خواهد شد. ابتدا نگاهی به Table های مختلف iptables می اندازیم.
- Filter Table
جدول filter یکی از جداول پرکاربرد در iptables است. Filter tables برای تصمیم گیری در مورد اینکه آیا به یک بسته اجازه داده شود همچنان به مقصد مورد نظر خود برود (ACCEPT) و یا برای انکار درخواست آن است (DROP). در فایروال، به عنوان “فیلتر کردن” بسته شناخته می شود.
- NAT Table
جدول nat برای استفاده از قوانین ترجمه آدرس شبکه مورد استفاده قرار می گیرد. همان طور که بسته ها به پشته شبکه وارد می شوند، قواعد در این جدول تعیین می کند که آیا و چگونه می توان آدرس های مبدا یا مقصد را تغییر داد. این جدول در تعیین مسیریابی بسته و هر نوع ترافیک شبکه استفاده می شود. این table معمولا برای هدایت بسته ها به شبکه ها زمانی که دسترسی مستقیم امکان پذیر نیست استفاده می شود.
- Mangle Table
جدول mangle برای تغییر header های پکت IP استفاده می شود. به عنوان مثال، شما می توانید مقدار TTL (زمان زندگی) یک بسته را تنظیم کنید. این table میتواند بصورت internal kernel برای پردازش بیشتر در جداول دیگر و سایر ابزارهای شبکه بصورت mark شده قرار گیرد.
جدول filter
سه زنجیره از پیش تعریف شده دارد:
زنجیره forward: به منظور فیلتر نمودن بسته های مسیریابی شده توسط فایروال استفاده می شود
زنجیره input: به منظور فیلتر نمودن بسته های ورودی به فایروال استفاده می شود
زنجیره output: به منظور فیلتر نمودن بسته های خروجی از فایروال استفاده می شود
جدول nat
شامل زنجیره های از پیش تعریف شده زیر می باشد:
زنجیره pre-routing: به منظور ترجمه آدرس بسته هایی که مقصد شان می بایست تغییر داده شوند استفاده می شود
زنجیره post-routing: به منظور ترجمه آدرس بسته هایی که مبدا شان می بایست تغییر داده شوند استفاده می شود
زنجیره output: به منظور ترجمه آدرس بسته های خروجی از فایروال استفاده می شود
شکل زیر نحوه پردازش بسته ها توسط فایروال را به اختصار نشان می دهد
PACKET IN
|
PREROUTING–[routing]–>–FORWARD–>–POSTROUTING–>–OUT
– nat (dst) | – filter – nat (src)
| |
| |
INPUT OUTPUT
– filter – nat (dst)
| – filter
| |
`—–>—–[app]—–>——‘
توجه: اگر بسته ای توسط فایروال (سیستم محلی) ایجاد شود، از زنجیره prerouting عبور نمی کند.
جدول mangle:
جدول mangle برای تغییر اختصاصی بسته ها می باشد.این عمل از طریق تغییر بیتهای QoS (تظمین کیفیت) در هدر بسته TCP انجام می شود. جدول mangle شامل زنجیره های زیر می باشد:
زنجیره PREROUTING
زنجیره OUTPUT
زنجیره FORWARD
زنجیره INPUT
زنجیره POSTROUTING
جدول raw:
جدول raw برای پیکربندی استثناعات استفاده می شود. جدول raw شامل زنجیره های زیر می باشد:
زنجیره PREROUTING
زنجیره OUTPUT
مقادیر هدف
در نهایت مقادیر زیر می توانند به منظور قبول و یا رد بسته های موجود در زنجیره های مختلف هر جدول استفاده شوند:
ACCEPT: برای قبول بسته توسط فایروال
DROP: برای رد نمودن بسته توسط فایروال
QUEUE: برای واگذار نمودن پردازش بسته توسط فضای کاربری
RETURN: به منظور متوقف نمودن ادامه پردازش های قوانین موجود در زنجیره فعلی و از سرگیری ادامه پردازش از زنجیره فراخواننده