سيرفر العبور (Bastion): باب واحد مراقب لكل سيرفراتك

افتح SSH على سيرفر واحد محصّن فقط، واجعل بقية السيرفرات تقبل الاتصال منه عبر ProxyJump بالمفاتيح فقط مع تسجيل كل جلسة. سيرفر أساس بـ3,450 ريالاً سنوياً يحمي أسطولاً كاملاً ويزيل أغلب الانكشاف.
سيرفر العبور (Bastion) سيرفر صغير محصّن هو الجهاز الوحيد في أسطولك اللي يفتح SSH للإنترنت. كل السيرفرات الأخرى تقبل SSH فقط من IP سيرفر العبور أو من شبكة خاصة، والمهندسون يوصلونها بخطوة واحدة عبر ssh -J أو سطر ProxyJump في إعدادات SSH، بينما مفاتيحهم الخاصة ما تطلع من أجهزتهم أبداً. هذا الباب الواحد هو المكان اللي تفرض فيه الدخول بالمفاتيح فقط، وتحصر عناوين المصدر في مكتبك وشبكتك الخاصة، وتسجّل مين اتصل بأي سيرفر ومتى. أي IP عام جديد يستقبل غالباً أول محاولات تخمين SSH خلال دقائق، ثم آلاف المحاولات يومياً، فإغلاق المنفذ 22 على 10 سيرفرات وفتحه على واحد فقط يزيل 90% من هذا الانكشاف من ليلة وضحاها. في كلاود، سيرفر من باقة أساس بـ1 vCPU و2GB سعره 3,450 ريالاً سنوياً، أقل من 9.5 ريال في اليوم، ويتحمل عشرات الجلسات المتزامنة لفريق كامل. يشرح هذا الدليل خطر فتح SSH على كل سيرفر، وإعداد ProxyJump بالضبط، وتحصين سيرفر العبور نفسه، وتسجيل الجلسات للتدقيق، وتقييد الوصول بالـIP والمفاتيح، ومتى يكون WireGuard الخيار الأفضل أو الشريك المناسب.
ليش ما تفتح SSH على كل سيرفر
كل منفذ SSH مفتوح سطح هجوم تحتاج تحدّثه وتراقبه وتحصّنه لحاله. مع 10 سيرفرات يعني هذا 10 نسخ من sshd_config لازم تبقى متطابقة، و10 سجلات دخول تراقبها، و10 أماكن ممكن يصير فيها سطر منسي مثل PasswordAuthentication yes أو مفتاح موظف سابق في authorized_keys هو باب الدخول. لما تُنشر ثغرة جديدة في OpenSSH، مثل ثغرة regreSSHion في 2024 اللي أصابت الإعدادات الافتراضية، تدخل سباقاً لترقيع كل السيرفرات في وقت واحد.
سيرفر العبور يحوّل هذا كله إلى مكان واحد تحصّنه ومكان واحد تراقبه، فتختفي السيرفرات الداخلية عن ماسحات الإنترنت، ولما يغادر أحد الفريق تحذف مفتاحاً واحداً من جهاز واحد فينتهي وصوله للأسطول كله.
إعداد ProxyJump
خاصية ProxyJump، المتوفرة من إصدار OpenSSH 7.3، تفتح اتصال SSH مع سيرفر العبور وتمرّر عبره جلسة SSH ثانية مشفرة من طرف إلى طرف حتى السيرفر الهدف. سيرفر العبور ينقل البايتات فقط، فلا يرى مفتاحك الخاص أبداً ولا تحتاج تمرير الوكيل. ضع هذا في ~/.ssh/config على جهاز كل مهندس:
Host bastion
HostName 203.0.113.10
User ahmed
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Host app-* db-*
User ahmed
ProxyJump bastion
IdentityFile ~/.ssh/id_ed25519
Host app-1
HostName 10.0.0.11
Host db-1
HostName 10.0.0.21
الآن أمر ssh db-1 يمر عبر سيرفر العبور بشكل شفاف، ومثله scp وrsync وأدوات مثل Ansible اللي تقرأ نفس الإعدادات. القفزة الإضافية تضيف من 1 إلى 3ms تقريباً لما يكون السيرفران في نفس مركز بيانات الرياض، وهذا فرق ما يحسه أحد في جلسة تفاعلية.
تجنّب ForwardAgent yes كاختصار، لأن أي شخص عنده صلاحية root على سيرفر العبور يقدر يستخدم مفاتيحك المحمّلة طول ما أنت متصل، بينما ProxyJump يعطيك نفس الراحة بدون هذا الخطر.
تحصين سيرفر العبور نفسه
سيرفر العبور صار أثمن هدف عندك، فلازم ما يشغّل تقريباً أي شيء: لا خادم ويب ولا قاعدة بيانات ولا كود تطبيق. ملف /etc/ssh/sshd_config فيه على الأقل:
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
AllowGroups jumpers admins
MaxAuthTries 3
LoginGraceTime 20
LogLevel VERBOSE
X11Forwarding no
Match Group jumpers
AllowTcpForwarding yes
PermitOpen 10.0.0.11:22 10.0.0.21:22
PermitTTY no
ForceCommand /usr/sbin/nologin
كتلة Match هي الجزء المهم: أعضاء مجموعة jumpers يستخدمون سيرفر العبور كقفزة فقط إلى منافذ SSH الداخلية المحددة، بلا shell ولا طرفية ولا قدرة على فتح أنفاق لخدمات عشوائية. مجموعة admins الصغيرة فقط تحصل على shell حقيقي للصيانة، وخيار LogLevel VERBOSE يسجّل بصمة المفتاح المستخدم في كل دخول، فيوضح السجل أي مفتاح دخل لا أي حساب فقط.
خلِّ التحديثات الأمنية تُثبَّت تلقائياً عبر unattended-upgrades، وأعد تشغيل السيرفر في نافذة أسبوعية ثابتة، فجهاز بهذا الحجم يقلع في أقل من دقيقة.
التقييد بالـIP والمفاتيح
الدخول بالمفاتيح فقط هو الحد الأدنى، وطبقة الشبكة تضيّق الدائرة أكثر. على سيرفر العبور اسمح بالمنفذ 22 فقط من IP المكتب الثابت ومن نطاق شبكتك الخاصة:
ufw default deny incoming
ufw allow from 198.51.100.24 to any port 22 proto tcp
ufw allow from 10.8.0.0/24 to any port 22 proto tcp
ufw enable
على كل سيرفر داخلي اسمح بـSSH فقط من IP سيرفر العبور الخاص، مثل ufw allow from 10.0.0.5 to any port 22 proto tcp، وارفض كل شيء غيره، فحتى المفتاح المسروق ما ينفع من شبكة مجهولة.
أما المفاتيح نفسها فاستخدم ed25519 واحمها بعبارة مرور، وفضّل المفاتيح العتادية بصيغة ed25519-sk للمشرفين، حتى لا ينفع ملف مفتاح منسوخ من لابتوب بدون الجهاز الفعلي. احتفظ بسجل بسيط يوضح مالك كل بصمة مفتاح، وراجعه كل 90 يوماً.
تسجيل الجلسات للتدقيق
سيرفر العبور يعطيك مكاناً واحداً تجاوب منه على سؤال المدقق: مين دخل سيرفر قاعدة البيانات يوم 14، وش سوّى؟ ابنِ الجواب على طبقات:
- سجلات الاتصال: مع
LogLevel VERBOSEيسجّل ملفauth.logعلى سيرفر العبور المستخدم وIP المصدر وبصمة المفتاح والوقت وكل وجهة مُرِّر إليها الاتصال. - سجلات الأوامر على الأهداف: فعّل
auditdبقاعدة علىexecveللمستخدمين التفاعليين، فيُسجَّل كل أمر يُنفَّذ بما فيها أوامرsudo. - تسجيل الجلسة كاملة حيث تفرضه الأنظمة: أدوات مثل
tlogتسجّل مدخلات الطرفية ومخرجاتها وتعيد عرض الجلسة لاحقاً. - التخزين خارج الجهاز: مرّر كل هذا عبر
rsyslogإلى سيرفر سجلات مستقل ما يقدر المشرفون يعدّلون فيه، واحتفظ به 12 شهراً على الأقل.
تسجيل جلسات مشرف مشغول ينتج بضعة ميغابايتات يومياً فقط، فالتخزين ليس المشكلة بل المراجعة. اضبط تنبيهات لأي دخول خارج ساعات العمل، ولأي اتصال بمفتاح غير موجود في سجلك.
سيرفر عبور أم WireGuard
WireGuard هو الجواب الشائع الآخر: تضع كل السيرفرات على شبكة VPN خاصة وتغلق SSH العام كلياً. الاثنان يحلان مشكلتين مختلفتين، وفرق كثيرة تستخدمهما معاً.
| المعيار | سيرفر العبور | شبكة WireGuard |
|---|---|---|
| الانكشاف العام | منفذ TCP واحد هو 22 | منفذ UDP واحد يتجاهل الحزم غير الموثقة |
| دقة التحكم | لكل مستخدم ولكل سيرفر هدف | على مستوى الشبكة بقواعد الجدار الناري |
| أثر التدقيق | سجلات SSH غنية ببصمات المفاتيح | أوقات المصافحة فقط ويحتاج تسجيلاً إضافياً |
| حركة غير SSH (قواعد بيانات ولوحات) | ممكنة لكن متعبة عبر الأنفاق | مدعومة أصلاً |
| وقت الإعداد | نحو ساعة | من ساعة إلى ساعتين مع إعداد الأجهزة |
النمط القوي هو WireGuard على سيرفر العبور نفسه، مع SSH عليه متاح من داخل الشبكة الخاصة فقط، فيختفي سيرفر العبور من مسوحات الإنترنت كلياً وتبقى عندك سيطرة SSH لكل مستخدم وسجلات تفصيلية. إذا احتاج فريقك الوصول إلى لوحات داخلية أو منافذ قواعد بيانات، فـWireGuard يتعامل معها أنظف من تكديس أنفاق SSH.
كم تكلف حماية أسطول كامل
سيرفر العبور يحتاج قدرة قليلة. الخادم السحابي من باقة أساس بـ1 vCPU و2GB و20GB SSD وسعر 3,450 ريالاً سنوياً يتحمل من 30 إلى 50 جلسة SSH متزامنة، لأن تمرير البايتات المشفرة يستهلك أقل من 5% من نواة لكل جلسة. لو وزّعت الكلفة على أسطول من 10 سيرفرات تطلع 345 ريالاً لكل سيرفر في السنة مقابل مدخل واحد قابل للتدقيق. ضعه في نفس موقع الرياض مع بقية سيرفراتك حتى تبقى القفزات الداخلية من 1 إلى 3ms، بينما يرى المهندسون المتصلون من أي مكان في المملكة نحو 8ms إلى الرياض فوق زمن شبكتهم.
إذا صار سيرفر العبور حرجاً لفريق كبير، شغّل سيرفراً ثانياً احتياطياً واذكر الاثنين في إعدادات SSH، حتى لا تقفل إعادة تشغيل واحدة الباب على أحد.
خطة التطبيق
- جهّز سيرفراً صغيراً للعبور، ولا تثبّت عليه غير SSH والجدار الناري وإرسال السجلات.
- طبّق ملف
sshd_configالمحصّن مع مجموعةjumpersوالوجهات المسموحة. - أضف
ProxyJumpلإعدادات SSH عند كل مهندس، وتأكد من الوصول لكل سيرفر عبر سيرفر العبور. - عدّل الجدار الناري على السيرفرات الداخلية حتى تقبل SSH من IP سيرفر العبور الخاص فقط.
- فعّل
LogLevel VERBOSE، وauditdعلى الأهداف، وإرسال السجلات خارج الجهاز. - قرّر هل يقف WireGuard أمام سيرفر العبور، وراجع سجل المفاتيح كل 90 يوماً.
راجع أحجام السيرفرات والإضافات في صفحة الأسعار، وأغلق SSH العام على أسطولك هذا الأسبوع.


