ضبط إعدادات خدمة 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:
bashsudo apt update sudo apt install openssh-server
-
على CentOS/RHEL:
bashsudo yum install openssh-server
-
على Fedora:
bashsudo dnf install openssh-server
بعد التثبيت، يجب التأكد من تشغيل الخدمة تلقائيًا مع الإقلاع:
bashsudo systemctl enable ssh
sudo systemctl start ssh
للتحقق من حالة الخدمة:
bashsudo systemctl status ssh
ملف إعدادات SSH: sshd_config
يقع الملف الرئيسي لإعدادات خادوم SSH غالباً في المسار التالي:
bash/etc/ssh/sshd_config
هذا الملف يتحكم في سلوك خدمة SSH بالكامل. أي تغيير يتم فيه يتطلب إعادة تشغيل الخدمة ليصبح ساري المفعول:
bashsudo systemctl restart ssh
الإعدادات الأساسية المهمة في sshd_config
تغيير المنفذ الافتراضي (Port)
المنفذ الافتراضي لـ SSH هو 22، ويمكن تغييره لتقليل محاولات الاختراق التلقائية (Brute Force):
yamlPort 2222
السماح أو منع تسجيل الدخول بالحساب الجذري (Root)
من الأفضل تعطيل تسجيل الدخول مباشرة كمستخدم root:
nginxPermitRootLogin no
استخدام المصادقة بالمفتاح بدلاً من كلمة المرور
تعزيز الأمان عبر تعطيل المصادقة بكلمة المرور:
nginxPasswordAuthentication no
PubkeyAuthentication yes
تحديد المستخدمين المسموح لهم بالاتصال
للحد من الوصول:
nginxAllowUsers user1 user2
تحديد البروتوكول المستخدم
عادةً ما يُستخدم البروتوكول رقم 2 لأنه الأحدث والأكثر أمانًا:
nginxProtocol 2
ضبط مهلة الاتصال وعدد المحاولات
تقليل فرص الاستغلال:
nginxLoginGraceTime 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/id_rsa ← المفتاح الخاص ~/.ssh/id_rsa.pub ← المفتاح العام
نسخ المفتاح إلى الخادوم:
bashssh-copy-id user@server_ip
أو يدويًا:
-
انسخ محتوى
id_rsa.pubإلى الملف:
bash~/.ssh/authorized_keys
مع التأكد من صلاحيات المجلد والملف:
bashchmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ضبط جدار الحماية للسماح بالاتصال
باستخدام UFW (Ubuntu/Debian):
bashsudo ufw allow 22/tcp
sudo ufw allow 2222/tcp # في حال تغيير المنفذ
sudo ufw enable
باستخدام firewalld (RedHat/CentOS/Fedora):
bashsudo 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:
bashsudo apt install fail2ban
-
على CentOS/Fedora:
bashsudo 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
ثم:
bashsudo systemctl restart fail2ban
إعداد تسجيل الدخول بدون كلمة مرور بين الخواديم (SSH Agent Forwarding)
يُستخدم هذا الأسلوب في بيئة الخواديم المتعددة لتجنب إدخال كلمات المرور في كل مرة:
bashssh -A user@intermediate_server
إعداد نفق SSH (SSH Tunneling)
تتيح هذه التقنية توجيه حركة مرور الشبكة من خلال SSH، لتجاوز الجدران النارية أو حماية تطبيقات معينة:
مثال على نفق محلي:
bashssh -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
بعد تعديل الإعدادات، ينصح بعدم قطع الجلسة الحالية حتى يتم التأكد من عمل الاتصال بشكل صحيح في جلسة جديدة. كما يُفضل استخدام:
bashsshd -t
لاختبار صحة الإعدادات قبل إعادة تشغيل الخدمة.
الخلاصة
ضبط إعدادات SSH على خادوم لينكس هو خطوة حيوية في تأمين الخادوم ومنع التسللات ومحاولات الوصول غير المصرح بها. إن الجمع بين التكوين الدقيق لخدمة SSH، واستخدام المصادقة عبر المفاتيح، وتقييد الوصول بناءً على المستخدم أو عنوان IP، وتفعيل الأدوات الأمنية مثل Fail2Ban، يوفر طبقة أمان قوية للخواديم العاملة على الإنترنت أو الشبكات الخاصة. يجب أن يتم تنفيذ هذه الخطوات بعناية تامة ومراقبة مستمرة لضمان بقاء الخادوم آمناً وكفؤاً.
المراجع:

