Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
How-To-Secure-A-Linux-Server — دليل خطوة بخطوة لتعزيز أمان خادم لينكس، يغطي أمان SSH، جدران الحماية، كشف التسلل، التدقيق، وتكوين النظام لتقليل سطح الهجوم وتحسين الدفاع. | Kitploit
أدوات/GitHubGitHub/imthenachoman/how-to-secure-a-linux-server
ماسحات الثغرات الأمنيةتدقيق التكوينأمن الشبكاتتحليل البرمجيات الخبيثةالمصادقةكشف التسللالتعلم والتعليمالاستجابة للحوادثموارد منسقة

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
تحليل السجلات
GitHubimthenachoman/how-to-secure-a-linux-server

How-To-Secure-A-Linux-Server

دليل خطوة بخطوة لتعزيز أمان خادم لينكس، يغطي أمان SSH، جدران الحماية، كشف التسلل، التدقيق، وتكوين النظام لتقليل سطح الهجوم وتحسين الدفاع.

عرض المستودع
30.3k2.0k3منذ شهر واحدتمت المراجعة من قبل Kitploit

كيفية تأمين خادم لينكس

دليل متطور لتأمين خادم لينكس، والذي نأمل أن يعلمك أيضًا القليل عن الأمان وأهميته.

CC-BY-SA

جدول المحتويات

  • مقدمة
    • هدف الدليل
    • لماذا تؤمن خادمك؟
    • لماذا دليل آخر؟
    • أدلة أخرى
    • ما يجب فعله / إضافته
  • نظرة عامة على الدليل
    • حول هذا الدليل
    • حالة الاستخدام الخاصة بي
    • تحرير ملفات التهيئة - للكسالى
    • المساهمة
  • قبل أن تبدأ
    • حدد مبادئك
    • اختيار توزيعة لينكس
    • تثبيت لينكس
    • متطلبات ما قبل / بعد التثبيت
    • ملاحظات مهمة أخرى
    • استخدام دفاتر Ansible لتأمين خادم لينكس الخاص بك
  • خادم SSH
    • ملاحظة مهمة قبل إجراء تغييرات SSH
    • مفاتيح SSH العامة/الخاصة
    • إنشاء مجموعة SSH لـ AllowGroups
    • تأمين /etc/ssh/sshd_config
    • إزالة مفاتيح Diffie-Hellman القصيرة
    • المصادقة الثنائية/متعددة العوامل لـ SSH
  • الأساسيات
    • تقييد من يستخدم sudo
    • تقييد من يستخدم su
    • تشغيل التطبيقات في صندوق حماية باستخدام FireJail
    • عميل NTP
    • تأمين /proc
    • إجبار الحسابات على استخدام كلمات مرور آمنة
    • التحديثات الأمنية التلقائية والتنبيهات
    • مجموعة إنتروبيا عشوائية أكثر أمانًا (قيد التطوير)
    • إضافة نظام أمان لتسجيل الدخول بكلمة مرور ذعر/ثانوية/مزيفة
  • الشبكة
    • جدار الحماية باستخدام UFW (جدار الحماية غير المعقد)
    • كشف ومنع الاختراق في iptables باستخدام PSAD
    • كشف ومنع الاختراق على مستوى التطبيق باستخدام Fail2Ban
    • كشف ومنع الاختراق على مستوى التطبيق باستخدام CrowdSec
  • التدقيق
    • مراقبة سلامة الملفات/المجلدات باستخدام AIDE (قيد التطوير)
    • فحص مضاد للفيروسات باستخدام ClamAV (قيد التطوير)
    • كشف روتكيت باستخدام Rkhunter (قيد التطوير)
    • كشف روتكيت باستخدام chrootkit (قيد التطوير)
    • logwatch - محلل سجلات النظام ومُبلغ عنها
    • ss - رؤية المنافذ التي يستمع إليها خادمك
    • Lynis - تدقيق أمان لينكس
    • OSSEC - كشف الاختراق على المضيف
  • منطقة الخطر
  • المتفرقات
    • MSMTP (إرسال بريد بسيط) مع جوجل
    • Gmail و Exim4 كـ MTA مع TLS ضمني
    • ملف سجل منفصل لـ iptables
  • ما تبقى
    • التواصل معي
    • روابط مفيدة
    • شكر وتقدير
    • الترخيص وحقوق النشر

(تم إنشاء جدول المحتويات باستخدام nGitHubTOC)

مقدمة

هدف الدليل

الغرض من هذا الدليل هو تعليمك كيفية تأمين خادم لينكس.

هناك الكثير من الأشياء التي يمكنك القيام بها لتأمين خادم لينكس، وسيحاول هذا الدليل تغطية أكبر عدد ممكن منها. ستتم إضافة المزيد من الموضوعات/المواد عندما أتعلم، أو عندما يساهم الأشخاص بالمساهمة.

دفاتر Ansible لهذا الدليل متاحة في How To Secure A Linux Server With Ansible بواسطة moltenbit.

(جدول المحتويات)

لماذا تؤمن خادمك؟

أفترض أنك تستخدم هذا الدليل لأنك، كما نأمل، تفهم بالفعل لماذا الأمان الجيد مهم. هذا موضوع ثقيل بحد ذاته وتحليله خارج نطاق هذا الدليل. إذا كنت لا تعرف الإجابة على هذا السؤال، أنصحك بالبحث عنه أولاً.

على مستوى عالٍ، بمجرد أن يصبح جهاز، مثل الخادم، في المجال العام - أي مرئي للعالم الخارجي - يصبح هدفًا للمسيئين. الجهاز غير المؤمن هو ملعب للمسيئين الذين يريدون الوصول إلى بياناتك، أو استخدام خادمك كعقدة إضافية لهجمات DDOS واسعة النطاق.

والأسوأ من ذلك، بدون أمان جيد، قد لا تعرف أبدًا ما إذا كان خادمك قد تم اختراقه. قد يكون أحد المسيئين قد حصل على وصول غير مصرح به إلى خادمك ونسخ بياناتك دون تغيير أي شيء، لذا لن تعرف أبدًا. أو ربما كان خادمك جزءًا من هجوم DDOS، ولن تعلم. انظر إلى العديد من خروقات البيانات واسعة النطاق في الأخبار - غالبًا لم تكتشف الشركات تسرب البيانات أو الاختراق إلا بعد وقت طويل من رحيل المسيئين.

خلافًا للاعتقاد الشائع، لا يريد المسيئون دائمًا تغيير شيء ما أو قفلك خارج بياناتك مقابل المال. أحيانًا يريدون فقط البيانات الموجودة على خادمك لمستودعات بياناتهم (هناك أموال كبيرة في البيانات الضخمة) أو لاستخدام خادمك سرًا لأغراضهم الخبيثة.

(جدول المحتويات)

لماذا دليل آخر؟

قد يبدو هذا الدليل مكررًا/غير ضروري لأن هناك عددًا لا يحصى من المقالات عبر الإنترنت تخبرك كيفية تأمين لينكس، لكن المعلومات موزعة عبر مقالات مختلفة، تغطي أشياء مختلفة، وبطرق مختلفة. من لديه الوقت لتصفح مئات المقالات؟

بينما كنت أجري بحثًا لبناء دبيان الخاص بي، كنت أدون ملاحظات. في النهاية أدركت أنه، إلى جانب ما أعرفه بالفعل، وما كنت أتعلمه، كان لدي مكونات دليل إرشادي. فكرت في وضعه عبر الإنترنت لعلّه يساعد الآخرين على التعلم، وتوفير الوقت.

لم أجد أبدًا دليلًا واحدًا يغطي كل شيء - هذا الدليل هو محاولتي.

العديد من الأمور التي يغطيها هذا الدليل قد تكون أساسية/تافهة إلى حد ما، لكن معظمنا لا يقوم بتثبيت لينكس كل يوم، ومن السهل نسيان تلك الأمور الأساسية.

(جدول المحتويات)

أدلة أخرى

هناك العديد من الأدلة المقدمة من قبل خبراء وقادة صناعة والتوزيعات نفسها. ليس من العملي، وأحيانًا مخالف لحقوق النشر، تضمين كل شيء من تلك الأدلة. أوصي بالاطلاع عليها قبل البدء بهذا الدليل.

  • مركز أمن الإنترنت (CIS) يوفر معايير شاملة وموثوقة من قبل الصناعة وتعليمات خطوة بخطوة لتأمين العديد من نكهات لينكس. راجع صفحة حولنا للتفاصيل. توصيتي هي أن تتصفح هذا الدليل (الذي تقرأه هنا) أولاً ثم دليل CIS. وبهذه الطريقة ستتجاوز توصياتهم أي شيء في هذا الدليل.
  • للحصول على أدلة تقوية/أمان خاصة بالتوزيعة، راجع وثائق توزيعتك.
  • https://security.utexas.edu/os-hardening-checklist/linux-7 - قائمة تدقيق تقوية Red Hat Enterprise Linux 7
  • https://cloudpro.zone/index.php/2018/01/18/debian-9-3-server-setup-guide-part-1/ - دليل إعداد خادم Debian 9.3
  • https://blog.vigilcode.com/2011/04/ubuntu-server-initial-security-quick-secure-setup-part-i/ - دليل الأمان الأولي لخادم أوبونتو
  • https://www.tldp.org/LDP/sag/html/index.html
  • https://seifried.org/lasg/
  • https://news.ycombinator.com/item?id=19178964
  • https://wiki.archlinux.org/index.php/Security - أوصى بها العديد من الأشخاص أيضًا
  • https://securecompliance.co/linux-server-hardening-checklist/

(جدول المحتويات)

ما يجب فعله / إضافته

  • أقفاص مخصصة لـ Fail2ban
  • MAC (التحكم الإجباري في الوصول) ووحدات أمان لينكس (LSMs)
    • https://wiki.archlinux.org/index.php/security#Mandatory_access_control
    • Security-Enhanced Linux / SELinux
      • https://en.wikipedia.org/wiki/Security-Enhanced_Linux
      • https://linuxtechlab.com/beginners-guide-to-selinux/
      • https://linuxtechlab.com/replicate-selinux-policies-among-linux-machines/
      • https://teamignition.us/how-to-stop-being-a-scrub-and-learn-to-use-selinux.html
    • AppArmor
      • https://wiki.archlinux.org/index.php/AppArmor
      • https://security.stackexchange.com/questions/29378/comparison-between-apparmor-and-selinux
      • http://www.insanitybit.com/2012/06/01/why-i-like-apparmor-more-than-selinux-5/
  • تشفير القرص
  • Rkhunter و chrootkit
    • http://www.chkrootkit.org/
    • http://rkhunter.sourceforge.net/
    • https://www.cyberciti.biz/faq/howto-check-linux-rootkist-with-detectors-software/

(جدول المحتويات)

نظرة عامة على الدليل

حول هذا الدليل

هذا الدليل...

  • ...هو عمل قيد التقدم.
  • ...مركز على خوادم لينكس المنزلية. جميع المفاهيم/التوصيات هنا تنطبق على البيئات الأكبر/الاحترافية ولكن حالات الاستخدام تلك تتطلب تكوينات أكثر تقدمًا وتخصصًا وهي خارج نطاق هذا الدليل.
  • ...لا يعلمك عن لينكس، أو كيفية تثبيت لينكس، أو كيفية استخدامه. راجع https://linuxjourney.com/ إذا كنت جديدًا على لينكس.
  • ...مقصود أن يكون محايدًا لتوزيعة لينكس.
  • ...لا يعلمك كل ما تحتاج معرفته عن الأمان ولا يتعمق في جميع جوانب أمان النظام/الخادم. على سبيل المثال، الأمان المادي خارج نطاق هذا الدليل.
  • ...لا يتحدث عن كيفية عمل البرامج/الأدوات، ولا يتعمق في تفاصيلها. معظم البرامج/الأدوات التي يشير إليها هذا الدليل قوية جدًا وقابلة للتكوين بشكل كبير. الهدف هو تغطية الأساسيات الضرورية - بما يكفي لإثارة شهيتك وجعلك جائعًا بما يكفي لترغب في الذهاب وتعلم المزيد.
  • ...يهدف إلى تسهيل الأمر بتوفير كود يمكنك نسخه ولصقه. قد تحتاج إلى تعديل الأوامر قبل اللصق لذا احتفظ بمحرر النصوص المفضل لديك محرر نصوص في متناول اليد.
  • ...منظم بترتيب منطقي بالنسبة لي - أي تأمين SSH قبل تثبيت جدار الحماية. وبناءً عليه، يُقصد من هذا الدليل أن يتم اتباعه بالترتيب المعروض به، ولكن ليس من الضروري فعل ذلك. فقط كن حذرًا إذا قمت بأشياء بترتيب مختلف - بعض الأقسام تتطلب إكمال الأقسام السابقة.

(جدول المحتويات)

حالة الاستخدام الخاصة بي

هناك أنواع عديدة من الخوادم وحالات استخدام مختلفة. بينما أرغب في أن يكون هذا الدليل عامًا قدر الإمكان، سيكون هناك بعض الأشياء التي قد لا تنطبق على جميع حالات الاستخدام الأخرى. استخدم أفضل حكم لديك عند التصفح في هذا الدليل.

للمساعدة في وضع سياق للعديد من الموضوعات التي يغطيها هذا الدليل، حالة الاستخدام/التكوين الخاصة بي هي:

  • كمبيوتر من فئة سطح المكتب...
  • مع بطاقة شبكة واحدة...
  • متصل بموجه منزلي من الفئة الاستهلاكية...
  • يحصل على عنوان WAN ديناميكي من مزود خدمة الإنترنت...
  • مع WAN+LAN على IPV4...
  • و LAN يستخدم NAT...
  • أريد أن أتمكن من الاتصال به عبر SSH عن بُعد من أجهزة كمبيوتر غير معروفة ومواقع غير معروفة (مثل منزل صديق).

(جدول المحتويات)

تحرير ملفات التهيئة - للكسالى

أنا كسول جدًا ولا أحب تعديل الملفات يدويًا إذا لم أكن بحاجة لذلك. وأفترض أن الجميع مثلي. :)

لذا، حيثما أمكن، قدمت مقتطفات كود للقيام بما هو مطلوب بسرعة، مثل إضافة أو تغيير سطر في ملف تكوين.

تستخدم مقتطفات الكود أوامر أساسية مثل echo و cat و sed و awk و grep. كيف تعمل مقتطفات الكود، مثل ما يفعله كل أمر/جزء، خارج نطاق هذا الدليل - صفحات man هي صديقك.

ملاحظة: لا تتحقق مقتطفات الكود من أن التغيير تم بنجاح - أي تمت إضافة السطر أو تغييره بالفعل. سأترك جزء التحقق في أيديكم القادرة. تتضمن الخطوات في هذا الدليل عمل نسخ احتياطية لجميع الملفات التي سيتم تغييرها.

لا يمكن أتمتة جميع التغييرات باستخدام مقتطفات الكود. تلك التغييرات تحتاج إلى تحرير يدوي قديم جيد. على سبيل المثال، لا يمكنك فقط إلحاق سطر بملف من نوع INI. استخدم محرر نصوص لينكس المفضل لديك.

(جدول المحتويات)

المساهمة

