IP6TABLES(8) iptables 1.8.11 IP6TABLES(8)

ip6tables - ابزار مدیریت برای فیلتر کردن بسته‌ها و NAT در IPv6

iptables [-t table] {-A|-C|-D|-V} chain rule-specification

ip6tables [-t table] {-A|-C|-D|-V} chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -R chain rulenum rule-specification

iptables [-t table] -D chain rulenum

iptables [-t table] -S [chain [rulenum]]

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

iptables [-t table] -N chain

iptables [-t table] -X [chain]

iptables [-t table] -P chain policy

iptables [-t table] -E old-chain-name new-chain-name

rule-specification := [matches...] [target]

match := -m matchname [per-match-options]

target := -j targetname [per-target-options]

ابزارهای iptables و ip6tables برای برپایی، نگهداری و بازرسی جدول‌های قوانین فیلتر بسته‌های IPv4 و IPv6 در هسته لینوکس استفاده می‌شوند. چندین جدول مختلف می‌توان تعریف کرد. هر جدول شامل تعدادی زنجیره (chain) داخلی است و همچنین می‌تواند شامل زنجیره‌های تعریف‌شده توسط کاربر باشد.

هر زنجیره فهرستی از قوانین است که می‌تواند با مجموعه‌ای از بسته‌ها تطبیق یابد. هر قانون مشخص می‌کند با بسته‌ای که مطابقت دارد چه باید کرد. به این عمل «هدف» (“target”) می‌گویند که می‌تواند یک پرش (jump) به زنجیره تعریف‌شده توسط کاربر در همان جدول باشد.

یک قانون دیوار آتش، معیارها را برای یک بسته و یک هدف مشخص می‌کند. اگر بسته مطابقت نداشته باشد، قانون بعدی در زنجیره بررسی می‌شود؛ اگر مطابقت داشته باشد، قانون بعدی با مقدار هدف تعیین می‌گردد، که می‌تواند نام یک زنجیره تعریف‌شده توسط کاربر، یکی از اهداف شرح داده شده در iptables-extensions(8)، یا یکی از مقادیر ویژه ACCEPT، DROP یا RETURN باشد.

مقدار ACCEPT به معنای عبور دادن و پذیرش بسته است.

مقدار DROP به معنای انداختن و دور ریختن کامل بسته است.

مقدار RETURN به معنای توقف پیمایش زنجیره فعلی و بازگشت به قانون بعدی در زنجیره قبلی (فراخواننده) است. اگر به انتهای یک زنجیره داخلی برسید یا قانونی در یک زنجیره داخلی با هدف RETURN تطبیق داده شود، هدف تعیین‌شده توسط خط‌مشی (policy) زنجیره، سرنوشت بسته را رقم خواهد زد.

در حال حاضر پنج جدول مستقل وجود دارد (اینکه در هر لحظه کدام جدول‌ها در دسترس باشند، به گزینه‌های پیکربندی هسته و ماژول‌های بارگذاری‌شده بستگی دارد).

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

جدول‌ها به شرح زیر هستند:

این جدول پیش‌فرض است (اگر گزینه -t داده نشود). این جدول شامل زنجیره‌های داخلی زیر است: INPUT (برای بسته‌هایی که مقصد آن‌ها سوکت‌های محلی است)، FORWARD (برای بسته‌هایی که از طریق این رایانه روت/مسیریابی می‌شوند)، و OUTPUT (برای بسته‌های تولیدشده به صورت محلی).
این جدول هنگام برخورد با بسته‌ای که یک اتصال جدید ایجاد می‌کند، بررسی می‌شود. این جدول شامل چهار زنجیره داخلی است: PREROUTING (برای تغییر بسته‌ها به محض ورود)، INPUT (برای تغییر بسته‌های مقصد سوکت‌های محلی)، OUTPUT (برای تغییر بسته‌های تولیدشده محلی پیش از مسیریابی)، و POSTROUTING (برای تغییر بسته‌ها هنگامی که در آستانه خروج هستند). پشتیبانی از NAT در IPv6 از نسخه ۳.۷ هسته به بعد در دسترس است.
این جدول برای دستکاری و تغییر تخصصی بسته‌ها استفاده می‌شود. تا نسخه ۲.۴.۱۷ هسته، این جدول دو زنجیره داخلی داشت: PREROUTING (برای تغییر بسته‌های ورودی پیش از مسیریابی) و OUTPUT (برای تغییر بسته‌های تولیدشده محلی پیش از مسیریابی). از نسخه ۲.۴.۱۸ هسته، سه زنجیره داخلی دیگر نیز پشتیبانی می‌شوند: INPUT (برای بسته‌های ورودی به خود سیستم)، FORWARD (برای تغییر بسته‌هایی که از طریق سیستم مسیریابی می‌شوند)، و POSTROUTING (برای تغییر بسته‌ها زمانی که آماده ارسال به بیرون هستند).
این جدول عمدتاً برای پیکربندی معافیت‌ها از ردیابی اتصالات (connection tracking) در ترکیب با هدف NOTRACK استفاده می‌شود. این جدول با اولویت بالاتری در قلاب‌های (hooks) نت‌فیلتر ثبت می‌شود و بنابراین قبل از ip_conntrack یا هر جدول آی‌پی دیگری فراخوانی می‌گردد. این جدول زنجیره‌های داخلی زیر را فراهم می‌کند: PREROUTING (برای بسته‌های دریافتی از هر رابط شبکه) و OUTPUT (برای بسته‌های ایجادشده توسط پردازش‌های محلی).
این جدول برای قوانین شبکه‌ای کنترل دسترسی اجباری (MAC) استفاده می‌شود، مانند قوانینی که توسط اهداف SECMARK و CONNSECMARK فعال می‌شوند. کنترل دسترسی اجباری توسط ماژول‌های امنیتی لینوکس مانند SELinux پیاده‌سازی می‌شود. جدول security پس از جدول filter فراخوانی می‌شود و به هرگونه قوانین کنترل دسترسی اختیاری (DAC) در جدول filter اجازه می‌دهد تا قبل از قوانین MAC اعمال شوند. این جدول زنجیره‌های داخلی زیر را فراهم می‌کند: INPUT (برای بسته‌های ورودی به خود سیستم)، OUTPUT (برای تغییر بسته‌های تولیدشده محلی پیش از مسیریابی)، و FORWARD (برای دستکاری بسته‌های در حال مسیریابی از طریق سیستم).

گزینه‌هایی که توسط iptables و ip6tables شناسایی می‌شوند را می‌توان به چند گروه مختلف تقسیم کرد.

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

افزودن یک یا چند قانون به انتهای زنجیره انتخاب‌شده. هنگامی که نام مبدأ و/یا مقصد به بیش از یک آدرس برطرف (resolve) شود، به ازای هر ترکیب محتمل از آدرس‌ها یک قانون اضافه خواهد شد.
بررسی اینکه آیا قانونی مطابق با مشخصات ارائه‌شده در زنجیره انتخاب‌شده وجود دارد یا خیر. این دستور از همان منطق -D برای یافتن ورودی منطبق استفاده می‌کند، اما پیکربندی موجود iptables را تغییر نمی‌دهد و از کد خروج خود برای نشان دادن موفقیت یا شکست استفاده می‌کند.
حذف یک یا چند قانون از زنجیره انتخاب‌شده. دو نسخه از این دستور وجود دارد: قانون را می‌توان با شماره آن در زنجیره (با شروع از ۱ برای قانون اول) یا به صورت یک قانون تطبیق‌پذیر مشخص کرد.
درج یک یا چند قانون در زنجیره انتخاب‌شده با شماره قانون داده‌شده. بنابراین اگر شماره قانون ۱ باشد، قانون یا قوانین در ابتدای زنجیره درج می‌شوند. این حالت در صورت عدم تعیین شماره قانون، رفتار پیش‌فرض نیز هست.
جایگزین کردن یک قانون در زنجیره انتخاب‌شده. اگر نام‌های مبدأ و/یا مقصد به چندین آدرس برطرف شوند، دستور ناموفق خواهد بود. شماره‌گذاری قوانین از ۱ شروع می‌شود.
فهرست کردن تمام قوانین در زنجیره انتخاب‌شده. اگر هیچ زنجیره‌ای انتخاب نشود، تمام زنجیره‌ها فهرست می‌شوند. مانند هر دستور دیگر iptables، این گزینه برای جدول مشخص‌شده اعمال می‌شود (پیش‌فرض filter است)، بنابراین قوانین NAT با دستور زیر فهرست می‌شوند:
iptables -t nat -n -L
لطفاً توجه داشته باشید که این دستور اغلب با گزینه -n استفاده می‌شود تا از جستجوهای طولانی DNS معکوس جلوگیری گردد. همچنین مجاز است که گزینه -Z (صفر کردن) را نیز همراه آن مشخص کنید که در این صورت زنجیره(ها) به طور اتمیک فهرست شده و شمارنده‌هایشان صفر می‌شوند. خروجی دقیق تحت تأثیر سایر آرگومان‌های داده‌شده قرار می‌گیرد. جزئیات دقیق قوانین نمایش داده نمی‌شود مگر اینکه از دستور زیر استفاده کنید:
iptables -L -v
یا iptables-save(8).
چاپ تمام قوانین در زنجیره انتخاب‌شده. اگر زنجیره‌ای انتخاب نشود، تمام زنجیره‌ها همانند iptables-save چاپ می‌شوند. مانند هر دستور دیگر iptables، این دستور روی جدول مشخص‌شده اعمال می‌شود (پیش‌فرض filter است).
تخلیه (پاک کردن) زنجیره انتخاب‌شده (در صورت عدم تعیین، تمام زنجیره‌های جدول پاک می‌شوند). این کار معادل حذف تک تک قوانین به صورت یکی یکی است.
صفر کردن شمارنده‌های بسته و بایت در تمام زنجیره‌ها، یا فقط در زنجیره داده‌شده، یا فقط قانون داده‌شده در یک زنجیره. مجاز است که گزینه -L, --list (فهرست کردن) را نیز به همراه آن تعیین کنید تا شمارنده‌ها را بلافاصله پیش از پاک شدن مشاهده نمایید (به بخش بالا مراجعه کنید).
ایجاد یک زنجیره جدید تعریف‌شده توسط کاربر با نام داده‌شده. نباید از قبل هیچ هدفی با این نام وجود داشته باشد.
حذف زنجیره مشخص‌شده. نباید هیچ ارجاعی به این زنجیره وجود داشته باشد. در صورت وجود ارجاع، باید پیش از حذف زنجیره، قوانین ارجاع‌دهنده را حذف یا جایگزین کنید. زنجیره باید خالی باشد؛ یعنی هیچ قانونی در آن نباشد. اگر آرگومانی داده نشود، تمام زنجیره‌های خالی در جدول حذف خواهند شد. زنجیره‌های داخلیِ خالی فقط با iptables-nft قابل حذف هستند.
تنظیم خط‌مشی (policy) برای یک زنجیره داخلی (تعریف‌نشده توسط کاربر) با هدف داده‌شده. هدف خط‌مشی باید یکی از مقادیر ACCEPT یا DROP باشد.
تغییر نام زنجیره مشخص‌شده توسط کاربر به نام جدید ارائه‌شده. این تغییر جنبه ظاهری دارد و هیچ تاثیری بر ساختار جدول نمی‌گذارد.
راهنما. ارائه یک توضیح (در حال حاضر بسیار مختصر) درباره نحو (syntax) دستور.

پارامترهای زیر مشخصات یک قانون را تشکیل می‌دهند (همان‌طور که در دستورات افزودن، حذف، درج، جایگزینی و الحاق استفاده می‌شوند).

-4, --ipv4
این گزینه هیچ تأثیری در iptables و iptables-restore ندارد. اگر قانونی با استفاده از گزینه -4 تنها و تنها با ip6tables-restore درج شود، بدون هیچ پیامی نادیده گرفته می‌شود. هرگونه استفاده دیگر منجر به خطا خواهد شد. این گزینه اجازه می‌دهد قوانین IPv4 و IPv6 در یک فایل واحد برای استفاده مشترک با iptables-restore و ip6tables-restore قرار گیرند.
-6, --ipv6
اگر قانونی با استفاده از گزینه -6 تنها و تنها با iptables-restore درج شود، بدون هیچ هشداری نادیده گرفته می‌شود. هرگونه استفاده دیگر منجر به خطا خواهد شد. این گزینه اجازه می‌دهد قوانین IPv4 و IPv6 در یک فایل واحد برای استفاده مشترک با iptables-restore و ip6tables-restore قرار گیرند. این گزینه در ip6tables و ip6tables-restore هیچ تأثیری ندارد.
[!] -p, --protocol protocol
پروتکل قانون یا پروتکل بسته‌ای که باید بررسی شود. پروتکل مشخص‌شده می‌تواند یکی از مقادیر tcp، udp، udplite، icmp، icmpv6، esp، ah، sctp، mh یا کلمه کلیدی ویژه “all” باشد، یا می‌تواند یک مقدار عددی باشد که نشان‌دهنده یکی از این پروتکل‌ها یا پروتکلی دیگر است. نام پروتکل از فایل /etc/protocols نیز مجاز است. آرگومان «!» قبل از پروتکل، بررسی را معکوس می‌کند. عدد صفر معادل all است. مقدار “all” با همه پروتکل‌ها تطبیق می‌یابد و در صورت حذف این گزینه به عنوان پیش‌فرض در نظر گرفته می‌شود. توجه داشته باشید که در ip6tables، هدرهای توسعه IPv6 به جز esp مجاز نیستند. esp و ipv6-nonext را می‌توان در هسته نسخه ۲.۶.۱۱ یا بالاتر استفاده کرد. عدد صفر معادل all است؛ به این معنی که نمی‌توانید مستقیماً فیلد پروتکل را برای مقدار ۰ بررسی کنید. برای تطبیق روی هدر HBH، حتی اگر آخرین هدر باشد، نمی‌توانید از -p 0 استفاده کنید، بلکه همیشه به -m hbh نیاز دارید.
[!] -s, --source address[/mask][,...]
مشخصات مبدأ. address می‌تواند یک نام شبکه، یک نام میزبان (hostname)، یک آدرس آی‌پی شبکه (همراه با /mask)، یا یک آدرس آی‌پی ساده باشد. نام‌های میزبان فقط یک بار، قبل از ارسال قانون به هسته، برطرف (resolve) می‌شوند. لطفاً توجه داشته باشید که تعیین هر نامی که نیازمند پرس‌وجوی راه دور مانند DNS باشد، ایده بسیار بدی است. mask می‌تواند یک ماسک شبکه ipv4 (برای iptables) یا یک عدد ساده باشد که تعداد بیت‌های ۱ در سمت چپ ماسک شبکه را مشخص می‌کند. بنابراین، ماسک 24 در iptables معادل 255.255.255.0 است. وجود علامت «!» پیش از مشخصات آدرس، مفهوم آدرس را معکوس می‌کند. فلگ --src نام مستعاری برای این گزینه است. می‌توان چندین آدرس تعیین کرد، اما این کار به چندین قانون بسط می‌یابد (هنگام افزودن با -A)، یا باعث حذف چندین قانون می‌شود (با -D).
[!] -d, --destination address[/mask][,...]
مشخصات مقصد. برای توضیحات دقیق ساختار نحو، به توضیحات فلگ -s (مبدأ) مراجعه کنید. فلگ --dst یک نام مستعار برای این گزینه است.
تطبیق مورد استفاده را مشخص می‌کند؛ یعنی ماژول افزونه‌ای که یک ویژگی خاص را بررسی می‌کند. مجموعه تطبیق‌ها، شرطی را می‌سازند که تحت آن یک هدف فراخوانی می‌شود. تطبیق‌ها به ترتیبی که در خط فرمان مشخص شده‌اند، از اول به آخر ارزیابی می‌شوند و به صورت اتصال کوتاه (short-circuit) عمل می‌کنند؛ یعنی اگر یک افزونه نتیجه نادرست (false) بدهد، ارزیابی متوقف می‌شود.
هدف قانون را مشخص می‌کند؛ یعنی اگر بسته با آن مطابقت داشت چه کاری انجام شود. هدف می‌تواند یک زنجیره تعریف‌شده توسط کاربر (به غیر از زنجیره‌ای که این قانون در آن قرار دارد)، یکی از اهداف ویژه داخلی که بلافاصله سرنوشت بسته را تعیین می‌کنند، یا یک افزونه باشد (به بخش افزونه‌های تطبیق و هدف در زیر مراجعه کنید). اگر این گزینه در یک قانون حذف شود (و از -g نیز استفاده نشود)، تطبیق با قانون تأثیری بر سرنوشت بسته نخواهد داشت، اما شمارنده‌های آن قانون افزایش می‌یابند.
مشخص می‌کند که پردازش باید در یک زنجیره تعیین‌شده توسط کاربر ادامه یابد. بر خلاف گزینه --jump، مقدار RETURN پردازش را در این زنجیره ادامه نمی‌دهد، بلکه در زنجیره‌ای که ما را از طریق --jump فراخوانی کرده بود ادامه خواهد داد.
[!] -i, --in-interface name
نام رابط شبکه‌ای که بسته از طریق آن دریافت شده است (فقط برای بسته‌هایی که وارد زنجیره‌های INPUT، FORWARD و PREROUTING می‌شوند). هنگامی که آرگومان «!» قبل از نام رابط استفاده شود، معنای آن معکوس می‌شود. اگر نام رابط به یک «+» ختم شود، هر رابطی که با این نام شروع شود مطابقت خواهد داشت. اگر این گزینه حذف شود، هر نام رابطی مطابقت خواهد داشت.
[!] -o, --out-interface name
نام رابط شبکه‌ای که قرار است بسته از طریق آن ارسال شود (برای بسته‌هایی که وارد زنجیره‌های FORWARD، OUTPUT و POSTROUTING می‌شوند). هنگامی که آرگومان «!» قبل از نام رابط استفاده شود، معنای آن معکوس می‌شود. اگر نام رابط به یک «+» ختم شود، هر رابطی که با این نام شروع شود تطبیق خواهد یافت. اگر این گزینه حذف شود، هر رابطی مطابقت خواهد داشت.
[!] -f, --fragment
به این معنی است که این قانون فقط به قطعات دوم و بعدیِ بسته‌های تکه‌تکه‌شده (fragmented) IPv4 اشاره دارد. از آنجا که هیچ راهی برای تشخیص پورت‌های مبدأ یا مقصد چنین بسته‌ای (یا نوع ICMP) وجود ندارد، چنین بسته‌ای با هیچ قانونی که آن‌ها را مشخص کرده باشد مطابقت نخواهد داشت. هنگامی که آرگومان «!» قبل از فلگ -f قرار گیرد، قانون فقط با قطعات ابتدایی (head fragments) یا بسته‌های تکه‌تکه‌نشده تطبیق می‌یابد. این گزینه مختص IPv4 است و در ip6tables در دسترس نیست.
به مدیر سیستم امکان می‌دهد شمارنده‌های بسته و بایت یک قانون را مقداردهی اولیه کند (در طول عملیات INSERT، APPEND و REPLACE).

گزینه‌های اضافی زیر را می‌توان تعیین کرد:

خروجی پرجزئیات. این گزینه باعث می‌شود دستور فهرست، نام رابط شبکه، گزینه‌های قانون (در صورت وجود) و ماسک‌های TOS را نشان دهد. شمارنده‌های بسته و بایت نیز با پسوند‌های 'K'، 'M' یا 'G' به ترتیب برای ضرایب ۱,۰۰۰، ۱,۰۰۰,۰۰۰ و ۱,۰۰۰,۰۰۰,۰۰۰ فهرست می‌شوند (اما برای تغییر این وضعیت به فلگ -x مراجعه کنید). برای عملیات افزودن، درج، حذف و جایگزینی، این گزینه باعث می‌شود اطلاعات دقیقی در مورد قانون یا قوانین چاپ شود. -v را می‌توان چندین بار مشخص کرد تا احتمالاً پیام‌های اشکال‌زدایی دقیق‌تری نمایش داده شود: در صورت تعیین دو بار، iptables-legacy اطلاعات جدول و ورودی‌ها را در libiptc دامپ می‌کند، و iptables-nft قوانین را با نمایش netlink (کد ماشین مجازی) تخلیه می‌نماید. در صورت تعیین سه بار، iptables-nft تمام پیام‌های netlink ارسال‌شده به هسته را نیز تخلیه خواهد کرد.
نمایش نسخه برنامه و رابط برنامه‌نویسی هسته (Kernel API) مورد استفاده.
انتظار برای قفل xtables. برای جلوگیری از اجرای همزمان چندین نمونه از برنامه، تلاشی برای به دست آوردن یک قفل انحصاری هنگام راه‌اندازی انجام می‌شود. به طور پیش‌فرض، اگر قفل به دست نیاید، برنامه خارج می‌شود. این گزینه باعث می‌شود برنامه منتظر بماند (به طور نامحدود یا به مدت چند ثانیه مشخص‌شده در seconds) تا قفل انحصاری به دست آید.
خروجی عددی. آدرس‌های IP و شماره پورت‌ها با فرمت عددی چاپ خواهند شد. به طور پیش‌فرض، برنامه تلاش می‌کند آن‌ها را به عنوان نام میزبان، نام شبکه یا سرویس‌ها (در صورت امکان) نمایش دهد.
بسط دادن اعداد. نمایش مقدار دقیق شمارنده‌های بسته و بایت، به جای نمایش عدد گرد شده با K (ضریب‌های ۱۰۰۰)، M (ضریب‌های ۱۰۰۰K) یا G (ضریب‌های ۱۰۰۰M). این گزینه فقط برای دستور -L کاربرد دارد.
هنگام فهرست کردن قوانین، شماره خط را به ابتدای هر قانون مطابق با موقعیت آن قانون در زنجیره اضافه می‌کند.
هنگام افزودن یا درج قوانین در یک زنجیره، از command برای بارگذاری هرگونه ماژول لازم (اهداف، افزونه‌های تطبیق و غیره) استفاده می‌کند.

