متابعة للسلسة التي بدأت باعدادها منذ فترة المكونة من اربع مواضيع وسنقوم بتغطية الأمور المتعلقة بمراقبة الأنظمة والشبكات فيها.
المنافذ المفتوحة هي ابواب مفتوحة! Open ports is an open doors!! هذه العبارة تعبر عن أهمية مراقبة المنافذ والخدمات التي تعمل على خادمك لتتأكد من توفر ما نريده منها واغلاق ما لا نريده. كما هو معروف للجميع فإن ال TCP/IP يقوم بتخصيص رقم منفذport للعمليات التي تطلب اتصال او داتا معينة. كل منفذ مفتوح على الخادم يمكن اعتباره كأحد المداخل التي ممكن ان تتعرض في أي وقت الى هجوم. في هذا الدرس سنتعرف على بعض الطرق المفيدة لكي تعرف ما هي المنافذ المفتوحة على خادمك سواء من خلال فحصك له من الداخل ( اي في حالة تسجيل الدخول الى خادمك والقيام بالفحص)باستخدام اداة مثل netstat ، او من الخارج ( اي ان تقوم بفحص المنافذ دون ان تسجل الدخول على خادمك كما هي الحالة التي يقوم بها المهاجم ) من خلال اداة مثل namp .
تسمى عملية تشخيص النظام للتقليل من تعرض النظام لعملية اختراق بالتدقيق auditing ، وهي عملية مهمة لأي مدير نظام لكي يقوم بها بمجرد انتهائه من تنصيب خادم جديد لكي يتأكد من مستوى الأمان عليه. قبل ان تبدا عملية التدقيق هناك بعض الاسئلة قد تساعدك لأداء هذه العملية بشكل فعال :
1- ما هي الخدمات التي أحتاجها؟؟ اي انك تقوم بفحص الخدمات services التي تعمل على جهازك وتعطيل التي لا تحتاجها.
2- ما هو كرت الشبكة الذي يحتاج للتدقيق؟ المقصود بهذه العملية ان بعض الخوادم يكون عليها أكثر من كرت شبكة مخصص لأكثر من شبكة (خارجية وداخليه مثلا) لذلك فعلى مدير النظام ان يعرف اي الخدمات التي تحتاج لكي تعمل على كرت شبكة معين دون الآخر، ويقوم بربط الخدمة لكي تعمل على هذا الكرت فقط.
3- من هو العميل client أو مجال الشبكة host الذي يحتاج لهذه الخدمة؟ يقوم مدير النظام بهذه الحالة بتوفير خدمة معينة لعناوين ip محددة فقط، او لمجال شبكة معين. مثلا يقوم مزودي خدمة الانترنت بتوفير خدمة الSMTP البريد الآلي فقط لعملائهم الذين يستخدمون عناوين ip تابعة لهم فقط.
4- من هم المستخدمين الذين يحتاجون الى هذه الخدمة؟ أخيرا هناك عدة اساليب لتحديد من هم المستخدمين الذين سنقوم بتوفير الخدمة لهم دون غيرهم من المستخدمين. طبعا بعض الخدمات التي لا تستخدم التوثيق authentication مثل DNS لا يمكن تطبيق هذا الشيء عليها.
طبعا في درسنا هذا سنتحدث عن الخدمات التي تعمل على الخادم و على اي منفذ فقط، طبعا باقي الاسئلة التي قمنا بطرحها يمكن استخدام عدة اساليب للتعامل معها مثل الiptables و tcp wrappers لتحديد الحماية على مستوى العميل و الشبكة client / host -level security ، وهناك الPAM لتحديد الحماية على مستوى المستخدم user-level security وهي متوفرة في عدة دروس في منتدانا وفي أماكن أخرى كثيرة.
-معرفة المنافذ المفتوحة باجراء فحص من الداخل الى الخارج ( netstat )
سنتعرف على أداة مهمة لأي مدير نظام لأنها تستخدم لمعرفة المنافذ المفتوحة على خادمك باجراء الفحص scan وانت مسجل دخول على خادمك. وايضا تقوم هذه الاداة بعرض جميع الاتصالات connections الجارية حاليا على جهازك active connections .
يمكنك تحديد الاداة بعرض البيانات المتعلقة بالTCP أو الUDP باستخدام الخيار -t أو -u على التوالي... كما يفضل اضافة الخيارين p و n لعرض مزيد من البيانات حول رقم العملية PID التي تستخدم واسم البرنامج ايضا. لنتعرف سويا الى المثال التالي:
لنفترض اننا نستخدم خادم عنوانه 192.168.0.102 ، انظر لناتج الأمر التالي:
السطر الأول يشير الى ان هناك تطبيق ftp يستخدم المنفذ العشوائي 36049 من على جهازك ويقوم بالاتصال بسيرفر ftp على عنوان 192.168.0.100 ومنفذ 21 المخصص لخدمة الftp كما نعلم. طبعا لاحظ الحالةstate هي ESTABLISHED وهذا يدل ان الاتصال لا زال مفعلا لحظة تنفيذ الأمر netstat .
السطر الثاني يشير الى ان هناك اي بي خارجي Foreign Address هو 192.168.0.150 قد قام بالاتصال قبل قليل بالخادم الخاص بي عن طريق SSH ومستخدما المنفذ 22 الخاص بالssh كما نعلم. طبعا الحالة TIME_WAIT تدل على ان الاتصال انتهى وان الconnection تنتظر الtime out من الجهة الأخرى للاتصال لانهاء الاتصال بشكل كامل ( راجع آلية عمل بروتوكول TCP/IP للمزيد )
يمكنك معرفة اذا كان الاتصال قد تم من الداخل الى الخارج او من الخارج الى الداخل عن طريق ارقام المنافذ، ففي مثالنا السابق مثلا وجدنا المنفذ 22 على جهازنا المحلي، وهذا يعني ان ال ssh service مفعلة على خادمنا وقام تطبيق بالاتصال علينا من العنوان الآخر مستخدما منفذ عشوائي (عادة يخصصه الكيرنل بشكل عشوائي للتطبيقات) رقمه 26910 .
رغم ان المثال السابق قد اعطى لمحة سريعة عن بعض الاتصالات الجارية حاليا على خادمنا إلا انه يهمنا ايضا معرفة الخدمات التي تقوم بانتظار طلبات الاتصال من الخارج ومنافذها مفتوحة، وهي تكون بالحالة Listen . لننظر للمثال التالي:
باضافة الخيار l يمكننا معرفة المنافذ المفتوحة على خادمنا وما هي العناوين التي يسمح لها الاتصال على هذه المنافذ ايضا:
في السطر الأول لاحظنا خدمة الhttpd التي تستخدم عادة البورت او المنفذ رقم 80 ، وبالنسبة للعنوان 0.0.0.0:80 في حقل العنوان المحلي Local Address فهو يعني ان هذه الخدمة مفعلة على جميع كروت الشبكة او العناوين المخصصة للخادم، فمثلا اذا كان لدي كرتي شبكة eth0 و eth1 فإن خدمة الhttpd مفعلة على كليهما وليست محددة بآي بي معين. ويمكنهما استقبال طلبات الاتصال لهذه الخدمة من اي عنوان خارجي ومن اي منفذ خارجي (لاحظ السطر 0.0.0.0:* في حقل العنوان الخارجي Foreign Address ). وطبعا الحالة كما نرى هي LISTEN اي ان المنفذ جاهز ومفتوح لتلقي الطلبات.
في السطر الثاني نجد ان خدمة cupsd الخاصة بالطباعة تستمع فقط للآي بي الخاص باللوب باك او الدوران المحلي. بعبارة أخرى ان طلبات الطباعة القادمة من جهازي المحلي هي فقط من يمكنها الاتصال.
ملاحظة: خدمة الcupsd تستخدم اسلوب خاص بها لتنفيذ طلبات الطباعة بحيث يجب حجز سوكت وعمل كونكشن خاصة بها وكأنها على شبكة لكي تنفذ حتى لو كانت محلية.
في السطر الثالث خدمة mysqld تستمع لجميع الطلبات القادمة من كل المنافذ الخارجية ولأي كرت شبكة او اي بي محلي. طبعا هذا قد يشكل خطرا اذا كانت قاعدة البينات خاصة بالشبكة الداخلية فقط فلا يجوز ان تكون متوفرة على كرت الشبكة المتصل مع العالم الخارجي. لاحظ انها تعمل على 0.0.0.0:3306 .
السطر الرابع لا حاجة لشرحه لأنه يستخدم الhttp مع ssl على منفذ 443 الخاص ب https كما نعلم.
السطر الخامس خدمة sshd تستقبل طلبات الاتصال من اي عنوان ip خارجي على المنفذ المحلي رقم 22 الخاص بها.
السطر السادس خدمة الطباعة cupsd ولكنها تستقبل طلبات الاتصال ايضا على udp وليس tcp فحسب .
كما نرى من المثال السابق يمكننا معرفة ان النظام تعمل عليه خدمات sshd و mysqld وhttpd وcupsd ... الآن نأتي للسؤال الأهم في موضوعنا:
س. ماذا يحصل اذا قمنا بتحديد بعض القواعد باستخدام فايروول مثل iptables لمنع او السماح لبعض الخدمات؟
الجواب: لن يتغير ناتج الأمر netstat!!! سأقوم بتوضيح السبب:
اعداد نظام جدار ناري مثل الiptables هو بمثابة تحديد قواعد على مستوى الكيرنل لرفض او للسماح ببعض الباكيتات للدخول او الخروج من النظام، فمثلا لو قمت باعداد الفايروول لرفض جميع الباكيتات القادمة للمنفذ 80 من اي كرت شبكة ما عدا الدوران او اللوب باك (اي ان الخدمة متوفرة من والى جاهزك فقط) فالجدار الناري سيقوم بمنعها من الوصول فعلا ، ولكن الأمر netstat سيستمر في عرض الخدمة وكأنها تعمل على كل كروت الشبكة رغم انك حددتها بالجدار الناري لتعمل فقط على الدوران الداخلي او اللوب باك. وستظهر وكأنها تستمع الى جميع طلبات الاتصال على كل الكروت.
ولكنك لو قمت بتعديل اعدادات الhttpd نفسها لكي تعمل فقط على الدوران المحلي او اللوب باك باستخدام ملف الاعدادات الخاص بالخدمة نفسها فهنا سيعطيك الأمر netstat الناتج الجديد.
- -معرفة المنافذ المفتوحة باجراء فحص من الخارج الى الداخل ( nmap)
تعرفنا منذ قليل على اداة netstat التي تعطي لمحة لمدير النظام عن الخدمات التي تعمل على نظامنا وقد تعطي فكرة ان الخدمة معرضة ومفتوحة أكثر مما ينبغي لكنها في الواقع قد تكون محمية باعدادات جدار ناري كما سبق و أشرنا. لذلك قد يستوجب من مدير النظام فحص نظامه من الخارج لكي يتأكد من الخدمات و الaccess controlالحقيقي لهذه الخدمات باستخدام ما يعرف بأدوات مسح المنافذ port scanners .
البورت سكانرز تقوم بعملية فحص للمنفذ وثم تعطي تقريرا حول اذا كان هذا المنفذ متوفرا ام لا. واحدة من أشهر هذه الأدوات واتذي تاتي مضمنة بتوزيعات ريدهات هي الاداة nmap .
طريقة استخدام اداة nmap سهلة نوعا ما ، مثلا اذا اردنا فحص خادمنا والذي عنوانه192.168.0,102 من جهاز آخر يمكننا عمل التالي:
لعلك لاحظت عزيزي القارئ بأن خدمة cupsd لم تظهر لنا أثناء عملية المسح، وذلك لأنها لا تقبل طلبات الاتصال من الخارج كما سبق و أشرنا.
طبعا هذه الطريقة تقوم بفحص باستخدام tcp فقط وسنتعرف الى كيفية تضمين مسح لمنافذ udp ايضا. كما يمكننا استخدام الأداة nmap لفحص مجال شبكة كاملة باستخدام أمر مثل:
وسيقوم باعطائنا نتائج لكل عنوان اي بي على هذه الشبكة في حالة كان يقبل عمليات الping اي ان الجهاز يعمل ومربوط على الشبكة.
الاداة nmap لديها العديد من الخيارات المتنوعة التي يمكن استخدامها لتخصيص عملية المسح، سنذكر اهم هذه الخيارات:
يستخدم هذا الخيار في حالة عدم الرغبة في ان تقوم الاداة nmap بارسال ping للتأكد من أن الجهاز يعمل أم لا، وذلك لأن طبيعة عمل الاداة nmap انها تقوم بارسال ping packet للتأكد من ان الجهاز يعمل حاليا، هذا الخيار يستخدم في حالة انك تريد مسح الاف المنافذ على عدة عناوين ولا تريد انتظار ناتج الping حيث اذا كان الجهاز لا يعمل فستتأخر عملية الرد على الping مما يطيل الفترة الزمنية لعملية المسح.
يستخدم هذا الخيار لعمل مسح عدواني Aggressive scan اي انه يقوم ليس فقط بعملية مسح للمنافذ فحسب، بل يقوم باعطاء تقرير عن نوع نظام التشغيل المستخدم واسم واصدار الخدمة المستخدمة على هذا المنفذ !! حيث يقوم بمقارنة رسالة الترحيب التي تأتي مع اغلب الخدمات او ما تسمى البانرز banners بالملف الذي يحوي هذه الرسائل وهو
ملاحظة: ماذا يحصل اذا قمت بتغيير الرسالة الاصلية التي تأتي مع الخدمات لكي تعرض اصدارا مغلوطا ؟؟ بالتأكيد ستزيد من صعوبة عملية الهجوم عليك لأن المهاجم سيستخدم ادوات وثغرات لاصدار آخر غير متوافق مع الاصدار الذي لديك.
يقوم بفحص منافذ الudp فقط
يقوم بفحص منافذ الtcp فقط . (الافتراضي)
يقوم بتحديد ارقام المنافذ التي تريد فحصها . مثال:
يقوم بفحص المنافذ 25 و 80 و من 900 الى 1000 على جهازك المحلي.
يقوم بعمل مسح سريع للمنافذ المعروفة والتي تجدها في الملف /etc/services فقط وليس كل ال65535 منفذ للTCP/IP .
للتعرف على باقي الخيارات يمكن الاطلاع على المواقع التالية:
هام : - فحص المنافذ المفتوحة و محاولة فتح النافذة!
عملية فحص المنافذ المفتوحة على خادمك الخاص او شبكتك الخاصة قد تكون منطقية لكي تتأكد من سلامة ومستوى الأمان لديك، لكن فحص المنافذ على جهاز آخر او عنوان آخر دون ترخيص يشبه عمليه التمهيد لاقتحام المنزل التي يقوم بها اللص، حيث ان اللص يبدأ بالدوران حول المنزل ويحاول ان يتأكد من جميع نوافذ المنزل ليتأكد ان كانت احداها مفتوحة لكي يقوم بالتسلل من خلالها. ولكن لا بأس لصاحب المنزل ان يتاكد من نوافذ منزله الخاص طبعا ولا يجوز له ان يذهب ليتأكد من نوافذ المنزل المجاور!! لذلك فإن عملية مسح النوافذ دون تصريح او ترخيص ممنوعة دوليا و يعاقب عليها ،حيث بأسوأ الأحوال قد تحسب كمحاولة زيادة العبء على الخادم، أو كمحاولة تمهيد لاختراق او تسلل ويتم اتخاذ اجراء مضاد حسب ما هو متبع.
- تعطيل الخدمات غير الضرورية
عند الانتهاء من عملية فحص المنافذ المفتوحة والخدمات غير اللازمة يمكننا استخدام الأمر service والأمر chkconfig لتعطيل هذه الخدمات و ايقافها حتى بعد اعادة عملية اقلاع النظام.
طريقة استخدام الأمر service و chkconfig سهلة جدا، المثال التالي يوضح لنا :
قمنا بايقاف خدمة الhttpd و:
يقوم بتعطيل الخدمة من العمل بعد اعادة تشغيل النظام. يمكنك التحقق من ان الخدمة معطلة عن جميع مستويات العمل باستخدام:
- الخدمات المفعلة افتراضيا في نظام ريدهات انتربرايز لينكس
هناك بعض الخدمات تاتي مفعلة مع أنظمة ريدهات انتربرايز لينكس ، ولكنها تكون في أعلى مستوى من الحماية لها وهي:
*SSH : الsshd تأتي مفعلة تلقائيا بعد تنصيب نظام جديد من ريدهات انتبرايز لينكس وذلك لأهمية هذه الخدمة ولكون تطبيقات OpenSSH من التطبيقات الأمنة نسبيا .
*CUPS : خدمة الcups تستخدم لاستقبال طلبات الطباعة على بروتوكول ipp الذي يعتبر HTTP post and get على منفذ 631 . لكي تقوم الخدمة باستقبال طلبات الطباعة للطابعات الموصولة بالنظام فهي تعمل افتراضيا لكنها مربوطة فقط على العنوان 127.0.0.1 الخاص باللوب باك او الجهاز المحلي فقط. ولذلك هي لا تستقبل اي طلبات من الخارج.
*sendmail : لكي يتمكن النظام من ارسال الرسائل لعناوين أخرى (لا يستقبل اي رسائل من الخارج) او تراسل داخلي بين المستخدمين على نفس النظام.
*NFS Locking : تفعل خدمات مثل rpc.statd و portmap لكي يتمكن النظام من عمل mount للNFS share . كثير من مدراء الانظمة يقومون بتعطيل الnfs والportmap كونها غير آمنة عند استخدامها على الانترنت.
انتهينا من موضوعنا هذا ونلقاكم بالدرس الأخير من هذه السلسلة... وارجو ان لا تنسونا من الدعاء
وكما سبق و ذكرنا ...يخضع الموضوع للرخصة السفاحية التي تقضي بنقله و تعديله و حذفه لكن بذكر مصدر الموضوع على الأقل
الموضوع الثالث: مراقبة الشبكة Monitoring The Network
المنافذ المفتوحة هي ابواب مفتوحة! Open ports is an open doors!! هذه العبارة تعبر عن أهمية مراقبة المنافذ والخدمات التي تعمل على خادمك لتتأكد من توفر ما نريده منها واغلاق ما لا نريده. كما هو معروف للجميع فإن ال TCP/IP يقوم بتخصيص رقم منفذport للعمليات التي تطلب اتصال او داتا معينة. كل منفذ مفتوح على الخادم يمكن اعتباره كأحد المداخل التي ممكن ان تتعرض في أي وقت الى هجوم. في هذا الدرس سنتعرف على بعض الطرق المفيدة لكي تعرف ما هي المنافذ المفتوحة على خادمك سواء من خلال فحصك له من الداخل ( اي في حالة تسجيل الدخول الى خادمك والقيام بالفحص)باستخدام اداة مثل netstat ، او من الخارج ( اي ان تقوم بفحص المنافذ دون ان تسجل الدخول على خادمك كما هي الحالة التي يقوم بها المهاجم ) من خلال اداة مثل namp .
تسمى عملية تشخيص النظام للتقليل من تعرض النظام لعملية اختراق بالتدقيق auditing ، وهي عملية مهمة لأي مدير نظام لكي يقوم بها بمجرد انتهائه من تنصيب خادم جديد لكي يتأكد من مستوى الأمان عليه. قبل ان تبدا عملية التدقيق هناك بعض الاسئلة قد تساعدك لأداء هذه العملية بشكل فعال :
1- ما هي الخدمات التي أحتاجها؟؟ اي انك تقوم بفحص الخدمات services التي تعمل على جهازك وتعطيل التي لا تحتاجها.
2- ما هو كرت الشبكة الذي يحتاج للتدقيق؟ المقصود بهذه العملية ان بعض الخوادم يكون عليها أكثر من كرت شبكة مخصص لأكثر من شبكة (خارجية وداخليه مثلا) لذلك فعلى مدير النظام ان يعرف اي الخدمات التي تحتاج لكي تعمل على كرت شبكة معين دون الآخر، ويقوم بربط الخدمة لكي تعمل على هذا الكرت فقط.
3- من هو العميل client أو مجال الشبكة host الذي يحتاج لهذه الخدمة؟ يقوم مدير النظام بهذه الحالة بتوفير خدمة معينة لعناوين ip محددة فقط، او لمجال شبكة معين. مثلا يقوم مزودي خدمة الانترنت بتوفير خدمة الSMTP البريد الآلي فقط لعملائهم الذين يستخدمون عناوين ip تابعة لهم فقط.
4- من هم المستخدمين الذين يحتاجون الى هذه الخدمة؟ أخيرا هناك عدة اساليب لتحديد من هم المستخدمين الذين سنقوم بتوفير الخدمة لهم دون غيرهم من المستخدمين. طبعا بعض الخدمات التي لا تستخدم التوثيق authentication مثل DNS لا يمكن تطبيق هذا الشيء عليها.
طبعا في درسنا هذا سنتحدث عن الخدمات التي تعمل على الخادم و على اي منفذ فقط، طبعا باقي الاسئلة التي قمنا بطرحها يمكن استخدام عدة اساليب للتعامل معها مثل الiptables و tcp wrappers لتحديد الحماية على مستوى العميل و الشبكة client / host -level security ، وهناك الPAM لتحديد الحماية على مستوى المستخدم user-level security وهي متوفرة في عدة دروس في منتدانا وفي أماكن أخرى كثيرة.
-معرفة المنافذ المفتوحة باجراء فحص من الداخل الى الخارج ( netstat )
سنتعرف على أداة مهمة لأي مدير نظام لأنها تستخدم لمعرفة المنافذ المفتوحة على خادمك باجراء الفحص scan وانت مسجل دخول على خادمك. وايضا تقوم هذه الاداة بعرض جميع الاتصالات connections الجارية حاليا على جهازك active connections .
يمكنك تحديد الاداة بعرض البيانات المتعلقة بالTCP أو الUDP باستخدام الخيار -t أو -u على التوالي... كما يفضل اضافة الخيارين p و n لعرض مزيد من البيانات حول رقم العملية PID التي تستخدم واسم البرنامج ايضا. لنتعرف سويا الى المثال التالي:
لنفترض اننا نستخدم خادم عنوانه 192.168.0.102 ، انظر لناتج الأمر التالي:
كود:
[[email protected] ~]# netstat -tupn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.0.102:36049 192.168.0.100:21 ESTABLISHED 26910/lftp tcp 0 0 192.168.0.102:22 192.168.0.150:2493 TIME_WAIT 26910/ssh
السطر الأول يشير الى ان هناك تطبيق ftp يستخدم المنفذ العشوائي 36049 من على جهازك ويقوم بالاتصال بسيرفر ftp على عنوان 192.168.0.100 ومنفذ 21 المخصص لخدمة الftp كما نعلم. طبعا لاحظ الحالةstate هي ESTABLISHED وهذا يدل ان الاتصال لا زال مفعلا لحظة تنفيذ الأمر netstat .
السطر الثاني يشير الى ان هناك اي بي خارجي Foreign Address هو 192.168.0.150 قد قام بالاتصال قبل قليل بالخادم الخاص بي عن طريق SSH ومستخدما المنفذ 22 الخاص بالssh كما نعلم. طبعا الحالة TIME_WAIT تدل على ان الاتصال انتهى وان الconnection تنتظر الtime out من الجهة الأخرى للاتصال لانهاء الاتصال بشكل كامل ( راجع آلية عمل بروتوكول TCP/IP للمزيد )
يمكنك معرفة اذا كان الاتصال قد تم من الداخل الى الخارج او من الخارج الى الداخل عن طريق ارقام المنافذ، ففي مثالنا السابق مثلا وجدنا المنفذ 22 على جهازنا المحلي، وهذا يعني ان ال ssh service مفعلة على خادمنا وقام تطبيق بالاتصال علينا من العنوان الآخر مستخدما منفذ عشوائي (عادة يخصصه الكيرنل بشكل عشوائي للتطبيقات) رقمه 26910 .
رغم ان المثال السابق قد اعطى لمحة سريعة عن بعض الاتصالات الجارية حاليا على خادمنا إلا انه يهمنا ايضا معرفة الخدمات التي تقوم بانتظار طلبات الاتصال من الخارج ومنافذها مفتوحة، وهي تكون بالحالة Listen . لننظر للمثال التالي:
باضافة الخيار l يمكننا معرفة المنافذ المفتوحة على خادمنا وما هي العناوين التي يسمح لها الاتصال على هذه المنافذ ايضا:
كود:
[[email protected] ~]# netstat -tupnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10867/httpd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 16738/cupsd tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2381/mysqld tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 10867/httpd tcp 0 0 :::22 :::* LISTEN 15074/sshd udp 0 0 0.0.0.0:631 0.0.0.0:* 16738/cupsd
في السطر الثاني نجد ان خدمة cupsd الخاصة بالطباعة تستمع فقط للآي بي الخاص باللوب باك او الدوران المحلي. بعبارة أخرى ان طلبات الطباعة القادمة من جهازي المحلي هي فقط من يمكنها الاتصال.
ملاحظة: خدمة الcupsd تستخدم اسلوب خاص بها لتنفيذ طلبات الطباعة بحيث يجب حجز سوكت وعمل كونكشن خاصة بها وكأنها على شبكة لكي تنفذ حتى لو كانت محلية.
في السطر الثالث خدمة mysqld تستمع لجميع الطلبات القادمة من كل المنافذ الخارجية ولأي كرت شبكة او اي بي محلي. طبعا هذا قد يشكل خطرا اذا كانت قاعدة البينات خاصة بالشبكة الداخلية فقط فلا يجوز ان تكون متوفرة على كرت الشبكة المتصل مع العالم الخارجي. لاحظ انها تعمل على 0.0.0.0:3306 .
السطر الرابع لا حاجة لشرحه لأنه يستخدم الhttp مع ssl على منفذ 443 الخاص ب https كما نعلم.
السطر الخامس خدمة sshd تستقبل طلبات الاتصال من اي عنوان ip خارجي على المنفذ المحلي رقم 22 الخاص بها.
السطر السادس خدمة الطباعة cupsd ولكنها تستقبل طلبات الاتصال ايضا على udp وليس tcp فحسب .
كما نرى من المثال السابق يمكننا معرفة ان النظام تعمل عليه خدمات sshd و mysqld وhttpd وcupsd ... الآن نأتي للسؤال الأهم في موضوعنا:
س. ماذا يحصل اذا قمنا بتحديد بعض القواعد باستخدام فايروول مثل iptables لمنع او السماح لبعض الخدمات؟
الجواب: لن يتغير ناتج الأمر netstat!!! سأقوم بتوضيح السبب:
اعداد نظام جدار ناري مثل الiptables هو بمثابة تحديد قواعد على مستوى الكيرنل لرفض او للسماح ببعض الباكيتات للدخول او الخروج من النظام، فمثلا لو قمت باعداد الفايروول لرفض جميع الباكيتات القادمة للمنفذ 80 من اي كرت شبكة ما عدا الدوران او اللوب باك (اي ان الخدمة متوفرة من والى جاهزك فقط) فالجدار الناري سيقوم بمنعها من الوصول فعلا ، ولكن الأمر netstat سيستمر في عرض الخدمة وكأنها تعمل على كل كروت الشبكة رغم انك حددتها بالجدار الناري لتعمل فقط على الدوران الداخلي او اللوب باك. وستظهر وكأنها تستمع الى جميع طلبات الاتصال على كل الكروت.
ولكنك لو قمت بتعديل اعدادات الhttpd نفسها لكي تعمل فقط على الدوران المحلي او اللوب باك باستخدام ملف الاعدادات الخاص بالخدمة نفسها فهنا سيعطيك الأمر netstat الناتج الجديد.
- -معرفة المنافذ المفتوحة باجراء فحص من الخارج الى الداخل ( nmap)
تعرفنا منذ قليل على اداة netstat التي تعطي لمحة لمدير النظام عن الخدمات التي تعمل على نظامنا وقد تعطي فكرة ان الخدمة معرضة ومفتوحة أكثر مما ينبغي لكنها في الواقع قد تكون محمية باعدادات جدار ناري كما سبق و أشرنا. لذلك قد يستوجب من مدير النظام فحص نظامه من الخارج لكي يتأكد من الخدمات و الaccess controlالحقيقي لهذه الخدمات باستخدام ما يعرف بأدوات مسح المنافذ port scanners .
البورت سكانرز تقوم بعملية فحص للمنفذ وثم تعطي تقريرا حول اذا كان هذا المنفذ متوفرا ام لا. واحدة من أشهر هذه الأدوات واتذي تاتي مضمنة بتوزيعات ريدهات هي الاداة nmap .
طريقة استخدام اداة nmap سهلة نوعا ما ، مثلا اذا اردنا فحص خادمنا والذي عنوانه192.168.0,102 من جهاز آخر يمكننا عمل التالي:
كود:
[[email protected] ]# nmap 192.168.0.102 Interesting ports on 192.168.0.102: (The 1655 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https 3306/tcp open mysql
لعلك لاحظت عزيزي القارئ بأن خدمة cupsd لم تظهر لنا أثناء عملية المسح، وذلك لأنها لا تقبل طلبات الاتصال من الخارج كما سبق و أشرنا.
طبعا هذه الطريقة تقوم بفحص باستخدام tcp فقط وسنتعرف الى كيفية تضمين مسح لمنافذ udp ايضا. كما يمكننا استخدام الأداة nmap لفحص مجال شبكة كاملة باستخدام أمر مثل:
كود:
nmap 192.168.0.0/24
الاداة nmap لديها العديد من الخيارات المتنوعة التي يمكن استخدامها لتخصيص عملية المسح، سنذكر اهم هذه الخيارات:
كود:
-P0
كود:
-A
كود:
/usr/share/nmap/nmap-service-probes
كود:
-sU
كود:
-sS
كود:
-p port1,port2,...
كود:
nmap -p 25,80,900-1000 localhost
كود:
-F
للتعرف على باقي الخيارات يمكن الاطلاع على المواقع التالية:
كود:
http://linux.die.net/man/1/nmap http://www.linuxfocus.org/English/July2001/article170.shtml
هام : - فحص المنافذ المفتوحة و محاولة فتح النافذة!
عملية فحص المنافذ المفتوحة على خادمك الخاص او شبكتك الخاصة قد تكون منطقية لكي تتأكد من سلامة ومستوى الأمان لديك، لكن فحص المنافذ على جهاز آخر او عنوان آخر دون ترخيص يشبه عمليه التمهيد لاقتحام المنزل التي يقوم بها اللص، حيث ان اللص يبدأ بالدوران حول المنزل ويحاول ان يتأكد من جميع نوافذ المنزل ليتأكد ان كانت احداها مفتوحة لكي يقوم بالتسلل من خلالها. ولكن لا بأس لصاحب المنزل ان يتاكد من نوافذ منزله الخاص طبعا ولا يجوز له ان يذهب ليتأكد من نوافذ المنزل المجاور!! لذلك فإن عملية مسح النوافذ دون تصريح او ترخيص ممنوعة دوليا و يعاقب عليها ،حيث بأسوأ الأحوال قد تحسب كمحاولة زيادة العبء على الخادم، أو كمحاولة تمهيد لاختراق او تسلل ويتم اتخاذ اجراء مضاد حسب ما هو متبع.
- تعطيل الخدمات غير الضرورية
عند الانتهاء من عملية فحص المنافذ المفتوحة والخدمات غير اللازمة يمكننا استخدام الأمر service والأمر chkconfig لتعطيل هذه الخدمات و ايقافها حتى بعد اعادة عملية اقلاع النظام.
طريقة استخدام الأمر service و chkconfig سهلة جدا، المثال التالي يوضح لنا :
كود:
service httpd stop
كود:
chkconfig httpd off
كود:
chkconfig --list httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
- الخدمات المفعلة افتراضيا في نظام ريدهات انتربرايز لينكس
هناك بعض الخدمات تاتي مفعلة مع أنظمة ريدهات انتربرايز لينكس ، ولكنها تكون في أعلى مستوى من الحماية لها وهي:
*SSH : الsshd تأتي مفعلة تلقائيا بعد تنصيب نظام جديد من ريدهات انتبرايز لينكس وذلك لأهمية هذه الخدمة ولكون تطبيقات OpenSSH من التطبيقات الأمنة نسبيا .
*CUPS : خدمة الcups تستخدم لاستقبال طلبات الطباعة على بروتوكول ipp الذي يعتبر HTTP post and get على منفذ 631 . لكي تقوم الخدمة باستقبال طلبات الطباعة للطابعات الموصولة بالنظام فهي تعمل افتراضيا لكنها مربوطة فقط على العنوان 127.0.0.1 الخاص باللوب باك او الجهاز المحلي فقط. ولذلك هي لا تستقبل اي طلبات من الخارج.
*sendmail : لكي يتمكن النظام من ارسال الرسائل لعناوين أخرى (لا يستقبل اي رسائل من الخارج) او تراسل داخلي بين المستخدمين على نفس النظام.
*NFS Locking : تفعل خدمات مثل rpc.statd و portmap لكي يتمكن النظام من عمل mount للNFS share . كثير من مدراء الانظمة يقومون بتعطيل الnfs والportmap كونها غير آمنة عند استخدامها على الانترنت.
انتهينا من موضوعنا هذا ونلقاكم بالدرس الأخير من هذه السلسلة... وارجو ان لا تنسونا من الدعاء

وكما سبق و ذكرنا ...يخضع الموضوع للرخصة السفاحية التي تقضي بنقله و تعديله و حذفه لكن بذكر مصدر الموضوع على الأقل

تعليق