آی‌پی‌تیبلز

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
آی‌پی‌تیبل
نویسنده(های) اصلی Rusty Russell
انتشار اولیه ۱۹۹۸
انتشار پایدار ۱.۴.۱۴
نوشته شده به سی
سیستم‌عامل گنو/لینوکس
پروانه جی‌پی‌ال
وب‌گاه www.netfilter.org

آی‌پی‌تیبلز (به انگلیسی: iptables) یک فایروال برای گنو/لینوکس است. که بروی بیشتر توزیع‌های لینوکس بصورت پیش‌فرض نصب است. [۱] آی‌پی‌تیبلز نام ابزاری است که قادر به اجرای هر سیاستی در سطح لایه ترانسفر و تا حدودی لایه‌های پایین‌تر و بالا‌تر شبکه است اما شهرت و محبوبیت اصلی این نرم‌افزارِ سطح هسته، به انعطاف بی حد و حصر آن در لایه ترانسفر مربوط می‌شود آنجا که حرف از روتینگ بسته‌ها (Packets) و وضعیت آنها است.

تاریخچه[ویرایش]

Flow of network packets through Netfilter

Iptables توسط تیم netfilter طراحی شد. در ابتدا به علت ساختار زنجیره‌ای طراحی آن، به نام ipchain شهرت یافت اما بعدها نام iptables بر آن گذاشته شد. این دیوار آتش (Firewall) در ابتدا تنها می‌توانست سیاست‌های بسیار محدودی فقط روی بسته‌های ورودی اعمال کند اما به مرور زمان قسمت‌های ماژول مانندی به آن اضافه شد.

عملکرد[ویرایش]

کار با آی‌پی‌تیبلز بر خلاف تصوری که در قدم اول در ذهن هر خواننده‌ای شکل می‌گیرد بسیار ساده است. همه چیز در قالب زنجیره‌هایی شکل می‌گیرد که به هم پیوسته می‌شوند. سه زنجیره اصلی عبارتند از INPUT ،OUTPUT و FORWARD. این سه زنجیره بر حسب نامشان تمام بسته‌های ورودی را به دست شما می‌سپارند تا هر سیاستی که می‌خواهید بر آنها اعمال کنید.

فرض کنید می‌خواهید تمام بسته‌های ICMP را مسدود کنید؛ برای این کار باید به سراغ زنجیره INPUT که تمام بسته‌های ورودی با تمام Payload و Header شان به محض ورود به سیستم عامل به آنجا می‌روند، برویم. همه چیز کاملا ساده است:

Iptables –A INPUT –p icmp –j DROP

سوییچ A تعیین کننده نوع بسته‌های مورد نظر است سوییچ p نشان دهنده پروتکل بسته‌های ورودی است که در اینجا بسته‌های ICMP که همان بسته‌های PING هستند، انتخاب شده است و در آخر سوییچ j است که مخفف کلمه jump (به معنی پرش) است. خوب حال کمی تخصصی‌تر به این دستور نگاه می‌کنیم. در دستور بالا ما ۲ زنجیره (chain) اصلی داریم: یکی به نام DROP و یکی INPUT. همان طور که از نام زنجیره DROP پیدا است، وظیفه آن، از رده خارج کردن بسته‌ها و جلوگیری از رسیدن آنها به فرآیند مورد نظر را دارد. ناگفته پیدا است که می‌توانیم بسته ورودی را به انتخاب خودمان به هر زنجیره‌ای بفرستیم. به عنوان مثال در زیر چند خط دستور می‌نویسیم که تمام ترافیک پورت ۸۰ را به یک زنجیره از پیش تعریف نشده می‌‌برد و اگر ترافیک از مبدا خاصی بود اجازه ادامه را از آن می‌گیریم در غیر این صورت بسته به هدف خود می‌رسد:

iptables –N SUN-ARMY-CHAIN
iptables –A SUN-ARMY-CHAIN –s 192.168.1.20 –j DROP
iptables –A SUN-ARMY-CHAIN –j ACCEPT
iptables –A INPUT -p tcp –source-port 80 –j SUN-ARMY-CHAIN


خوب خط به خط دستورها را می‌خوانیم :

در دستور اول یک زنجیره به نام SUN-ARMY-CHAIN ایجاد می‌شود سپس می‌گوییم هر بسته ورودی اگر از آدرس مبدا (source)ذکر شده ارسال شده باشد، از رده خارج می‌شود؛ در غیر این صورت تایید شده و به هدف می‌رسد.

حال شاید برای شما این سوال شود که اگر ما تعدادی شرط داشتیم و بسته ورودی در هیچ کدام از شرط‌ها صدق نکند چه اتفاقی می‌افتد پاسخ این است که هیچ بسته ورودی وجود ندارد که عضو یکی از سه زنجیره اصلی نباشد.

خوب در مرحله بعد باید بگویم که هر زنجیره یک سیاست کلی دارد که در صورتی که یک بسته در هیچ کدام از شروط صدق نکند سیاست اصلی دربارهٔ آن به اجرا در می‌آید که به صورت پیش تعریف شده قبول همه بسته‌ها است.

زنجیره‌های اصلی[ویرایش]

  • REJECT: این زنجیره بسته را از رده خارج کرده و یک پیام برای صاحب بسته ارسال می‌کند.
  • DROP: این زنجیره هم مانند زنجیره قبل عمل می‌کند با این تفاوت که پیام برای ارسال‌کننده ارسال نمی‌شود.
  • LOG: این زنجیره بسته ورودی خود را لاگ می‌کند.
  • ACCEPT: بسته اجازه عبور پیدا می‌کند.

اینها تنها تعدادی از زنجیره‌های اصلی هستمد که ما را در سیاست‌گذاری روی بسته‌ها یاری می‌کنند. گفتنی است که استفاده از یک دیوار آتش سطح هسته مثل iptables برای فیلتر‌گذاری روی متون و payload داده‌ها کاری بسیار غلط است؛ به این دلیل که iptables در لایه ترانسفر کار می‌کند و اقدام به سر هم کردن بسته‌های تکه تکه شده نمی‌کند.

مثلا برای این که بسته‌های ورودی که در payload آنها کلمه Sun-Army است را فیلتر کنیم iptables به هیچ عنوان نرم‌افزار خوبی نیست، چون ممکن است حرف‌های su در یک بسته و بقیه در یک بسته دیگر ذخیره شوند برای فــیلتر‌گذاری روی محــتوا از ‌IPSها و IDSها استفاده می‌کنیم که قبلا مقداری دربارهٔ آنها قدری نوشته‌ایم.

منابع[ویرایش]

احمدزادگان، صادق. گروه امنیتی آفتاب. iptable. عصر ارتباط، ۱۱ دی ۱۳۸۹، شماره ۳۸۹. pdf