ديف أوبس

إعداد SSH الآمن على لينكس

ضبط إعدادات خدمة SSH على خادوم لينكس

تُعتبر خدمة SSH (Secure Shell) من الأدوات الأساسية في إدارة الخواديم عن بُعد في أنظمة لينكس ويونكس، إذ توفر قناة آمنة ومشفّرة للتواصل بين العميل والخادوم. تُستخدم هذه الخدمة بشكل واسع من قبل مديري الأنظمة، ومطوري البرمجيات، ومقدمي خدمات استضافة المواقع وغيرهم. ولا تقتصر أهمية SSH على الاتصال فحسب، بل تشمل التحكم الكامل بالخادوم، تنفيذ الأوامر، إدارة الملفات، وإعداد خدمات الشبكة، مما يجعل تأمينها وضبط إعداداتها بدقة أمراً بالغ الأهمية.

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


المفاهيم الأساسية لـ SSH

ما هو SSH؟

SSH هو بروتوكول شبكي يُستخدم لتأمين الاتصال بين جهازي كمبيوتر باستخدام التشفير. يسمح بتسجيل الدخول إلى الخادوم وتنفيذ الأوامر، نقل الملفات عبر بروتوكولات مثل SCP أو SFTP، وتوجيه المنافذ (Port Forwarding). يتميز SSH بكونه بديلاً آمناً لبروتوكولات قديمة غير مشفرة مثل Telnet وFTP.

الفرق بين SSH وSSHD

  • SSH: العميل الذي يُستخدم للاتصال بخادوم.

  • SSHD: الخادوم الذي يستقبل الاتصال من العميل وينفذ الأوامر المطلوبة.


تثبيت خدمة SSH على خادوم لينكس

معظم توزيعات لينكس تتضمن خدمة SSH بشكل افتراضي، لكن إن لم تكن مثبتة، يمكن تثبيتها باستخدام مدير الحزم المناسب:

  • على Debian/Ubuntu:

bash
sudo apt update sudo apt install openssh-server
  • على CentOS/RHEL:

bash
sudo yum install openssh-server
  • على Fedora:

bash
sudo dnf install openssh-server

بعد التثبيت، يجب التأكد من تشغيل الخدمة تلقائيًا مع الإقلاع:

bash
sudo systemctl enable ssh sudo systemctl start ssh

للتحقق من حالة الخدمة:

bash
sudo systemctl status ssh

ملف إعدادات SSH: sshd_config

يقع الملف الرئيسي لإعدادات خادوم SSH غالباً في المسار التالي:

bash
/etc/ssh/sshd_config

هذا الملف يتحكم في سلوك خدمة SSH بالكامل. أي تغيير يتم فيه يتطلب إعادة تشغيل الخدمة ليصبح ساري المفعول:

bash
sudo systemctl restart ssh

الإعدادات الأساسية المهمة في sshd_config

تغيير المنفذ الافتراضي (Port)

المنفذ الافتراضي لـ SSH هو 22، ويمكن تغييره لتقليل محاولات الاختراق التلقائية (Brute Force):

yaml
Port 2222

السماح أو منع تسجيل الدخول بالحساب الجذري (Root)

من الأفضل تعطيل تسجيل الدخول مباشرة كمستخدم root:

nginx
PermitRootLogin no

استخدام المصادقة بالمفتاح بدلاً من كلمة المرور

تعزيز الأمان عبر تعطيل المصادقة بكلمة المرور:

nginx
PasswordAuthentication no PubkeyAuthentication yes

تحديد المستخدمين المسموح لهم بالاتصال

للحد من الوصول:

nginx
AllowUsers user1 user2

تحديد البروتوكول المستخدم

عادةً ما يُستخدم البروتوكول رقم 2 لأنه الأحدث والأكثر أمانًا:

nginx
Protocol 2

ضبط مهلة الاتصال وعدد المحاولات

تقليل فرص الاستغلال:

nginx
LoginGraceTime 30 MaxAuthTries 3

تقييد الوصول من خلال عناوين IP

يمكن تحقيق ذلك من خلال جدار الحماية (iptables أو firewalld) أو بإعدادات SSH:

مثلاً باستخدام TCP Wrappers:

makefile
/etc/hosts.allow: sshd: 192.168.1.100 /etc/hosts.deny: sshd: ALL

توليد واستخدام مفاتيح SSH

لزيادة الأمان، يُفضل استخدام مصادقة المفاتيح بدلًا من كلمات المرور.

توليد مفتاح على العميل:

bash
ssh-keygen -t rsa -b 4096 -C "[email protected]"

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

bash
~/.ssh/id_rsa ← المفتاح الخاص ~/.ssh/id_rsa.pub ← المفتاح العام

نسخ المفتاح إلى الخادوم:

bash
ssh-copy-id user@server_ip

أو يدويًا:

  • انسخ محتوى id_rsa.pub إلى الملف:

bash
~/.ssh/authorized_keys

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

bash
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

ضبط جدار الحماية للسماح بالاتصال

باستخدام UFW (Ubuntu/Debian):

bash
sudo ufw allow 22/tcp sudo ufw allow 2222/tcp # في حال تغيير المنفذ sudo ufw enable

باستخدام firewalld (RedHat/CentOS/Fedora):

bash
sudo firewall-cmd --permanent --add-port=22/tcp sudo firewall-cmd --reload

ممارسات أمنية متقدمة لتأمين SSH

الممارسة الفائدة
تعطيل بروتوكولات قديمة أو ميزات غير مستخدمة تقليل الثغرات
استخدام مفتاح قوي بطول 4096 بت تعزيز التشفير
تفعيل Fail2Ban منع الهجمات الآلية
استخدام VPN مع SSH زيادة العزل
مراقبة السجلات log عبر /var/log/auth.log أو /var/log/secure كشف محاولات التسلل

إعداد Fail2Ban لحماية SSH

Fail2Ban يقوم بمراقبة السجلات ويمنع عناوين IP التي تحاول تسجيل الدخول عدة مرات بشكل خاطئ.

التثبيت:

  • على Debian/Ubuntu:

bash
sudo apt install fail2ban
  • على CentOS/Fedora:

bash
sudo dnf install fail2ban

التكوين:

قم بإنشاء ملف محلي للتعديل:

bash
/etc/fail2ban/jail.local

وأضف التالي:

ini
[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600

ثم:

bash
sudo systemctl restart fail2ban

إعداد تسجيل الدخول بدون كلمة مرور بين الخواديم (SSH Agent Forwarding)

يُستخدم هذا الأسلوب في بيئة الخواديم المتعددة لتجنب إدخال كلمات المرور في كل مرة:

bash
ssh -A user@intermediate_server

إعداد نفق SSH (SSH Tunneling)

تتيح هذه التقنية توجيه حركة مرور الشبكة من خلال SSH، لتجاوز الجدران النارية أو حماية تطبيقات معينة:

مثال على نفق محلي:

bash
ssh -L 5901:localhost:5901 user@server_ip

جدول بأهم إعدادات sshd_config واستخداماتها

الخيار الوظيفة القيمة المقترحة
Port تحديد منفذ SSH 2222 أو غيره
PermitRootLogin منع الدخول كمستخدم root no
PasswordAuthentication تعطيل المصادقة بكلمة المرور no
PubkeyAuthentication تفعيل المصادقة بالمفتاح yes
AllowUsers تحديد المستخدمين المسموحين user1 user2
Protocol استخدام بروتوكول آمن 2
MaxAuthTries الحد الأقصى لمحاولات الدخول 3
LoginGraceTime المدة قبل قطع الاتصال الفاشل 30

مراقبة واختبار إعدادات SSH

بعد تعديل الإعدادات، ينصح بعدم قطع الجلسة الحالية حتى يتم التأكد من عمل الاتصال بشكل صحيح في جلسة جديدة. كما يُفضل استخدام:

bash
sshd -t

لاختبار صحة الإعدادات قبل إعادة تشغيل الخدمة.


الخلاصة

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


المراجع:

  1. OpenSSH Official Manual

  2. Debian Wiki: SSH