أردت وضع هذا الدليل على GitHub لتسهيل التعاون. كلما زاد عدد المساهمين، أصبح هذا الدليل أفضل وأكمل.

للمساهمة يمكنك عمل fork وتقديم طلب سحب (pull request) أو تقديم مشكلة جديدة.

(جدول المحتويات)

قبل أن تبدأ

حدد مبادئك

قبل أن تبدأ، سترغب في تحديد مبادئك. ما هو نموذج التهديد الخاص بك؟ بعض الأمور التي يجب التفكير فيها:

  • لماذا تريد تأمين خادمك؟
  • ما مقدار الأمان الذي تريده أو لا تريده؟
  • ما مقدار الراحة الذي ترغب في التضحية به من أجل الأمان والعكس صحيح؟
  • ما هي التهديدات التي تريد الحماية منها؟ ما هي خصوصيات وضعك؟ على سبيل المثال:
    • هل الوصول المادي إلى خادمك/شبكتك متجه هجوم محتمل؟
    • هل ستقوم بفتح منافذ على الموجه الخاص بك لتتمكن من الوصول إلى خادمك من خارج منزلك؟
    • هل ستستضيف مشاركة ملفات على خادمك سيتم تركيبها على جهاز من فئة سطح المكتب؟ ما هو احتمال إصابة جهاز سطح المكتب ومن ثم إصابة الخادم؟
  • هل لديك وسيلة للتعافي إذا قام تطبيق الأمان الخاص بك بقفلك خارج خادمك؟ على سبيل المثال، عطلت تسجيل الدخول كجذر أو حميت GRUB بكلمة مرور.

هذه مجرد أشياء قليلة للتفكير فيها. قبل البدء في تأمين خادمك، سترغب في فهم ما تحاول الحماية منه ولماذا لتعرف ما عليك فعله.

(جدول المحتويات)

اختيار توزيعة لينكس

يهدف هذا الدليل إلى أن يكون محايدًا للتوزيعة حتى يتمكن المستخدمون من استخدام أي توزيعة يريدون. ومع ذلك، هناك بعض الأمور التي يجب وضعها في الاعتبار:

تريد توزيعة...

  • ...مستقرة. ما لم تكن تحب تصحيح المشكلات في الساعة 2 صباحًا، فإنك لا تريد ترقية غير مراقبة، أو ترقية حزمة/نظام يدوي، لتعطيل خادمك. ولكن هذا يعني أيضًا أنك مرتاح لعدم تشغيل أحدث البرامج وأكثرها تطورًا.
  • ...تبقى محدثة بتصحيحات الأمان. يمكنك تأمين كل شيء على خادمك، ولكن إذا كان نظام التشغيل الأساسي أو التطبيقات التي تديرها بها ثغرات أمنية معروفة، فلن تكون آمنًا أبدًا.
  • ...أنت على دراية بها. إذا كنت لا تعرف لينكس، أنصحك باللعب مع واحدة قبل محاولة تأمينها. يجب أن تكون مرتاحًا معها وتعرف طريقك حولها، مثل كيفية تثبيت البرامج، وأين توجد ملفات التهيئة، وما إلى ذلك...
  • ...مدعومة بشكل جيد. حتى أكثر المسؤولين خبرة يحتاجون إلى مساعدة بين الحين والآخر. وجود مكان تذهب إليه للحصول على المساعدة سيوفر سلامتك العقلية.

(جدول المحتويات)

تثبيت لينكس

تثبيت لينكس خارج نطاق هذا الدليل لأن كل توزيعة تفعل ذلك بطريقة مختلفة وتعليمات التثبيت عادة ما تكون موثقة جيدًا. إذا كنت بحاجة إلى مساعدة، ابدأ بوثائق توزيعتك. بغض النظر عن التوزيعة، فإن العملية عالية المستوى تسير عادةً كالتالي:

  1. تحميل الـ ISO
  2. حرقه/نسخه/نقله إلى وسائط التثبيت الخاصة بك (مثل قرص مضغوط أو ذاكرة USB)
  3. تشغيل خادمك من وسائط التثبيت
  4. اتباع التعليمات لإكمال التثبيت

حيثما أمكن، استخدم خيار التثبيت الاحترافي (expert install) للحصول على تحكم أكثر إحكامًا فيما يتم تشغيله على خادمك. قم بتثبيت ما تحتاجه فقط. أنا شخصيًا لا أقوم بتثبيت أي شيء آخر غير SSH. أيضًا، حدد خيار تشفير القرص.

(جدول المحتويات)

متطلبات ما قبل / بعد التثبيت

  • إذا كنت تفتح منافذ على الموجه الخاص بك للوصول إلى خادمك من الخارج، قم بتعطيل إعادة توجيه المنفذ حتى يتم تشغيل نظامك وتأمينه.
  • ما لم تكن تفعل كل شيء متصلًا فعليًا بخادمك، ستحتاج إلى وصول عن بُعد لذا تأكد من أن SSH يعمل.
  • حافظ على تحديث نظامك (مثل sudo apt update && sudo apt upgrade على الأنظمة المبنية على دبيان).
  • تأكد من تنفيذ أي مهام خاصة بإعدادك مثل:
    • تكوين الشبكة
    • تكوين نقاط التحميل في /etc/fstab
    • إنشاء حسابات المستخدمين الأولية
    • تثبيت البرامج الأساسية التي تريدها مثل man
    • إلخ...
  • سيحتاج خادمك إلى القدرة على إرسال رسائل بريد إلكتروني حتى تتمكن من الحصول على تنبيهات أمان مهمة. إذا لم تكن تقوم بإعداد خادم بريد، راجع Gmail و Exim4 كـ MTA مع TLS ضمني.
  • أوصي أيضًا بقراءة معايير CIS CIS Benchmarks قبل البدء بهذا الدليل فقط لاستيعاب/فهم ما يقولونه. توصيتي هي أن تتصفح هذا الدليل (الذي تقرأه هنا) أولاً ثم دليل CIS. وبهذه الطريقة ستتجاوز توصياتهم أي شيء في هذا الدليل.

(جدول المحتويات)

ملاحظات مهمة أخرى

  • هذا الدليل تم كتابته واختباره على دبيان. معظم الأشياء أدناه يجب أن تعمل على التوزيعات الأخرى. إذا وجدت شيئًا لا يعمل، يرجى التواصل معي. الشيء الرئيسي الذي يميز كل توزيعة هو نظام إدارة الحزم الخاص بها. نظرًا لأنني أستخدم دبيان، سأقدم أوامر apt المناسبة التي يجب أن تعمل على جميع التوزيعات المبنية على دبيان. إذا كان شخص ما على استعداد لتقديم الأوامر المقابلة للتوزيعات الأخرى، سأضيفها.
  • مسارات الملفات والإعدادات قد تختلف قليلاً أيضًا - راجع وثائق توزيعتك إذا واجهت مشكلات.
  • اقرأ الدليل بأكمله قبل البدء. قد تتطلب حالة الاستخدام والمبادئ الخاصة بك عدم القيام بشيء ما أو تغيير الترتيب.
  • لا تقم بعمى بنسخ ولصق دون فهم ما تلصقه. بعض الأوامر ستحتاج إلى تعديل لتناسب احتياجاتك قبل أن تعمل - مثل أسماء المستخدمين.

(جدول المحتويات)

استخدام دفاتر Ansible لتأمين خادم لينكس الخاص بك

دفاتر Ansible لهذا الدليل متاحة في How To Secure A Linux Server With Ansible.تأكد من تعديل المتغيرات وفقًا لاحتياجاتك وقراءة جميع المهام مسبقًا للتأكد من أنها لا تعطل نظامك. بعد تشغيل الدفاتر، تأكد من تكوين جميع الإعدادات وفقًا لاحتياجاتك!

  1. قم بتثبيت Ansible
  2. git clone How To Secure A Linux Server With Ansible
  3. Create SSH-Public/Private-Keys ``` ssh-keygen -t ed25519
root@kitploit:~
5. قم بتغيير جميع المتغيرات في *group_vars/variables.yml* وفقًا لاحتياجاتك.
6. قم بتمكين الوصول الجذر عبر SSH قبل تشغيل كتب اللعب:  ```
nano /etc/ssh/sshd_config
[...]
PermitRootLogin yes
[...]
  1. موصى به: قم بتكوين عنوان IP ثابت على نظامك.
  2. أضف عنوان IP الخاص بنظامك إلى hosts.yml.

 

قم بتشغيل playbook المتطلبات باستخدام كلمة مرور الجذر التي حددتها أثناء تثبيت الخادم:

root@kitploit:~
ansible-playbook --inventory hosts.yml --ask-pass requirements-playbook.yml

 

قم بتشغيل playbook الرئيسي باستخدام كلمة مرور المستخدم الجديد التي حددتها في ملف variables.yml:

root@kitploit:~
ansible-playbook --inventory hosts.yml --ask-pass main-playbook.yml

 

إذا كنت بحاجة إلى تشغيل playbooks عدة مرات، تذكر استخدام مفتاح SSH ومنفذ SSH الجديد:

root@kitploit:~
ansible-playbook --inventory hosts.yml -e ansible_ssh_port=SSH_PORT --key-file /PATH/TO/SSH/KEY main-playbook.yml

(جدول المحتويات)

خادم SSH

ملاحظة مهمة قبل إجراء تغييرات SSH

يُنصح بشدة بالاحتفاظ بجلسة طرفية ثانية مفتوحة على خادمك قبل إجراء وتطبيق تغييرات تكوين SSH. بهذه الطريقة إذا أغلقت على نفسك جلسة الطرفية الأولى، فلا يزال لديك جلسة واحدة متصلة حتى تتمكن من إصلاحها.

شكرًا لـ Sonnenbrand على هذه الفكرة.

مفاتيح SSH العامة/الخاصة

لماذا

استخدام مفاتيح SSH العامة/الخاصة أكثر أمانًا من استخدام كلمة مرور. كما أنه يجعل الاتصال بخادمنا أسهل وأسرع، حيث لا داعي لإدخال كلمة مرور.

كيف يعمل

راجع المراجع أدناه للحصول على تفاصيل أكثر، ولكن بشكل عام، تعمل المفاتيح العامة/الخاصة عن طريق استخدام زوج من المفاتيح للتحقق من الهوية.

  1. مفتاح واحد، وهو المفتاح العام، يمكنه فقط تشفير البيانات، وليس فك تشفيرها
  2. المفتاح الآخر، وهو المفتاح الخاص، يمكنه فك تشفير البيانات

بالنسبة لـ SSH، يتم إنشاء مفتاح عام وخاص على العميل. يجب أن تحافظ على كلا المفتاحين آمنين، خاصة المفتاح الخاص. على الرغم من أن المفتاح العام مُعد للعمومية، فمن الحكمة التأكد من عدم وقوع أي من المفتاحين في الأيدي الخطأ.

عند الاتصال بخادم SSH، سيبحث SSH عن مفتاح عام يطابق العميل الذي تتصل منه في الملف ~/.ssh/authorized_keys على الخادم الذي تتصل به. لاحظ أن الملف موجود في المجلد الرئيسي للمعرف الذي تحاول الاتصال به. لذا، بعد إنشاء المفتاح العام، تحتاج إلى إلحاقه بـ ~/.ssh/authorized_keys. أحد الأساليب هو نسخه إلى ذاكرة USB ونقله فعليًا إلى الخادم. نهج آخر هو استخدام ssh-copy-id لنقل وإلحاق المفتاح العام.

بعد إنشاء المفاتيح وإلحاق المفتاح العام بـ ~/.ssh/authorized_keys على المضيف، يستخدم SSH المفاتيح العامة والخاصة للتحقق من الهوية ثم إنشاء اتصال آمن. كيفية التحقق من الهوية هي عملية معقدة ولكن Digital Ocean لديها شرح جيد جدًا لكيفية عملها. بشكل عام، يتم التحقق من الهوية عن طريق تشفير الخادم لرسالة تحدي باستخدام المفتاح العام، ثم إرسالها إلى العميل. إذا لم يستطع العميل فك تشفير رسالة التحدي باستخدام المفتاح الخاص، فلا يمكن التحقق من الهوية ولن يتم إنشاء اتصال.

تعتبر أكثر أمانًا لأنك تحتاج إلى المفتاح الخاص لإنشاء اتصال SSH. إذا قمت بتعيين PasswordAuthentication no في /etc/ssh/sshd_config، فلن يسمح SSH لك بالاتصال بدون المفتاح الخاص.

يمكنك أيضًا تعيين عبارة مرور للمفاتيح والتي ستتطلب منك إدخال عبارة مرور المفتاح عند الاتصال باستخدام المفاتيح العامة/الخاصة. ضع في اعتبارك أن القيام بذلك يعني أنه لا يمكنك استخدام المفتاح للأتمتة لأنه لن يكون لديك طريقة لإرسال عبارة المرور في نصوصك البرمجية. ssh-agent هو برنامج يتم شحنه في العديد من توزيعات Linux (وعادة ما يكون قيد التشغيل بالفعل) والذي سيسمح لك بالاحتفاظ بمفتاحك الخاص غير المشفر في الذاكرة لمدة قابلة للتكوين. ما عليك سوى تشغيل ssh-add وسيطلب منك إدخال عبارة المرور. لن يُطلب منك إدخال عبارة المرور مرة أخرى حتى انقضاء المدة القابلة للتكوين.

سنستخدم مفاتيح Ed25519 والتي، وفقًا لـ https://linux-audit.com/:

تستخدم مخطط توقيع المنحنى الإهليلجي، والذي يوفر أمانًا أفضل من ECDSA و DSA. في الوقت نفسه، لديها أيضًا أداء جيد.

الأهداف

  • مفاتيح SSH العامة/الخاصة من نوع Ed25519:
    • المفتاح الخاص على عميلك
    • المفتاح العام على خادمك

ملاحظات

  • ستحتاج إلى تنفيذ هذه الخطوة لكل جهاز كمبيوتر وحساب ستتصل بخادمك منه/به.

المراجع

  • https://www.ssh.com/ssh/public-key-authentication
  • https://help.ubuntu.com/community/SSH/OpenSSH/Keys
  • https://linux-audit.com/using-ed25519-openssh-keys-instead-of-dsa-rsa-ecdsa/
  • https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process
  • https://wiki.archlinux.org/index.php/SSH_Keys
  • https://www.ssh.com/ssh/copy-id
  • man ssh-keygen
  • man ssh-copy-id
  • man ssh-add

الخطوات

  1. من الكمبيوتر الذي ستستخدمه للاتصال بخادمك، العميل، وليس الخادم نفسه، قم بإنشاء مفتاح Ed25519 باستخدام ssh-keygen:

    root@kitploit:~
    ssh-keygen -t ed25519
    
    root@kitploit:~
    Generating public/private ed25519 key pair.
    Enter file in which to save the key (/home/user/.ssh/id_ed25519):
    Created directory '/home/user/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/user/.ssh/id_ed25519.
    Your public key has been saved in /home/user/.ssh/id_ed25519.pub.
    The key fingerprint is:
    SHA256:F44D4dr2zoHqgj0i2iVIHQ32uk/Lx4P+raayEAQjlcs user@client
    The key's randomart image is:
    +--[ED25519 256]--+
    |xxxx  x          |
    |o.o +. .         |
    | o o oo   .      |
    |. E oo . o .     |
    | o o. o S o      |
    |... .. o o       |
    |.+....+ o        |
    |+.=++o.B..       |
    |+..=**=o=.       |
    +----[SHA256]-----+
    

    ملاحظة: إذا قمت بتعيين عبارة مرور، فستحتاج إلى إدخالها في كل مرة تتصل فيها بخادمك باستخدام هذا المفتاح، ما لم تكن تستخدم ssh-agent.

  2. الآن تحتاج إلى إلحاق المفتاح العام ~/.ssh/id_ed25519.pub من عميلك إلى ملف ~/.ssh/authorized_keys على خادمك. نظرًا لأننا ما زلنا في المنزل على الشبكة المحلية، فمن المحتمل أن نكون آمنين من هجمات ، لذا سنستخدم لنقل وإلحاق المفتاح العام:

الآن سيكون وقتًا مناسبًا لتنفيذ أي مهام خاصة بإعدادك.

(جدول المحتويات)

إنشاء مجموعة SSH لـ AllowGroups

لماذا

لتسهيل التحكم في من يمكنه الاتصال بالخادم عبر SSH. باستخدام مجموعة، يمكننا إضافة/إزالة الحسابات بسرعة من المجموعة للسماح أو عدم السماح بالوصول إلى الخادم عبر SSH بسرعة.

كيف يعمل

سنستخدم خيار AllowGroups في ملف تكوين SSH /etc/ssh/sshd_config لإخبار خادم SSH بالسماح فقط للمستخدمين الذين هم أعضاء في مجموعة UNIX معينة بتسجيل الدخول عبر SSH. أي شخص ليس في المجموعة لن يتمكن من تسجيل الدخول عبر SSH.

الأهداف

  • مجموعة UNIX سنستخدمها في تأمين /etc/ssh/sshd_config لتقييد من يمكنه الاتصال بالخادم عبر SSH

ملاحظات

  • هذه خطوة مسبقة لدعم إعداد AllowGroup المحدد في تأمين /etc/ssh/sshd_config.

المراجع

  • man groupadd
  • man usermod

الخطوات

  1. إنشاء مجموعة:

    root@kitploit:~
    sudo groupadd sshusers
    
  2. إضافة حساب (حسابات) إلى المجموعة:

    root@kitploit:~
    sudo usermod -a -G sshusers user1
    sudo usermod -a -G sshusers user2
    sudo usermod -a -G sshusers ...
    

    ستحتاج إلى القيام بذلك لكل حساب على خادمك يحتاج إلى وصول SSH.

(جدول المحتويات)

تأمين /etc/ssh/sshd_config

لماذا

SSH هو باب إلى خادمك. هذا صحيح بشكل خاص إذا كنت تفتح منافذ على جهاز التوجيه الخاص بك حتى تتمكن من الاتصال بالخادم عبر SSH من خارج شبكة منزلك. إذا لم يتم تأمينه بشكل صحيح، يمكن لعامل سيئ استخدامه للحصول على وصول غير مصرح به إلى نظامك.

كيف يعمل

/etc/ssh/sshd_config هو ملف التكوين الافتراضي الذي يستخدمه خادم SSH. سنستخدم هذا الملف لتحديد الخيارات التي يجب أن يستخدمها خادم SSH.

الأهداف

  • تكوين SSH آمن

ملاحظات

  • تأكد من إكمال إنشاء مجموعة SSH لـ AllowGroups أولاً.

المراجع

  • إرشادات Mozilla's OpenSSH لإصدار OpenSSH 6.7+ على https://infosec.mozilla.org/guidelines/openssh#modern-openssh-67
  • https://linux-audit.com/audit-and-harden-your-ssh-configuration/
  • https://www.ssh.com/ssh/sshd_config/
  • https://www.techbrown.com/harden-ssh-secure-linux-vps-server/ (معطل؛ جرب http://web.archive.org/web/20200413100933/https://www.techbrown.com/harden-ssh-secure-linux-vps-server/)
  • https://serverfault.com/questions/660160/openssh-difference-between-internal-sftp-and-sftp-server/660325
  • man sshd_config
  • شكرًا لـ than0s على كيفية العثور على الإعدادات المكررة.

الخطوات

  1. عمل نسخة احتياطية من ملف تكوين خادم OpenSSH /etc/ssh/sshd_config وإزالة التعليقات لتسهيل القراءة:

    root@kitploit:~
    sudo cp --archive /etc/ssh/sshd_config /etc/ssh/sshd_config-COPY-$(date +"%Y%m%d%H%M%S")
    sudo sed -i -r -e '/^#|^$/ d' /etc/ssh/sshd_config
    
  2. تحرير /etc/ssh/sshd_config ثم البحث عن هذه الإعدادات وتعديلها أو إضافتها التي يجب تطبيقها بغض النظر عن التكوين/الإعداد الخاص بك:

    ملاحظة: SSH لا يحب الإعدادات المكررة المتعارضة. على سبيل المثال، إذا كان لديك ChallengeResponseAuthentication no ثم ChallengeResponseAuthentication yes، فإن SSH سيحترم الأول ويتجاهل الثاني. قد يحتوي ملف /etc/ssh/sshd_config بالفعل على بعض الإعدادات/الأسطر أدناه. لتجنب المشكلات، ستحتاج إلى المرور يدويًا على ملف /etc/ssh/sshd_config ومعالجة أي إعدادات مكررة متعارضة.

    ملاحظة: إذا كنت تستخدم OpenSSH 9.1 أو أحدث، فقم بإلغاء تعليق السطر RequiredRSASize 3072 في التكوين أدناه. يفرض هذا حدًا أدنى لحجم مفتاح RSA يبلغ 3072 بت وسيرفض مفاتيح RSA الأصغر أثناء المصادقة. هذا يؤثر فقط على مفاتيح RSA. إذا كنت تستخدم مفاتيح ED25519 أو ECDSA، فلن تتأثر. يمكنك التحقق من نوع وحجم مفتاحك باستخدام ssh-keygen -l -f ~/.ssh/id_rsa. في إصدارات OpenSSH الأقدم، اترك السطر معلقًا لأنه سيمنع تشغيل sshd.

(جدول المحتويات)

إزالة مفاتيح Diffie-Hellman القصيرة

لماذا

وفقًا لإرشادات Mozilla's OpenSSH لإصدار OpenSSH 6.7+، "يجب أن تكون جميع معاملات Diffie-Hellman المستخدمة بطول 3072 بت على الأقل".

تُستخدم خوارزمية Diffie-Hellman بواسطة SSH لإنشاء اتصال آمن. كلما زاد حجم المعامل (حجم المفتاح)، زادت قوة التشفير.

الأهداف

  • إزالة جميع مفاتيح Diffie-Hellman التي يقل طولها عن 3072 بت

المراجع

  • إرشادات Mozilla's OpenSSH لإصدار OpenSSH 6.7+ على https://infosec.mozilla.org/guidelines/openssh#modern-openssh-67
  • https://infosec.mozilla.org/guidelines/key_management
  • man moduli

الخطوات

  1. عمل نسخة احتياطية من ملف معاملات SSH /etc/ssh/moduli:

    root@kitploit:~
    sudo cp --archive /etc/ssh/moduli /etc/ssh/moduli-COPY-$(date +"%Y%m%d%H%M%S")
    
  2. إزالة المعاملات القصيرة:

    root@kitploit:~
    sudo awk '$5 >= 3071' /etc/ssh/moduli | sudo tee /etc/ssh/moduli.tmp
    sudo mv /etc/ssh/moduli.tmp /etc/ssh/moduli
    

(جدول المحتويات)

المصادقة الثنائية (2FA/MFA) لـ SSH

لماذا

على الرغم من أن SSH حارس أمن جيد لأبوابك ونوافذك، إلا أنه لا يزال بابًا مرئيًا يمكن للجهات الفاعلة السيئة رؤيته ومحاولة اختراق القوة الغاشمة له. سيقوم Fail2ban بمراقبة محاولات القوة الغاشمة هذه ولكن لا يوجد شيء اسمه أن تكون آمنًا جدًا. يتطلب وجود عاملين طبقة إضافية من الأمان.

يتطلب استخدام المصادقة الثنائية (2FA) / المصادقة متعددة العوامل (MFA) من أي شخص يدخل أن يكون لديه مفتاحان للدخول مما يجعل الأمر أكثر صعوبة على الجهات الفاعلة السيئة. المفتاحان هما:

  1. كلمة المرور الخاصة بهم
  2. رمز مكون من 6 أرقام يتغير كل 30 ثانية

بدون كلا المفتاحين، لن يتمكنوا من الدخول.

لماذا لا

قد يجد الكثير من الأشخاص التجربة مرهقة أو مزعجة. كما أن الوصول إلى نظامك يعتمد على تطبيق المصادقة المصاحب الذي يُنشئ الرمز.

كيف يعمل

على Linux، PAM مسؤول عن المصادقة. هناك أربع مهام لـ PAM يمكنك قراءة عنها على https://en.wikipedia.org/wiki/Linux_PAM. يتحدث هذا القسم عن مهمة المصادقة.

عند تسجيل الدخول إلى خادم، سواء كان ذلك مباشرة من وحدة التحكم أو عبر SSH، سيرسل الباب الذي أتيت منه الطلب إلى مهمة المصادقة لـ PAM وسيطلب PAM كلمة مرورك ويتحقق منها. يمكنك تخصيص القواعد التي يستخدمها كل باب. على سبيل المثال، يمكن أن يكون لديك مجموعة من القواعد عند تسجيل الدخول مباشرة من وحدة التحكم ومجموعة أخرى من القواعد عند تسجيل الدخول عبر SSH.

سيقوم هذا القسم بتعديل قواعد المصادقة عند تسجيل الدخول عبر SSH لتتطلب كلاً من كلمة المرور والرمز المكون من 6 أرقام.سنستخدم وحدة PAM الخاصة بـ Google libpam-google-authenticator لإنشاء والتحقق من مفتاح TOTP. تحتوي صفحات https://fastmail.blog/2016/07/22/how-totp-authenticator-apps-work/ و https://jemurai.com/2018/10/11/how-it-works-totp-based-mfa/ على شروحات ممتازة لكيفية عمل TOTP.

ما سنفعله هو إخبار تكوين PAM الخاص بـ SSH على الخادم بطلب كلمة المرور من المستخدم ثم رمزه الرقمي. بعد ذلك، سيتحقق PAM من كلمة مرور المستخدم، وإذا كانت صحيحة، فسيقوم بتوجيه طلب المصادقة إلى libpam-google-authenticator الذي سيطلب رمزك المكون من 6 أرقام ويتحقق منه. إذا وفقط إذا كان كل شيء صحيحًا، فستنجح المصادقة وسيُسمح للمستخدم بتسجيل الدخول.

الأهداف

  • تمكين المصادقة الثنائية/متعددة العوامل لجميع اتصالات SSH

ملاحظات

  • قبل القيام بذلك، يجب أن تكون لديك فكرة عن كيفية عمل المصادقة الثنائية/متعددة العوامل وستحتاج إلى تطبيق مصادقة على هاتفك للمتابعة.
  • سنستخدم google-authenticator-libpam.
  • مع التكوين أدناه، سيحتاج المستخدم فقط إلى إدخال رمز المصادقة الثنائية/متعددة العوامل إذا كان يسجل الدخول بكلمة المرور الخاصة به ولكن ليس إذا كان يستخدم مفاتيح SSH العامة/الخاصة. تحقق من الوثائق حول كيفية تغيير هذا السلوك ليناسب متطلباتك.

المراجع

  • https://github.com/google/google-authenticator-libpam
  • https://en.wikipedia.org/wiki/Linux_PAM
  • https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm
  • https://fastmail.blog/2016/07/22/how-totp-authenticator-apps-work/
  • https://jemurai.com/2018/10/11/how-it-works-totp-based-mfa/

الخطوات

  1. قم بتثبيت libpam-google-authenticator.

    على الأنظمة المستندة إلى Debian:

    root@kitploit:~
    sudo apt install libpam-google-authenticator
    
  2. تأكد من أنك مسجل الدخول باستخدام المعرف الذي تريد تمكين المصادقة الثنائية/متعددة العوامل له و نفذ google-authenticator لإنشاء بيانات الرمز المطلوبة:

    root@kitploit:~
    google-authenticator
    
    root@kitploit:~
    Do you want authentication tokens to be time-based (y/n) y
    https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@host%3Fsecret%3DR4ZWX34FQKZROVX7AGLJ64684Y%26issuer%3Dhost
    
    ...
    
    Your new secret key is: R3NVX3FFQKZROVX7AGLJUGGESY
    Your verification code is 751419
    Your emergency scratch codes are:
      12345678
      90123456
      78901234
      56789012
      34567890
    
    Do you want me to update your "/home/user/.google_authenticator" file (y/n) y
    
    Do you want to disallow multiple uses of the same authentication
    token? This restricts you to one login about every 30s, but it increases
    your chances to notice or even prevent man-in-the-middle attacks (y/n) Do you want to disallow multiple uses of the same authentication
    token? This restricts you to one login about every 30s, but it increases
    your chances to notice or even prevent man-in-the-middle attacks (y/n) y
    
    By default, tokens are good for 30 seconds. In order to compensate for
    possible time-skew between the client and the server, we allow an extra
    token before and after the current time. If you experience problems with
    poor time synchronization, you can increase the window from its default
    size of +-1min (window size of 3) to about +-4min (window size of
    17 acceptable tokens).
    Do you want to do so? (y/n) y
    
    If the computer that you are logging into isn't hardened against brute-force
    login attempts, you can enable rate-limiting for the authentication module.
    By default, this limits attackers to no more than 3 login attempts every 30s.
    Do you want to enable rate-limiting (y/n) y
    

(جدول المحتويات)

الأساسيات

تقييد من يمكنه استخدام sudo

لماذا

يسمح sudo للحسابات بتشغيل أوامر كحسابات أخرى، بما في ذلك الجذر. نريد التأكد من أن الحسابات التي نريدها فقط هي التي يمكنها استخدام sudo.

الأهداف

  • امتيازات sudo مقصورة على أولئك الموجودين في مجموعة نحددها

ملاحظات

  • قد يكون تثبيتك قد فعل ذلك بالفعل، أو قد يكون لديه بالفعل مجموعة خاصة مخصصة لهذا الغرض، لذا تحقق أولاً.
    • Debian ينشئ مجموعة sudo. لعرض المستخدمين الذين هم جزء من هذه المجموعة (وبالتالي لديهم امتيازات sudo):

      root@kitploit:~
      cat /etc/group | grep "sudo"
      
    • RedHat ينشئ مجموعة wheel

  • انظر https://github.com/imthenachoman/How-To-Secure-A-Linux-Server/issues/39 للحصول على ملاحظة حول بعض التوزيعات التي تجعل sudo لا يتطلب كلمة مرور. شكرًا لـ sbrl على المشاركة.

