شناخت کاربردی Iptable بخش چهارم

شناخت کاربردی Iptable بخش چهارم

 فصل 4 : ماشين حالت  

اين فصل در مورد ماشين حالت و جزئيات آن است . بعد از خواند فعل بايد بدانيد كه چگونه اين ماشين عمل خواهد كرد ما يك مجموعه مثال در مورد چگونگي عملكرد آن ارائه خواهيم كرد . همچنين يك مجموعه مثال از چگونگي بررسي اين ماشين ارائه شده است اينها روند كاربردي را توجيه مىكنند . 

 
1-4 : مقدمه :
ماشين حالت يك بخش خاص در iptable است كه نبايد واقعاً ماشين حالت خوانده شود زيرا واقعاً يك ماشين رديابي اتصال است . با اين وجود بيشتر افراد آنرا با اين نام مىشناسند در تمام اين فصل از اين نام ها به صورت مترادف استفاده شده است . اين نبايد ابهام ايجاد مىكنند .رديابي اتصال در چهارچوب Netfilter صورت مىگيرد Firewall هايي كه اين را اجرا مىكنند Firewall حالتي نام دارند يك نوع از اين Firewall ايمن تر از Firewall غير حالتي است زير لبه ها در نوشتن قوانين سخت تر كمك مىكند .
در iptable بسته ها با اتصالات رديابي شد در 4 حالت ارتباط دارند . آنها عبارتند از: INVALIP , RELATED , ESTABLISHED , NEW . ما مرتبه را به تفصيل بررسي خواهيم كرد . با هماهنگي - STATE مىتوان نشان داد كه چه كسي جلسات جديد را آغاز مىكند . 
بنابراين رديابي اتصال توسط چهارچوب خاص در kernel به نام conntrack صورت مىگيرد . conntrack مىتواند به صورت مدول يا بخش دروني خود kernel باردار شود در بيشتر موارد رديابي اتصال خاص نسبت به موتور پيش فرض نياز است . به اين علت قطعات خاص از آن وجود دارند كه پروتكل ICMP , UDP , TCP را كنترل مىكنند اين مدل ها اطلاعات خاص از بسته ها ارائه مىكنند به طوري كه بتوانند مسير جريان داده اي را دنبال كنند اين اطلاعات براي تعيين حالت جهان استفاده مىشوند به عنوان مثال جريان UDP با آدرس IP مقصد شناخته مي‌شود و آدرس IP منبع و port مقصد و منبع در آن نقش دارد .
در kernel قبلي احتمال خاموش و روشن كردن فرآيند قطعه زدايي وجود داشته است با اين وجود چون iptable و Netfilter معرفي مىشوند و رديابي اتصال صورت مىگيرد اين گزينه رها مي‌شود دليل آن اين است كه رديابي اتصال نمىتواند به درستي بدون قطعه زدايي بسته ها عمل كند و بنابراين قطعه زدايي با Conntrack تركيب مىشوند و اين به طور خودكار صورت مىگيرد . اين نمىتواند با خاموش كردن اتصال غيرفعال شود . تصميم زدايي هميشه در صورتي عملي است كه رديابي اتصال فعال شود.
تمام رديابي اتصال در زنجيره PREROUTING كنترل مي‌شود به جز بسته هاي داخلي كه در زنجيره OUT PUT كنترل مىشوند . اين بدان معناست كه iptable تمام محاسبات حالات را در زنجيره PREROUTING نشان مي‌دهد. اگر بسته اوليه را در يك جريان ارسال كنيم حالت در زنجيره   ESTABLISHED - PREROUTING تغيير مىكند اگر اولين بسته فعال نشود حالت جديد در زنجيره PREROUTING قرار مىگيرد بنابراين تمام تغييرات و محاسبات در PREROUTING و يا زنجيره out put جدول nat صورت مىگيرد .
 
2-4 : ورودي Conntrack :
اكنون ورودي Conntrack و چگونگي خواندن آنرا در proc/…. بررسي خواهيم كرد . اين ليست ورودي جريان در پايگاه Conntrack است اگر يك مدل ip - conntrack فعال شود يك cat از proc/net…. به شرح زير است :
 
برنامه
اين مثال شامل تمام اطلاعاتي است كه مدل Conntrack نياز دارد تا براي نوع اتصال به كار برد ابتدا يك پروتكل به صورت tcp مطرح است . پس يك ارزش در كد گذاري اعشاري مطرح است بعد از آن بايد ديد كه چه مدت اين ورودي زنده است اين رقم در 117 ثانيه مشخص خواهد شد اين رقم پيش فرض بوده است . اكنون حالت واقعي در ورودي منظور است و بايد حالت SYN- SENY در نظر گرفته شود . ارزش دروني اتصال با ارزش مورد استفاده به خارجي iptable تفاوت دارد ارزش SYN- SENY مىگويد كه ما اتصال را در بسته TCP SYN در يك جهت قرار داده ايم سپس آدرس منبع IP ، آدرس مقصد IP ، port منبع و مقصد را بررسي خواهيم كرد . در اين جا كد كليد وار مفروض كرد كه برگشت ترافيك را در اين اتصال نشان مىدهد . مىتوان ديد كه از اين بسته ها چه چيز مفروض است اطلاعات آدرس مقصد و منبع IP را نشان مىدهند اين امر براي port منبع و مقصد مفروض است اين ارزش ها مرد توجه ما است .
ورودي ردياب اتصال مىتواند بر مجموعه متفاوت ارزشها باشد كه همگي در سر عنوان conntrack در فايل linux…. قرار گرفته اند . اين ارزشها به نوع پروتكل فرعي IP مورد استفاده بستگي دارد پروتكل ICMP , UDP ,TCP پيش فرض متفاوت ارزش مانند LINUX دارد در اين جا هر پروتكل را بررسي خواهيم كرد با اين وجود از آنها در اين فصل زياد استفاده نخواهيم كرد زيرا آنها در خارج از عوامل دروني conntrack نمىباشند همچنين بسته به چگونگي تغيير حالت ارزش پيش فرض زمان تا موفعي كه اين ارتباط تخريب شود تغيير خواهد كرد .
اخيراً يك patch جديد در patch - o- matic در دسترس است كه رديابي پنجره اي tcp نام دارد اين patch مىتواند تمام متغيرهاي Syctl را اضافه كند اين بدان معناست كه آنها در زمان حركت تغيير مىكنند اگر چه سيستم هنوز در حالت اجرايي است بنابراين اين خود كامپايل مجدد kernel را در زمان تغيير برنامه غير ضروري مىسازد . اينها از طريق فراخواني سيستم موجود در دايركتوري /proc/…. تغيير مىكند شما بايد به متغيير /proc/….   مراجعه كنيد.  
وقتي يك اتصال يك ترافيك در دوجهت دارد ورودي conntrack  مىتواند علامت [UNREPLED]  را پاك كند و آنرا resetكند ورودي مىگويد كه اتصال شاهد ترافيك در دوجهت سند است و علامت  [ASSURED] عوض مي‌شود علامت [ASSURED]   مىگويد كه اين ارتباط تضمين شده است و اگر به ماكزيمم ارتباط برسيم پاك نمي‌شود بنابراين ارتباط به صورت  [ASSURED]  است و پاك نخواهد شد برخلاف اتصال به صورت  [ASSURED]  مقدار اتصالات جدول رديابي به متغيير نصب شده در تابع ip- sysctlدرkernel  جديد بستگي دارد مقدار پيش فرض با اين ورودي بسته به مقدار حافظه تغيير خواهد كرد بر 128mb  از RAM  مىتوان به 8192 ورودي دست يافت در 256 MBاز RAM به 16376 ورودي دست مىيابيم شما مىتوانيد تنظيمات را از طريق /proc/….   بخوانيد و نصب كنند .
 
3-4 : حالات بخش كاربر 
همانطور كه ديديد بسته ها مىتوانند حالات متفاوت در kernel داشته باشند و اين امر به نوع پروتكل مورد بحث بستگي دارد . با اين وجود در خارج از kernel فقط 4 حالت است كه توصيف شد اين حالات مىتواند به همه تطابق استفاده شوند كه بر اساس حالت رديابي فعلي معرفي شد. حالات معتبر عبارتند ازINWALIP , RELATEP , ESTABLISHED , NEW جدول زير هر يك را نشان مىدهد . 
اين حالات مىتوانند با state - براي هماهنگي بر اساس روبط استفاده شوند اين خود ماشين حالت را قوي و كارآمد مىسازد ما بايد تمام port را بالاي lt 4 قرار دهيم تا ترافيك به شبكه داخلي برگردد با اين وجود ماشين حالت لازم نيست تا محل طولاني حاصل شود زيرا مىتوانيم Firewall را در ترافيك برگشتي قرار دهيم كه براي تمام ترافيك ها نياز نيست 
 
4-4 : اتصالات TCP
در اين بخش و بخش بعدي بررسي حالات و چگونگي كنترل هر يك از 3 پروتكل ICMP , UDP , TCP آمده است همچنين خواهيم ديد كه چگونه اتصالات در هر پيش فرض كنترل مىشوند در صورتي كه به صورت اين 3 پروتكل طبقه بندي نشده باشند كار را با پروتكل TCP آغاز مىكنيم زيرا حالتي است و جزئيات جالب با توجه ب ماشين حالت در iptable دارد . 
اين نوع رديابي اتصال مانند انواع كلي اتصال مفيد است در اينجا خواهيم ديد كه حالت جريان ورودي در طي مراحل متفاوت اتصال چگونه است همان طور كه ديديد رديابي واقعاً جريان اتصال TCP را از ديدگاه كاربر نشان نمىدهد . وقتي اين جا بستهSYN)) گزارش شد اتصال به صورت NEW است وقتي بسته به صورت SYN/ACK باشد يم اتصال بصورت ESTABLISHED مطرح است اگر اينها را در درجه دوم در نظر بگيريد دليل را خواهيد فهميد با اين اجراي خاص مىتوانيد به NEW و ESTABLISHED اجازه دهيد تا شبكه داخلي را رها كنند و فقط اتصال ESTABLISHED برمىگردد . برعكس اگر ماشين رديابي اتصال كل سيستم را به صورت NEW نشان دهد نمىتوان اتصال خارجي را در داخل متوقف كرد و NEW برمىگردد براي پيچيده كردن موضوع يك سري حالات دروني براي tcp مطرح مي‌شود و در قلمرو كاربر به كار ميرود آن منابع استانداردRFCV 93 به پروتكل كنترل انتقال صفحه 21-23 هستند اين ها را به شرح زير بررسي خواهيم كرد.  
همانطور كه ديديد اين واقعاً از ديدگاه كارب رساده است با اين وجود با بررسي كلي ساختار از ديدگاه KERNEL روند كار مشكل مي‌شود اكنون يك نمونه خواهد آمد بايد ديد كه چگونه حالات در /proc/…. تغيير ميكند اولين حالت دريافت اولين بسته SYN در يك اتصال است.
 
برنامه  
همانطور كه از ورودي فوق مي‌توان ديد ما يك حالت دقيق داريم كه در آن بسته SYN ارسال شده است ( علامت SYN - SENT تنظيم مي‌شود) و هيچ جوابي براي آن ارسال نشده است ( نمايش علامت UNREDLLED ) اين حالت دروني بعدي زماين حاصل مي‌شود كه يك بسته ديگر در ديگر جهت باشد.
 
برنامه 
اكنون يك SYN/ACK برگشتي و دريافت خواهد شد وقتي اين بسته دريافت شد تغيير حالت روي مىدهد و اين زمان SYN- REC… مىگويد كه SYN اصلي به درستي ارائه شده است و بسته برگشتني SYN/ACK بغير از Firewall به درستي حركت كرده است به علاوه اين ورودي ردياب اتصال اكنون در دو جهت ترافيك دارد و بنابراين كاربرد داشته است اين روند صريح است ولي علامت [UNREPLED] ظاهر ميشود مرحله نهايي زماني حاصل ميشود كه ACK نهايي در بخش 3 مسيري باشد.
 
