راه اندازی یک فایروال خوب یک گام اساسی برای تامین امنیت یک ابرک است. اکثر توزیعهای لینوکس با چند ابزار فایروال مختلف عرضه میشوند که میتوانیم از آنها برای پیکربندی فایروالهای خود استفاده کنیم.
Iptables یک فایروال استاندارد است که به شکل پیشفرض در اکثر توزیعهای لینوکس گنجانده شده است. این فایروال با تطبیق هر بستهای که از کارت شبکه عبور میکند با مجموعهای از قوانین تصمیم میگیرد چه کاری انجام شود.
در این راهنما، به بررسی فایروال iptables میپردازیم.
Iptables چگونه کار میکند؟
قبل از شروع کار با دستورات مورد نیاز برای کنترل iptables و ایجاد قوانین فایروال، برخی از اصطلاحات این فایروال را مرور و نحوهی عملکرد iptables را بررسی خواهیم کرد.
فایروال iptables با مقایسهی ترافیک شبکه با مجموعهای از قوانین عمل میکند. قوانین، ویژگیهایی را که یک بسته باید داشته باشد تا با قانون مطابقت داشته باشد و اقداماتی که باید برای مطابقت بستهها انجام شود را مشخص میکند.
گزینههای زیادی برای تعیین اینکه کدام بستهها با یک قانون خاص مطابقت دارند وجود دارد. میتوانید نوع پروتکل بسته، آدرس یا پورت مبدا یا مقصد، اینترفیس مورد استفاده، ارتباط آن با بسته های قبلی و … را مطابقت دهید.
هنگامی که الگوی تعریفشده مطابقت داشته باشد، عملی که انجام میشود target نامیده میشود. یک target میتواند یک تصمیم نهایی برای رفتار با بسته باشد، مانند پذیرش یا رد کردن. همچنین میتوان بسته را برای پردازش به زنجیرهای دیگر منتقل کرد یا فقط لاگ آن را ثبت کرد.
این قوانین در گروههایی به نام زنجیره یا chain سازماندهی میشوند. زنجیره مجموعهای از قوانین است که یک بسته به شکل متوالی با آن بررسی میشود. هنگامی که بسته با یکی از قوانین مطابقت دارد، اقدام مرتبط را اجرا میکند و با سایر قوانین باقیمانده در زنجیره بررسی نمیشود.
کاربر میتواند زمانیکه نیاز دارد زنجیره ایجاد کند. سه زنجیره به طور پیشفرض تعریف شده است:
- INPUT: این زنجیره تمام بستههایی که به ابرک شما ارسال میشوند را کنترل میکند.
- OUTPUT: این زنجیره حاوی قوانینی برای ترافیک ایجاد شده به وسیلهی سرور شما است.
- FORWARD: این زنجیره برای مقابله با ترافیک به مقصد سرورهای دیگری که روی سرور شما ایجاد نشده است استفاده میشود. این زنجیره راهی برای پیکربندی سرور شما برای مسیریابی درخواستها به ماشینهای دیگر است.
هر زنجیره میتواند شامل صفر یا چند قانون باشد و یک سیاست پیشفرض دارد. این سیاست تعیین میکند که زمانی که یک بسته از تمام قوانین موجود در زنجیره عبور کند و با هیچ قانونی مطابقت نداشته باشد چه اتفاقی میافتد. در حالت عدم مطابقت، میتوانید بسته را رد کنید یا آن را بپذیرید.
iptables به کمک ماژولی که با قوانین بارگذاری میشود، میتواند اتصالات را نیز ردیابی کند. یعنی شما میتوانید قوانینی را ایجاد کنید که بر اساس رابطه یک بسته با بسته های قبلی، چه اتفاقی برای آن بیفتد. به این قابلیت «State Tracking»، «Connection Tracking» یا پیکربندی «State Machine» گفته میشود.
نکات مهم درباره Iptables
اکنون که میدانیم iptables چگونه بستههایی را که از طریق اینترفیس خود میآیند هدایت میکند (بسته را به زنجیرهی مناسب هدایت میکند، آن را با هر قانون بررسی کیکند تا زمانی که یکی مطابقت داشته باشد، سیاست پیشفرض زنجیره را در صورت پیدا نشدن مطابقت انجام میدهد)، میتوانیم به بررسی نکات مهم تعریف قوانین بپردازیم.
ابتدا، ما باید مطمین شویم که قوانینی برای فعال نگه داشتن اتصالات فعلی با اجرای سیاست پیش فرض drop یا مسدود کردن داریم. اگر از طریق SSH به سرور خود متصل شده باشید، این امر بسیار مهم است. اگر به طور تصادفی یک قانون یا سیاست را اجرا کنید که اتصال فعلی شما را قطع کند، همیشه می توانید به کمک کنسول به ابرک خود متصل شوید.
نکتهی دیگری که باید در نظر داشت این است که ترتیب قوانین در هر زنجیره مهم است. اگر قرار است یک بسته با قانون خاصی مطابقت داشته باشد نباید با قانون کلیتری مواجه شود که با آن مطابقت داشته باشد.
به همین دلیل، قوانین بالای یک زنجیره باید دارای سطح خاصیت بالاتری نسبت به قوانین پایین باشند. ابتدا باید موارد خاص را مطابقت دهید و سپس قوانین کلی تری را برای مطابقت با الگوهای گسترده تر ارایه دهید. اگر بسته ای با هیچ قانونی مطابقت نداشته باشد، به کلی ترین قانون یعنی سیاست پیشفرض برخورد میکند.
سیاست پیش فرض یک زنجیره به شدت انواع قوانینی را که در زنجیره گنجانده میشوند تحت تاثیر قرار میدهد. یک زنجیره با سیاست پیشفرض ACCEPT حاوی قوانینی است که به صراحت بستهها را رها میکند. زنجیرهای که به طور پیشفرض روی DROP باشد، دارای استثناهایی برای بستههایی است که باید به طور خاص پذیرفته شوند.