حماية خدمة SSH بواسطة DenyHosts

السلام عليكم ورحمة الله وبركاته

استكمالاً لما كتبته قبل فترة حول خدمة SSH في الموضوعين:
SSH ماهي؟ وكيفية إستعمالها؟ وطرق عمل Harden لها
إستعمال sshguard للتصدي لهجمات Brute Force على خدمة SSH

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

قد يستغرب البعض حين أقول له بإن مجرد وصول الـ BOX (سيرفر) الخاص بك على النت Online، ستبدأ المشاكل وتبدأ محاولات الإختراق من قبل المخترقين، ولكن هذه هي الحقيقة. لو قمت بعمل خادم SSH مثلاً يستطيع الناس أو العالم الخارجي الوصول له من خلال الأنترنت (عن بُعد)، أنصحك بمتابعة ومراقبة السجلات الخاصة بالوصول وعمل Access على خادم SSH التي في CentOS، Fedora، RHEL وأعجوبة مثلاً هي:

/var/log/secure


وعلى دبيان وأوبنتو:

/var/log/auth.log

قم بمراقبتهم بالأمر:

sudo tail -f /var/log/secure

أو

sudo tail -f /var/log/auth.log

ستجد هناك العديد من السطور تبيين محاولات متعددة للوصول الى هذه الخدمة. إذا لم تكن أنت صاحب هذه الـ IP’s ولا هذه المحاولات فمن هو؟ إنهم المخترقون :)

الحين ربما تتسائل مع نفسك وتقول لي: معقولة وصلوا هؤلاء الى الـ BOX الخاص بي بهذه السرعة؟ يا [email protected] لم يمضي على وجود الـ BOX على النت سوى ساعات أو أيام معدودة، معقولة؟

الجواب: يا عزيزي للأسف نعم معقولة ونص وثلاث أرباع
هؤلاء يستعملون أدوات تنفذ بشكل أوتوماتيكي أو تلقائي ويتم توجيهها على IP Range معيين مثلاً وهي تقوم بمحاولات دخول عشوائية إستناداً الى قواعد بيانات لديها بأسماء مستخدمين وكلمات سرية. الطريقة هذه الأغلب يعرفها وهي ما يسمى بالـ Brute Force ولكن بشكل Automated Brute Force Attack.

سؤال: عندك حلول من تقليل المخاطر؟
الجواب: نعم، تابع معي يا عزيزي القاريء.

في البداية هذا الموضوع سأشرح فيه كيفية تركيب وإعداد خدمة DenyHosts من خلال ملفات السورس لها، وليس من خلال rpm أو yum أو apt-get و dpkg. وهي سهلة جداً فقط خلك مركز معي الله يرضى عليك

الخطوة الأولى: تحميل ملفات DenyHosts والتأكد من وجود Python.
قم بتحميل الملفات من خلال زيارة الموقع التالي: DenyHosts-2.6.tar.gz

الآن لنتأكد من Python، نفذ التالي:

python -V

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

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

mv /path2/DenyHosts-2.6.tar.gz /usr/share/

بعد ذلك:

cd /usr/share/

بعد ذلك لنقم بفك الضغط:

tar xvfz DenyHosts-2.6.tar.gz

بعد ذلك:

cd DenyHosts-2.6/

ومن ثم نفذ الأوامر التالية:

mv denyhosts.cfg-dist denyhosts.cfg

الخطوة الثالثة: عمل الإعدادات اللازمة.
الآن لنقم بتحرير الملف الخاص بالاعدادات والذي اسمه denyhosts.cfg:

vim denyhosts.cfg

الآن تأكد من وضع الاعدادات التالية (سأشرح كل واحدة لا تقلق):

WORK_DIR = /usr/share/denyhosts/
HOSTS_DENY = /etc/hosts.deny
BLOCK_SERVICE = sshd
SECURE_LOG = /var/log/secure
DENY_THRESHOLD_INVALID = 2
DENY_THRESHOLD_VALID = 5
DENY_THRESHOLD_ROOT = 2
LOCK_FILE = /var/lock/subsys/denyhosts
HOSTNAME_LOOKUP=YES
AGE_RESET_VALID=5d
AGE_RESET_INVALID=
AGE_RESET_ROOT=10d
DAEMON_PURGE = 10d
DAEMON_SLEEP = 10m
DAEMON_LOG = /var/log/denyhosts
DAEMON_LOG_TIME_FORMAT = %b %d %H:%M:%S
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
ADMIN_EMAIL = [email protected]

الآن لنقوم بتوضيح كل سطر، بالرغم من كونهم موضحين في ملف الاعداد، إلا إنه سأوضحهم للفائدة العامة ولمن لا يجيد اللغة الأنجليزية.
– السطر الأول يتم تحديد المسار الموجود بداخله ملفات الخدمة/السكربت DenyHosts والذي في مثالنا هذا هو

/usr/share/denyhosts/

– السطر الثاني يتم تحديد المسار الخاص بملف hosts.deny الذي سيتم تسجيل الـ IP’s الممنوعة فيه.
– السطر الثالث حددنا الخدمة التي نريد نعمل حماية عليها.
– السطر الرابع حددنا مكان تسجيل الدخول لخدمة SSH كما ذكرت بالأعلى هذا المسار هو لتوزيعات RHEL,Fedora,CentOS وأعجوبة فقط. إذا كنت تريد تحديد المسار لتوزيعة أوبنتو أو دبيان أقرأ المسار كتبته بالاعلى :)

((الآن ركز معي أكثر الله يرضى عليك))

– السطر الخامس نقوم بتحديد بعد كم محاولة فاشلة للدخول بواسطة مستخدم غير موجود تريد تسجيل منع ذلك الـ IP؟ هنا حددنا 2 وذلك لأنه إذا المستخدم ليس موجود ليش أخله يعيد محاولات عديدة.
– السطر السادس نقوم بتحديد بعد كم محاولة فاشلة للدخول بواسطة مستخدم موجود على الـ BOX لديك، تقوم بمنعه؟ أعتقد 5 قيمة عادلة، يعني مو معقولة الإنسان ناسي كلمة المرور له وخمس محاولات لا يتذكرها، لو صحيح عليه طلب الكلمة من مدير الـ BOX أحسن له.
– السطر السابع نقوم بتحديد بعد كم محاولة فاشلة للدخول بواسطة المستخدم root على الـ BOX لديك تريد منعه؟ بالنسبة لي وضعت هذا الخيار لمن يسمح بدخول root بشكل مباشر. لمن لا يسمح بدخول root بشكل مباشر لا تضع شيء.
– السطر الثامن حددنا فيه مسار الـ Lock File للخدمة، في الغالب سيكون في المسار الذي وضعته، إن لم يكن راجع ملف الإعدادات أو عليك أن تكون على دراية بمكانه في توزيعتك، لكن بالغالب هذا هو.
– السطر التاسع نحدد فيه هل نريد أن يتعمل عمل Hostname Lookups أم لا، لا أنصح به لانه ربما يسبب بطأ في الشبكة عندك.
– السطر العاشر في حالة تم منع مستخدم موجود من الدخول بسبب محاولاته المتكررة الفاشلة، فقم برفع الحجب عنه بعد مدة معينة. في الاعدادات التي عملتها أنا وضعت يوم واحد. ضع ما تشاء.
– السطر الحادي عشر أتركه كما عملت أنا، وذلك يعني بإنه لن يتم رفع الحجب عن الـ IP’s تلك ابداً.
– السطر الثاني عشر يخص المستخدم root ومتى تريد رفع الحجب عن محاولات دخوله الفاشلة. أنا وضعتها هنا 10 أيام، كما قلت لك لو كنت لا تسمح بوصول root لخدمة SSH اصلا فلا حاجة لوضع هذا الخيار.
– السطر الثالث عشر تحدد فيه بعد كم من الزمن تريد أن يتم مسح جميع السطور الخاصة بمنع IP’s من ملف hosts.deny، وذلك لأنه ممكن يصبح الملف كبير جداً مع المدة.
– السطر الرابع عشر تحدد فيه متى تريد الخدمة/السكربت أن يتم تنفيذها. أنا قمت بتحديد عملها بعد كل 10 دقائق. لا تقلق السكربت خفيف كما لاحظت ولهذا كل 10 دقائق عملها لن يؤثر على أداء باقي الخدمات التي عندك على الـ BOX.
– السطر الخامس عشر حددنا أين يتم تسجيل الأمور التي تتعلق بالخدمة نفسها.
– السطر السادس عشر حددنا في طريقة تسجيل التواريخ الخاصة بالخدمة.
– السطر السابع عشر أخبرنا الخدمة بإننا نريد تقرير حول العمليات المشبوهة التي حصلت.
– السطر الثامن عشر حددنا اسم البريد الذي نرسل له التقارير.

