تأمين الخدمات العامة: إغلاق المنافذ غير المستخدمة وتغيير إعدادات SSH الافتراضية


تأمين الخدمات العامة

تأمين الخدمات العامة: إغلاق المنافذ غير المستخدمة وتغيير إعدادات SSH الافتراضية

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

1. إغلاق المنافذ غير المستخدمة

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

كيف تعرف ما هي المنافذ المفتوحة؟

استخدم الأمر ss (أو netstat إذا لم يكن ss متوفراً، لكن ss أحدث وأفضل).

ss -tuln

هذا الأمر سيعرض لك جميع المنافذ المفتوحة، البروتوكولات (TCP/UDP)، وحالة الاستماع (LISTEN). ابحث عن الخدمات التي لا تعرفها أو لا تحتاجها.

إيقاف وتعطيل الخدمات غير الضرورية

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

sudo systemctl stop اسم_الخدمة
sudo systemctl disable اسم_الخدمة

على سبيل المثال، إذا كان لديك خادم ويب (مثل Nginx أو Apache) يعمل على منفذ 80 و 443، وتكتشف أن خدمة أخرى غير معروفة تعمل على منفذ 8080، تحتاج للتحقيق فيها.

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

تكوين جدار الحماية (Firewall)

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

مثال على UFW (لمستخدمي Ubuntu/Debian):
sudo ufw status verbose   # لمعرفة حالة جدار الحماية
sudo ufw enable           # لتفعيل UFW (إذا لم يكن مفعلاً)
sudo ufw default deny incoming # رفض كل الاتصالات الواردة افتراضياً
sudo ufw allow ssh         # السماح باتصال SSH (المنفذ 22 افتراضياً)
sudo ufw allow http        # السماح بالمنفذ 80
sudo ufw allow https       # السماح بالمنفذ 443
sudo ufw delete allow 8080 # لحذف قاعدة السماح بالمنفذ 8080 مثلاً
sudo ufw reload            # لتطبيق التغييرات
مثال على FirewallD (لمستخدمي CentOS/RHEL):
sudo firewall-cmd --list-all             # لمعرفة حالة جدار الحماية
sudo firewall-cmd --permanent --add-service=ssh # السماح بـ SSH
sudo firewall-cmd --permanent --add-port=80/tcp  # السماح بالمنفذ 80
sudo firewall-cmd --permanent --add-port=443/tcp # السماح بالمنفذ 443
sudo firewall-cmd --permanent --remove-port=8080/tcp # حذف السماح بمنفذ 8080
sudo firewall-cmd --reload                 # لتطبيق التغييرات

2. تغيير إعدادات SSH الافتراضية

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

الملف الرئيسي: /etc/ssh/sshd_config

كل التغييرات التي سنقوم بها ستكون في هذا الملف. تذكر دائماً عمل نسخة احتياطية قبل التعديل.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

أ. تغيير منفذ SSH الافتراضي (Port 22)

نقل SSH إلى منفذ غير قياسي يقلل من الضوضاء الناتجة عن محاولات الاختراق الآلية التي تستهدف المنفذ 22.

  • ابحث عن السطر الذي يبدأ بـ Port 22.
  • غيّره إلى منفذ آخر مرتفع، مثلاً Port 2222 أو أي رقم غير مستخدم (تأكد أنه ليس منفذاً لخدمة معروفة).
#Port 22
Port 2222

بعد التغيير، لا تنسَ تحديث جدار الحماية للسماح بالمنفذ الجديد وإزالة السماح بالمنفذ 22.

# لـ UFW:
sudo ufw allow 2222/tcp
sudo ufw delete allow ssh # أو ufw delete allow 22/tcp
sudo ufw reload

# لـ FirewallD:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh # أو --remove-port=22/tcp
sudo firewall-cmd --reload

ب. تعطيل تسجيل الدخول كـ Root (PermitRootLogin)

تسجيل الدخول مباشرة كـ root يمثل خطراً كبيراً. بدلاً من ذلك، قم بتسجيل الدخول كمستخدم عادي ثم استخدم sudo.

  • ابحث عن السطر PermitRootLogin.
  • غيّره إلى PermitRootLogin no.
PermitRootLogin no

ملاحظة: تأكد أن لديك مستخدماً عادياً (غير root) لديه صلاحيات sudo قبل تعطيل تسجيل الدخول كـ root، وإلا فلن تتمكن من الوصول إلى الخادم!

ج. استخدام المصادقة بالمفاتيح (Key-Based Authentication)

المفاتيح المشفرة أكثر أماناً بكثير من كلمات المرور. قم بتعطيل المصادقة بكلمة المرور بعد إعداد المصادقة بالمفاتيح بنجاح.

  1. توليد المفاتيح على جهازك المحلي:
    ssh-keygen -t rsa -b 4096

    اتبع التعليمات. ستقوم بإنشاء مفتاح عام (id_rsa.pub) ومفتاح خاص (id_rsa).

  2. نسخ المفتاح العام إلى الخادم:
    ssh-copy-id -i ~/.ssh/id_rsa.pub user@your_server_ip -p 2222

    استبدل user و your_server_ip والمنفذ 2222 بالمعلومات الصحيحة.

  3. تعطيل المصادقة بكلمة المرور على الخادم:

    في ملف /etc/ssh/sshd_config، ابحث عن السطور التالية وقم بتغييرها:

    PasswordAuthentication no
    ChallengeResponseAuthentication no
    UsePAM no

د. فرض استخدام بروتوكول SSHv2

SSHv1 قديم وغير آمن. تأكد من أن الخادم يستخدم SSHv2 فقط (وهو الإعداد الافتراضي في معظم الأنظمة الحديثة).

Protocol 2

هـ. تقييد المستخدمين أو المجموعات

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

  • السماح لمستخدمين محددين:
    AllowUsers user1 user2
  • السماح لمجموعات محددة:
    AllowGroups sshusers

    تأكد من أن المستخدمين الذين يحتاجون الوصول هم أعضاء في مجموعة sshusers.

إعادة تشغيل خدمة SSH بعد التغييرات

بعد كل تغيير في ملف /etc/ssh/sshd_config، تحتاج إلى إعادة تشغيل خدمة SSH لتطبيق التغييرات:

sudo systemctl restart sshd
# أو على بعض الأنظمة:
sudo systemctl restart ssh

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

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