بسم الله الرحمن الرحيم
الجدار الناري في اللنكس Iptables
مقدمة
من الامور التي تجعل نظام اللنكس نظاماً قوياً من الناحية الامنية هو وجود
نظام خاص بالجدران النارية مبني في نواة النظام نفسه او ما يعرف بالكرنل.
الجدران النارية كثيرة جدا في نظام اللنكس, كلها تحمل نفس الاساسيات و نفس
المفاهيم و الفكرة. اخترنا الIptables لانه موجود بشكل افتراضي في اغلب
التوزيعات و لا يحتاج في اغلب الاحيان الى تنصيب او تفعيل.
في البداية أود وصف طريقة عمل الجدار الناري او ما يعرف بالفايروول
Firewall. الفايروول بشكل مبسط هي مجموعة من الشروط, يقوم برنامج بمقارنة
المعلومات الخارجة من الجهاز او الداخلة اليه بالشروط هذه و على هذا الاساس
يتصرف حسب النتائج.
حتى نبدأ يجب ان نجيب على بعض الاسئلة و هي, لماذا احتاج الى جدار ناري؟ هل
عملية وضع جدار ناري مفصّل للغاية سهلة؟ ما مدى قوة الIptables?
لنجب على السؤال الاول, فعلا, لماذا نحتاج الى جدار ناري؟ بكل بساطة الجدار
الناري يقف حاجزاً امام اغلب الامور التي لا نريدها ان تحدث, و الامثلة
على هذه كثيرة جداً, لنفرض انني لا اريد ان يستخدم احد اي من خدمات
الانترنت في غيابي( هذا على الصعيد الشخصي), لنفرض انني اريد منع اي شخص من
عمل ping لموقعي ( هذا على مستوى السرفرات), و لنفرض انني املك 5 اجهزة في
شبكة محلية, و اريد منع جهاز واحد فقط من الدخول للانترنت ( هذا على صعيد
الشبكات) و الامثلة و المتطلبات كثيرة جداً تعتمد أولا و اخيراً على
احتياجك.
الاجابة على السؤال الثاني, بالتأكيد لا!, فالامر بسيط و ممتع لمن لديهم
خلفية عن سطر الاوامر وخلفية بسيطة عن طريقة عمل الجدار الناري و قوة
الIptables ستتضح عند الاحتكاك بالتفاصيل العميقة التي من الممكن ان يتعامل
الجهاز مع البيانات.
في البداية لنتأكد ان النظام يدعم الIPtables و ذلك بالدخول الى سطر
الاوامر بحساب الرووت و كتابة الامر التالي كما في الصورة التالية:
اذا حصلت على نتيجة مشابهة او تحمل و لو قليلاً من الشبه, فمعنى ذلك ان
النظام يدعم الجدار الناري وليس عليك ان تفعل خطوات اخرى لتبدأ.
كما ذكرت في تعريفي للجدار الناري, عبارة عن مجموعة من الشروط, هذه الشروط
انت تحددها و في العادة هي التي تدور في بالك, ماعليك سوا ان تترجمها الى
سطور يفهمها البرنامج و يقوم بها حسب رغبتك. اذا كنت تريد عمل شرط واحد فقط
( مثلا حجب الping عن موقعي) يمكنك كتابة الشرط بسرعة و سيتم تطبيقه على
كل البيانات التي تصل الى سرفرك و منع اي محاولة للping, و لكن من الافضل
مهما كان حجم الشروط صغيرا او كبيرا ان يتم كتابته في ملف نصي و تحويله بعد
ذلك ملف تنفيذي, سنتعلم لاحقاً كيفية عمل هذا.
الجدار الناري في العادة يتعامل مع البيانات الواردة الى النظام, الصادرة
من النظام, و الماّرة من النظام. كل وضعية لها سلسلة خاصة و هم :
INPUT chain
OUTPUT chain
FORWARD chain
سلسلة الINPUT خاصة بالتعامل مع البيانات التي تصل الى النظام من الشبكة,
سواء كانت شبكة محلية او شبكة الانترنت ( كطلب صفحة HTML لسرفر على
الانترنت)
سلسلة ال OUTPUT خاصة بالتعامل مع البيانات الخارجة من النظام الى الشبكة,
سواء كانت شبكة محلية او شبكة الانترنت ( كطلب اتصال بسرفر معين)
سلسلة ال FORWARD خاصة بالتعامل مع البيانات المّارة بالنظام و تستخدم في تمرير بعض البيانات من طرف الى طرف آخر.
لنأخذ مثالاً توضيحياً.
لنفرض ان جميع الاجهزة الموجودة في الصورة تحوي على الiptables. اذا اردنا
ان نطلب الصفحة الاولى للموسوعة, فان الطلب هذا سيمر في سلسلة الOUTPUT من
الشروط الموجودة في جهاز PC, في حالة عدم وجود شرط يمنع هذا الطلب فان
البيانات ستنتقل الى موفر الخدمة وهو الISP و وظيفته هنا هو تمرير البيانات
بعد التأكد من محتواها و هذا ضمن سلسلة الFORWARD, فاذا لم يجد شرطاً يمنع
هذا الطلب فسينقل البيانات بشكل سليم, و يصل الطلب الى سرفر الموسوعة
C4arab Server الذي يستقبله في سلسلة الINPUT ليرى ان كانت هناك شروط معينة
ليتم اتخاذها قبل اكمال العملية, تماماً كما في نقاط التفتيش!
لنبدأ مع اول امر لنا في الiptables, لنفرض اننا نريد ان نحجب الجهاز صاحب الايبي 192.168.0.1 عننا, نكتب الامر التالي:
iptables -s 192.168.0.1
-s تعني source اي المصدر, و لكن هذا الامر لا يكفي, فلم نذكر كيفية التعامل معها, لنكمل باضافة التالي للامر:
iptables -s 192.168.0.1 -j DROP
-j يصف كيفية التعامل مع البيانات من المصدر المذكور, و لدينا 3 خيارات, ACCEPT, DENY, DROP.
ACCEPT يوافق على البيانات من المصدر المذكور
DENY يرفض البيانات من المصدر المذكور و يرسل له رسالة بالرفض
DROP يتجاهل البيانات من المصدر المذكور و لا يرسل له رسالة بالتجاهل, و هو
ما نحتاجه لاننا لا نريده ان يعلم بتجاهلنا له و لا نريد استخدام موارد
النظام في ارسال رسائل رفض!
لم نذكر حتى الان ما السلسلة التي ستتعامل مع هذا الشرط, كما ذكرت في
السابق لدينا 3 سلاسل و سنختار الاولى و هي INPUT ليصبح الامر كالتالي:
iptables -A INPUT -s 192.168.0.1 -j DROP
الترتيب غير مهم, لكن اغلب الناس تستخدم هذه الطريقة في ترتيب شروطها, و
حرف A هنا يعني Append او اضافة, و معناه ان يتم اضافة السلسلة التالية
لتمر البيانات اليها لمقارنتها بشرطها.
في مثالنا هنا لم نحدد الواجهة التي تستقبل هذه البيانات, فالواجهة هنا
يقصد بها وسيلة الاتصال, هل هو كرت شبكة او مودم او غيره اذا كان كرت شبكة ,
بعد اضافة الواجهة يصبح الامر كالتالي:
iptables -A INPUT -i eth0 -s 192.168.0.1 -j DROP
-i يعني interface و يمكن استخدام الppp0 كواجهة للمودم العادي. و في
مثالنا هذا حددنا ان اي بيانات ( ليست جميعها ولكن الاغلب الاعم) من
الكمبيوتر صاحب الايبي 192.168.0.1 تصلنا عبرة كرت الشبكة سيتم تجاهلها.
نصل هنا الى نهاية هذا الدرس الذي تعلمنا خلاله عن ماهية الجدران النارية و
كيفية البدء في عمل جدار ناري خاص و مفصّل في بيئة اللنكس, سيتم تقديم
امثلة متقدمة اكثر في الدروس القادمة ستزيد من فهم و معرفة هذا الجدار
الناري الذي يقوم الكثير من المستخدمين باستخدامه لفلترة البيانات التي تمر
باجهزتهم سواء صادرة ام واردة او مجرد مارة!