الخطوة الرابعة: تنصيب وتشغيل السكربت.
الآن لتشغيل السكربت هذه علينا بعمل تنصيب لها. لهذا قم بتنفيذ الأمر (بصلاحيات root):

python setup.py install

هذه الخطوة ستقوم بعمل نسخ وتنصيب للمودويلات الخاصة بالخدمة في مجلد site-packages الخاص بالبايثون.

خطوة مهمة قبل التشغيل، قم بإضافة رقم الـ IP أو الدومين الذي تريد السماح له بالوصول الى خدمة ssh في ملف hosts.allow قبل التفيذ. مثلاً:

echo "sshd: 5.5.5.5" >> /etc/hosts.allow

حيث 5.5.5.5 هو رقم الجهاز الذي أريد السماح له بالوصول للخدمة فقط. الآن لنقوم بتجربة عمل السكربت:

python denyhosts.py

إذا وجد في ملفات الأكسس لديك محاولات دخول مطابقة للخيارات والأعدادات التي وضعناها؟ سيقوم بتسجيلها في ملف hosts.deny وذلك لمنعها بالمرات القادمة من الدخول.

الخطوة الخامسة: تحويل السكربت DenyHosts الى خدمة لتعمل بشكل تلقائي حتى بعد إعادة التشغيل للجهاز.
الآن لعمل السكربت على شكل خدمة، قم بمتابعة الخطوات التالية معي. أول شيء:

mv daemon-control-dist denyhosts

بعد ذلك نفذ:

ln -s /usr/share/denyhosts/denyhosts /etc/init.d/denyhosts

الآن قم بتحرير الملف denyhosts:

vim /usr/share/denyhosts/denyhosts

وتأكد من وضع الخيارات التالية:

DENYHOSTS_BIN = "/usr/share/denyhosts/denyhosts.py"
DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg"

– السطر الأول حددنا مكان وجود الخدمة DenyHosts.
– السطر الثاني حددنا مكان الـ Lock File للخدمة.
– السطر الثالث حددنا مكان وجود ملف الإعدادات للخدمة.

الآن قم علينا أن نضيف الخدمة للعمل بعد أعادة التشغيل، بالبداية نفذ التالي (RHEL,Fedora,CentOS وأعجوبة):

chkconfig denyhosts --add

بعدها نفذ:

chkconfig denyhosts on

على توزيعات دبيان وأوبنتو، راجع الأمر update-rc.d أو راجع موضوع الأخ أبو عبد الرحمن (EXp1r3d):
HowTo : Control Startup Services

الآن الخدمة جاهزة، لنقوم بتشغيلها:

/etc/init.d/denyhosts start

وهكذا ستقوم الخدمة بالعمل وفقاً للأعدادات التي عملناها، والتي قلنا لها نريدك أن تعملي وتنفذي خدماتك كل 10 دقائق.

الى هنا أنتهي من شرح إضافة الخدمة DenyHosts على الـ BOX عندك لحماية خدمة الـ SSH التي لديك، ومع هذه الإضافة اقول لك لازال هناك لدي المزيد

للنقاش فيما جاء بهذا الموضوع، يرجى زيارة الموضوع التالي: أضغط

دمتم بود …