اختار المؤلف صندوق التبرعات المفتوح والمجاني لتلقي تبرع كجزء من برنامج الكتابة من أجل التبرعات.
مقدمة
عندما تنظر إلى سجلات المصادقة، قد ترى عدة محاولات تسجيل دخول فاشلة من عناوين IP مختلفة. غالبًا ما تأتي هذه المحاولات من جهاز في شبكة البوتات الآلية التي تفحص الويب بأكمله عن خوادم ضعيفة التحصين تحتوي على بيانات اعتماد افتراضية. بينما قد يكون معظم الأشخاص لديهم كلمة مرور آمنة أو مفاتيح SSH تمنع المهاجمين من تسجيل الدخول إلى خادمهم، فإن بعض الخوادم قد تكون عرضة لهذا الفحص. على الرغم من عدم قدرتك على إيقاف هذه الهجمات، يمكنك إبطاء وتيرتها باستخدام المتاهات.
في هذا البرنامج التعليمي، ستقوم بتثبيت وتكوين Endlessh، وهو متاهة ترسل بطيئة إعلانًا طويلًا بلا نهاية إلى أي مستخدم يحاول تسجيل الدخول. ستقوم أيضًا بتكوين خدمة SSH لتعمل على منفذ مختلف، مما سيجعل سجلات المصادقة أكثر قراءة.
بعد الانتهاء من هذا البرنامج التعليمي، ستتمكن من الاتصال بخادمك على منفذ غير قياسي، بينما ستجد أي بوت يفحص خادمك أن وقته يضيع بالطرق على باب لن يتم فتحه أبدًا.
المتطلبات المسبقة
لإكمال هذا البرنامج التعليمي، ستحتاج إلى ما يلي:
- خادم Ubuntu مع مستخدم غير جذري يمتلك صلاحيات sudo وجدار ناري وبحد أدنى 1 جيجابايت من ذاكرة الوصول العشوائي، ويمكنك إعداده باتباع إعداد الخادم الأولي مع Ubuntu 22.04.
- Git مثبتًا على خادمك، ويمكنك إكمال هذا باستخدام برنامج تثبيت Git.
الخطوة 1 – نقل SSH إلى منفذ غير قياسي
في هذه الخطوة، ستقوم بنقل SSH إلى منفذ غير قياسي من أجل تحرير منفذ لـ Endlessh. نظرًا لعدم توفر البوتنتات لموارد لا نهائية، فإنها عادة ما تفحص فقط منفذ SSH الافتراضي (22
). من خلال نقل SSH إلى منفذ غير قياسي، يمكنك أسر البوت في فخ Endlessh.
للبدء، قم بعمل نسخة احتياطية من ملف تكوين SSH الخاص بك من الخادم باستخدام الأمر التالي:
يمكن استخدام هذا الملف لاستعادة الإعدادات الأصلية في حال لم يعمل شيء ما أو إذا قررت نقل SSH مرة أخرى إلى المنفذ الافتراضي.
افتح ملف تكوين SSH /etc/ssh/sshd_config
باستخدام نانو أو محرر النص المفضل لديك:
ابحث عن السطر #Port 22
. ألغِ التعليق عن هذا السطر عن طريق إزالة الرمز #
، ثم قم بتغيير المنفذ إلى منفذ غير مستخدم على الخادم:
...
Port 2222
...
مثال على منفذ غير مستخدم بشكل عادي هو 2222
. يمكنك اختيار أي منفذ ترغب في استخدامه لاتصالات SSH المتكررة الخاصة بك. احفظ وأغلق الملف.
إذا كان الخادم الخاص بك يستخدم جدار ناري، مثل ufw
، فستحتاج إلى السماح بحركة المرور إلى المنفذ الجديد:
بعد ذلك، أعد تشغيل خدمة SSH:
في جلسة محطة عمل متفرقة، حاول الاتصال بالخادم باستخدام المنفذ الجديد:
تحذير: لا تقم بإغلاق جلسة SSH النشطة الخاصة بك ما لم تتأكد من إمكانية استخدام SSH على المنفذ الجديد. إذا لم تتمكن من الاتصال عبر المنفذ الجديد، فإنك تخاطر بفقدان الوصول إلى خادمك عند إغلاق الجلسة. إذا لم تتمكن من الاتصال بالخادم في جلسة محطة عمل متفرقة، يمكنك استعادة إعدادات SSH الأصلية الخاصة بك عن طريق تشغيل الأوامر التالية:
إذا واجهت مشاكل أخرى، تحقق من نجاح إعادة تشغيل sshd
وقم بمراجعة إعدادات جدار الحماية الخاص بك للتأكد من أن المنفذ 2222
يقبل حركة المرور عبر بروتوكول TCP.
بمجرد التحقق من إمكانية إجراء اتصال جديد على المنفذ 2222
، يمكنك إغلاق المحطة الأصلية بأمان. عند الاتصال بالخادم في المستقبل، ستحتاج دائمًا إلى تحديد المنفذ الجديد، على النحو التالي:
الآن بعد نقل SSH بنجاح إلى منفذ غير قياسي، حان الوقت لإعداد Endlessh.
الخطوة ٢ – تثبيت Endlessh
Endlessh ليس لديه حزمة رسمية، لذا ستقوم بنسخ المستودع لبنائه يدويًا. ستستخدم Git لنسخ المستودع، وحزمة build-essential
(لتجميع المشروع)، وحزمة libc6-dev
.
قم بتثبيت الحزم المطلوبة باستخدام مدير الحزم apt:
قم بتأكيد التثبيت باستخدام y
عندما يُطلب منك.
ثم انسخ مستودع Endlessh من GitHub إلى دليل منزلك:
انتقل إلى دليل المشروع واستخدم أمر make
لتجميع Endlessh:
يمكنك الآن بدء تشغيل Endlessh باستخدام الأمر التالي:
للاختبار ما إذا كان Endlessh يعمل، يمكنك محاولة إجراء اتصال SSH بالمنفذ 22
باستخدام العلامة التفصيلية -v
، والتي ستعرض لافتة النهاية المرسلة. في نافذة الطرفية الجديدة، قم بإجراء اتصال SSH بالمنفذ 22
باستخدام أحد الأوامر التالية:
عندما تحاول الجلسة الجديدة لاتصال SSH بالمنفذ 22
، سترى سلسلة من الأحرف العشوائية تظهر في نافذة الاتصال كل ١٠ ثوانٍ حتى يتم إغلاق الجلسة، مثل الإخراج أدناه:
Outputdebug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
بمجرد تأكيد عمله عن طريق محاولة الاتصال بجلسة جديدة، يمكنك إغلاق النافذة الجديدة وإيقاف Endlessh باستخدام Ctrl+C
في جلسة الطرفية الأصلية الخاصة بك.
في هذه الخطوة، قمت بتنزيل وبناء Endlessh من المصدر. في الخطوة التالية، ستقوم بتكوينه ونشره كخدمة لجعله مستمرًا عند تسجيل الخروج وإعادة تشغيل الخادم.
الخطوة 3 – تكوين Endlessh
في هذه الخطوة، ستقوم بإعداد Endlessh كخدمة ستستمر بعد انتهاء جلستك وعند إعادة تشغيل النظام.
انقل الملف التنفيذي المترجم إلى دليل /usr/local/bin
:
أدخل كلمة المرور إذا طُلب منك.
انسخ ملف الخدمة من المشروع إلى دليل /etc/systemd/system
:
ستقوم بتعديل ملف الخدمة قليلاً لتشغيل Endlessh على منافذ تحت 1024
. افتح ملف الخدمة في nano أو محرر النص المفضل لديك:
ابحث عن القسم المتعلق بتشغيل Endlessh على منافذ تحت 1024
.
قم بتحديث الملف عن طريق إزالة #
من بداية السطر الذي يحتوي على AmbientCapabilities=CAP_NET_BIND_SERVICE
وإضافة #
إلى بداية السطر PrivateUsers=true
، مثل هذا:
...
## إذا كنت ترغب في أن يُرتبط Endlessh بمنافذ < 1024
## 1) قم بتشغيل:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) قم بفك تعليق السطر التالي
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) قم بتعليق السطر التالي
#PrivateUsers=true
...
احفظ وأغلق الملف.
بعد ذلك، ستسمح بتشغيل Endlessh على المنافذ الأقل من 1024
، والمعروفة أيضًا باسم منافذ الامتياز لنطاق الإنترنت. قم بتعيين هذه القدرة لملف التنفيذ الثنائي لـ Endlessh باستخدام الأمر setcap
:
ستحتاج إلى تحديد ملف تكوين لـ Endlessh لإخباره بالمنفذ الذي يجب استخدامه. قم بإنشاء وفتح ملف تكوين بالاسم /etc/endlessh/config
:
في ملف التكوين، قم بتعريف المنفذ الذي يجب استخدامه كـ 22
:
Port 22
احفظ وأغلق الملف.
الآن يمكنك بدء خدمة Endlessh بشكل دائم:
بما في ذلك --now enable
سيجعل الخدمة دائمة بعد إعادة تشغيل الخادم الخاص بك.
للتحقق من بدء تشغيل الخدمة بنجاح، يمكنك استخدام أمر systemctl status
:
إذا بدأت الخدمة بنجاح، سترى ناتجًا مثل هذا:
Output● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
إذا كانت تعمل، يمكنك محاولة الاتصال على المنفذ 22
في جلسة طرفية جديدة:
نظرًا لتشغيل فخ الانتظار الخاص بك، لن يكون بإمكان الجلسة الطرفية الجديدة الاتصال وستعمل بشكل دائم حتى يتم إيقافها يدويًا باستخدام Ctrl+C
في الجلسة الطرفية المتصلة.
إذا كنت ترغب في إيقاف تشغيل الخدمة، يمكنك استخدام الأمر التالي:
بعد إيقاف الخدمة، يمكنك استخدام تعليمات استعادة SSH في تحذير الخطوة 1 لاستعادة تكوين الخادم الأصلي الخاص بك. يمكنك إعادة تمكين الخدمة باستخدام sudo systemctl --now enable endlessh
دون الحاجة للمرور من خلال عملية الإعداد مرة أخرى، ولكن تأكد من عدم تشغيل SSH على المنفذ 22
عند القيام بذلك.
الختام
لقد قمت بتثبيت وتكوين Endlessh بنجاح، وساعدت في تنظيف سجلات المصادقة الخاصة بك، واستعدت لإضاعة وقت الروبوتات العشوائية لبروتوكول SSH.
بعد إعداد شبكة Endlessh، قم بمراجعة التدابير الأمنية الموصى بها لحماية الخوادم الخاصة بك.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04