این شماره به معرفی یکی از ابزارهای قدرتمند تصفیه کننده بستهها به نام IPtables میپردازیم. IPtables به عنوان نسل چهارم پیادهسازی شده از ابزارهای تصفیه کننده سیستم عامل لینوکس معرفی میشود. این مقاله شامل بخشهای زیر است.
معرفی سیستم تصفیه کننده بستهها
تاریخچه حفاظهای سیستمعامل لینوکس
زنجیرها، جداول و قوانین IPtables
قوانین IPtables
پیاده سازی چند سیاست ساده امنیتی
راهاندازی و استفاده از IPtables
جهت مطالعه بیشتر
مراجع
معرفی سیستم تصفیه کننده بسته ها
یک سیستم تصفیهکننده بستهها (همانطور که از نامش پیداست) برای کنترل ترافیک ورودی و خروجی بستهها بین یک شبکه داخلی1 و شبکه خارجی به کار میرود. به کمک یک تصفیه کننده میتوان:
دسترسی به اینترنت از طریق بعضی ماشینها را محدود کرد.
ترافیک ناخواسته و نیز پویشهای انجام شده از خارج را مسدود کرد.
از امکان ترجمه آدرسهای شبکه استفاده کرد. به کمک NAT میتوان تعداد زیادی از کامپیوتر های داخل شبکه را تنها با داشتن یک آدرس IP معتبر به شبکه خارجی متصل نمود.
استفاده از کارگزار Proxy را از دید کاربران شفاف نمود(Redirect).
انواع سیستم های تصفیه کننده بستهها
سیستمهای تصفیه کننده بستهها به طور کلی به دو نوع تقسیم میشوند:
سیستمهای بدون حالت2 : در این سیستمها تصفیه هر بسته مستقل از بستههای دیگر و اینکه متعلق به چه ارتباطی 3 است، صورت میگیرد.
سیستمهای مبتنی بر حالت4 : در این سیستم ها حافظه جداگانهای تاریخچه هر ارتباطی که به آن وارد، خارج یا از آن میگذرد، را ثبت میکند. این ویژگی برای پیکربندی مؤثر FTP، DNS و سایر سرویسهای شبکه ضروری میباشد. عموماً حفاظهای مبتنی بر حالت از نمونههای بدون حالت امنتر میباشند. چرا که با استفاده از آنها میتوان مجموعه قوانین سختتری برای کنترل ترافیک اعمال کرد.
تاریخچه
محصولات ارائه شده تحت عنوان تصفیه کننده بستهها چهار نسل تکامل را پشت سر گذاشتهاند:
IPFW: این نسخه یادآور اولین پشتیبانی لینوکس از سرویس تصفیه بستهها میباشد که در داخل هسته 1.2 لینوکس تعبیه شده بود. IPFW ویژگیهای ابتدایی مورد انتظار از یک حفاظ را پیادهسازی کرده بود. بعضی از محدودیتهای آن عبارت بودند از:
عمل تصفیه را تنها روی یک پورت انجام میداد
Mason از آن پشتیبانی نمیکرد
در محیطهای توزیع شده قابل استفاده نبود.
مبتنی بر حالت نبود.
IPFWADM: در هسته 2.0 لینوکس قرار داده شده است. تصفیه بستهها را از روی آدرس درگاههای مبداء و مقصد انجام میداد و امکان مخفیسازی آدرسهای IP (ترجمه چند به یک) در آن قرار داده شده بود. با این وجود یک حفاظ مبتنی بر حالت نبود و تنها از قراردادهای TCP، UDP و ICMP5 پشتیبانی میکرد.
IPChains: در هسته 2.2 لینوکس قرار داده شده بود. با وجود اینکه یک حفاظ مبتنی بر حالت نبود، ولی از زیرنوعهای ICMP و سایر قراردادها )علاوه بر از TCP، UDP و ICMP) پشتیبانی میکرد.
از هسته 2.4 لینوکس به بعد IPtables به عنوان حفاظ پیش فرض لینوکس همراه با آن نصب میشد. IPtables نسبت به حفاظهای نسل قبل خود چند تفاوت مهم داشت:
یک حفاظ مبتنی بر حالت بود.
از قرارداد اینترنت نسخه 6.0 پشتیبانی میکرد.
از طراحی پیمانهای برخوردار بود.
علاوه بر جهشهای فوق، با نسخههای دو نسل قبل خود، یعنی IPFWADM و ipchains مطابقت داشت. (Backward Compatibility)
جدول ها و زنجیرها در IPtables
جدول6 و زنجیر7 دو مفهوم اساسی در IPtables هستند که شناخت این ابزار و نحوه عملکرد آن و نوشتن قوانین مورد نظر مستلزم درک کامل این مفاهیم میباشد.
در IPtables جدولها مجموعهای از قوانین مرتبط را در برمیگیرند. این قوانین در ساختار دیگری تحت عنوان زنجیرها معنی پیدا میکنند. زنجیرها انواع نحوه عبور بستهها از حفاظ را بیان میکنند. بسته به اینکه هر بسته در ورود، خروج یا عبور از حفاظ چه مسیری را بپیماید، بخشی از قوانین جدولها روی آن اعمال میشود. نحوه اعمال قوانین جدول به این صورت است که بستههای رسیده با تک تک قوانین آن مقایسه میشوند و اولین قانونی که با شرایط بسته مطابق باشد، در مورد آن اعمال میشود. در غیر این صورت سیاست پیش فرض حفاظ روی آن اعمال می شود. (قبول8 یا دور ریختن9 )
سه جدول عمده مورد استفاده در IPtables عبارتند از:
جدول تصفیه10 :
این جدول تصفیه در واقع مجموعه قوانین مربوط به تصفیه بستهها را در برمیگیرد. عمل تصمیمگیری دربارهی تصفیه بستهها روی ویژگیهای خاصی از آنها صورت میگیرد که در ادامه بهصورت کاملتر به آنها اشاره خواهیم کرد. باید به نحوی به حفاظ فهماند چه تصمیمی دربارهی بستههایی که در یک قانون صدق میکنند، اتخاذ کند. مهمترین اعمال انجام شده روی یک بسته عبارتند از قبول و دور ریختن.
جدول ترجمه آدرس:
جدول ترجمهی آدرس برای ترجمهی آدرس بستهها بهکار میرود که اصطلاحاً به آن NAT گفته میشود. بسیاری از شبکههای داخلی سازمانها و حتی بسیاری از فراهم آورندگان خدمات اینترنتی تنها از یک IP معتبر برای اتصال مجموعه وسیعی از کامپیوترهای خود به شبکه اینترنت استفاده میکنند. مکانیسمی که این امکان را برای آنها فراهم میآورد، NAT میباشد. برای استفاده از NAT حداقل به یک آدرس IP معتبر احتیاج است که این آدرس از طریق ISP به صورت پویا یا استیا به شبکه اختصاص داده میشود. این آدرس به عنوان آدرس خارجی دروازه شبکه مورد استفاده قرار میگیرد و برای آدرس داخلی دروازه و سایر گرههای شبکه از مجموعه آدرسهای رزرو شده 11 برای شبکه های داخلی استفاده میشود. به این ترتیب آدرس همه بستههای ایجاد شده در ماشینهای داخلی که به مقصدی خارج از شبکه محلی فرستاده میشوند، در دروازه (که حفاظ روی آن در حال اجراست) ترجمه میشوند. ترجمهی آدرسها به این صورت است که جایگزین آدرس مقصد و شماره درگاه مورد استفاده در بسته اولیه آدرس IP معتبر دروازه و شماره درگاه جدید تخصیص داده شده میشوند. در واقع ماشین خارجی یک بسته از جانب دروازه دریافت میکند و بستههای برگشتی را نیز به همان آدرس IP معتبر برمیگرداند. اطلاعات ترجمه آدرس در یک جدول مراجعه در دروازه ذخیره میشود تا بتوان با استفاده از آن، بستههای برگشتی را به ماشین داخلی مورد نظر (که ایجاد کنندهی اصلی بسته بوده) هدایت کرد. شکل زیر نمونهای از پیکربندی شبکه داخلی برای اتصال به اینترنت با استفاده از NAT را نشان میدهد: