Netfilter & IPtables

Netfilter & IPtables



چکیده

ساختار Netfilter جهت پردازش پویای بسته های شبکه در سیستم عامل لینوکس طراحی و پیاده‌سازی شده است. این مستند ضمن معرفی معماری Netfilter، معماری Iptables به عنوان ابزاری پیاده‌سازی شده بر مبنای Netfilter برای پالایش(Filtering) بسته های شبکه، را مورد بررسی قرار میدهد.

 

1 Netfilter یا ساختار پردازش بسته های شبکه

انجام پردازش دلخواه بر روي بسته‌هاي شبکه ( بسته‌هاي متعلق به پروتکلهاي لاية شبکه ) مستلزم شناخت مناسب Protocol Stack مربوط به پروتکل مربوطه مي‌باشد. Protocol Stack نمايشگر پردازشهاي انجام گرفته بر روي بستة شبکه و همچنين ترتيب آنها در امتداد مسيرهاي پردازشي مي‌باشد.

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

تصميم بر انجام تغيير دلخواه بر روي بستة شبکه مستلزم شناختِ مکان مناسب در مسيرهاي پردازشي، در درون لايه شبکه، و سپس انجام تغيير در پردازش صورت گرفته در آن مکان مي‌باشد. اين موضوع تا اندازه‌اي سلامت ساختار Protocol Stack را به خطر مي‌اندازد.

ساختار پردازش، تلاشي براي ايجادِ امکانِ دستکاريِ دلخواهِ بسته‌هاي شبکه بدون ايجادِ تغيير در ساختار Protocol Stack سيستم، مي‌باشد.

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

اين ساختار در سيستم عامل لينوکس با نام netfilter شناخته مي‌شود.

 

1.1 NetFilter

netfilter چهارچوبي است براي مديريت و پردازش بسته­هاي شبكه، مستقل از پروتكل مربوطه. از ديدگاه پياده‌سازي، netfilter جايگاهي براي نگهداري ماژولهاي خواهانِ پردازشِ بسته‌هاي شبکه، در قالب مجموعه­هايي با نام hook که توسط پروتکل‌هاي مختلف در netfilter تعريف شده‌اند، مي‌باشد. hookها همان مکانهاي ثبت فانکشنها در تعريف ساختار پردازش مي‌باشند.

در صورتي كه بسته­اي خواستار عبور از درون مجموعه­اي مشخص (hook) باشد، اين بسته توسطnetfilter در اختيار تك‌تك ماژولها قرار مي­گيرد، ماژولها مشخص‌كنندة وضعيت بستة عبوري خواهند بود، يعني مي‌توانند بنا به تصميمات خود به آن اجازه عبور بدهند (NF-ACCEPT) ، آن را از گردونه حذف كنند (NF-DROP) و يا آن را براي انجام پردازش در سطح کاربر در صف قرار دهند (NF-QUEUE) و ....

پروتكل IP، به منظور مديريت آسان بسته‌هاي IP، پنج مجموعه را در اين چهار چوب تعريف مي‌کند. مي‌توانيد نحوة نامگذاري اين مکانها و نحوة عبور بسته‌هاي IP از درون آنها، را در شکل1 مشاهده کنيد. هر ماژولي كه خواستار بررسي و تعيين وضعيت بسته­هاي IP باشد مي‌تواند خود را در يكي از اين مجموعه­ها ثبت كند.

اين گونه رفتار با بسته­هاي IP اين امكان را به ما مي­دهد تا بدون دستكاري در ساختار Protocol stack بتوانيم به اهداف خود، نظير پياده­سازي ديواره‌هاي آتش و انجام اعمال NAT 1 ، دست يابيم.

 

تصویر 1: شمای hookها در Netfilter

اين ارتباط راهگشاي ما در يافتن مكان مناسب براي مديريت بسته­ها خواهد بود. به عنوان مثال براي انجام عملfiltering مجموعه‌هاي NF-IP-INPUT، NF-IP-OUTPUT، NF-IP-FORWARD انتخاب شده‌اند. بدين صورت، تمام بسته‌هاي عبوري از سيستم تنها در يک مکان بررسي خواهند شد.

مثالي ديگر: براي انجام عمل NAT، مجموعه­هاي NF-IP-PREROUTING، NF-IP-OUTPUT براي انجامِ عملِ انتقال آدرس مبداء2 و NF-IP-POSTROUTING براي انتقال آدرس مقصد3 ، انتخاب شده­اند. ِبه هر صورت اين چهارچوب امكان بسيار خوب و ساده­اي را در اختيار پياده­سازان ديواره‌هاي ‌آتش قرار داده است.

 

2 IPtables : ساختار پالايش بسته‌هاي IP

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

ساختار پالايش بسته‌هاي IP (iptables) به دنبال ايجاد چهارچوبي جهت ذخيره‌سازي و مديريتِ مناسب قانونها مي‌باشد. اين ساختار سعي خواهد کرد تا با توجه به استراتژي و سياست خود در مديريت قانونها، امکان تعيين تکليف بسته را با توجه به قانونهاي موجود فراهم آورد.

ملزومات هر ساختار پالايش عبارتند از:

  1. ساختمان دادة انباره

  2. ساختمان دادة قانون

  3. رابط مديريت قانونها

  4. رابط ايجاد انباره

  5. رابط مديريت انباره

  6. الگوريتم جستجو

  7. رابط تعيين تکليف بسته

بدين صورت در پياده‌سازي يک فرآيندِ دسته‌بندي نيازي به پياده‌سازي يک انباره و الگوريتم جستجوي مستقل نخواهد بود، بلکه مي‌توان از ويرايش موجود در ساختار پالايش استفاده کرد. در اين ساختار هر فرآيند مي‌بايست پردازشهاي و تطابقهاي مناسب براي قوانين متعلق به خود را تعريف و همچنين ملزومات لازم براي انجام مناسب آنها را فراهم آورد ( با توجه به اينکه هر قانون شامل چند تطابق و يک پردازش مي‌باشد ).

ساختار پالايش بسته‌هاي IP، از تقسيم موضوعي فرآيند دسته‌بندي بسته‌هاي شبکه به منظور ايجاد چندين فرآيند دسته‌بندي، مربوط به موضوعات کاري مختلف (filter, NAT, mangle, …) ،استفاده مي‌کند. طرح اين عمل بدان دليل مي‌باشد که محقق شدن هر موضوع کاري در مکانهاي خاصي از ساختار پالايش بستة IP امکانپذير مي‌باشد، چنانکه عمل NAT هرگز نمي‌تواند در مکان FORWARD انجام شود، چرا که تنها مکانهاي مناسب براي آن قبل و بعد از انجام عمل مسيريابي مي‌باشند، و به همين صورت نمي‌توان عمل filtering را در مکان PREROUTING انجام داد چرا که اين موضوع ناقض قانون تست بسته تنها در يک مکان ( فقط يک مرتبه) در موضوع کاري filter مي‌باشد. در نتيجه به جاي ساخت يک موضوع کاري گنده و وزين با تقسيم آن به موضوعات کاري مختلف که نيازهاي متفاوتي را مي‌طلبند، پياده‌سازي‌هاي جداگانه‌اي را براي هر يک انجام داده است.

هر موضوع کاري در ابتداي شروع به کار خود، انباره‌اي را در IPtables با نام خودش ايجاد مي‌کند، و سپس به منظور اعمال قوانين دسته‌بندي، خود را در مکان‌هاي مناسبِ ساختار پردازش بسته‌هاي IP ثبت مي‌کند. ثبت در مکانها با توجه به هدفِ موردِ نظرِ موضوع‌کاري انجام مي‌شود.

IPtables به منظور مديريت بهتر بسته‌هاي شبکه فضاي انباره‌هاي خود را به واحدهايي با نام زنجيره4 تقسيم کرده است. هر موضوع کاري در هنگام ايجاد انبارة خود، زنجيره‌هايي5 را متناظر با مکانهاي ثبت در ساختار پردازش بسته‌هاي IP، ايجاد مي‌کند تا بدين طريق مديريت بسته‌هاي عبوري از هر مکان با استفاده از قانونهاي موجود در زنجيرة متعلق بدان مکان انجام شود.