برنامه 
در مثال آخر داراي ACK نهايي در بخش 3 مسيري هستيم و اتصال به حالت ESTABLISHED رسيده است ماداميكه مكانيزم دروني IPTABLE آگاه باشد بعد از چند بسته بيشتر اتصال دوباره [ASSURED]  خواهد شد همانطور كه در مقدمه آمده است.
وقتي يك اتصال TCP بسته شد به روش زير صورت خواهد گرفت و حالت زير ار دارد همانطور كه ميتوان ديد اتصال هرگز بسته نميشود تا اين كه آخرين ACK نيز ارسال شود اين روند در توصيف چگونگي بسته شدن تحت شرايط طبيعي كاربرد ندارد يك اتصال مىتواند با ارسال يك RST (reset) بسته شود و اين در صورتي است كه انكار شده باشد در اين حالت يك اتصال بعد از زمان از پيش معلوم بسته خواهد شد . 
وقتي اتصال TCP بسته شد وارد حالت  TIME NAIT ميشود كه در پيش فرض 2 دقيقه است اين خود به گونه اي استفاده مي‌شود كه تمام بسته هايي كه از نظم خارج شده اند بتوانند در حالت تنظيم قرار گيرند حتي بعد از اين كه اتصال بسته شد اين يك نوع زمان با من است به طوري كه براي مسير ديگر حفظ شود و يا به پايانه اتصال برسد . 
اگر اتصال توسط بسته RST به صورتreset درآيد حالت به close تبديل دستور اين بدان معنا است كه اتصال در هر پيش فرض 10 ثانيه قبل از بسته شدن فعال شود . بسته هاي RSTدر هر مفهوم تاييد مىشوند و اتصال را مستقيماً نقض مىكنند يك حالت ديگر نيز وجود دارد در اين جا ليست كامل حالات ممكن كه در جريان TCP ديده مىشوند و ارزش زماني آنها آمده است
اين ارزش ها به صورت مطلق مشخص نمىشوند آنها با تجديد kernelتغيير مىكنند و از طريق سيستم فايل proc عوض خواهند شد به متغير /proc/… تبديل مي‌شوند .
مقادير پيش فرض بايد عملاً  تثبيت شوند اين مقادير در jiffites قرار گيــرنــد (11100 بخش از ثانيه ) و بنابراين 3000 به معناي 30 ثانيه است 
نكته :توجه كنيد كه بخش كاربر در اين ماشين شاهد علامت TCPدر بسته TCP نيست اين روند مفيد نيست زيرا ممكن است بخواهيد بسته ها را در حالت NEW قرار دهيد تا از Firewall عبور كنيد ولي علامت NEW مشخص مي‌شوند و در بيشتر موارد به معناي بسته هاي SYNاست اين ويژگي با اجراي حالت فعلي ديده نمي‌شود حتي يك بسته بودن تنظيم بيت علامت ACK يك NEW است در صورتي كه هماهنگي بر بسته NEW ديده شود اين براي Firewalling استفاده مي‌شود ولي معمولاً در شبكه خانگي مفيد نيست در اين جا يك Firewallواحد وجود دارد براي رسيدن به اين رفتار از دستور State NEW packets ar / N . SYN bit set در ضميمه سوالات و مسائل رايج استفاده مي‌شود روش ديگر نصب توسعه tcp - window - tracking از patch - o- matic است كه يك Firewallرا در رديابي حالات بسته به نصب ويندوي tcp  كمك مىكند . 
 
5-4 : اتصالات UDP 
اين اتصالات به تنهايي اتصالات حالتي نمى باشند بلكه بدون حالت هستند چندين دليل براي آن وجود داردو مهمترين انها اين است كه آنها داراي محل اتصال و يا محل بسته شدن نمىباشند . در بين آنها توالي ديده نمي‌شود دريافت 2 تا UDP DATA STAR در يك نظم خاص چيزي در مورد نظم و محل ارسال نمىگويد با اين وجود مىتوان حالات را بر اتصالات در kernel  نصب كرد اين جا چگونگي رديابي اتصال و نمايش آن در conntrack آمده است. 
همانطور كه مىتوان ديد اتصال دقيقاً مانند اتصال TCP رشد مىكند از ديدگاه كاربر اين روند عملي است از نظر دروني اطلاعات conntrack كلي متفاوت هستند ولي جزئيات يكي است اول ورودي را بعد از ارسال اولين بسته UDP بررسي خواهيم كرد :
برنامه 
از اين حالت سرويس دهنده يك پاسخ به اولين بسته ارسال كرده است و اتصال اكنون به صورت ESTABLISHED است اين حالت و در رديابي اتصال ديده نمي‌شود همانطور كه مىتوان ديد اختلاف اصلي آن است كه علامت [UNREPLED] اكنون ديده نمبشودبه علاوه زمان پيش فرض به 180 ثانيه رسيده است ولي در اين مثال به 170 ثانيه در زمان 10 ثانيه اي رسيده است و 160 ثانيه خواهد شد يك نكته در اين جا ناديده گرفته شده است و مىتواند به بيت اشاره كند و [ASSURED] است براي اين علامت و تنظيم آن بر اتصال رديابي شد بايد يك مقدار ترافيك بر آن اتصال وجود داشته باشد .
برنامه    
در اين حالت اتصال مورد تاييد است اتصال دقيقاً مانند مثال قبل است به جز آن براي علامت [ASSURED] اگر اين اتصال براي 18 ثانيه استفاده نشود زمان طولاني در ظاهر شدن دارد 180 ثانيه يك مقدار كم است ولي بايد براي بيشتر استفاده ها كافي باشد اين رقم براي مقدار كامل در هر بسته حاصل مي‌شود تا هماهنگي با يك ورودي ديده شود اين حالت را دروني گويند 

 

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر