iptables

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

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

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

Flow of network packets through Netfilter

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

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

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

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

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

مفاهیم پایه[ویرایش]

در متون مربوط به IPTables مفاهیمی وجود دارد که در ادامه توضیح داده شده‌اند. در بسیاری از موارد، این اصطلاحات به ‌جای یکدیگر به‌کار می‌روند که ممکن است باعث بدفهمی ‌مطالب شود.

Netfilter

چارچوبی حاوی مجموعه‌ای از قلاب‌ها است که در هسته‌ی لینوکس قرار دارد و به منظور مسدودکردن و دستکاری بسته‌ها به ‌کار می‌رود. شناخته‌شده‌ترین ابزاری که از Netfilter استفاده می‌کند، دیواره آتش است که بسته‌ها را فیلتر می‌کند. ابزارهای دیگری نیز مانند NAT، پیگیری حالت‌دار و صف‌بندی بسته از آن استفاده می‌کنند. همچنین نام پروژه‌ای که مجموعه‌ای از ابزارهای دیواره آتش را برای لینوکس فراهم کرد، Netfilter بوده است. اکثر اجزایی که در این پروژه تهیه شدند ماژول‌های قابل بارگذاری در هسته هستند اما مجموعه‌ای از ابزارهای فضای کاربر و کتابخانه‌هایی نیز تهیه شدند.

IPFilter

مسدودکردن یا عبوردادن انتخابی بسته‌ها در حین عبور از یک رابط کاربری را انجام می‌دهد. معیار محدودکردن بسته‌ها بر اساس سرآیند ‌های لایه‌ی 3 (IPv4، IPv6) و لایه‌ی 4 (TCP، UDP، ICMP4) است. معیاری که بیش از همه کاربرد دارد، آدرس مبدا و مقصد، پورت و پروتکل مبدا و مقصد است. IPFilter یکی از انواع دیواره‌های آتش است که ابتدا برای OpenBSD توسعه یافت، اما اکنون در سیستم‌های عامل دیگر نیز وجود دارد. در ادامه به ذکر برخی از مزایای IPFilter می‌پردازیم.

   کنترل: هنگامی‌که سیستم ‌عامل، لینوکس است و شبکه‌های داخلی به یک شبکه‌ی خارجی مانند اینترنت متصل است، می‌توان به انواع خاصی از ترافیک اجازه‌ی عبور داد و انواع خاصی از آن را مسدود نمود. برای مثال، سرآیند بسته‌ها حاوی آدرس مقصد است، بنابراین می‌توان از رفتن بسته‌ها به بخش خاصی از شبکه‌ی خارجی جلوگیری نمود. به عنوان مثالی دیگر در صفحه‌های وب، تبلیغات و آگهی‌هایی از doubleclick.net وجود دارند و مرورگر زمان زیادی را صرف بارگذاری آن‌ها می‌کند، می‌توان به IPFilter گفت هیچ بسته‌ای از doubleclick.net دریافت نکند.
   امنیت: لینوکس تنها رابط بین دنیای آشفته اینترنت و شبکه‌ی منظم داخلی است. بنابراین باید بر روی ترافیک وارده به شبکه‌ی داخلی محدودیت‌هایی اعمال کرد. ممکن است مهم نباشد که چه چیزی از شبکه خارج شود اما در مورد بسته‌های وارده باید نگران بود. به عنوان مثال ممکن است نخواهید که کسی از طریق Telnet با سرویس‌دهنده ارتباط برقرار کند. ممکن است بخواهید تنها از اینترنت استفاده کنید و یک سرویس‌دهنده نباشید. بنابراین جلوی هرگونه اتصالی را می‌گیرد. تمامی این کارها با داشتن IPFilter امکان‌پذیر است.
   مراقبت : گاهی اوقات سیستمی در شبکه‌ی محلی که به طور نامناسبی پیکربندی شده است، تعداد زیادی بسته را به خارج از شبکه ارسال می‌کند. در این‌جا مناسب است IPFilter را طوری تنظیم کرد که وقوع هر رویداد غیرطبیعی را گزارش دهد. 

ترجمه‌ی آدرس شبکه (NAT)

هر کامپیوتری در ارتباط با دیگرکامپیوترها و سرویس‌دهندگان وب نیاز به یک آدرس IP دارد. با گسترش اینترنت و رشد استفاده خانگی و شبکه‌های کاری به نظر می‌رسد تعداد آدرس‌های IP موجود کافی نباشد. یک راه حل ساده، طراحی مجدد قالب آدرس IP است که امکان داشتن تعداد آدرس‌های بیشتری را می‌دهد، اما چندین سال طول می‌کشد تا این راه حل پیاده‌سازی شود و نیازمند اصلاح کل زیرساخت اینترنت است. در این‌جا NAT مشکل را حل می‌کند. NAT به یک دستگاه منفرد مثلا یک مسیریاب این امکان را می‌دهد که به عنوان رابط بین اینترنت و یک شبکه‌ی محلی مشخص عمل کند. در این صورت یک IP منفرد می‌تواند برای یک مجموعه‌ی کامپیوتر استفاده شود. کمبود تعداد آدرس‌های IP تنها دلیل استفاده ازNAT نیست. فواید دیگری چون برقراری امنیت و مدیریت بهتر نیز از مزایای استفاده از NAT است. مفهوم NAT بسيار ساده و به اين معنا است كه يك دستگاه (مثل كامپيوتر يا مسيرياب) به عنوان دروازه‌ی ورود به اينترنت عمل مي‌كند و با اين كار آدرس‌هاي ايستگاه‌هاي كاري را به آدرس دستگاهي كه NAT روي آن فعال است ترجمه مي‌كند، به بيان ديگرNAT روي دستگاهي كه به اينترنت متصل است فعال می‌شود و ايستگاه‌هاي كاري و به طور كلي شبكه را از ديد اينترنت پنهان مي‌کند. از سوي ديگر اينترنت شبكه را به‌صورت يك دستگاه ساده مي‌بيند كه به اينترنت متصل مي‌باشد. NAT روي شبكه تغيير ايجاد نمي‌كند و نيازي به تنظيمات دوباره روي ايستگاه‌هاي كاري نيست. فقط ايستگاه‌هاي كاري مي‌بايست آدرس دروازه‌ی خروجي از شبكه را كه همان آدرس دستگاهي است كه NAT روي آن فعال شده است را بدانند.

بررسی اجمالی[ویرایش]

هسته‌ی لینوکس از سری1.1 داری IPFilter بوده است. برای تنظیم قوانین فیلترکردن بسته‌ها از ابزاری به نام ipfwadm استفاده می‌شد. در لینوکس 2.2 ابزاری به نام IPChains معرفی شد و سرانجام برای لینوکس 2.4 ابزار IPTables معرفی شد. در حقیقت IPTables ابزاری است که با هسته سخن می‌گوید و به آن می‌گوید که چه بسته‌هایی را فیلتر کند. علاوه بر فیلتر کردن بسته‌ها، برای ایجاد و دستکاری قوانین ماژول‌های NAT نیز استفاده می‌شود، زیرا NAT نیز از طریق مجموعه قوانین IPFilter پیکربندی می‌شود. اغلب نام IPTables برای کل زیرساخت دیواره آتش که شامل Netfilter، پیگیری اتصال و NAT است، استفاده می‌شود. ویژگی‌های اصلی IPTables عبارتند از:

   فهرست‌کردن کلیه‌ی مجموعه‌ی قوانین فیلتر بسته
   افزودن/ کم کردن/ اصلاح قوانین در مجموعه‌ی قوانین فیلتر بسته
   فهرست/ صفر کردن شمارنده‌های هر قانون در مجموعه‌ی قوانین فیلتر بسته 