وجود زنجيره‌ها در هر انباره، با خصوصيات ذکر شده در بالا، امکان انجام پردازشهاي جداگانه در امتداد مسيرهاي پردازشي مختلف، بر روي بسته‌هاي شبکه، را فراهم مي‌کند.

هر موضوع‌کاري با دريافت يک بسته، رابطِ تعيين تکليف بسته (اين رابط يک فانکشن با نام ipt_do_table مي‌باشد) را فراخواني مي‌کند و IPtables نيز با توجه به موضوع‌کاري فراخواننده، انبارة مناسب را، و با توجه به مکان دريافت بسته در ساختار پردازش IP، زنجيرة مربوطه را مشخص و به جستجو در بين قوانين موجود در آن زنجيره به منظور تعيين تکليف بسته مي‌پردازد.

انباره‌هاي ايجاد شده در IPtables با نام جدول6 شناخته مي‌شوند، که دليل نامگذاري آن به صورت IPtables وجود جداول مختلف، مربوط به موضوعات کاري گوناگون، مي‌باشد.

 

2.1 قانونها در IPtables

هر قانون در IPtables از سه قسمت تشکيل مي‌شود:

  1. شناسه: شامل آدرس مبدا، آدرس مقصد، درگاه ورودي، درگاه خروجي و پروتکل بستة شبکه مي‌باشد. اين اطلاعات، بسته‌هاي شبکة متعلق به جرياني را که اين قانون نمايندة آن مي‌باشد، به صورت ايستا متمايز مي‌کنند.

  2. تطابق‌ها7: فانکشنهايي مي‌باشند که بسته‌هاي شبکه را به طرز دلخواه پردازش مي‌کنند. هر قانون مي‌تواند صفر يا چند تطابق داشته باشد. شرط تطابق بسته با يک قانون در مرحلة اول تطابق با شناسة قانون و در مرحلة دوم پذيرفته شدن توسط تک‌تکِ تطابقها مي‌باشد.

  3. پردازش8: (مشخص‌کنندة تکليف بسته) يک فانکشن يا نام يک زنجيره و يا يک مورد استاندارد مي‌باشد. پردازش براي يک بسته در صورتي فراخواني خواهد شد که بسته با قانون تطابق داشته باشد.

    • در حالت استاندارد به صورت مستقيم تکليف بسته را مشخص مي‌کند (براي آگاهي از مقادير استاندارد نگاه کنيد به قسمت جستجو در IPtables – فرمانهاي صادره).

    • در صورت بيان پردازش به صورت يک فانکشن، بسته‌ به منظور انجام پردازش در اختيار فانکشن قرار مي‌گيرد و تکليف بسته توسط فانکشن مشخص خواهد شد.

    • فقط زنجيره‌هاي کاربر9 مي‌توانند به عنوان پردازش مورد استفاده قرار گيرند. اين زنجيره‌ها توسط کاربران IPtables تعريف مي‌شوند و متفاوت از زنجيره‌هايي هستند که توسط موضوعات کاري ايجاد مي‌شوند، چرا که اين زنجيره‌ها قابل حذف شدن هستند درست بر خلاف زنجيره‌هاي متعلق به موضوعات‌کاري. وجود اين زنجيره‌ها به منظور ايجاد فضاي پردازش انعطافپذير و پويا مي‌باشد. در اين حالت تمام بسته‌هاي مطابق با اين قانون به درون زنجيرة ذکر شده گسيل داده خواهند شد و بدين صورت قانونهاي موجود در آن زنجيره مشخص کنندة تکليف بسته خواهند بود.

تطابقها و پردازشها(به صورت فانکشن) جزو ابزار توسعة IPtables به حساب مي‌آيند. اين موضوع بدان معني است که ساخت و گسترش آنها نيازي به ايجاد تغيير در IPtables ندارد بلکه با استفاده از رابطي که به همين منظور در نظر گرفته شده است اين ابزارها امکان ثبت و استفاده شدن دارند.

