در پست های گذشته از فایروال ها و کاربردشان حرف زدیم و تعدادی از آنها را نام بردیم، در این پست IPTable که یکی از قویترین و منعطف ترین فایروال ها برای سیستم عامل های گنو/لینوکس است را مفصلتر مورد بحث قرار می دهیم.
IPTable ابزاری است که با اسفاده از حط فرمان میتوانید با آن ارتباط برقرار کرده و از طریق policy chain ها به آن بفهمانید که دقیقاً باید چی کاری انجام دهد. وقتی که یک کانکشن سعی میکند روی سیستم شما establish شود، IPTable به قوانین که شما برایش تعیین کردهاید نگاهی میاندازد و اگز این کانکشن و مشخصاتش با یکی از قوانین مطابقت داشت آن را روی آن کانکشن اعمال میکند و در غیر این صورت عمل پیشفرض را انجام می دهد.
IPTable معمولاً ربه صورت پیشفرض روی سیستم عامل ها گنو/لینوکس نصب شده است، اگر به هر دلیلی روی سیستمتان آن را نداشتید یا خواسیتید آن را آپیدیت کنید میتوانید دستور زیر را در ترمینال اجرا کنید:
sudo apt-get install iptables
نرمافزار هایی مانند Firestarter هم وجود داردند که به شما رابطی گرافیکی برای کار با IPTable ارائه میدهند اما ما در این پست تنها از خود IPTable استفاده میکنیم. در کار با IPTable هم باید دقت کنید، مخصوصاً وقتی که با SSH به سرور خود وصل شدهاید و IPTable را تنظیم می کنید، چرا که اجرای یک کامند اشتباه میتواند ارتباط شما را با سرور به کلی قطع کند.
انواع Chain ها
IPTable از سه نوع Chain استفاده می کند: input ، output و forward
input: این chain برای کنترل کانکشن های ورودی استفاده می شود. برای مثال وقتی کاربری سعی کند با SSH به سیستم متصب شود، فایروال سعی میکند آی پی و پورت را با یکی از rule ها مطابقت دهد.
Forward: این chain برای کانکشن هایی بکار میرود که مقصد نهاییشان دقیقاً سیستم ما نیست. یک روتر را در نظر بگیرید، اطلاعات به روتر فرستاده میشود اما در حقیقت مقصد اطلاعات ما دقیقاً خود روتر نیست. وقتی چنین عملیات هایی مانند مسیریابی، برپایی شبکه NAT یا هر چیز دیگری که به عملیات فوروارد نیاز دارد را قرار است انجام دهید chain فوروارد بدردتان خواهد خورد.
راهی که میتوانید با آن ببینید که سیستمتان به forward نیاز دارد یا اینکه از فوروارد استفاده می کند:
iptables -L -v
output: این chain برای کانکشن هایی که مبداشان سیستم ما است بکار میرود. برای مثال اگر سعی کنید digispark.ir را پینگ کنید، IPTable این chain را بررسی میکند تاببینید آیا rule با مشخصات این کانکشن وجود دارد یا نه(قبل از اینکه کانکشن برقرار شود)
نکتهای که باید به یاد داشته باشید این است که برای استفاده از خیلی از پروتکل ها هم در input chain و هم output chain را باید برای آن تنظیم کرد تا پذیرای آن باشند، مثلاً ssh پرتکلی است که هم به فرستادن اطلاعات و هم دیافت اطلاعات نیاز دارد پس اگر یکی از chain ها آن را پس بزند نمیتوانیم اتصال درستی داشته باشیم.
در پست های بعدی بیشتر با IPTable کار خواهیم کرد و از کار با آن لذت خواهیم برد 🙂