به دلیل این که IPTables به امتیازات خاصی برای اجرا نیاز دارد، باید حتما توسط کاربر root اجرا شود. در اکثر سیستم‌های لینوکس IPTables در شاخه‌ی usr/sbin/iptables نصب می‌شود و با اجرای دستور man iptables می‌توان به مستندات مربوط به آن دسترسی پیدا کرد. پروژه‌ی netfilter/IPTables در سال 1998 میلادی توسط Rusty Russell که توسعه‌دهنده‌ی IPChains نیز بود شروع شد. با پیشرفت پروژه، تیم Netfilter شکل گرفت. نرم‌افزار توسعه داده شده توسط آن‌ها تحت لیسانس GNU/GPL است. چارچوب Xtables به مدیر سیستم امکان تعریف جدول‌هایی را می‌دهد که شامل زنجیره‌هایی از قوانین هستند. هر قانون مشخص می‌کند که با بسته چگونه برخورد شود. هر جدول با نوع خاصی از پردازش بسته، سروکار دارد. بسته‌ها با پیمایش زنجیره‌ها پردازش می‌شوند. یک قانون در یک زنجیره می‌تواند یک بسته را به زنجیره دیگری بفرستد و این روند تا هر جایی می‌تواند ادامه داشته باشد. هر بسته ورودی یا خروجی از شبکه حداقل یک زنجیره را می‌پیماید. منبع بسته مشخص می‌کند که در ابتدا چه زنجیره‌ای را بپیماید. جداول توکار سیاست‌هایی دارند. برای مثال بسته‌ای که به انتهای زنجیره برسد، حذف می‌شود. مدیر سیستم می‌تواند به تعداد دلخواه زنجیره ایجاد کند. برای این زنجیره‌ها سیاست تعریف نشده است و اگر بسته‌ای به انتهای این‌گونه زنجیره‌ها برسد، دوباره به زنجیره‌ای که آن را فراخوانی کرده است، باز‌ می‌گردد. هر قانون در یک زنجیره‌ با انواع بسته‌های خاصی انطباق می‌یابد. همچنین قانون ممکن است یک هدف داشته باشد. وقتی بسته‌ای یک زنجیره را می‌پیماید، هر قانون، آن را بررسی می‌کند. اگر قانون با بسته انطباق پیدا نکند، بسته به قانون بعدی فرستاده می‌شود و اگر قانون با بسته انطباق یابد، طبق آن‌چه در هدف مشخص شده با بسته برخورد می‌شود. بسته به پیمایش پیوسته در زنجیره ادامه می‌دهد تا (1) یک قانون با آن بسته انطباق یابد که در این صورت در مورد سرنوشت نهایی بسته تصمیم گرفته می‌شود (مثلا بسته قبول یا حذف می‌شود) یا (2) یک قانون، هدف بازگشت را فراخوانی کند و بسته به زنجیره‌ی فراخواننده بازگردد یا (3) بسته به انتهای زنجیره برسد.

عبارات و اصطلاحات IP Tables[ویرایش]

در ادامه این بخش، تعدادی از عبارات و اصطلاحاتی که بیشترین کاربرد را دارند و برای درک مطالب بعدی لازم هستند، شرح داده می‌شوند.

انطباق :

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

   (--source (-s: یک آدرس IP مبدا یا شبکه را انطباق می‌دهد.
   (--destination (-d: یک آدرس IP مقصد یا شبکه را انطباق می‌دهد.
   (--protocol (-p: روی یک IP انطباق انجام می‌دهد.
   (--in-interface (-i: یک رابط ورودی ایجاد می‌کند.
   interface: یک رابط خروجی ایجاد می‌کند.
   --state: روی مجموعه‌ای از حالات اتصال انطباق می‌دهد.
   --string: روی رشته‌ای از بایت‌های داده لایه‌ی کاربردی، انطباق انجام می‌دهد. 

قانون (Rule):

مجموعه‌ای از یک یا چندین انطباق به همراه یک هدف است که در اکثر پیاده‌سازی‌های IPTables، یک قانون مجموعه‌ای از چندین انطباق است. در بعضی از پیاده‌سازی‌ها می‌توانیم چندین هدف برای هر قانون داشته باشیم.

مجموعه‌ی قوانین :

مجموعه‌ای از قوانین در پیاده‌سازی IPTables می‌باشد. مجموعه‌‌ی قوانین در یک فایل پیکربندی نوشته می‌شوند.

پرش :

دستورالعمل JUMP مانند یک هدف است و دقیقا مانند آن نوشته می‌شود. با این تفاوت که به جای نوشتن نام هدف، نام یک زنجیره‌ی دیگر نوشته می‌شود. اگر قانون انطباق داشت، بسته به زنجیره‌ی بعدی فرستاده می‌شود و در آن پردازش می‌شود.

Mangling:
دستکاري و تغيير فرم بسته را به اصطلاح Mangling مي نامند. براي نمونه، هسته لينوکس مي تواند فيلدهايي از بسته را دستکاري و تغيير دهد.

هدف :

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

   ACCEPT: به یک بسته اجازه می‌دهد که به راه خود ادامه دهد.
   DROP: یک بسته را حذف می‌کند و هیچ پردازش دیگری روی آن انجام نمی‌شود.
   LOG: یک بسته را در syslog ثبت می‌کند.
   REJECT: یک بسته را حذف می‌کند و همزمان یک پاسخ مناسب، ارسال می‌کند.
   RETURN: باعث ادامه پردازش یک بسته در زنجیره‌ی فراخواننده می‌شود. 

جدول (Table):

جداول مجموعه اي از زنجيرها هستند. زنجيرهايي را که در يک دسته قرار مي گيرند، درون يک جدول تعريف مي کنند. اين طبقه بندي ها باعث سهولت کار کاربران و بالا رفتن سرعت مي شوند.هر جدول هدف خاصی دارد و در IPTables، چهار جدول وجود دارد: جداول Filter، Nat، Raw و Mangle. حال به بررسی این جداول می پردازیم:

جدول Filter: تمام قوانين و زنجيرهايي که به نوعي کار حذف يا عبور بسته را انجام مي دهند در اين جدول قرار مي گيرند. براي نمونه، قانون حذف بسته ها از آدرس 92.40.10.05 در اين جدول است. زنجيرهاي Input، Forward و Output در اين جدول قرار دارند.

جدول NAT: شامل تمام قوانين و زنجيرهايي است که کار ترجمه يا تغيير آدرس(IP بسته ها) را بر عهده دارند. براي نمونه، قانون تغيير آدرس 23.10.10.9 به آدرس 80.90.90.00 در اين جدول قرار مي گيرد. زنجيرهاي Prepouting و postrouting در اين جدول قرار دارند.

جدول Mangle: قانون ها و زنجيرهاي پيشرفته مربوط به تغيير و دستکاري سرآيند( Header) بسته ها در اين جدول طبقه بندي مي شوند. تفاوت جدول NAT و Mangle در اين است که در NAT فقط آدرس ها تغيير يا دستکاري مي شوند، اما در Mangle فيلدهاي ديگر سرآيند بسته ها دستکاري مي شوند. زنجيرهاي Prerouting، Input و Output در اين جدول قرار دارند.


پیگیری اتصال :

یکی از مهم‌ترین ویژگی‌های Netfilter پیگیری اتصال است. پیگیری اتصال این امکان را به هسته می‌دهد که کلیه اتصال‌های شبکه یا جلسه‌ها را پیگیری کند و بدین‌وسیله کلیه بسته‌هایی که با هم یک اتصال را تشکیل می‌دهند، به هم مرتبط کند. NAT به این اطلاعات برای ترجمه‌ی بسته‌های مرتبط به هم نیاز دارد و IPTables می‌تواند از این اطلاعات استفاده کند و مانند یک دیواره آتش حالت‌دار عمل کند. پیگیری اتصال، هر بسته را به حالت‌های ‌ مختلف به شرح زیر طبقه‌‌بندی می‌کند:

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

زنجیره ( Chain):

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

شکل1. ساختار IPTables

مهم‌ترین زنجیره‌های توکار عبارتند از INPUT، OUTPUT و FORWARD

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

دو زنجیره‌ی دیگر عبارتند از PREROUTING و POSTROUTING که اصلاح سرآیند بسته‌ها را قبل و بعد از عمل مسیریابی توسط هسته، انجام می‌دهند.

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

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

الگو:Oskar Andreasson, "Iptables Tutorial 1.2.2", 2006. {{ Netfilter: Firewalling, NAT and Packet Mangling for Linux.www.netfilter.org[۱]}} الگو:Steve Suehring, Robert Ziegler, "Linux Firewalls, Third Edition", Sams Publishing, September2005.

الگو:Michael Rash, "Linux Firewalls: Attack Detection and Response with iptables, psad, and fwsnort",Nostarch Press, 2007

  1. http://www.netfilter.org