قدرت IPtables در حد زيادي وابسته به پردازشها و تطابقهاي مناسب و مفيدي مي‌باشد که براي آن ساخته شده‌اند. هر موضوع‌کاري برحسب نياز خود پردازشهاي خاص خود را تعريف مي‌کند، به عنوان مثال NAT پردازشهاي DNAT و SNAT را که فقط در جدول nat مجاز مي‌باشند، تعريف مي‌کند. اصولا ساخت تطابقها و پردازشها بر اساس اهداف مورد نظر سازندگان صورت مي‌گيرد که مانعِ استفاده از آنها را در تمام جداول و زنجيره‌ها مي‌گردد.

 

2.2 جستجو در IPtables

در پي فراخواني رابط تعيين تکليف بسته توسط يک موضوع‌کاري و مشخص شدن جدول و زنجيرة متناظر، عمل جستجو در بين قانونهاي آن زنجيره آغاز مي‌شود.

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

  1. فرمان پذيرش ( ACCEPT ): در اين صورت عمل جستجو متوقف و به بسته اجازة عبور داده خواهد شد.

  2. فرمان حذف ( DROP ): در اين حالت نيز همچون حالت قبل عمل جستجو متوقف مي‌شود ولي بسته از گردونه حذف مي‌شود.

  3. فرمان ادامة جستجو ( CONTINUE ): در اين مورد جستجو از قانون بعدي ادامه پيدا مي‌کند.

  4. فرمان بازگشت ( RETURN ): به معني بازگشت به زنجيرة فراخواننده و ادامة جستجو از قانون بعد از قانون فراخواننده مي‌باشد. اين مورد هنگامي مورد استفاده قرار مي‌گيرد که ما در يک زنجيرة فراخوانده شده باشيم (زنجيره‌هاي کاربر) و بخواهيم به زنجيرة قبلي بازگرديم.

  5. فرمان صف‌بندي ( QUEUE ): در اين حالت بسته براي پردازش در سطح کاربر، به درون صف رانده مي‌شود و عمل جستجو متوقف مي‌شود.

پردازش هر قانون وظيفة صدور فرمان را بر عهده دارد. درهنگام جستجو، بر اساس شروط اعمال شده توسط هر قانون ( شناسه و تطابقها )، تطابق بسته تصميم‌گيري مي‌شود. در صورت بروز تطابق پردازش قانون فراخواني و فرمان توسط آن صادر مي‌شود.

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

 

2.3 سطوح مختلف IPtables

ساختار پالايش، مجموعه‌اي از دو ويرايش در دو سطح هسته و کابر مي‌باشد. سطح هسته10 وظيفة مديريت بسته هاي شبکه و انجام عمل جستجو، و سطح کاربر11 وظيفة مديريت انباره‌ها را بر‌عهده دارند.

در سطح هسته قانونها توسط ماژول ip_tables نگهداري و بسته ها توسط آن مديريت مي‌شوند. در سطح کاربر دستور iptables در پوستة12 لينوکس، رابط کاربران در سطح کاربر با ماژول ip_tables در سطح هسته، وظيفة مديريت اطلاعات موجود در انباره‌ها را بر عهده دارد.

 

2.4  فعاليتهاي مديريتي کاربر

تمامي فعاليتها مديريتي توسط کاربران سيستم و به وسيلة دستور iptables در پوستة لينوکس انجام مي‌شود. عمدة اين فعاليتها عبارتند از:

  1. اضافه، حذف و جايگزيني قانون: از مهمترين و پرکاربردترين فعاليتهاي مديريتي مي‌باشند. در تعريف هر قانون، کاربر بعد از مشخص کردن جدول و زنجيره‌اي که خواستار مديريت قانون در آن مي‌باشد، اقدام به تعريف شناسه، بيان تطابقها و در پايان، بيان پردازش مربوطه مي‌کند. با توجه به ذخيرة ترتيبي قانونها از شمارة قانون براي انجام اعمال حذف و جايگزيني مي‌توان استفاده کرد. مثال:

iptables -t filter -A FORWARD -s 1.1.1.1 -d 2.2.2.2 -m state --state NEW -j DROP

در اين مثال يک قانون به جدول filter، زنجيرة FORWARD اضافه خواهد شد. شناسة اين قانون داراي آدرس مبدا 1.1.1.1 و آدرس مقصد 2.2.2.2 مي‌باشد. بيان نشدن درگاه‌هاي ورودي و خورجي و پروتکل مربوطه به معناي اجازة پذيرش تمامي موارد مي‌باشد. اين قانون از تطابق state و پردازش استاندارد با مقدار DROP استفاده مي‌کند. اين قانون تمامي بسته‌هاي ارسالي از 1.1.1.1 به 2.2.2.2 را که در مرحلة برقراري ارتباط باشند، حذف خواهد کرد.

  1. تغيير سياست زنجيره: IPtables امکان تعريف سياست‌زنجيره13 را براي زنجيره‌هاي Built-in فراهم مي‌کند. در اين صورت اگر قانونهاي موجود در يک زنجيره نتوانستند تکليف بسته را مشخص کنند از سياست زنجيره براي تعيين تکليف بسته استفاده مي‌شود. سياست زنجيره مي‌تواند مقادير ACCEPT و DROP را اختيار کند. مثال:

iptables -t filter -P INPUT DROP

چنانکه مشاهد مي‌شود سياست زنجيرة INPUT در جدول filter ، DROP تعريف شده‌است. به عبارتي از ورود بسته‌هايي که قانوني براي آنها وجود ندارد به سيستم محلي، جلوگيري مي‌شود.

  1. ايجاد، حذف و تغييرِنام زنجيره‌هاي کاربر: کاربران مي‌توانند براي ايجاد محيط پردازش مناسب، زنجيره‌هايي را در جداول تعريف کنند. مي‌توان از اين زنجيره‌ها به عنوان پردازش در تعريف قانونهاي آن جدول استفاده کرد. اين زنجيره‌ها توانايي پذيرش سياست زنجيره را ندارند. مثال:

iptables -t nat -N newCHIAN

اين دستور زنجيرة تازه‌اي را با نام newCHAIN در جدول nat ايجاد مي‌کند.

  1. پاک‌سازي جداول14: با استفاده از اين دستور کاربر قادر خواهد بود تا تمام قانونهاي موجود در يک جدول را حذف کنند.

 

2.5 طريقه نگهداري اطلاعات جداول در سطح هسته

تفکر حاکم در پياده‌سازي IPtables استفاده از حافظة پيوسته و ذخيره‌سازي اطلاعات لازم به صورت متوالي در درون اين حافظة پيوسته مي‌باشد. عمده دليل روي‌آوري پياده‌سازان IPtables به اين شيوه، فراهم کردن بهينه‌ترين محيط براي انجام جستجوي ترتيبي مي‌باشد، چرا که سير کردن در يک فضاي حافظه‌اي پيوسته به مراتب ساده‌تر و سريعتر از حرکت در يک فضاي حافظه‌اي پراکنده مي‌باشد.

از سوي ديگر به دليل تمرکز فعاليتهاي مديريتي در سطح کاربر، انجام هر گونه تغيير در انباره مستلزم انتقال انبارة مورد درخواست به سطح کاربر و، بعد از انجام به‌هنگام‌سازي انباره در سطح کاربر، انتقال انبارة به‌هنگام‌شده از سطح کاربر به سطح هسته و جايگزيني با انبارة قديمي مي‌باشد. انجام اين امور با حافظه‌هاي پيوسته، به مراتب، ساده‌تر خواهد بود چرا که هر انتقال را مي‌توان با کپي کردن حافظة مربوط به انباره، از سطح کاربر به سطح هسته و بالعکس، انجام داد.

اين تفکر باعث روي‌آوري پياده‌سازان به استفاده از ابتکارت جالبي در تعريف ساختارها نيز شده‌است. به منظور دسترسي مناسب و ساده‌تر به فضاي انتهايي ساختارهايي که به صورت متوالي در يک فضاي پيوسته ذخيره مي‌شوند، IPtables از تعريف آرايه‌هايي با طول صفر در انتهاي اين ساختارها استفاده مي‌کند. اين آرايه‌ها به هيچ عنوان فضايي را اشغال نمي‌کنند، بلکه نام آنها اشاره‌گري به انتهاي ساختار مربوطه خواهد بود و در هنگام برنامه‌نويسي مي‌توان از نام آنها براي دسترسي به فضاي دنبالة اين ساختار استفاده کرد. استفاده از اين تعاريف باعث جابجايي آسان در حافظه مي‌شود.

 

2.6 طريقه ذخيره‌سازي قانونها

يک قانون در IPtables به صورت يک حافظة پيوسته مي‌باشد که اطلاعت يک قانون به ترتيبِ سرآيند، تطابقها و پردازش در آن قرار مي‌گيرند. ساختار سرآيند، در پياده‌سازي انجام شده، علاوه بر شناسه، فيلدهاي گوناگوني را براي شناسايي طول قانون و مکان پردازش قانون، با خود يدک مي‌کشد.

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

 

تصویر 2 : شمايل حافظه‌ای يک قانون

3 پارامترهاي کارآيي

سرعت جستجو: پيچيدگي الگوريتم جستجوي خطي از مرتبة O(n) مي‌باشد، به عبارتي با افزايش تعداد قانونهاي موجود در انباره، انتظار مي‌رود که سرعت فرآيند جستجو کاهش يابد.

يکي از مزيتهاي نسبي IPtables براي انجام جستجوي خطي، ذخيره‌سازي قانونها به صورت متوالي در يک حافظة پيوسته مي‌باشد. در آزمايشهاي انجام شده مشخص شد که اين گونه پياده‌سازي، با تعداد قوانين 1000-1200 ، هيچگونه بار اضافي بر سيستم تحميل نمي‌کند اما در 2000، کارآيي شبکه به نصف کاهش مي‌‌‌يابد.

به عبارتي پيوسته بودن حافظه به عنوان يک استراتژي مناسب در پياده‌سازي الگوريتم جستجوي خطي توانسته تا با بهره‌گيري مناسب از پردازندة سيستم، پيچيدگي الگوريتم جستجوي خطي را براي 1000 قانون به صورت O(1) نگه ‌دارد. دستيابي به اين موضوع بدون شک ارتباط مستقيم با معماري پردازنده و معماري سيستم عامل استفاده شده دارد.

اما عدد 1000 در دنياي کنوني ديگر عدد بزرگي به حساب نمي‌آيد. امروزه نياز به تعريف و مديريت بيش از 30.000 قانون در ديواره‌هاي آتش وجود دارد، که تصور حمايت از اين تعداد قانون توسط IPtables کاملا دور از ذهن و غير عملي مي‌باشد. اين موضوع با انجام تست عملي نيز ثابت شد چنانکه در تعداد 11000 قانون، کارآيي يک شبکه با ظرفيت 100mbps به عدد 4mps کاهش يافت.

آنچه که به عنوان ضعف اصلي IPtables به حساب مي‌آيد کاهش شديد کارآيي شبکه در تعداد بالاي قانونها ( نياز اصلي ديواره‌هاي آتش امروزي ) مي‌باشد.

حافظة مصرفي: اصولا معضل اصلي در الگوريتمهاي دسته‌بندي، تقابل حافظه و زمان مي‌باشد. بدان معني که توجه و حصول به کارآيي مناسب در يکي از اين دو، باعث قرباني شدن ديگري مي‌شود. الگوريتمهايي داراي مقدار حافظة معقول و در مقابل زمان پاسخگويي نامناسب و تعدادي نيز حافظة زيادي را براي رسيدن به زمان مناسب اشغال کرده‌اند. اندک الگوريتمهايي با کارآيي مناسب در هر دو حوزه نيز وجود دارند ( Hicuts ).

جستجوي خطي از جنبة تئوريک جزو الگوريتمهايي به حساب مي‌آيد که زمان را قرباني حافظة اشغالي کرده است، چرا که براي ذخيره‌سازي قانونها از هيچگونه ساختار اضافي ( در کنار ساختار قانونها ) استفاده نمي‌کند و آنها را به صورت يک ليست نگهداري مي‌کند، در مقابل جستجوي خطي آن از مرتبة O(n) مي‌باشد.

IPtables به عنوان يک پياده‌سازي از الگوريتمهاي جستجوي خطي، جزو آن دسته از پياده‌سازيها به حساب مي‌آيد که در هر دو زمينه ضعف دارد.

در پياده سازي IPtables براي حمايت از چندپردازندگي15 و پرهيز از استفاده از Lockهاي سيستم به منظور مديريت نواحي بحراني ايجاد شده، حاصل از همروندي فعاليت پردازنده‌ها، و حصول به سرعت بيشتر و نفس منطق چندپردازندگي، به ازاي هر پردازنده يک کپي از انباره‌هاي موجود در IPtables تهيه مي‌شود. بدين صورت هر پردازنده بر روي کپي متناظر خود تمرکز کرده و از ايجاد مزاحمت توسط پردازنده‌هاي ديگر نيز مصون مي‌باشد.

اين موضوع به طرز قابل توجهي حافظة مصرفي توسط iptables را افزايش داده است. با توجه به اينکه تنها عمل نوشتاري که توسط پردازنده ها انجام مي‌شود به‌هنگام‌سازي شمارنده‌هاي قانونها مي‌باشد ( شمارنده‌ها نمايشگر تعداد و طول بسته‌هاي تطابق يافته با قانون مربوطه مي‌باشند ) و طريقة استفاده از ديگر فضاي اشغالي به صورت خواندني مي‌باشد، حجم زيادي از اين فضاي اشغال شده، کاملا، غير ضروري مي‌باشد.

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

  1. انتقال حافظة انبارة مورد نظر از سطح هسته به سطح کاربر

  2. انجام تغييرات خواسته شده در انباره

  3. انتقال انبارة به هنگام شده به سطح هسته

  4. جاگزين کردن اطلاعات قديمي با اطلاعات جديد.

حجم زياد تبادل اطلاعات بين سطوح هسته و کاربر و انجام فعاليتهاي پيچيدة مديريت حافظه در هر مرتبه انجام تغييرات، سرعت به‌هنگام‌سازي را در حد قابل توجهي کاهش داده است.

با توجه به اين کاستي، استفاده از IPtables در يک محيط محاوره‌اي به هيچ عنوان مناسب نمي‌باشد.

مقياس‌پذيري در تعدادِ فيدهاي استفاده ‌شده براي دسته‌بندي: هر قانون در IPtables از سه جزءِ شناسه، تطابقها و پردازش تشکيل مي‌شود. يک قانون مي‌تواند هر تعداد تطابق را اختيار کند که اين موضوع همان مسئلة مقياس‌پذيري مي‌باشد.

از طرف ديگر تطابقها و پردازشها جزو ابزار توسعة IPtables شناخته مي‌شوند که ساخت آنها نيازي به تغيير در IPtables ندارد. در نتيجه مي‌توان تطابقاي دلخواه را نيز پياده‌سازي کرد.

امکان استفاده از تطابقهاي گوناگون، بدون محدوديت در تعداد، در يک قانون، امکان دسته بندي بسته‌هاي شبکه بر اساس فيلدهاي مختلف را فراهم مي‌آورد.

اين موضوع يکي از پارامترهاي بسيار مثبت و زيباي IPtables مي‌باشد.

 

1 Network Address Translation

2 Source NAT

3 Destination NAT

4 Chain

5 Builtin Chains

6 Table

7 Maches

8 Target

9 User Chains

10 Kernel Space

11 User Space

12 Shell

13 Chain Policy

14 Flush

15 SMP: Symmetric MultiProcessor