برنامه iptables از فایل /run/xtables.lock برای ایجاد یک قفل انحصاری هنگام اجرا استفاده می‌کند.

متغیر محیطی XTABLES_LOCKFILE می‌تواند برای بازنویسی و تغییر این تنظیمات پیش‌فرض استفاده شود.

ابزار iptables می‌تواند از ماژول‌های توسعه‌یافته تطبیق بسته و هدف استفاده کند. فهرستی از این ماژول‌ها در صفحه راهنمای iptables-extensions(8) در دسترس است.

پیام‌های خطای گوناگونی در خروجی خطای استاندارد چاپ می‌شوند. در صورت عملکرد صحیح، کد خروج ۰ است. خطاهایی که ناشی از پارامترهای نامعتبر یا نادرست خط فرمان به نظر می‌رسند، باعث کد خروج ۲ می‌شوند. خطاهایی که نشان‌دهنده ناسازگاری میان هسته و فضای کاربری هستند، کد خروج ۳ ایجاد می‌کنند. خطاهایی که نشان‌دهنده مشکل در منابع هستند، مانند مشغول بودن قفل، عدم موفقیت در تخصیص حافظه یا پیام‌های خطا از سوی هسته، منجر به کد خروج ۴ می‌شوند. در نهایت، سایر خطاها کد خروج ۱ تولید می‌کنند.

باگ و اشکال؟ این دیگر چیست؟ ;-) خب، شاید بخواهید نگاهی به https://bugzilla.netfilter.org بیندازید. اگر iptables متوجه شود که به عنوان یک برنامه setuid-to-root فراخوانی شده است، بلافاصله با کد خطای ۱۱۱ خارج می‌شود. ابزار iptables را نمی‌توان با این روش به صورت ایمن استفاده کرد، زیرا به کتابخانه‌های اشتراکی (تطبیق‌ها، هدف‌ها) که در زمان اجرا بارگذاری می‌شوند اعتماد می‌کند و مسیر جستجوی آن‌ها می‌تواند با متغیرهای محیطی تنظیم شود.

ابزار iptables بسیار شبیه به ipchains اثر راستی راسل (Rusty Russell) است. تفاوت اصلی این است که زنجیره‌های INPUT و OUTPUT به ترتیب فقط برای بسته‌های ورودی به هاست محلی و بسته‌های نشأت‌گرفته از هاست محلی پیمایش می‌شوند. بنابراین هر بسته فقط از یکی از سه زنجیره عبور می‌کند (به استثنای ترافیک لوپ‌بک که هر دو زنجیره INPUT و OUTPUT را شامل می‌شود)؛ در گذشته، یک بسته فورواردشده از هر سه زنجیره عبور می‌کرد.

تفاوت اصلی دیگر این است که -i به رابط ورودی اشاره دارد؛ -o به رابط خروجی اشاره می‌کند، و هر دوی آن‌ها برای بسته‌هایی که وارد زنجیره FORWARD می‌شوند در دسترس هستند.

شکل‌های گوناگون NAT از یکدیگر تفکیک شده‌اند؛ iptables هنگام استفاده از جدول پیش‌فرض 'filter' همراه با ماژول‌های افزونه اختیاری، یک فیلتر بسته خالص است. این ویژگی باید از بسیاری از سردرگمی‌ها در رابطه با ترکیب مبدل‌سازی آی‌پی (IP masquerading) و فیلتر کردن بسته که پیش‌تر دیده می‌شد جلوگیری کند. بنابراین گزینه‌های زیر به شکل متفاوتی مدیریت می‌شوند:

-j MASQ
-M -S
-M -L
چندین تغییر دیگر نیز در iptables وجود دارد.

iptables-apply(8)، iptables-save(8)، iptables-restore(8)، iptables-extensions(8)،

راهنمای packet-filtering-HOWTO جزئیات استفاده از iptables را برای فیلتر کردن بسته‌ها شرح می‌دهد، سند NAT-HOWTO جزئیات NAT را بیان می‌کند، سند netfilter-extensions-HOWTO افزونه‌هایی را که در توزیع استاندارد نیستند شرح می‌دهد، و سند netfilter-hacking-HOWTO جزئیات ساختار داخلی netfilter را بررسی می‌کند.
همچنین ببینید: https://www.netfilter.org.

راستی راسل (Rusty Russell) در ابتدا با مشورت مایکل نولینگ (Michael Neuling) برنامه iptables را نوشت.

مارک بوچر (Marc Boucher) با رایزنی برای ایجاد یک چارچوب کلی انتخاب بسته در iptables باعث شد راستی ipnatctl را کنار بگذارد، سپس جدول mangle، تطبیق مالک (owner match) و امکانات mark را نوشت و کارهای جالب فراوانی انجام داد.

جیمز موریس (James Morris) هدف TOS و تطبیق tos را نوشت.

یوزف کادلچیک (Jozsef Kadlecsik) هدف REJECT را نوشت.

هارالد ولته (Harald Welte) اهداف ULOG و NFQUEUE، کتابخانه جدید libiptc و همچنین تطبیق‌ها و اهداف TTL، DSCP و ECN را نوشت.

تیم هسته Netfilter عبارتند از: Jozsef Kadlecsik، Pablo Neira Ayuso، Eric Leblond، Florian Westphal و Arturo Borrero Gonzalez. اعضای سابق تیم هسته: Marc Boucher، Martin Josefsson، Yasuyuki Kozakai، James Morris، Harald Welte و Rusty Russell.

صفحه راهنما در ابتدا توسط Herve Eychenne <rv@wallfire.org> نوشته شده است.

این صفحه راهنما مربوط به iptables/ip6tables نسخه 1.8.11 است.

iptables 1.8.11