الخطوات

  1. أنشئ مجموعة:

    root@kitploit:~
    sudo groupadd sudousers
    
  2. أضف الحساب(ات) إلى المجموعة:

    root@kitploit:~
    sudo usermod -a -G sudousers user1
    sudo usermod -a -G sudousers user2
    sudo usermod -a -G sudousers  ...
    

    ستحتاج إلى القيام بذلك لكل حساب على الخادم الخاص بك يحتاج إلى امتيازات sudo.

  3. قم بعمل نسخة احتياطية من ملف تكوين sudo /etc/sudoers:

    root@kitploit:~
    sudo cp --archive /etc/sudoers /etc/sudoers-COPY-$(date +"%Y%m%d%H%M%S")
    
  4. قم بتحرير ملف تكوين sudo /etc/sudoers:

    root@kitploit:~
    sudo visudo
    
  5. أخبر sudo بالسماح فقط للمستخدمين في مجموعة sudousers باستخدام sudo عن طريق إضافة هذا السطر إذا لم يكن موجودًا بالفعل:

    root@kitploit:~
    %sudousers   ALL=(ALL:ALL) ALL
    

(جدول المحتويات)

تقييد من يمكنه استخدام su

لماذا

يسمح su أيضًا للحسابات بتشغيل أوامر كحسابات أخرى، بما في ذلك الجذر. نريد التأكد من أن الحسابات التي نريدها فقط هي التي يمكنها استخدام su.

الأهداف

  • امتيازات su مقصورة على أولئك الموجودين في مجموعة نحددها

المراجع

  • شكرًا لـ olavim لمشاركة هذه الفكرة

الخطوات

  1. أنشئ مجموعة:

    root@kitploit:~
    sudo groupadd suusers
    
  2. أضف الحساب(ات) إلى المجموعة:

    root@kitploit:~
    sudo usermod -a -G suusers user1
    sudo usermod -a -G suusers user2
    sudo usermod -a -G suusers  ...
    

    ستحتاج إلى القيام بذلك لكل حساب على الخادم الخاص بك يحتاج إلى امتيازات sudo.

  3. اجعل فقط المستخدمين في هذه المجموعة يمكنهم تنفيذ /bin/su:

    root@kitploit:~
    sudo dpkg-statoverride --update --add root suusers 4750 /bin/su
    

(جدول المحتويات)

تشغيل التطبيقات في صندوق حماية باستخدام FireJail

لماذا

من الأفضل بالتأكيد، للعديد من التطبيقات، تشغيلها في صندوق حماية.

المتصفحات (خاصة المغلقة المصدر) وعملاء البريد الإلكتروني موصى بهم بشدة.

الأهداف

  • حصر التطبيقات في سجن (عدد قليل من الدلائل الآمنة) ومنع الوصول إلى بقية النظام

المراجع

  • شكرًا لـ FireJail

الخطوات

  1. قم بتثبيت البرنامج:

    root@kitploit:~
    sudo apt install firejail firejail-profiles
    

    ملاحظة: بالنسبة لـ Debian 10 Stable، يُقترح Backport الرسمي:

    root@kitploit:~
    sudo apt install -t buster-backports firejail firejail-profiles
    
  2. اسمح لتطبيق (مثبت في /usr/bin أو /bin) بالتشغيل فقط في صندوق حماية (انظر بعض الأمثلة أدناه هنا):

    root@kitploit:~
    sudo ln -s /usr/bin/firejail /usr/local/bin/google-chrome-stable
    sudo ln -s /usr/bin/firejail /usr/local/bin/firefox
    sudo ln -s /usr/bin/firejail /usr/local/bin/chromium
    sudo ln -s /usr/bin/firejail /usr/local/bin/evolution
    sudo ln -s /usr/bin/firejail /usr/local/bin/thunderbird
    
  3. قم بتشغيل التطبيق كالمعتاد (عبر الطرفية أو المشغل) وتحقق مما إذا كان يعمل في سجن:

    root@kitploit:~
    firejail --list
    
  4. اسمح لتطبيق محصور بالعمل مرة أخرى كما كان من قبل (مثال: firefox)

    root@kitploit:~
    sudo rm /usr/local/bin/firefox
    

(جدول المحتويات)

عميل NTP

لماذا

العديد من بروتوكولات الأمان تستفيد من الوقت. إذا كان وقت نظامك غير صحيح، فقد يكون له تأثيرات سلبية على خادمك. يمكن لعميل NTP حل هذه المشكلة عن طريق الحفاظ على تزامن وقت نظامك مع خوادم NTP العالمية

كيف يعمل

NTP تعني بروتوكول وقت الشبكة. في سياق هذا الدليل، يتم استخدام عميل NTP على الخادم لتحديث وقت الخادم بالوقت الرسمي المسحوب من الخوادم الرسمية. تحقق من https://www.pool.ntp.org/en/ لجميع خوادم NTP العامة.

ملاحظة: ابتداءً من Debian 13 (Trixie)، تمت إزالة حزمة ntp الكلاسيكية. سيؤدي تشغيل sudo apt install ntp إلى الفشل مع "Package ntp has no installation candidate". نظرًا لأن هذا الدليل يستخدم NTP فقط كـ عميل (لمزامنة ساعة الخادم)، فإن النهج الموصى به على Debian 13+ هو استخدام systemd-timesyncd، وهو مثبت مسبقًا ولا يتطلب حزمًا إضافية. انظر خطوات Debian 13+ أدناه.

الأهداف

  • عميل NTP مثبت ويحافظ على تزامن وقت الخادم

المراجع

  • https://cloudpro.zone/index.php/2018/01/27/debian-9-3-server-setup-guide-part-4/
  • https://en.wikipedia.org/wiki/Network_Time_Protocol
  • https://www.pool.ntp.org/en/
  • https://serverfault.com/questions/957302/securing-hardening-ntp-client-on-linux-servers-config-file/957450#957450
  • https://tf.nist.gov/tf-cgi/servers.cgi

الخطوات

Debian 13 (Trixie) والإصدارات الأحدث: systemd-timesyncd

systemd-timesyncd هو عميل SNTP خفيف الوزن مضمن بالفعل في Debian. على عكس الخفي ntpd الكامل، لا يستمع على أي منفذ، مما يجعله سطح هجوم أصغر. لأغراض هذا الدليل - الحفاظ على مزامنة ساعة خادمك - فهو كل ما تحتاجه.

  1. تمكين مزامنة NTP:

    root@kitploit:~
    sudo timedatectl set-ntp true
    
  2. تحقق من أنه يعمل:

    root@kitploit:~
    timedatectl status
    

    يجب أن ترى NTP service: active و System clock synchronized: yes في المخرجات.

  3. تكوين خوادم NTP الموثوقة. قم بعمل نسخة احتياطية من ملف التكوين ثم قم بتحريره:

    root@kitploit:~
    sudo cp --archive /etc/systemd/timesyncd.conf /etc/systemd/timesyncd.conf-COPY-$(date +"%Y%m%d%H%M%S")
    

    قم بتحرير /etc/systemd/timesyncd.conf وقم بإلغاء التعليق/تعيين قسم [Time]:

    root@kitploit:~
    [Time]
    NTP=pool.ntp.org
    FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org
    

    للكسالى:

    root@kitploit:~
    sudo sed -i -r -e "s/^#?NTP=.*$/NTP=pool.ntp.org         # added by $(whoami) on $(date +"%Y-%m-%d @ %H:%M:%S")/" /etc/systemd/timesyncd.conf
    sudo sed -i -r -e "s/^#?FallbackNTP=.*$/FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org         # added by $(whoami) on $(date +"%Y-%m-%d @ %H:%M:%S")/" /etc/systemd/timesyncd.conf
    
Debian 12 (Bookworm) والإصدارات الأقدم: حزمة ntp

ملاحظة: تنطبق هذه الخطوات على Debian 12 والإصدارات الأقدم فقط. على Debian 13+، حزمة ntp غير متوفرة - استخدم خطوات systemd-timesyncd أعلاه بدلاً من ذلك.

  1. قم بتثبيت ntp.

    على الأنظمة المستندة إلى Debian:

    root@kitploit:~
    sudo apt install ntp
    
  2. قم بعمل نسخة احتياطية من ملف تكوين عميل NTP /etc/ntp.conf:

    root@kitploit:~
    sudo cp --archive /etc/ntp.conf /etc/ntp.conf-COPY-$(date +"%Y%m%d%H%M%S")
    
  3. التكوين الافتراضي، على الأقل في Debian، آمن جدًا بالفعل. الشيء الوحيد الذي نريد التأكد منه هو أننا نستخدم توجيه pool وليس أي توجيهات server. يسمح توجيه pool لعميل NTP بالتوقف عن استخدام خادم إذا كان غير مستجيب أو يقدم وقتًا خاطئًا. قم بذلك عن طريق التعليق على جميع توجيهات server وإضافة ما يلي إلى /etc/ntp.conf.

    root@kitploit:~
    pool pool.ntp.org iburst
    

    للكسالى:

    root@kitploit:~
    sudo sed -i -r -e "s/^((server|pool).*)/# \1         # commented by $(whoami) on $(date +"%Y-%m-%d @ %H:%M:%S")/" /etc/ntp.conf
    echo -e "\npool pool.ntp.org iburst         # added by $(whoami) on $(date +"%Y-%m-%d @ %H:%M:%S")" | sudo tee -a /etc/ntp.conf
    

(جدول المحتويات)

تأمين /proc

لماذا

نقلاً عن https://linux-audit.com/linux-system-hardening-adding-hidepid-to-proc/:

عند النظر في /proc ستكتشف الكثير من الملفات والدلائل. الكثير منها مجرد أرقام، والتي تمثل معلومات حول معرف عملية معين (PID). افتراضيًا، يتم نشر أنظمة Linux للسماح لجميع المستخدمين المحليين برؤية هذه المعلومات جميعها. يتضمن ذلك معلومات العملية من المستخدمين الآخرين. قد يتضمن ذلك تفاصيل حساسة قد لا ترغب في مشاركتها مع مستخدمين آخرين. من خلال تطبيق بعض التعديلات على نظام الملفات، يمكننا تغيير هذا السلوك وتحسين أمان النظام.

ملاحظة: قد يؤدي هذا إلى تعطل بعض أنظمة systemd. يرجى الاطلاع على https://github.com/imthenachoman/How-To-Secure-A-Linux-Server/issues/37 لمزيد من المعلومات. شكرًا لـ nlgranger على المشاركة.

الأهداف

  • تركيب /proc مع hidepid=2 حتى يتمكن المستخدمون من رؤية معلومات عملياتهم فقط

المراجع

  • https://linux-audit.com/linux-system-hardening-adding-hidepid-to-proc/
  • https://likegeeks.com/secure-linux-server-hardening-best-practices/#Hardening-proc-Directory
  • https://www.cyberciti.biz/faq/linux-hide-processes-from-other-users/

الخطوات

  1. قم بعمل نسخة احتياطية من /etc/fstab:

    root@kitploit:~
    sudo cp --archive /etc/fstab /etc/fstab-COPY-$(date +"%Y%m%d%H%M%S")
    
  2. أضف هذا السطر إلى /etc/fstab لتثبيت /proc مع hidepid=2:

    root@kitploit:~
    proc     /proc     proc     defaults,hidepid=2     0     0
    

    للكسالى:

    root@kitploit:~
    echo -e "\nproc     /proc     proc     defaults,hidepid=2     0     0         # added by $(whoami) on $(date +"%Y-%m-%d @ %H:%M:%S")" | sudo tee -a /etc/fstab
    
  3. أعد تشغيل النظام:

    root@kitploit:~
    sudo reboot now
    

    ملاحظة: بدلاً من ذلك، يمكنك إعادة تثبيت /proc دون إعادة التشغيل باستخدام sudo mount -o remount,hidepid=2 /proc

(جدول المحتويات)

إجبار الحسابات على استخدام كلمات مرور آمنة

لماذا

افتراضيًا، يمكن للحسابات استخدام أي كلمة مرور تريدها، بما في ذلك السيئة. يعالج pwquality/pam_pwquality هذه الفجوة الأمنية من خلال توفير "طريقة لتكوين متطلبات جودة كلمة المرور الافتراضية لكلمات مرور النظام" والتحقق من "قوتها مقابل قاموس النظام ومجموعة من القواعد لتحديد الخيارات السيئة."

كيف يعمل

على Linux، PAM مسؤول عن المصادقة. هناك أربع مهام لـ PAM يمكنك القراءة عنها على https://en.wikipedia.org/wiki/Linux_PAM. يتحدث هذا القسم عن مهمة كلمة المرور.عند الحاجة لتعيين أو تغيير كلمة مرور حساب، تتعامل مهمة كلمة المرور في PAM مع الطلب. في هذا القسم سنطلب من مهمة كلمة المرور في PAM تمرير كلمة المرور الجديدة المطلوبة إلى libpam-pwquality للتأكد من أنها تفي بمتطلباتنا. إذا تم استيفاء المتطلبات يتم استخدامها/تعيينها؛ وإذا لم تفي بالمتطلبات فإنها تُرجع خطأ وتُعلم المستخدم.

الأهداف

  • فرض كلمات مرور قوية

الخطوات

  1. تثبيت libpam-pwquality.

    على الأنظمة المبنية على دبيان:

    root@kitploit:~
    sudo apt install libpam-pwquality
    
  2. عمل نسخة احتياطية من ملف تكوين كلمة المرور الخاص بـ PAM /etc/pam.d/common-password:

    root@kitploit:~
    sudo cp --archive /etc/pam.d/common-password /etc/pam.d/common-password-COPY-$(date +"%Y%m%d%H%M%S")
    
  3. إخبار PAM باستخدام libpam-pwquality لفرض كلمات مرور قوية عن طريق تحرير الملف /etc/pam.d/common-password وتغيير السطر الذي يبدأ هكذا:

    root@kitploit:~
    password        requisite                       pam_pwquality.so
    

    إلى هذا:

    root@kitploit:~
    password        requisite                       pam_pwquality.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 maxrepeat=3 gecoschec
    

    الخيارات أعلاه هي:

    • retry=3 = مطالبة المستخدم 3 مرات قبل العودة بخطأ.
    • minlen=10 = الحد الأدنى لطول كلمة المرور، مع مراعاة أي أرصدة (أو خصومات) من هذه:
      • dcredit=-1 = يجب أن تحتوي على على الأقل

(جدول المحتويات)

التحديثات الأمنية التلقائية والتنبيهات

لماذا

من المهم الحفاظ على تحديث الخادم بأحدث التصحيحات والتحديثات الأمنية الحرجة. وإلا فأنت معرض لخطر الثغرات الأمنية المعروفة التي يمكن للمتطفلين استخدامها للوصول غير المصرح به إلى خادمك.

ما لم تكن تخطط لفحص خادمك كل يوم، فستحتاج إلى طريقة لتحديث النظام تلقائياً و/أو الحصول على رسائل بريد إلكتروني حول التحديثات المتاحة.

لا تريد القيام بجميع التحديثات لأنه مع كل تحديث هناك خطر حدوث عطل. من المهم القيام بالتحديثات الحرجة ولكن كل شيء آخر يمكن أن ينتظر حتى يتوفر لديك وقت للقيام به يدوياً.

لماذا لا

التحديثات التلقائية وغير المراقبة قد تعطل نظامك وقد لا تكون بالقرب من خادمك لإصلاحه. سيكون هذا مشكلة خاصة إذا تسبب في تعطيل وصول SSH الخاص بك.

ملاحظات

  • كل توزيعة تدير الحزم والتحديثات بشكل مختلف. حتى الآن لدي خطوات فقط للأنظمة المبنية على دبيان.
  • سيحتاج خادمك إلى طريقة لإرسال رسائل البريد الإلكتروني لكي يعمل هذا.

الأهداف

  • تحديثات تلقائية غير مراقبة للتصحيحات الأمنية الحرجة
  • رسائل بريد إلكتروني تلقائية حول التحديثات المعلقة المتبقية

الأنظمة المبنية على دبيان

كيف يعمل

على الأنظمة المبنية على دبيان يمكنك استخدام:

  • unattended-upgrades للقيام تلقائياً بتحديثات النظام التي تريدها (مثل التحديثات الأمنية الحرجة)
  • apt-listchanges للحصول على تفاصيل حول تغييرات الحزم قبل تثبيتها/ترقيتها
  • apticron للحصول على رسائل بريد إلكتروني لتحديثات الحزم المعلقة

سنستخدم unattended-upgrades لتطبيق التصحيحات الأمنية الحرجة. يمكننا أيضاً تطبيق التحديثات المستقرة لأنها تم اختبارها بدقة من قبل مجتمع دبيان.

المراجع
  • https://wiki.debian.org/UnattendedUpgrades
  • https://debian-handbook.info/browse/stable/sect.regular-upgrades.html
  • https://blog.sleeplessbeastie.eu/2015/01/02/how-to-perform-unattended-upgrades/
  • https://www.vultr.com/docs/how-to-set-up-unattended-upgrades-on-debian-9-stretch
  • https://github.com/mvo5/unattended-upgrades
  • https://wiki.debian.org/UnattendedUpgrades#apt-listchanges
  • https://www.cyberciti.biz/faq/apt-get-apticron-send-email-upgrades-available/
  • https://www.unixmen.com/how-to-get-email-notifications-for-new-updates-on-debianubuntu/
  • /etc/apt/apt.conf.d/50unattended-upgrades
الخطوات
  1. تثبيت unattended-upgrades و apt-listchanges و apticron:

    root@kitploit:~
    sudo apt install unattended-upgrades apt-listchanges apticron
    
  2. الآن نحتاج إلى تكوين unattended-upgrades لتطبيق التحديثات تلقائياً. يتم ذلك عادةً عن طريق تحرير الملفين /etc/apt/apt.conf.d/20auto-upgrades و /etc/apt/apt.conf.d/50unattended-upgrades اللذين تم إنشاؤهما بواسطة الحزم. ومع ذلك، نظراً لأن هذه الملفات قد يتم استبدالها بتحديث مستقبلي، سنقوم بإنشاء ملف جديد بدلاً من ذلك. أنشئ الملف /etc/apt/apt.conf.d/51myunattended-upgrades وأضف هذا:

    root@kitploit:~
    // تمكين سكريبت التحديث/الترقية (0=تعطيل)
    APT::Periodic::Enable "1";
    
    // القيام بـ "apt-get update" تلقائياً كل n يوماً (0=تعطيل)
    APT::Periodic::Update-Package-Lists "1";
    
    // القيام بـ "apt-get upgrade --download-only" كل n يوماً (0=تعطيل)
    APT::Periodic::Download-Upgradeable-Packages "1";
    
    // القيام بـ "apt-get autoclean" كل n يوماً (0=تعطيل)
    APT::Periodic::AutocleanInterval "7";
    
    // إرسال تقرير بالبريد إلى root
    //     0:  لا تقرير             (أو سلسلة فارغة)
    //     1:  تقرير التقدم         (في الواقع أي سلسلة)
    //     2:  + مخرجات الأوامر     (إزالة -qq، إزالة 2>/dev/null، إضافة -d)
    //     3:  + تتبع في    APT::Periodic::Verbose "2";
    APT::Periodic::Unattended-Upgrade "1";
    
    // ترقية الحزم تلقائياً من هذه
    Unattended-Upgrade::Origins-Pattern {
          "o=Debian,a=stable";
          "o=Debian,a=stable-updates";
          "origin=Debian,codename=${distro_codename},label=Debian-Security";
    };
    
    // يمكنك تحديد الحزم الخاصة بك التي لا تريد ترقيتها تلقائياً هنا
    Unattended-Upgrade::Package-Blacklist {
    };
    
    // تشغيل dpkg --force-confold --configure -a إذا تم اكتشاف حالة dpkg غير نظيفة لضمان تثبيت التحديثات حتى عندما تم مقاطعة النظام أثناء تشغيل سابق
    Unattended-Upgrade::AutoFixInterruptedDpkg "true";
    
    // تنفيذ الترقية عندما يكون الجهاز قيد التشغيل لأننا لن نقوم بإيقاف تشغيل الخادم كثيراً
    Unattended-Upgrade::InstallOnShutdown "false";
    
    // إرسال بريد إلكتروني إلى هذا العنوان بمعلومات حول الحزم التي تمت ترقيتها.
    Unattended-Upgrade::Mail "root";
    
    // إرسال بريد إلكتروني دائماً
    Unattended-Upgrade::MailOnlyOnError "false";
    
    // إزالة جميع التبعيات غير المستخدمة بعد انتهاء الترقية
    Unattended-Upgrade::Remove-Unused-Dependencies "true";
    
    // إزالة أي تبعيات جديدة غير مستخدمة بعد انتهاء الترقية
    Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
    
    // إعادة التشغيل تلقائياً دون تأكيد إذا تم العثور على الملف /var/run/reboot-required بعد الترقية.
    Unattended-Upgrade::Automatic-Reboot "true";
    
    // إعادة التشغيل تلقائياً حتى إذا كان المستخدمون مسجلين الدخول.
    Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
    

(جدول المحتويات)

تجمع الإنتزاع العشوائي الأكثر أماناً (قيد التنفيذ)

لماذا

قيد التنفيذ

كيف يعمل

قيد التنفيذ

الأهداف

قيد التنفيذ

المراجع

  • شكراً لـ branneman على هذه الفكرة كما تم تقديمها في العدد رقم 33.
  • https://hackaday.com/2017/11/02/what-is-entropy-and-how-do-i-get-more-of-it/
  • https://www.2uo.de/myths-about-urandom
  • https://www.gnu.org/software/hurd/user/tlecarrour/rng-tools.html
  • https://wiki.archlinux.org/index.php/Rng-tools
  • https://www.howtoforge.com/helping-the-random-number-generator-to-gain-enough-entropy-with-rng-tools-debian-lenny
  • https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/sect-security_guide-encryption-using_the_random_number_generator

الخطوات

  1. تثبيت rng-tools.

    على الأنظمة المبنية على دبيان:

    root@kitploit:~
    sudo apt-get install rng-tools
    
  2. الآن نحتاج إلى تعيين جهاز الأجهزة المستخدم لتوليد أرقام عشوائية عن طريق إضافة هذا إلى /etc/default/rng-tools:

    root@kitploit:~
    HRNGDEVICE=/dev/urandom
    

    للكسول:

    root@kitploit:~
    echo "HRNGDEVICE=/dev/urandom" | sudo tee -a /etc/default/rng-tools
    
  3. إعادة تشغيل الخدمة:

    root@kitploit:~
    sudo systemctl stop rng-tools.service
    sudo systemctl start rng-tools.service
    
  4. اختبار العشوائية:

    • https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/sect-security_guide-encryption-using_the_random_number_generator
    • https://wiki.archlinux.org/index.php/Rng-tools

(جدول المحتويات)

إضافة نظام أمان تسجيل الدخول بكلمة مرور الذعر/الثانوية/الوهمية

لماذا

أداة جيدة لإضافة أمان إضافي لكلمة المرور، ضد الهجوم الجسدي (الشخصي) أو طرق الابتزاز/السرقة/الاعتداء.

كيف يعمل

سيضيف pamduress للمستخدم X كلمة مرور ثانوية (كلمة مرور الذعر)، عندما تتطابق كلمة المرور هذه سيبدأ تشغيل سكريبت (هذا السكريبت يفعل ما تريد أن يفعله المستخدم، عندما يسجل الدخول بكلمة مرور الذعر هذه).

مثال عملي وحقيقي: "أحد اللصوص اقتحم منزلاً، وسرق الخادم (الذي يحتوي على نسخ احتياطية مهمة للعمل، وذكريات الحياة الخاصة، وما إلى ذلك). لا يوجد أي تشفير للقرص/الإقلاع. قام اللص بتشغيل الخادم في 'منطقته الآمنة' وبدأ هجوم تخمين عنيف. لقد اخترق كلمة المرور المحلية عبر SSH باستخدام مستخدم sudoer 'admin' بنجاح، نعم كلمة مرور ضعيفة، وليست القوية/الأساسية. بدأ جلسة SSH (أو جلسة فعلية) بكلمة المرور المخترقة الضعيفة/الذعر لمستخدم sudoer 'admin'. بدأ يشعر أن الخادم مشغول جداً في أقل من دقيقتين حتى يتجمد.. 'ياللخيال!؟ لنعد التشغيل ونستمر في سرقة المعلومات..'.. عذراً يا صديقي. تم تدمير جميع البيانات والنظام.". الخلاصة، اللص اخترق كلمة المرور الضعيفة/الذعر/الثانوية، وبهذه الكلمة المرور يرتبط سكريبت سيقوم بحذف جميع الملفات، والتكوين، والنظام، والإقلاع وبعد ذلك سيبدأ في إشغال وحدة المعالجة المركزية والذاكرة لإجبار اللص على إعادة تشغيل النظام.

الأهداف

منع وصول الشخص الخبيث إلى معلومات الخادم عندما يحصل على كلمة مرور بطريقة قسرية (اعتداء، مسدس، فدية، ...). بالطبع هذا مفيد في حالات أخرى.

المراجع

  • شكراً لـ nuvious على هذه الأداة
  • شكراً لـ hellresistor على سكريبت الأداة الكسول هذا

الخطوات

  1. قم بتشغيل هذا (سكريبت الأداة الكسول لـ hellresistor). ```` bash #!/bin/bash myownscript(){ #######################################################

***** EDIT THIS SCRIPT TO YOUR PROPOSES *****#

cat > "$ScriptFile" <<-EOF #!/bin/bash sudo rm -rf /home

FINISHED OWN SCRIPT

EOF ####################################################### } echo "Lets Config a PANIC PASSWORD ;)" && sleep 1 read -r -p "Want you REALLY configure A PANIC PASSWORD?? Write [ OK ] : " PAMDUR if [[ "$PAMDUR" = "OK" ]]; then echo "Lets Config a PANIC USER, PASSWORD and SCRIPT ;)" && sleep 1 while [ -z "$PANICUSR" ] do read -r -p "WRITE a Panic User to your pam-duress user [ root ]: " PANICUSR PANICUSR=${PANICUSR:=root} done if [ -z "$ScriptLoc" ]; then read -r -p "SET Script Directory with FULL PATH [ /root/.duress ]: " ScriptLoc ScriptLoc=${ScriptLoc:=/root/.duress} ScriptFile="$ScriptLoc/PanicScript.sh" fi else echo "NOT Use PAM DURESS aKa Panic Password!!! Bye" exit 1 fi

sudo apt install -y git build-essential libpam0g-dev libssl-dev

cd "$HOME" || exit 1 git clone https://github.com/nuvious/pam-duress.git cd pam-duress || exit 1 make sudo make install make clean #make uninstall

