Iptables
iptables یک ابزار برای فایروالینگ (فایروال لینوکس کرنل اش است) در گنو/لینوکس است؛ که بروی بیشتر توزیع‌های لینوکس به صورت پیش‌فرض نصب است. آی‌پی‌تیبلز نام ابزاری است که قادر به اجرای هر سیاستی در سطح لایه ترانسفر و تا حدودی لایه‌های پایین‌تر و بالاتر شبکه است اما شهرت و محبوبیت اصلی این نرم‌افزارِ سطح هسته، به انعطاف بی حد و حصر آن در لایه ترانسفر مربوط می‌شود آنجا که حرف از روتینگ بسته‌ها (Packets) و وضعیت آن‌ها است.
Iptables توسط تیم netfilter طراحی شد. در ابتدا به علت ساختار زنجیره‌ای طراحی آن، به نام ipchain شهرت یافت اما بعدها نام iptables بر آن گذاشته شد. این دیوار آتش (Firewall) در ابتدا تنها می‌توانست سیاست‌های بسیار محدودی فقط روی بسته‌های ورودی اعمال کند اما به مرور زمان قسمت‌های ماژول مانندی به آن اضافه شد.اینها تنها تعدادی از زنجیره‌های اصلی هستند که ما را در سیاست‌گذاری روی بسته‌ها یاری می‌کنند. گفتنی است که استفاده از یک دیوار آتش سطح هسته مثل 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 می‌پردازیم.
ترجمهٔ آدرس شبکه (NAT)
هر کامپیوتری در ارتباط با دیگرکامپیوترها و سرویس‌دهندگان وب نیاز به یک آدرس IP دارد. با گسترش اینترنت و رشد استفاده خانگی و شبکه‌های کاری به نظر می‌رسد تعداد آدرس‌های IP موجود کافی نباشد. یک راه حل ساده، طراحی مجدد قالب آدرس IP است که امکان داشتن تعداد آدرس‌های بیشتری را می‌دهد، اما چندین سال طول می‌کشد تا این راه حل پیاده‌سازی شود و نیازمند اصلاح کل زیرساخت اینترنت است. در این‌جا NAT مشکل را حل می‌کند. NAT به یک دستگاه منفرد مثلاً یک مسیریاب این امکان را می‌دهد که به عنوان رابط بین اینترنت و یک شبکهٔ محلی مشخص عمل کند. در این صورت یک IP منفرد می‌تواند برای یک مجموعهٔ کامپیوتر استفاده شود. کمبود تعداد آدرس‌های IP تنها دلیل استفاده ازNAT نیست. فواید دیگری چون برقراری امنیت و مدیریت بهتر نیز از مزایای استفاده از NAT است. مفهوم NAT بسیار ساده و به این معنا است که یک دستگاه (مثل کامپیوتر یا مسیریاب) به عنوان دروازهٔ ورود به اینترنت عمل می‌کند و با این کار آدرس‌های ایستگاه‌های کاری را به آدرس دستگاهی که NAT روی آن فعال است ترجمه می‌کند، به بیان دیگرNAT روی دستگاهی که به اینترنت متصل است فعال می‌شود و ایستگاه‌های کاری و به‌طور کلی شبکه را از دید اینترنت پنهان می‌کند. از سوی دیگر اینترنت شبکه را به‌صورت یک دستگاه ساده می‌بیند که به اینترنت متصل می‌باشد. NAT روی شبکه تغییر ایجاد نمی‌کند و نیازی به تنظیمات دوباره روی ایستگاه‌های کاری نیست. فقط ایستگاه‌های کاری می‌بایست آدرس دروازهٔ خروجی از شبکه را که همان آدرس دستگاهی است که NAT روی آن فعال شده‌است را بدانند.
هستهٔ لینوکس از سری۱٫۱ داری IPFilter بوده‌است. برای تنظیم قوانین فیلترکردن بسته‌ها از ابزاری به نام ipfwadm استفاده می‌شد. در لینوکس ۲٫۲ ابزاری به نام IPChains معرفی شد و سرانجام برای لینوکس ۲٫۴ ابزار IPTables معرفی شد. در حقیقت IPTables ابزاری است که با هسته سخن می‌گوید و به آن می‌گوید که چه بسته‌هایی را فیلتر کند. علاوه بر فیلتر کردن بسته‌ها، برای ایجاد و دستکاری قوانین ماژول‌های NAT نیز استفاده می‌شود، زیرا NAT نیز از طریق مجموعه قوانین IPFilter پیکربندی می‌شود. اغلب نام IPTables برای کل زیرساخت دیواره آتش که شامل Netfilter، پیگیری اتصال و NAT است، استفاده می‌شود. ویژگی‌های اصلی IPTables عبارتند از:
به دلیل این که IPTables به امتیازات خاصی برای اجرا نیاز دارد، باید حتماً توسط کاربر root اجرا شود. در اکثر سیستم‌های لینوکس IPTables در شاخهٔ usr/sbin/iptables نصب می‌شود و با اجرای دستور man iptables می‌توان به مستندات مربوط به آن دسترسی پیدا کرد. پروژهٔ netfilter/IPTables در سال ۱۹۹۸ میلادی توسط Rusty Russell که توسعه‌دهندهٔ IPChains نیز بود شروع شد. با پیشرفت پروژه، تیم Netfilter شکل گرفت. نرم‌افزار توسعه داده شده توسط آن‌ها تحت لیسانس GNU/GPL است. چارچوب Xtables به مدیر سیستم امکان تعریف جدول‌هایی را می‌دهد که شامل زنجیره‌هایی از قوانین هستند. هر قانون مشخص می‌کند که با بسته چگونه برخورد شود. هر جدول با نوع خاصی از پردازش بسته، سروکار دارد. بسته‌ها با پیمایش زنجیره‌ها پردازش می‌شوند. یک قانون در یک زنجیره می‌تواند یک بسته را به زنجیره دیگری بفرستد و این روند تا هر جایی می‌تواند ادامه داشته باشد. هر بسته ورودی یا خروجی از شبکه حداقل یک زنجیره را می‌پیماید. منبع بسته مشخص می‌کند که در ابتدا چه زنجیره‌ای را بپیماید. جداول توکار سیاست‌هایی دارند. برای مثال بسته‌ای که به انتهای زنجیره برسد، حذف می‌شود. مدیر سیستم می‌تواند به تعداد دلخواه زنجیره ایجاد کند. برای این زنجیره‌ها سیاست تعریف نشده است و اگر بسته‌ای به انتهای این‌گونه زنجیره‌ها برسد، دوباره به زنجیره‌ای که آن را فراخوانی کرده‌است، بازمی‌گردد. هر قانون در یک زنجیره با انواع بسته‌های خاصی انطباق می‌یابد. همچنین قانون ممکن است یک هدف داشته باشد. وقتی بسته‌ای یک زنجیره را می‌پیماید، هر قانون، آن را بررسی می‌کند. اگر قانون با بسته انطباق پیدا نکند، بسته به قانون بعدی فرستاده می‌شود و اگر قانون با بسته انطباق یابد، طبق آنچه در هدف مشخص شده با بسته برخورد می‌شود. بسته به پیمایش پیوسته در زنجیره ادامه می‌دهد تا (۱) یک قانون با آن بسته انطباق یابد که در این صورت در مورد سرنوشت نهایی بسته تصمیم گرفته می‌شود (مثلاً بسته قبول یا حذف می‌شود) یا (۲) یک قانون، هدف بازگشت را فراخوانی کند و بسته به زنجیرهٔ فراخواننده بازگردد یا (۳) بسته به انتهای زنجیره برسد.
در ادامه این بخش، تعدادی از عبارات و اصطلاحاتی که بیشترین کاربرد را دارند و برای درک مطالب بعدی لازم هستند، شرح داده می‌شوند.
انطباق:
این کلمه با دو معنی مختلف به‌کار می‌رود. معنی اول: یک انطباق منفرد که به یک قانون می‌گوید که یک سرآیند باید محتوی چه اطلاعاتی باشد. مثلاً انطباق—source به ما می‌گوید که آدرس منبع باید یک میزبان خاص یا محدوده خاصی از شبکه باشد. هر قانون از یک یا چندین انطباق تشکیل شده‌است. معنی دوم: اگر کل یک قانون در مورد یک بسته صدق کند می‌گوییم بسته با قانون انطباق یافته‌است. چند نمونه از پرکاربردترین انطباق‌ها در ادامه آورده شده‌اند:
قانون (Rule):
مجموعه‌ای از یک یا چندین انطباق به همراه یک هدف است که در اکثر پیاده‌سازی‌های IPTables، یک قانون مجموعه‌ای از چندین انطباق است. در بعضی از پیاده‌سازی‌ها می‌توانیم چندین هدف برای هر قانون داشته باشیم.
مجموعهٔ قوانین:
مجموعه‌ای از قوانین در پیاده‌سازی IPTables می‌باشد. مجموعهٔ قوانین در یک فایل پیکربندی نوشته می‌شوند.
پرش:
دستورالعمل JUMP مانند یک هدف است و دقیقاً مانند آن نوشته می‌شود. با این تفاوت که به جای نوشتن نام هدف، نام یک زنجیرهٔ دیگر نوشته می‌شود. اگر قانون انطباق داشت، بسته به زنجیرهٔ بعدی فرستاده می‌شود و در آن پردازش می‌شود.
هدف:
به‌طور کلی هر قانون موجود در مجموعهٔ قوانین یک مجموعهٔ هدف دارد. اگر کل قانون به‌طور کامل انطباق پیدا کند، تعریف هدف مشخص می‌کند که باید با بسته چه کرد. مثلاً می‌گوید که باید آن را قبول، حذف یا آدرس IP آن را ترجمه کرد. یک قانون ممکن است پرش یا هدف داشته باشد یا نداشته باشد. در ادامه چند هدف پرکاربرد آورده شده است:
جدول (Table):
جداول مجموعه‌ای از زنجیرها هستند. زنجیرهایی را که در یک دسته قرار می‌گیرند، درون یک جدول تعریف می‌کنند. این طبقه‌بندی‌ها باعث سهولت کار کاربران و بالا رفتن سرعت می‌شوند. هر جدول هدف خاصی دارد و در IPTables، چهار جدول وجود دارد: جداول Filter, Nat, Raw و Mangle. حال به بررسی این جداول می‌پردازیم:
جدول Filter: تمام قوانین و زنجیرهایی که به نوعی کار حذف یا عبور بسته را انجام می‌دهند در این جدول قرار می‌گیرند. برای نمونه، قانون حذف بسته‌ها از آدرس ۹۲٫۴۰٫۱۰٫۰۵ در این جدول است. زنجیرهای Input, Forward و Output در این جدول قرار دارند.
جدول NAT: شامل تمام قوانین و زنجیرهایی است که کار ترجمه یا تغییر آدرس(IP بسته‌ها) را بر عهده دارند. برای نمونه، قانون تغییر آدرس ۲۳٫۱۰٫۱۰٫۹ به آدرس ۸۰٫۹۰٫۹۰٫۰۰ در این جدول قرار می‌گیرد. زنجیرهای Prerouting و postrouting در این جدول قرار دارند.
جدول Mangle: قانون‌ها و زنجیرهای پیشرفته مربوط به تغییر و دستکاری سرآیند(Header) بسته‌ها در این جدول طبقه‌بندی می‌شوند. تفاوت جدول NAT و Mangle در این است که در NAT فقط آدرس‌ها تغییر یا دستکاری می‌شوند، اما در Mangle فیلدهای دیگر سرآیند بسته‌ها دستکاری می‌شوند. زنجیرهای Prerouting, Input و Output در این جدول قرار دارند.
پیگیری اتصال:
یکی از مهم‌ترین ویژگی‌های Netfilter پیگیری اتصال است. پیگیری اتصال این امکان را به هسته می‌دهد که کلیه اتصال‌های شبکه یا جلسه‌ها را پیگیری کند و بدین‌وسیله کلیه بسته‌هایی که با هم یک اتصال را تشکیل می‌دهند، به هم مرتبط کند. NAT به این اطلاعات برای ترجمهٔ بسته‌های مرتبط به هم نیاز دارد و IPTables می‌تواند از این اطلاعات استفاده کند و مانند یک دیواره آتش حالت‌دار عمل کند. پیگیری اتصال، هر بسته را به حالت‌های مختلف به شرح زیر طبقه‌بندی می‌کند:
زنجیره (Chain):
یک زنجیره یک مجموعهٔ قانون است که بر روی بسته‌هایی که زنجیره را می‌پیمایند، اعمال می‌شود. هر زنجیره یک هدف خاص دارد. هر جدول یک مجموعهٔ زنجیره توکار دارد اما کاربر نیز می‌تواند زنجیره‌هایی را تعریف کند.
شکل۱. ساختار IPTables
مهم‌ترین زنجیره‌های توکار عبارتند از INPUT, OUTPUT و FORWARD
دو زنجیرهٔ دیگر عبارتند از PREROUTING و POSTROUTING که اصلاح سرآیند بسته‌ها را قبل و بعد از عمل مسیریابی توسط هسته، انجام می‌دهند.
احمدزادگان، صادق.گروه امنیتی آفتاب.iptable. عصر ارتباط، ۱۱ دی ۱۳۸۹، شماره ۳۸۹.pdf