مقال : زيادة حماية الخوادم باستخدام Port Knocking
كيف تعمل هذة الحماية
في الحقيقة طريقة العمل جدا سهلة ورائعة وفعالة لحماية السيرفر الفكرة تتلخص في ان السيرفر على سبيل المثال يملك بعض الخدمات مثل ssh و ftp ولكن لا نريد ان تبقى البورتات مفتوحة في السيرفر وقد تشكل خطر على السيرفر ويمكن فحص السيرفر ومعرفة البورتات ويتم مهاجمتها وقد تكون مصابة بثغره او يتم تنفيذ هجمات التخمين او هجمات الحرمان من الخدمة .. الخ
لزيادة الحماية على السيرفر نريد البورت 22 يبقى مغلق ولا يستطيع احد اكتشافة في عمليات الفحص وايضا لا يستطيع الاتصال به ، ولكن عندما يريد مدير السيرفر ان يتصل بـ ssh يمكن فتح البورت بشكل موقت لثوان معدودة والاتصال بالسيرفر عن طريقة اشارة بينة وبين السيرفر تم الاتفاق عليها و هي عبارة عن طرق بعض البورتات على السيرفر بشكل متسلسل ومرتب وفي فترة زمنية قصيرة على سبيل المثال ، اذا اردنا فتح البورت 22 بشكل سريع للاتصال به نقوم بطرق البورتات : 2111 و 2112 و 2113 بشكل متتالي وايضا في مدة لا تتجاوز 10 ثوان ليتم فتح البورت بشكل سريع والاتصال به ، وعند الانتهاء يمكن ايضا تنفيذ نفس الفكرة لغلق الاتصال ويصبح السيرفر في جميع اوقاتة لا يملك بورت 22 اساسا لفحصة او تنفيذ اي عمليات علية . Port Knocking نستيطع القول بانها احدى الطرق التي يمكن تعتيم واخفاء خدمات السيرفر وحمايتها من الهجوم ايضا نستطيع اعتبارها نوع من انواع المصادفة والتحقق من الهوية .
اعداد الحماية على الخادم :
سوف نقوم بتثبيت حزمة knockd عن طريق الامر التالي :
sudo apt-get install knockd
بعد تنصيب الحزمة سوف نقوم بالدخول الى ملف اعدادات الحزمة عن طريق الامر التالي :
sudo nano /etc/knockd.conf
من المفترض ان تظهر لك خيارات الحزمة كالشكل التالي :
[options]
UseSyslog[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn
ظهرت لنا معلومات الملف الخاص باعدادات الاداة والخيارات سهلة جدا وتنقسم المعلومات السابقة او الخيارات السابقة الى قسمين ، واحد لفتح البورت والجزء الاخر لغلق البورت
الخيار sequence :
sequence = 7000,8000,9000
وهي البورتات التي سوف يتم الطرق عليها ليتم تنفيذ الامر :
command = /sbin/iptables -I INPUT -s %IP% -p tcp –dport 22 -j ACCEPT
وهذا الامر موجة الى جدار الحماية بفتح البورت 22 في فترة زمنية مقدارها 5 ثواني ، اي انه يجب ان يكون الطرق على الثلاثة البورتات 7000,8000,9000 في خمس ثواني البورتات الموجودة مجرد مثال افتراضي من الاداة وتستطيع تغيير اي بورتات تريد . ولكن سوف نقوم بتعديل الامر السابق وتغيير A الى I وكذلك command الى start_command اضافة كلمة start نقوم باضافتها في الامرين للفتح والاغلاق اما تغيير A الى I فقط في امر الفتح ليصبح بالشكل التالي:
start_command = /sbin/iptables -I INPUT -s %IP% -p tcp –dport 22 -j ACCEPT
الامر السابق يخبر الفايرول ان يسمح بالاتصال لصاحب %IP% الذي تمت بواسطته عملية الطرق للبورتات .
الخيار seq_timeout وهي الفترة الزمنية التي يجب طرق جميع البورتات فيها :
seq_timeout = 5
الخيار UseSyslog
يخبرنا بان knockd
تستخدم ملفات logs لمعرفة الطرقات على البورتات باستخدام Syslog واذا اردت اختيار ملف لوج مخصص او مسار مخصص استخدام الخيار التالي :
LogFile = /path/file1/mylog/knockd_log
تشغيل knockd
:
بشكل افتراضي يجب تشغيل الحماية يدويا ولكن سوف نقوم بتعديل الملف التالي :
sudo nano /etc/default/knockd
ونبحث عن START_KNOCKD
ونقوم بتغيير القيمة الى 1
START_KNOCKD=1
الان نقوم بحفظ الملف وتشغيل الخدمة من الامر التالي :
sudo service knockd start
تجربة Port Knocking
قبل البدء بتجربة العملية افتراضيا الفايروول يقوم بالسماح لكل الاتصالات ويجب علينا ان نقوم بحضرها لكي تكون الحالة الافتراضية لبورت 22 مغلق ويتم السماح فقط للطارق, نقوم بتنفيذ الامر التالي:
iptables -A INPUT -p tcp –dport 22 -j REJECT
الان نقوم بتجربة الاتصال بـ ssh سوف تكون الاجابة بالرفض :
root@lenevo-ubuntu:~# ssh 192.168.1.102
ssh: connect to host 192.168.1.102 port 22: Connection refused
ولكن عندما نقوم بعملية الطرق باستخدام الاوامر التالية بشكل سريع ومتتابع :
telnet 192.168.1.102 7000
telnet 192.168.1.102 8000
telnet 192.168.1.102 9000
نقوم الان بتجربة الاتصال وسوف تنجح ان شاء الله
اغلاق البورت :
عملية اغلاق البورت نفس فكرة عملية الفتح ولكن باختلاف الطرق على الترتيب العكسي للبورتات كالتالي :
telnet 192.168.1.102 9000
telnet 192.168.1.102 8000
telnet 192.168.1.102 7000
, كان هذا المثال فقط لبورت 22 ويمكن استخدام الفكرة على اي خدمة لديك في السيرفر , شكرا لكم .
شكرآ على هذا المقال ….
مقالة أكثر من رائعه
شكرا علي طرح الموضوع بهاذا البساطة
لكن يبقي عندي سؤال:
هل يمكن الطرق باستخدام اسالين اخري غير telnet
وشكرااا
نعم يمكن الطرق بأي طريقة اخرى الغرض هو ايصال حزمه او اتصال للبورت
يمكن الطرق بشكل سهل جدا واسرع بامر واجد عن طريق تنصيب الحزمه knockd وهي مخصصه لهذا الغرض كحزمه كلاينت وهناك حزمه السيرفر
اذا كان الامر مضايق يمكن ان تجعل الوقت عشر ثواني بدلا عن خمس ثواني
شكرا لمرورك
الفكرة حلوة بس كيف ممكن تتنفذ بطريقة أوتوماتيكية …. لأنو مو معقول يفتح الادمن كل هي البورتات يدويا ليتمكن من اتصال ssh … و يرجع يسكرها بنفس الترتيب
لم افهم بقصدك اوتوماتيكيا
والبورتات هذه ليست بورتات حقيقه وانما هي اشاره بينك وبين السيرفر اذا تم الطرق على هذه البورتات وبالترتيب الفلاني افتح البورت
لا اريد ان يكون البورت مفتوح ليعبث به اي شخص او يهاجمة او يكون عرض لاي خطر
عندما اريد استخدامه سوف اقوم بفتحه في اقل من ثانية
كذلك الامر ليس متعب قم بالطرق باي طريقة تحب ويمكن دمج الاوامر في امر واحد او استخدم حزمه knockd نفسها للطرق
المقال رائع شكرا لك لاكن لو فعلا توجد كل هاذه الحمايات في السيرفر لماذا نسمع عن اختراق سيرفرات بنوك وسيرفرات حساسة مع انها ذو مستى امن عالي جدا
ربما اغلب المواقع الكبيرة المتميزة بحماية قوية تخترق عبر DNS hijacking
لكن عندي سؤال 🙂
لو انا طرقت على جميع البورتات من 1 الى 65535 وفنفس الوقت فحصت بـ اداة فحص البورتات هل يمكن اكتشافة ؟
ولو على سبيل المثال برمجت اداة تطرق بشكل متتالي يعني تطرق من 1 الى 65535 وبعد ماتخلص تطرق وتطرق …..
هل باستطاعتي اخمن على البورت؟
ام الاداة لايمكن اكتشافها الا من قٍبل الايبي المدخل في knockd.conf ؟؟
بس الفكرة لنا كمختبرين اختراق في كيفية تخطي knockd ؟؟؟؟
O_o