الاثنين، يناير 25، 2010

الجدار الناري في اللنكس Iptables

يجب في بداية الامر ان نتأكد مما نريد ان نفعل, و حتى يكون الامر منظماً, سنكتب سكربت بسيط يقوم بتعطيل او مسح جميع الشروط التي سنقوم بكتابتها, حيث انه ربما نقوم ببعض الاخطاء اثناء كتابتنا و تعلمنا لكتابة الشروط و نريد حذف الشروط كلها بطريقة سهلة و صحيحة.
نتجه لسطر الاوامر بحساب الرووت و نفتح ملف نصي جديد و نكتب المحتوى التالي فيه:
#delete firewall
iptables -A INPUT ALL
iptables -A OUTPUT ALL
iptables -F ALL
echo " firewall is inactive now!"
نحفظ الملف باسم inactive.sh و ثم نجعله ملف تنفيذي بواسطة الامر التالي:
chmod +x inactive.sh
في بعض توزيعات اللنكس, يقوم المستخدمين اثناء تثبيت النظام بتفعيل الجدار الناري بشروط متوسطة او صغيرة, لنتأكد من وجود شروط نكتب التالي في سطر الاوامر
iptables -L
L تعني list و ستعرض لنا الشروط ان وجدت. الان سنقوم بتشغيل الملف التنفيذي inactive.sh لنرى نتائجه
./inactive.sh
من المفترض ان نحصل على عبارة firewall is inactive now! الان يمكننا ان نكتب امر عرض الشروط مرة اخر عمل للتأكد من عمل السكربت:
iptables -L
لا تخف ان لم تختلف النتيجة, فاحتمال انك لم تختر شروطا في بداية تثبيت النظام امر وارد. و الان و بعد ان تعلمنا كيف يمكننا تعطيل الجدار الناري, لنبدأ بعمل جدار ناري بسيط.
لنفترض اننا نملك سرفر لنكس, نستضيف فيه مواقع عديدة و نرغب في وضع جدار ناري بسيط من صنعنا الخاص نعلم ماذا يفعل في الخفاء و كيف يتصرف بالضبط ليس كالجدران النارية التي نركبها جاهزة و لا نعلم كيف تتصرف و ماذا تفعل في الخفاء. يجب علينا ان نضع الشروط التي نريد تطبيقها الآن, كمرحلة مبتدئة لنضع الشروط التالية:
منع اي عملية ping للسرفر ( يمكن استخدام الping في هجوم Denail Of Service )
منع اي عملية اتصال بالسرفر عن طريق التلنت ( يمكن تعطيل التلنت للوصول الى نفس النتيجة ايضا)
*ملاحظة: يفضل حجب التلنت عن الخدمة و استخدام الssh كبديل افضل من الناحية الامنية, و من المفترض انك تستخدم الssh في الاتصال في سرفرك والا ستحجب نفسك عن السرفر! فانتبه)
في البداية نتجه الى سطر الاوامر و نفتح ملف نصي جديد باسم firewall.sh و نكتب فيه التالي:
iptables -A INPUT -i eth0 -p ICMP -j DROP
-p تعني protocol او بروتوكول, و هنا نحدد نوع البروتوكول في الشرط, و تم تحديد بروتوكول ICMP الذي يستخدم في عملية الping , حيث ان هذا الشرط سيمنع اي عملية للping الى كرت الشبكة بل سيتجاهلها.
الامر التالي هو:
iptable -A INPUT -i eth0 -p TCP --destination-port telnet -j DROP
النظام يعلم معنى كلمة تلنت المذكورة, و في حالة الرغبة في حجب بورت اخر يمكن استبدال الكلمة برقم البورت بشكل مباشر.
الان سيكون شكل محتوى الملف على النحو التالي:
iptables -A INPUT -i eth0 -p ICMP -j DROP
iptable -A INPUT -i eth0 -p TCP --destination-port telnet -j DROP
و وظيفته بكل بساطة هي حجب خدمة الping و حجب التلنت ( طبعا نستخدم الssh بدلاً منه لانه افضل من الناحية الامنية). يجب ان أذكر ان الشروط تُنفّذ من اعلى الى اسفل, فالنظام سيحجب خدمة الping ثم التلنت و هكذا.
في حالة كتابتنا لشروط عديدة و رغبتنا في اضافة شرط ما في اول الشروط او في المنتصف من دون الذهاب و كتابته فعلياً هناك, يمكننا وضع الترتيب التالي مثلا
iptables -A INPUT -i eth0 -p ICMP -j DROP
iptable -I INPUT 1 -i eth0 -p TCP --destination-port telnet -j DROP
لاحظ الفرق في السطر الثاني, هنا سيتم تنفيذ السطر الثاني اولاً قبل السطر الاول, لانه تم تحديد رقمه. اذا رغبنا باستبدال الشرط الثاني بالشرط الاول يمكننا استبدال حرف I بحرف R و يعني Replace و سيتم اعتبار السطر الاول محذوفاً و احلال السطر الثاني مكانه. يمكننا حذف سطر معين باستخدام حرف D الذي يعني Delete و سيتم حذف السطر الذي تم تحديده
بعدها الانتهاء من كتابة الشروط نحفظ الملف و نحوله الى ملف تنفيذي:
chmod +x firewall.sh
و من ثم نقوم بتشغيله
./firewall.sh
يمكننا معرفة ما اذا كانت الشروط تم تطبيقها ام لا, في البداية قم بعمل ping لسرفرك و انظر اذا كان سيتجيب لك ام لا! حاول الاتصال بالتلنت الى موقعك و انظر ان كان يستجيب ام لا, يمكنك استخدام iptables -L لعرض الشروط ايضاً.
هذا الدرس يوضح باختصار كيفية البدء في صنع جدار ناري شخصي يمكنه القيام بعمليات كثير و متعمقة حدودها هي مخيلتك و احتياجاتك. لمزيد من التفاصيل حول هذا الجدار الناري اكتب الامر التالي:
man iptablesو ستجد ما يفيدك في اختيارك للشروط.