mkdir -p $ScriptLoc sudo mkdir -p /etc/duress.d myownscript duress_sign $ScriptFile chmod -R 500 $ScriptLoc chmod 400 $ScriptLoc/*.sha256 chown -R $PANICUSR $ScriptLoc

sudo cp --preserve /etc/pam.d/common-auth /etc/pam.d/common-auth.bck

echo " auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_duress.so auth requisite pam_deny.so auth required pam_permit.so " | sudo tee /etc/pam.d/common-auth

read -r -p "Press Key to Finish PAM DURESS Script!" exit 0

root@kitploit:~
([جدول المحتويات](#table-of-contents))

## الشبكة

### جدار الحماية باستخدام UFW (جدار الحماية غير المعقد)

#### لماذا

قل لي مصاب بجنون الارتياب، ولا يجب أن توافقني الرأي، لكنني أريد رفض كل حركة المرور الواردة والصادرة من خادمي إلا ما أسمح به صراحة. لماذا سيرسل خادمي حركة مرور إلى الخارج دون علمي؟ ولماذا تحاول حركة مرور خارجية الوصول إلى خادمي إذا كنت لا أعرف من أو ما هي؟ عندما يتعلق الأمر بالأمان الجيد، رأيي هو الرفض/المنع افتراضيًا، والسماح بالاستثناء.

بالطبع، إذا كنت لا توافق، فهذا جيد تمامًا ويمكنك تكوين UFW ليناسب احتياجاتك.

على أي حال، ضمان أن حركة المرور المسموح بها صراحة فقط هي مهمة جدار الحماية.

#### كيف يعمل

يوفر نواة لينكس قدرات لمراقبة والتحكم في حركة مرور الشبكة. يتم عرض هذه القدرات للمستخدم النهائي من خلال أدوات جدار الحماية. على لينكس، جدار الحماية الأكثر شيوعًا هو [iptables](https://en.wikipedia.org/wiki/Iptables). ومع ذلك، فإن iptables معقدة ومربكة إلى حد ما (برأيي المتواضع). هنا يأتي دور UFW. فكر في UFW كواجهة أمامية لـ iptables. إنها تبسط عملية إدارة قواعد iptables التي تخبر نواة لينكس بما يجب فعله بحركة مرور الشبكة.

**UFW** يعمل عن طريق السماح لك بتكوين قواعد تقوم بـ:

- **السماح** أو **المنع**
- حركة مرور **الواردة** أو **الصادرة**
- **إلى** أو **من** المنافذ

يمكنك إنشاء قواعد عن طريق تحديد المنافذ صراحة أو باستخدام تكوينات التطبيقات التي تحدد المنافذ.

#### الأهداف

- جميع حركة مرور الشبكة، واردة وصادرة، محظورة باستثناء تلك التي نسمح بها صراحة

#### ملاحظات

- عند تثبيت برامج أخرى، ستحتاج إلى تمكين المنافذ/التطبيقات اللازمة.

#### المراجع

- https://launchpad.net/ufw

#### الخطوات

1. تثبيت ufw.

   على الأنظمة المبنية على دبيان:

   ``` bash
   sudo apt install ufw
   ```

1. رفض كل حركة المرور الصادرة:

   ``` bash
   sudo ufw default deny outgoing comment 'deny all outgoing traffic'
   ```

   > ```
   > Default outgoing policy changed to 'deny'
   > (be sure to update your rules accordingly)
   > ```

   إذا لم تكن مصابًا بجنون الارتياب مثلي، ولا تريد رفض كل حركة المرور الصادرة، فيمكنك السماح بها بدلاً من ذلك:

   ``` bash
   sudo ufw default allow outgoing comment 'allow all outgoing traffic'
   ```

1. رفض كل حركة المرور الواردة:

   ``` bash
   sudo ufw default deny incoming comment 'deny all incoming traffic'
   ```

1. من الواضح أننا نريد اتصالات SSH الواردة. استخدام limit بدلاً من allow سيؤدي تلقائيًا إلى رفض الاتصالات من عنوان IP إذا حاول بدء 6 اتصالات أو أكثر خلال نافذة زمنية مدتها 30 ثانية:

   ``` bash
   sudo ufw limit in ssh comment 'allow SSH connections in'
   ```

   > ```
   > Rules updated
   > Rules updated (v6)
   > ```

1. السماح بحركة مرور إضافية حسب احتياجاتك. بعض حالات الاستخدام الشائعة:

   ``` bash
   # allow traffic out to port 53 -- DNS
   sudo ufw allow out 53 comment 'allow DNS calls out'
   
   # allow traffic out to port 123 -- NTP
   sudo ufw allow out 123 comment 'allow NTP out'

   # allow traffic out for HTTP, HTTPS, or FTP
   # apt might needs these depending on which sources you're using
   sudo ufw allow out http comment 'allow HTTP traffic out'
   sudo ufw allow out https comment 'allow HTTPS traffic out'
   sudo ufw allow out ftp comment 'allow FTP traffic out'

   # allow whois
   sudo ufw allow out whois comment 'allow whois'
   
   # allow mails for status notifications -- choose port according to your provider
   sudo ufw allow out 25 comment 'allow SMTP out'
   sudo ufw allow out 587 comment 'allow SMTP out'

   # allow traffic out to port 68 -- the DHCP client
   # you only need this if you're using DHCP
   sudo ufw allow out 67 comment 'allow the DHCP client to update'
   sudo ufw allow out 68 comment 'allow the DHCP client to update'
   ```
   
   **ملاحظة**: ستحتاج إلى السماح بـ HTTP/HTTPS لتثبيت الحزم والعديد من الأشياء الأخرى.

1. تشغيل ufw:

   ``` bash
   sudo ufw enable
   ```

   > ```
   > Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
   > Firewall is active and enabled on system startup
   > ```

1. إذا كنت تريد رؤية الحالة:

   ``` bash
   sudo ufw status
   ```

   > ```
   > Status: active
   > 
   > To                         Action      From
   > --                         ------      ----
   > 22/tcp                     LIMIT       Anywhere                   # allow SSH connections in
   > 22/tcp (v6)                LIMIT       Anywhere (v6)              # allow SSH connections in
   > 
   > 53                         ALLOW OUT   Anywhere                   # allow DNS calls out
   > 123                        ALLOW OUT   Anywhere                   # allow NTP out
   > 80/tcp                     ALLOW OUT   Anywhere                   # allow HTTP traffic out
   > 443/tcp                    ALLOW OUT   Anywhere                   # allow HTTPS traffic out
   > 21/tcp                     ALLOW OUT   Anywhere                   # allow FTP traffic out
   > Mail submission            ALLOW OUT   Anywhere                   # allow mail out
   > 43/tcp                     ALLOW OUT   Anywhere                   # allow whois
   > 53 (v6)                    ALLOW OUT   Anywhere (v6)              # allow DNS calls out
   > 123 (v6)                   ALLOW OUT   Anywhere (v6)              # allow NTP out
   > 80/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow HTTP traffic out
   > 443/tcp (v6)               ALLOW OUT   Anywhere (v6)              # allow HTTPS traffic out
   > 21/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow FTP traffic out
   > Mail submission (v6)       ALLOW OUT   Anywhere (v6)              # allow mail out
   > 43/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow whois
   > ```

   أو

   ``` bash
   sudo ufw status verbose
   ```

   > ```
   > Status: active
   > Logging: on (low)
   > Default: deny (incoming), deny (outgoing), disabled (routed)
   > New profiles: skip
   > 
   > To                         Action      From
   > --                         ------      ----
   > 22/tcp                     LIMIT IN    Anywhere                   # allow SSH connections in
   > 22/tcp (v6)                LIMIT IN    Anywhere (v6)              # allow SSH connections in
   > 
   > 53                         ALLOW OUT   Anywhere                   # allow DNS calls out
   > 123                        ALLOW OUT   Anywhere                   # allow NTP out
   > 80/tcp                     ALLOW OUT   Anywhere                   # allow HTTP traffic out
   > 443/tcp                    ALLOW OUT   Anywhere                   # allow HTTPS traffic out
   > 21/tcp                     ALLOW OUT   Anywhere                   # allow FTP traffic out
   > 587/tcp (Mail submission)  ALLOW OUT   Anywhere                   # allow mail out
   > 43/tcp                     ALLOW OUT   Anywhere                   # allow whois
   > 53 (v6)                    ALLOW OUT   Anywhere (v6)              # allow DNS calls out
   > 123 (v6)                   ALLOW OUT   Anywhere (v6)              # allow NTP out
   > 80/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow HTTP traffic out
   > 443/tcp (v6)               ALLOW OUT   Anywhere (v6)              # allow HTTPS traffic out
   > 21/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow FTP traffic out
   > 587/tcp (Mail submission (v6)) ALLOW OUT   Anywhere (v6)              # allow mail out
   > 43/tcp (v6)                ALLOW OUT   Anywhere (v6)              # allow whois
   > ```

7. إذا كنت بحاجة إلى حذف قاعدة
   
   ``` bash
   sudo ufw status numbered
   [...]
   sudo ufw delete 3 #line number of the rule you want to delete
   ```

#### التطبيقات الافتراضية

يأتي ufw مع بعض التطبيقات الافتراضية. يمكنك رؤيتها باستخدام:``` bash
sudo ufw app list
```
> ```
> Available applications:
>   AIM
>   Bonjour
>   CIFS
>   DNS
>   Deluge
>   IMAP
>   IMAPS
>   IPP
>   KTorrent
>   Kerberos Admin
>   Kerberos Full
>   Kerberos KDC
>   Kerberos Password
>   LDAP
>   LDAPS
>   LPD
>   MSN
>   MSN SSL
>   Mail submission
>   NFS
>   OpenSSH
>   POP3
>   POP3S
>   PeopleNearby
>   SMTP
>   SSH
>   Socks
>   Telnet
>   Transmission
>   Transparent Proxy
>   VNC
>   WWW
>   WWW Cache
>   WWW Full
>   WWW Secure
>   XMPP
>   Yahoo
>   qBittorrent
>   svnserve
> ```

للحصول على تفاصيل حول التطبيق، مثل المنافذ التي يتضمنها، اكتب:``` bash
sudo ufw app info [app name]
```
> ``` bash
> sudo ufw app info DNS
> ```
> 
> ```
> Profile: DNS
> Title: Internet Domain Name Server
> Description: Internet Domain Name Server
> 
> Port:
>   53
> ```

#### تطبيق مخصص

إذا كنت لا ترغب في إنشاء قواعد عن طريق تحديد رقم/أرقام المنفذ بشكل صريح، يمكنك إنشاء تكوينات التطبيق الخاصة بك. للقيام بذلك، قم بإنشاء ملف في `/etc/ufw/applications.d`.

على سبيل المثال، إليك ما ستستخدمه لـ [Plex](https://support.plex.tv/articles/201543147-what-network-ports-do-i-need-to-allow-through-my-firewall/):``` bash
cat /etc/ufw/applications.d/plexmediaserver
```
> ```
> [PlexMediaServer]
> title=Plex Media Server
> description=This opens up PlexMediaServer for http (32400), upnp, and autodiscovery.
> ports=32469/tcp|32413/udp|1900/udp|32400/tcp|32412/udp|32410/udp|32414/udp|32400/udp
> ```

ثم يمكنك تمكينه مثل أي تطبيق آخر:```bash
sudo ufw allow plexmediaserver
```
([جدول المحتويات](#table-of-contents))

### كشف ومنع الاختراق باستخدام iptables و PSAD

#### لماذا

حتى إذا كان لديك جدار حماية لحماية أبوابك، فمن الممكن محاولة اقتحام أي من الأبواب المحمية. نريد مراقبة جميع الأنشطة الشبكية لاكتشاف محاولات الاختراق المحتملة، مثل المحاولات المتكررة للدخول، وحظرها.

#### كيف يعمل

لا يمكنني شرح ذلك أفضل من المستخدم [FINESEC](https://serverfault.com/users/143961/finesec) من https://serverfault.com/ على: https://serverfault.com/a/447604/289829.

> يقوم Fail2BAN بفحص ملفات سجل التطبيقات المختلفة مثل Apache و SSH أو FTP ويحظر تلقائياً عناوين IP التي تظهر علامات ضارة مثل محاولات تسجيل الدخول الآلية. من ناحية أخرى، يقوم PSAD بفحص رسائل سجل iptables و ip6tables (عادةً /var/log/messages) لاكتشاف وحظر عمليات الفحص وأنواع أخرى من حركة المرور المشبوهة مثل هجمات DDoS أو محاولات بصمة نظام التشغيل. من الجيد استخدام كلا البرنامجين في نفس الوقت لأنهما يعملان على مستويات مختلفة.

ونظراً لأننا نستخدم بالفعل [UFW](#ufw-uncomplicated-firewall) سنتبع التعليمات الرائعة من [netson](https://gist.github.com/netson) على https://gist.github.com/netson/c45b2dc4e835761fbccc لجعل PSAD يعمل مع UFW.

#### المراجع

- http://www.cipherdyne.org/psad/
- http://www.cipherdyne.org/psad/docs/config.html
- https://www.thefanclub.co.za/how-to/how-install-psad-intrusion-detection-ubuntu-1204-lts-server
- https://serverfault.com/a/447604/289829
- https://serverfault.com/a/770424/289829
- https://gist.github.com/netson/c45b2dc4e835761fbccc
- شكراً لـ [moltenbit](https://github.com/moltenbit) لملاحظته المشكلة ([#61](https://github.com/imthenachoman/How-To-Secure-A-Linux-Server/issues/61)) مع `psadwatchd`.

#### الخطوات

1. تثبيت psad.

   على أنظمة دبيان:

   ``` bash
   sudo apt install psad
   ```

1. عمل نسخة احتياطية من ملف إعدادات psad `/etc/psad/psad.conf`:

   ``` bash
   sudo cp --archive /etc/psad/psad.conf /etc/psad/psad.conf-COPY-$(date +"%Y%m%d%H%M%S")
   ```

1. مراجعة وتحديث خيارات الإعدادات في `/etc/psad/psad.conf`. انتبه بشكل خاص إلى هذه:

  |الإعداد|القيمة
  |--|--|
  |[`EMAIL_ADDRESSES`](http://www.cipherdyne.org/psad/docs/config.html#EMAIL_ADDRESSES)|عنوان بريدك الإلكتروني (عناوينك)|
  |`HOSTNAME`|اسم مضيف الخادم الخاص بك|
  |`EXPECT_TCP_OPTIONS`|`EXPECT_TCP_OPTIONS Y;`|
  |`ENABLE_PSADWATCHD`|`ENABLE_PSADWATCHD Y;`|
  |[`ENABLE_AUTO_IDS`](http://www.cipherdyne.org/psad/docs/config.html#ENABLE_AUTO_IDS)|`ENABLE_AUTO_IDS Y;`|
  |`ENABLE_AUTO_IDS_EMAILS`|`ENABLE_AUTO_IDS_EMAILS Y;`|

  راجع ملف الإعدادات ووثائق psad على http://www.cipherdyne.org/psad/docs/config.html لمزيد من التفاصيل.

1. <a name="psad_step4"></a>الآن نحتاج إلى إجراء بعض التعديلات على ufw ليعمل مع psad عن طريق إخبار ufw بتسجيل جميع حركة المرور حتى يتمكن psad من تحليلها. قم بذلك عن طريق تحرير **ملفين** وإضافة هذه الأسطر **في النهاية ولكن قبل سطر COMMIT**.

   عمل نسخ احتياطية:

   ``` bash
   sudo cp --archive /etc/ufw/before.rules /etc/ufw/before.rules-COPY-$(date +"%Y%m%d%H%M%S")
   sudo cp --archive /etc/ufw/before6.rules /etc/ufw/before6.rules-COPY-$(date +"%Y%m%d%H%M%S")
   ```

   تحرير الملفات:

   - `/etc/ufw/before.rules`
   - `/etc/ufw/before6.rules`

   وأضف هذا **في النهاية ولكن قبل سطر COMMIT**:

   ```
   # سجل كل حركة المرور حتى يتمكن psad من التحليل
   -A INPUT -j LOG --log-tcp-options --log-prefix "[IPTABLES] "
   -A FORWARD -j LOG --log-tcp-options --log-prefix "[IPTABLES] "
   ```

   **ملاحظة**: نضيف بادئة سجل لجميع سجلات iptables. سنحتاج ذلك لـ [فصل سجلات iptables في ملف خاص بها](#separate-iptables-log-file).

   على سبيل المثال:

   > ```
   > ...
   > 
   > # سجل كل حركة المرور حتى يتمكن psad من التحليل
   > -A INPUT -j LOG --log-tcp-options --log-prefix "[IPTABLES] "
   > -A FORWARD -j LOG --log-tcp-options --log-prefix "[IPTABLES] "
   > 
   > # لا تحذف سطر 'COMMIT' وإلا لن تتم معالجة هذه القواعد
   > COMMIT
   > ```

1. الآن نحتاج إلى إعادة تحميل/إعادة تشغيل ufw و psad لكي تصبح التغييرات سارية المفعول:

   ``` bash
   sudo ufw reload

   sudo psad -R
   sudo psad --sig-update
   sudo psad -H
   ```

1. تحليل قواعد iptables بحثاً عن أخطاء:

   ``` bash
   sudo psad --fw-analyze
   ```

   > ```
   > [+] Parsing INPUT chain rules.
   > [+] Parsing INPUT chain rules.
   > [+] Firewall config looks good.
   > [+] Completed check of firewall ruleset.
   > [+] Results in /var/log/psad/fw_check
   > [+] Exiting.
   > ```

   **ملاحظة**: إذا كانت هناك أي مشكلات، ستتلقى بريداً إلكترونياً مع الخطأ.

1. التحقق من حالة psad:

   ``` bash
   sudo psad --Status
   ```

   > ```
   > [-] psad: pid file /var/run/psad/psadwatchd.pid does not exist for psadwatchd on vm
   > [+] psad_fw_read (pid: 3444)  %CPU: 0.0  %MEM: 2.2
   >     Running since: Sat Feb 16 01:03:09 2019
   > 
   > [+] psad (pid: 3435)  %CPU: 0.2  %MEM: 2.7
   >     Running since: Sat Feb 16 01:03:09 2019
   >     Command line arguments: [none specified]
   >     Alert email address(s): root@localhost
   > 
   > [+] Version: psad v2.4.3
   > 
   > [+] Top 50 signature matches:
   >         [NONE]
   > 
   > [+] Top 25 attackers:
   >         [NONE]
   > 
   > [+] Top 20 scanned ports:
   >         [NONE]
   > 
   > [+] iptables log prefix counters:
   >         [NONE]
   > 
   >     Total protocol packet counters:
   > 
   > [+] IP Status Detail:
   >         [NONE]
   > 
   >     Total scan sources: 0
   >     Total scan destinations: 0
   > 
   > [+] These results are available in: /var/log/psad/status.out
   > ```

([جدول المحتويات](#table-of-contents))

### كشف ومنع اختراق التطبيقات باستخدام Fail2Ban

#### لماذا

يخبر UFW خادمك بالأبواب التي يجب إغلاقها بحيث لا يراها أحد، والأبواب التي يجب السماح للمستخدمين المصرح لهم بالمرور عبرها. يراقب PSAD النشاط الشبكي لاكتشاف ومنع الاختراقات المحتملة - المحاولات المتكررة للدخول.

ولكن ماذا عن التطبيقات/الخدمات التي يعمل عليها خادمك، مثل SSH و Apache، حيث تم تكوين جدار الحماية للسماح بالدخول إليها. على الرغم من أن الوصول قد يكون مسموحاً به، إلا أن هذا لا يعني أن جميع محاولات الوصول صالحة وغير ضارة. ماذا لو حاول شخص ما اقتحام تطبيق ويب يعمل على خادمك بالقوة الغاشمة؟ هنا يأتي دور Fail2ban.

#### كيف يعمل

يراقب Fail2ban سجلات تطبيقاتك (مثل SSH و Apache) لاكتشاف ومنع الاختراقات المحتملة. سيراقب حركة المرور/السجلات الشبكية ويمنع الاختراقات عن طريق حظر النشاط المشبوه (مثل عدة محاولات اتصال فاشلة متتالية في فترة زمنية قصيرة).

#### الأهداف

- مراقبة الشبكة للنشاط المشبوه مع حظر تلقائي لعناوين IP المخالفة

#### ملاحظات

- حتى الآن، الشيء الوحيد الذي يعمل على هذا الخادم هو SSH، لذلك نريد من Fail2ban مراقبة SSH وحظر حسب الضرورة.
- عندما تقوم بتثبيت برامج أخرى، ستحتاج إلى إنشاء/تكوين السجون المناسبة وتمكينها.

#### المراجع

- https://www.fail2ban.org/
- https://blog.vigilcode.com/2011/05/ufw-with-fail2ban-quick-secure-setup-part-ii/
- https://dodwell.us/security/ufw-fail2ban-portscan.html
- https://www.howtoforge.com/community/threads/fail2ban-and-ufw-on-debian.77261/

#### الخطوات

1. تثبيت fail2ban.

   على أنظمة دبيان:

   ``` bash
   sudo apt install fail2ban
   ```

1. لا نريد تحرير `/etc/fail2ban/fail2ban.conf` أو `/etc/fail2ban/jail.conf` لأن تحديثاً مستقبلياً قد يكتب فوقها، لذلك سننشئ نسخة محلية بدلاً من ذلك. أنشئ الملف `/etc/fail2ban/jail.local` وأضف إليه ما يلي بعد استبدال `[LAN SEGMENT]` و `[your email]` بالقيم المناسبة:

   ```
   [DEFAULT]
   # نطاق عنوان IP الذي نريد تجاهله
   ignoreip = 127.0.0.1/8 [LAN SEGMENT]

   # من نرسل له البريد الإلكتروني
   destemail = [your e-mail]

   # من هو مرسل البريد الإلكتروني
   sender = [your e-mail]

   # نظراً لأننا نستخدم exim4 لإرسال رسائل البريد الإلكتروني
   mta = mail

   # الحصول على تنبيهات البريد الإلكتروني
   action = %(action_mwl)s
   ```

   **ملاحظة**: سيحتاج خادمك إلى القدرة على إرسال رسائل البريد الإلكتروني حتى يتمكن Fail2ban من إعلامك بالنشاط المشبوه وعندما يقوم بحظر عنوان IP.

1. نحتاج إلى إنشاء سجن لـ SSH يخبر fail2ban بالنظر إلى سجلات SSH واستخدام ufw لحظر/إلغاء حظر عناوين IP حسب الحاجة. أنشئ سجن لـ SSH عن طريق إنشاء الملف `/etc/fail2ban/jail.d/ssh.local` وإضافة ما يلي إليه:

   ```
   [sshd]
   enabled = true
   banaction = ufw
   port = ssh
   filter = sshd
   logpath = %(sshd_log)s
   maxretry = 5
   ```

   [للكسالى](#editing-configuration-files---for-the-lazy):

   ``` bash
   cat << EOF | sudo tee /etc/fail2ban/jail.d/ssh.local
   [sshd]
   enabled = true
   banaction = ufw
   port = ssh
   filter = sshd
   logpath = %(sshd_log)s
   maxretry = 5
   EOF
   ```

1. في ما سبق، أخبرنا fail2ban باستخدام ufw كـ `banaction`. يأتي Fail2ban مع ملف إعدادات إجراء لـ ufw. يمكنك رؤيته في `/etc/fail2ban/action.d/ufw.conf`.

1. تمكين fail2ban:

   ``` bash
   sudo fail2ban-client start
   sudo fail2ban-client reload
   sudo fail2ban-client add sshd # قد يفشل هذا على بعض الأنظمة إذا تمت إضافة سجن sshd افتراضياً
   ```

1. للتحقق من الحالة:

   ``` bash
   sudo fail2ban-client status
   ```

   > ```
   > Status
   > |- Number of jail:      1
   > `- Jail list:   sshd
   > ```

   ``` bash
   sudo fail2ban-client status sshd
   ```

   > ```
   > Status for the jail: sshd
   > |- Filter
   > |  |- Currently failed: 0
   > |  |- Total failed:     0
   > |  `- File list:        /var/log/auth.log
   > `- Actions
   >    |- Currently banned: 0
   >    |- Total banned:     0
   >    `- Banned IP list:
   > ```

#### السجون المخصصة

لم أحتاج بعد إلى إنشاء سجن مخصص. بمجرد أن أفعل ذلك، وأعرف كيف، سأقوم بتحديث هذا الدليل. أو، إذا كنت تعرف كيف، فيرجى المساعدة في [المساهمة](#contributing).

#### إلغاء حظر عنوان IP

لإلغاء حظر عنوان IP، استخدم هذا الأمر:``` bash
fail2ban-client set [jail] unbanip [IP]
```
`[jail]` هو اسم الحاوية (jail) التي تحتوي على عنوان IP المحظور، و `[IP]` هو عنوان IP الذي ترغب في إلغاء حظره. على سبيل المثال، لإلغاء حظر `192.168.1.100` من SSH، ستقوم بما يلي:``` bash
fail2ban-client set sshd unbanip 192.168.1.100
```
([جدول المحتويات](#table-of-contents))

### كشف ومنع التطفل على التطبيقات باستخدام CrowdSec

#### لماذا

UFW يخبر خادمك بالأبواب التي يجب أن تُسد حتى لا يتمكن أحد من رؤيتها، والأبواب التي يجب السماح للمستخدمين المصرح لهم بالمرور من خلالها. PSAD يراقب نشاط الشبكة لكشف ومنع التطفلات المحتملة - محاولات متكررة للدخول.

CrowdSec يشبه Fail2Ban من حيث أنه يراقب سجلات تطبيقاتك (مثل SSH و Apache) لكشف ومنع التطفلات المحتملة. ومع ذلك، فإن CrowdSec مقترن بمجتمع يشارك معلومات التهديدات مرة أخرى إلى CrowdSec لتوزيع قائمة حظر مجتمعية على جميع المستخدمين.

#### كيف يعمل

CrowdSec يراقب سجلات تطبيقاتك (مثل SSH و Apache) لكشف ومنع التطفلات المحتملة. سيراقب حركة مرور الشبكة/السجلات ويمنع التطفلات عن طريق حظر النشاط المشبوه (مثل عدة محاولات فاشلة متتالية في فترة زمنية قصيرة). بمجرد اكتشاف عنوان IP ضار، سيتم إضافته إلى قائمة القرارات المحلية الخاصة بك، وسيتم مشاركة معلومات التهديد مع CrowdSec لتحديث قائمة الحظر المجتمعية لعناوين IP الضارة. بمجرد أن يصل عنوان IP إلى حد معين من النشاط الضار، سيتم نشره تلقائياً إلى جميع مستخدمي CrowdSec الآخرين للحظر الاستباقي.

#### الأهداف

- مراقبة الشبكة للأنشطة المشبوهة مع الحظر التلقائي لعناوين IP المخالفة

#### ملاحظات

- حتى الآن، الشيء الوحيد الذي يعمل على هذا الخادم هو SSH، لذا سنريد من CrowdSec مراقبة SSH وحظر عند الضرورة.
- عند تثبيت برامج أخرى، ستحتاج إلى تثبيت مجموعات إضافية وتهيئة عمليات الاستحواذ المناسبة.

#### المراجع

- https://www.crowdsec.net/
- [اقرأ كيف ينظم CrowdSec قائمة الحظر المجتمعية](https://www.crowdsec.net/our-data)
- [اقرأ معلومات التهديدات التي تتم مشاركتها مع CrowdSec](https://docs.crowdsec.net/docs/next/central_api/intro#signal-meta-data)
- https://docs.crowdsec.net/

#### الخطوات

1. تثبيت محرك أمان CrowdSec. (IDS)

   على أي توزيعة لينكس (بما في ذلك الأنظمة المبنية على دبيان)
   
   قم بتثبيت مستودع CrowdSec:
   ``` bash
   curl -s https://install.crowdsec.net | sudo sh
   ```

   قم بتثبيت محرك أمان CrowdSec:
   ``` bash
   sudo apt install crowdsec
   ```

> [!TIP]
> إذا لم تكن `curl | sh` من الأمور المفضلة لديك، يمكنك العثور على طرق تثبيت إضافية [هنا](https://docs.crowdsec.net/u/getting_started/installation/linux).

افتراضياً، أثناء تثبيت CrowdSec لمحرك الأمان، سيقوم باكتشاف تطبيقاتك المثبتة تلقائياً وتثبيت المحللات والسيناريوهات المناسبة لها. وبما أننا نعلم أن معظم خوادم لينكس تعمل بـ SSH خارج الصندوق، فإن CrowdSec سيقوم بتكوين ذلك تلقائياً لك.

2. تثبيت مكون المعالجة. (IPS)

   CrowdSec بحد ذاته هو محرك اكتشاف، نظراً لأنه في معظم البنى التحتية الحديثة قد يكون لديك جدار حماية أو WAF في المنبع، فإن CrowdSec لن يقوم بحظر عناوين IP بنفسه. يمكنك تثبيت مكون معالجة لحظر عناوين IP التي يكتشفها CrowdSec.
   ```bash
   sudo apt install crowdsec-firewall-bouncer-iptables
   ```

> [!TIP]
> إذا كان تثبيت UFW الخاص بك لا يستخدم `iptables` كخلفية، يمكنك بدلاً من ذلك تثبيت `crowdsec-firewall-bouncer-nftables`. لا يوجد فرق في الملفات الثنائية المثبتة، فقط ملف التكوين مختلف.

افتراضياً، أثناء تثبيت مكون المعالجة، سيقوم بتكوين الإعدادات اللازمة تلقائياً للعمل مع محرك الأمان إذا تم نشره على نفس المضيف (وإذا لم يكن محرك الأمان داخل بيئة حاوية).

3. التحقق من أن الكشف والمعالجة يعملان كما هو مقصود:

   حزمة CrowdSec تأتي مع أداة CLI للتحقق من حالة محرك الأمان ومكون المعالجة.

   ```bash
   sudo cscli metrics
   ```

   ```bash
   Acquisition Metrics:
   ╭────────────────────────┬────────────┬──────────────┬────────────────┬────────────────────────┬───────────────────╮
   │ Source                 │ Lines read │ Lines parsed │ Lines unparsed │ Lines poured to bucket │ Lines whitelisted │
   ├────────────────────────┼────────────┼──────────────┼────────────────┼────────────────────────┼───────────────────┤
   │ file:/var/log/auth.log │ 5          │ 4            │ 1              │ 10                     │ -                 │
   │ file:/var/log/syslog   │ 30         │ -            │ 30             │ -                      │ -                 │
   ╰────────────────────────┴────────────┴──────────────┴────────────────┴────────────────────────┴───────────────────╯

   Local API Decisions:
   ╭────────────────────────────────────────────┬────────┬────────┬───────╮
   │ Reason                                     │ Origin │ Action │ Count │
   ├────────────────────────────────────────────┼────────┼────────┼───────┤
   │ crowdsecurity/http-backdoors-attempts      │ CAPI   │ ban    │ 73    │
   │ crowdsecurity/http-bad-user-agent          │ CAPI   │ ban    │ 4836  │
   │ crowdsecurity/http-path-traversal-probing  │ CAPI   │ ban    │ 87    │
   │ crowdsecurity/http-probing                 │ CAPI   │ ban    │ 2010  │
   │ crowdsecurity/thinkphp-cve-2018-20062      │ CAPI   │ ban    │ 88    │
   │ crowdsecurity/CVE-2019-18935               │ CAPI   │ ban    │ 7     │
   │ crowdsecurity/CVE-2023-49103               │ CAPI   │ ban    │ 5     │
   │ crowdsecurity/http-admin-interface-probing │ CAPI   │ ban    │ 91    │
   │ ltsich/http-w00tw00t                       │ CAPI   │ ban    │ 3     │
   │ crowdsecurity/apache_log4j2_cve-2021-44228 │ CAPI   │ ban    │ 18    │
   │ crowdsecurity/nginx-req-limit-exceeded     │ CAPI   │ ban    │ 280   │
   │ crowdsecurity/ssh-slow-bf                  │ CAPI   │ ban    │ 3412  │
   │ crowdsecurity/spring4shell_cve-2022-22965  │ CAPI   │ ban    │ 1     │
   │ crowdsecurity/ssh-cve-2024-6387            │ CAPI   │ ban    │ 24    │
   │ crowdsecurity/CVE-2023-22515               │ CAPI   │ ban    │ 2     │
   │ crowdsecurity/http-cve-2021-41773          │ CAPI   │ ban    │ 172   │
   │ crowdsecurity/netgear_rce                  │ CAPI   │ ban    │ 14    │
   │ crowdsecurity/ssh-bf                       │ CAPI   │ ban    │ 2000  │
   │ crowdsecurity/CVE-2022-35914               │ CAPI   │ ban    │ 1     │
   │ crowdsecurity/http-cve-2021-42013          │ CAPI   │ ban    │ 2     │
   │ crowdsecurity/jira_cve-2021-26086          │ CAPI   │ ban    │ 9     │
   │ crowdsecurity/http-sensitive-files         │ CAPI   │ ban    │ 166   │
   │ crowdsecurity/http-wordpress-scan          │ CAPI   │ ban    │ 272   │
   │ crowdsecurity/CVE-2022-26134               │ CAPI   │ ban    │ 5     │
   │ crowdsecurity/http-generic-bf              │ CAPI   │ ban    │ 7     │
   │ crowdsecurity/http-open-proxy              │ CAPI   │ ban    │ 948   │
   │ crowdsecurity/http-crawl-non_statics       │ CAPI   │ ban    │ 339   │
   │ crowdsecurity/http-cve-probing             │ CAPI   │ ban    │ 5     │
   │ crowdsecurity/CVE-2017-9841                │ CAPI   │ ban    │ 117   │
   │ crowdsecurity/CVE-2022-37042               │ CAPI   │ ban    │ 1     │
   │ crowdsecurity/fortinet-cve-2018-13379      │ CAPI   │ ban    │ 5     │
   ╰────────────────────────────────────────────┴────────┴────────┴───────╯

   Local API Metrics:
   ╭──────────────────────┬────────┬──────╮
   │ Route                │ Method │ Hits │
   ├──────────────────────┼────────┼──────┤
   │ /v1/alerts           │ GET    │ 2    │
   │ /v1/decisions/stream │ GET    │ 5    │
   │ /v1/usage-metrics    │ POST   │ 2    │
   │ /v1/watchers/login   │ POST   │ 4    │
   ╰──────────────────────┴────────┴──────╯

   Local API Bouncers Metrics:

Read more

تنزيل الأداة
  • https://www.tecmint.com/install-rootkit-hunter-scan-for-rootkits-backdoors-in-linux/
  • نقل/نسخ احتياطي للسجلات - https://news.ycombinator.com/item?id=19178681
  • CIS-CAT - https://learn.cisecurity.org/cis-cat-landing-page
  • debsums - https://blog.sleeplessbeastie.eu/2015/03/02/how-to-verify-installed-packages/
  • MIM
    ssh-copy-id
    root@kitploit:~
    ssh-copy-id user@server
    
    root@kitploit:~
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_ed25519.pub"
    The authenticity of host 'host (192.168.1.96)' can't be established.
    ECDSA key fingerprint is SHA256:QaDQb/X0XyVlogh87sDXE7MR8YIK7ko4wS5hXjRySJE.
    Are you sure you want to continue connecting (yes/no)? yes
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    user@host's password:
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh 'user@host'"
    and check to make sure that only the key(s) you wanted were added.
    
    root@kitploit:~
    root@kitploit:~
    ########################################################################################################
    # بدء الإعدادات من https://infosec.mozilla.org/guidelines/openssh#modern-openssh-67 اعتبارًا من 2019-01-01
    ########################################################################################################
    
    # خوارزميات HostKey المدعومة حسب ترتيب التفضيل.
    HostKey /etc/ssh/ssh_host_ed25519_key
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    
    KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
    
    Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
    
    MACs [email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
    
    # LogLevel VERBOSE يسجل بصمة مفتاح المستخدم عند تسجيل الدخول. ضروري للحصول على مسار تدقيق واضح لأي مفتاح تم استخدامه لتسجيل الدخول.
    LogLevel VERBOSE
    
    # استخدام آليات صندوق رمل النواة حيثما أمكن في العمليات غير المميزة
    # Systrace على OpenBSD، Seccomp على Linux، seatbelt على MacOSX/Darwin، rlimit في أماكن أخرى.
    # ملاحظة: هذا الإعداد مُهمَل في OpenSSH 7.5 (https://www.openssh.com/txt/release-7.5)
    # UsePrivilegeSeparation sandbox
    
    ########################################################################################################
    # نهاية الإعدادات من https://infosec.mozilla.org/guidelines/openssh#modern-openssh-67 اعتبارًا من 2019-01-01
    ########################################################################################################
    
    # عدم السماح للمستخدمين بتعيين متغيرات البيئة
    PermitUserEnvironment no
    
    # تسجيل الوصول إلى الملفات على مستوى sftp (قراءة/كتابة/إلخ) التي قد لا يتم تسجيلها بسهولة بخلاف ذلك.
    Subsystem sftp  internal-sftp -f AUTHPRIV -l INFO
    
    # تعطيل إعادة توجيه X11 لأن X11 غير آمن جدًا
    # يجب ألا تقوم بتشغيل X على خادم على أي حال
    X11Forwarding no
    
    # تعطيل إعادة توجيه المنفذ
    AllowTcpForwarding no
    AllowStreamLocalForwarding no
    GatewayPorts no
    PermitTunnel no
    
    # عدم السماح بتسجيل الدخول إذا كان الحساب يحتوي على كلمة مرور فارغة
    PermitEmptyPasswords no
    
    # تجاهل .rhosts و .shosts
    IgnoreRhosts yes
    
    # التحقق من تطابق اسم المضيف مع IP
    UseDNS yes
    
    Compression no
    
    # TCP keepalive قابل للتزوير (يعمل خارج القناة المشفرة)
    # استخدم ClientAlive بدلاً من ذلك (يعمل داخل القناة المشفرة)
    TCPKeepAlive no
    
    AllowAgentForwarding no
    PermitRootLogin no
    
    # عدم السماح بـ .rhosts أو /etc/hosts.equiv
    HostbasedAuthentication no
    
    # OpenSSH 9.1 والإصدارات الأحدث
    # فرض حد أدنى لحجم مفتاح RSA يبلغ 3072 بت
    # https://www.keylength.com/en/compare/
    # RequiredRSASize 3072
    
    # https://github.com/imthenachoman/How-To-Secure-A-Linux-Server/issues/115
    HashKnownHosts yes
    
  • ثم ابحث عن هذه الإعدادات وقم بتعديلها أو إضافتها، وضبط القيم وفقًا لمتطلباتك:

    الإعدادالقيم الصالحةمثالالوصفملاحظات
    AllowGroupsاسم مجموعة UNIX محليAllowGroups sshusersالمجموعة التي يُسمح لها بالوصول عبر SSH
    ClientAliveCountMaxرقمClientAliveCountMax 3الحد الأقصى لعدد رسائل العميل الحي المرسلة دون استجابة
    ClientAliveIntervalعدد الثوانيClientAliveInterval 15المهلة بالثواني قبل طلب الاستجابة
    ListenAddressقائمة العناوين المحلية مفصولة بمسافات
    • ListenAddress 0.0.0.0
    • ListenAddress 192.168.1.100
    العناوين المحلية التي يجب أن يستمع عليها sshdراجع المشكلة رقم 1 للحصول على تفاصيل مهمة.
    LoginGraceTimeعدد الثوانيLoginGraceTime 30الوقت بالثواني قبل انتهاء مهلة تسجيل الدخول
    MaxAuthTriesرقمMaxAuthTries 2الحد الأقصى لعدد محاولات تسجيل الدخول المسموح بها
    MaxSessionsرقمMaxSessions 2الحد الأقصى لعدد الجلسات المفتوحة
    MaxStartupsرقمMaxStartups 2الحد الأقصى لعدد جلسات تسجيل الدخول
    PasswordAuthenticationyes أو noPasswordAuthentication noما إذا كان تسجيل الدخول بكلمة مرور مسموحًا به
    Portأي رقم منفذ مفتوح/متاحPort 22المنفذ الذي يجب أن يستمع عليه sshd

    راجع man sshd_config للحصول على مزيد من التفاصيل حول معنى هذه الإعدادات.

  • تأكد من عدم وجود إعدادات مكررة متعارضة. يجب ألا يكون للأمر أدناه أي مخرجات.

    root@kitploit:~
    awk 'NF && $1!~/^(#|HostKey)/{print $1}' /etc/ssh/sshd_config | sort | uniq -c | grep -v ' 1 '
    
  • إعادة تشغيل ssh:

    root@kitploit:~
    sudo service sshd restart
    
  • يمكنك التحقق من أن التكوينات تعمل باستخدام sshd -T والتحقق من المخرجات:

    root@kitploit:~
    sudo sshd -T
    
    root@kitploit:~
    port 22
    addressfamily any
    listenaddress [::]:22
    listenaddress 0.0.0.0:22
    usepam yes
    logingracetime 30
    x11displayoffset 10
    maxauthtries 2
    maxsessions 2
    clientaliveinterval 15
    clientalivecountmax 3
    streamlocalbindmask 0177
    permitrootlogin no
    ignorerhosts yes
    ignoreuserknownhosts no
    hostbasedauthentication no
    ...
    subsystem sftp internal-sftp -f AUTHPRIV -l INFO
    maxstartups 2:30:2
    permittunnel no
    ipqos lowdelay throughput
    rekeylimit 0 0
    permitopen any
    
  • لاحظ أن هذا لا يتم تشغيله كجذر.

    اختر الخيار الافتراضي (y في معظم الحالات) لجميع الأسئلة التي يطرحها وتذكر حفظ رموز الطوارئ الاحتياطية.

  • قم بعمل نسخة احتياطية من ملف تكوين PAM الخاص بـ SSH /etc/pam.d/sshd:

    root@kitploit:~
    sudo cp --archive /etc/pam.d/sshd /etc/pam.d/sshd-COPY-$(date +"%Y%m%d%H%M%S")
    
  • الآن نحتاج إلى تمكينه كطريقة مصادقة لـ SSH بإضافة هذا السطر إلى /etc/pam.d/sshd:

    root@kitploit:~
    auth       required     pam_google_authenticator.so nullok
    

    ملاحظة: تحقق هنا لمعرفة معنى nullok.

    للكسالى:

    root@kitploit:~
    echo -e "\nauth       required     pam_google_authenticator.so nullok         # added by $(whoami) on $(date +"%Y-%m-%d @ %H:%M:%S")" | sudo tee -a /etc/pam.d/sshd
    
  • أخبر SSH باستخدامه عن طريق إضافة أو تحرير هذا السطر في /etc/ssh/sshd_config:

    root@kitploit:~
    ChallengeResponseAuthentication yes
    

    للكسالى:

    root@kitploit:~
    sudo sed -i -r -e "s/^(challengeresponseauthentication .*)$/# \1         # commented by $(whoami) on $(date +"%Y-%m-%d @ %H:%M:%S")/I" /etc/ssh/sshd_config
    echo -e "\nChallengeResponseAuthentication yes         # added by $(whoami) on $(date +"%Y-%m-%d @ %H:%M:%S")" | sudo tee -a /etc/ssh/sshd_config
    
  • أعد تشغيل ssh:

    root@kitploit:~
    sudo service sshd restart
    
  • أعد تشغيل الخدمة لتطبيق التغييرات:

    root@kitploit:~
    sudo systemctl restart systemd-timesyncd
    
  • تحقق من حالة المزامنة:

    root@kitploit:~
    timedatectl timesync-status
    
    root@kitploit:~
           Server: 108.61.56.35 (pool.ntp.org)
    Poll interval: 32s (min: 32s; max: 34min 8s)
             Leap: normal
          Version: 4
          Stratum: 2
        Reference: C342F10A
        Precision: 1us (2^0)
     Root distance: 24.054ms (max: 5s)
           Offset: +2.156ms
            Delay: 48.567ms
           Jitter: 1.452ms
     Packet count: 3
    
  • مثال /etc/ntp.conf:

    root@kitploit:~
    driftfile /var/lib/ntp/ntp.drift
    statistics loopstats peerstats clockstats
    filegen loopstats file loopstats type day enable
    filegen peerstats file peerstats type day enable
    filegen clockstats file clockstats type day enable
    restrict -4 default kod notrap nomodify nopeer noquery limited
    restrict -6 default kod notrap nomodify nopeer noquery limited
    restrict 127.0.0.1
    restrict ::1
    restrict source notrap nomodify noquery
    pool pool.ntp.org iburst         # added by user on 2019-03-09 @ 10:23:35
    
  • أعد تشغيل ntp:

    root@kitploit:~
    sudo service ntp restart
    
  • تحقق من حالة خدمة ntp:

    root@kitploit:~
    sudo systemctl status ntp
    
    root@kitploit:~
    ● ntp.service - LSB: Start NTP daemon
       Loaded: loaded (/etc/init.d/ntp; generated; vendor preset: enabled)
       Active: active (running) since Sat 2019-03-09 15:19:46 EST; 4s ago
         Docs: man:systemd-sysv-generator(8)
      Process: 1016 ExecStop=/etc/init.d/ntp stop (code=exited, status=0/SUCCESS)
      Process: 1028 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
        Tasks: 2 (limit: 4915)
       CGroup: /system.slice/ntp.service
               └─1038 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:113
    
    Mar 09 15:19:46 host ntpd[1038]: Listen and drop on 0 v6wildcard [::]:123
    Mar 09 15:19:46 host ntpd[1038]: Listen and drop on 1 v4wildcard 0.0.0.0:123
    Mar 09 15:19:46 host ntpd[1038]: Listen normally on 2 lo 127.0.0.1:123
    Mar 09 15:19:46 host ntpd[1038]: Listen normally on 3 enp0s3 10.10.20.96:123
    Mar 09 15:19:46 host ntpd[1038]: Listen normally on 4 lo [::1]:123
    Mar 09 15:19:46 host ntpd[1038]: Listen normally on 5 enp0s3 [fe80::a00:27ff:feb6:ed8e%2]:123
    Mar 09 15:19:46 host ntpd[1038]: Listening on routing socket on fd #22 for interface updates
    Mar 09 15:19:47 host ntpd[1038]: Soliciting pool server 108.61.56.35
    Mar 09 15:19:48 host ntpd[1038]: Soliciting pool server 69.89.207.199
    Mar 09 15:19:49 host ntpd[1038]: Soliciting pool server 45.79.111.114
    
  • تحقق من حالة ntp:

    root@kitploit:~
    sudo ntpq -p
    
    root@kitploit:~
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
     pool.ntp.org    .POOL.          16 p    -   64    0    0.000    0.000   0.000
    *lithium.constan 198.30.92.2      2 u    -   64    1   19.900    4.894   3.951
     ntp2.wiktel.com 212.215.1.157    2 u    2   64    1   48.061   -0.431   0.104
    
  • رقم واحد
  • ucredit=-1 = يجب أن تحتوي على حرف كبير واحد على الأقل
  • lcredit=-1 = يجب أن تحتوي على حرف صغير واحد على الأقل
  • ocredit=-1 = يجب أن تحتوي على حرف غير أبجدي رقمي واحد على الأقل
  • difok=3 = على الأقل 3 أحرف من كلمة المرور الجديدة لا يمكن أن تكون موجودة في كلمة المرور القديمة
  • maxrepeat=3 = السماح بحد أقصى 3 أحرف مكررة
  • gecoschec = عدم السماح بكلمات مرور تحتوي على اسم الحساب
  • للكسول:

    root@kitploit:~
    sudo sed -i -r -e "s/^(password\s+requisite\s+pam_pwquality.so)(.*)$/# \1\2         # تم التعليق بواسطة $(whoami) بتاريخ $(date +"%Y-%m-%d @ %H:%M:%S")\n\1 retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 maxrepeat=3 gecoschec         # تمت الإضافة بواسطة $(whoami) بتاريخ $(date +"%Y-%m-%d @ %H:%M:%S")/" /etc/pam.d/common-password
    

    ملاحظات:

    • تحقق من /usr/lib/apt/apt.systemd.daily للحصول على تفاصيل خيارات APT::Periodic
    • تحقق من https://github.com/mvo5/unattended-upgrades للحصول على تفاصيل خيارات Unattended-Upgrade
  • قم بتشغيل تشغيل تجريبي (dry-run) لـ unattended-upgrades للتأكد من أن ملف التكوين الخاص بك على ما يرام:

    root@kitploit:~
    sudo unattended-upgrade -d --dry-run
    

    إذا كان كل شيء على ما يرام، يمكنك تركه يعمل وفقاً لجدولته الزمنية أو فرض تشغيل باستخدام unattended-upgrade -d.

  • قم بتكوين apt-listchanges حسب رغبتك:

    root@kitploit:~
    sudo dpkg-reconfigure apt-listchanges
    
  • بالنسبة لـ apticron، الإعدادات الافتراضية جيدة بما فيه الكفاية ولكن يمكنك التحقق منها في /etc/apticron/apticron.conf إذا كنت تريد تغييرها. على سبيل المثال، تكويني يبدو هكذا:

    root@kitploit:~
    EMAIL="root"
    NOTIFY_NO_UPDATES="1"