أول 30 دقيقة: قائمة تدقيق تحصين VPS
خادم VPS جديد يتلقى أول فحص SSH خلال دقائق من حصوله على عنوان IP. إليك التسلسل الدقيق الذي أطبقه على كل خادم جديد — جاهز للنسخ واللصق لـ Debian 13، مع جدول تدقيق في النهاية.
الافتراضات: صورة Debian 13 جديدة من نشر VPSRento الخاص بك، وأنت مسجل الدخول كـ root عبر SSH، وعنوان IP المثال هو 185.220.101.14 — استبدله بعنوانك. الوقت الإجمالي: حوالي نصف ساعة. نفذ الخطوات بالترتيب؛ الخطوة 2 قد تقفل حسابك إذا استعجلت.
1. أنشئ مستخدم sudo الخاص بك
العمل كـ root هو كيف تتحول الأخطاء المطبعية إلى حوادث. أنشئ مستخدمًا حقيقيًا، وامنحه صلاحية sudo، وقم بكل شيء من هناك:
# create the user (you'll set a password — still useful for sudo)
adduser ops
# grant sudo
usermod -aG sudo ops
كل ما يلي يعمل كـ ops ما لم يُذكر خلاف ذلك.
2. مفاتيح SSH فقط — لا كلمات مرور، لا تسجيل دخول root
مصادقة كلمة المرور هي أكبر ثغرة على خادم مواجه للإنترنت. الروبوتات تقصف المنفذ 22 بقوائم بيانات اعتماد طوال اليوم، كل يوم. المفاتيح تجعل فئة الهجوم هذه غير ذات صلة. على جهازك المحلي:
# generate a keypair if you don't have one (ed25519, no passphrase tradeoff is yours)
ssh-keygen -t ed25519 -C "ops@atlas"
# push the public key to the server
ssh-copy-id [email protected]
تحقق من قدرتك على تسجيل الدخول بالمفتاح في نافذة الطرفية — ssh [email protected] — قبل لمس الإعدادات. أبقِ جلسة root الحالية مفتوحة كمخرج طوارئ. ثم عدّل /etc/ssh/sshd_config:
# /etc/ssh/sshd_config — the three lines that matter
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
# validate the config, then reload (Debian 13 uses ssh.service)
sshd -t && systemctl reload ssh
prohibit-password بدلاً من ملف no مسطح لـ root عن قصد: لا يزال بإمكان root المصادقة بمفتاح من محطة عملك، وهو مفيد أحيانًا للاسترداد عبر وحدة تحكم المزود — لكن لا كلمة مرور ستعمل أبدًا، لأي شخص، من أي مكان. أكد بـ sshd -T | grep -E 'passwordauthentication|permitrootlogin'.
3. جدار الحماية: رفض افتراضي، اسمح فقط بما تشغّله
ufw في Debian هو طبقة رقيقة وعاقلة فوق nftables. السياسة هي الأمان؛ القواعد مجرد استثناءات لها:
apt update && apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
# SSH stays open — add this BEFORE enabling
ufw allow 22/tcp comment 'SSH'
# whatever your box actually serves, e.g.:
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw enable
ufw status verbose
كل منفذ تفتحه يجب أن يكون له اسم وسبب. إذا لم تستطع تسمية ما هو المنفذ لأجله، فلا يحصل على قاعدة.
4. fail2ban: أبطئ الروبوتات إلى حد الزحف
مع تعطيل مصادقة كلمة المرور، القوة الغاشمة ميتة بالفعل — لكن fail2ban يحافظ على قابلية قراءة سجلاتك ويحظر الماسحات التي تلمس كل شيء آخر:
apt install -y fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
systemctl enable --now fail2ban
# watch it work
fail2ban-client status sshd
5. التحديثات الأمنية التلقائية
ثغرة CVE غير المصححة خطر أكبر من إعادة التشغيل. unattended-upgrades في Debian يثبت التحديثات الأمنية من تلقاء نفسه:
apt install -y unattended-upgrades
# answer Yes to auto-install updates
dpkg-reconfigure -plow unattended-upgrades
الإعداد الافتراضي في /etc/apt/apt.conf.d/50unattended-upgrades يسحب من حزمة الأمان فقط — وهو ما تريده على الخادم: إصلاحات أمنية تلقائيًا، وكل شيء آخر عندما تختار.
6. أوقف ما لا تشغّله
كل خدمة قيد التشغيل هي سطح هجوم يجب عليك تصحيحه. شاهد ما يستمع فعليًا:
# who is listening, on what, as which process
ss -tulpn
# everything enabled at boot
systemctl list-unit-files --state=enabled
# example: you don't run a print server — nobody does
systemctl disable --now cups
القاعدة: إذا لم تستطع تحديد ما يفعله المستمع، فاكتشف قبل أن تتركه يعيش. على صورة VPSRento الحد الأدنى، يجب أن يكون هناك القليل جدًا بعد sshd وتطبيقك الخاص.
7. اختياري لكن موصى به: مستوى إدارة WireGuard
أقوى نسخة من أمان SSH هي SSH التي لا تواجه الإنترنت إطلاقًا. شغّل WireGuard على الخادم، واسمح بـ SSH فقط داخل النفق، وسيختفي المنفذ 22 من كل ماسح ضوئي على وجه الأرض:
apt install -y wireguard
# /etc/wireguard/wg0.conf — minimal management tunnel
# [Interface] Address = 10.8.0.1/24, ListenPort = 51820
# open the tunnel, not the shell
ufw allow 51820/udp comment 'WireGuard'
ufw allow in on wg0 to any port 22 proto tcp comment 'SSH via WG'
ufw delete allow 22/tcp
systemctl enable --now wg-quick@wg0
بعد ذلك يمكنك ssh [email protected] عبر النفق، وسيجيب عنوان IP العام على منفذ UDP واحد فقط. الدليل الكامل لـ WireGuard — المفاتيح، الأقران، إعدادات العميل، رموز QR للهاتف — موجود في الدليل المصاحب.
قائمة التحقق من 10 نقاط
نفّذ هذا الجدول بعد كل نشر جديد، ومرة أخرى بعد كل خدمة تضيفها:
| # | البند | مكانه | تحقق باستخدام |
|---|---|---|---|
| 1 | مستخدم sudo غير جذري | /etc/passwd | id ops |
| 2 | مصادقة SSH بالمفاتيح فقط | sshd_config | sshd -T | grep passwordauth |
| 3 | تعطيل تسجيل الدخول بكلمة مرور الجذر | sshd_config | sshd -T | grep permitrootlogin |
| 4 | جدار الحماية يرفض الوارد افتراضيًا | ufw | ufw status verbose |
| 5 | فتح المنافذ المسماة فقط | ufw | ufw status numbered |
| 6 | سجن fail2ban sshd نشط | jail.local | fail2ban-client status sshd |
| 7 | تحديثات الأمان تلقائية | apt | systemctl status unattended-upgrades |
| 8 | لا مستمعين غير مفسرين | — | ss -tulpn |
| 9 | الإدارة عبر WireGuard (اختياري) | wg0.conf | wg show |
| 10 | لقطة بعد التصلب | إضافة في منطقة العميل، $1.99/شهر | الخدمات ← VPS الخاص بك ← اللقطات |
البند 10 يستحق جملة واحدة: صلّب أولاً، ثم التقط اللقطة، بهذا الترتيب — لقطة لخادم نظيف ومصلّب هي نقطة التراجع عن كل خطأ مستقبلي. اللقطات اليومية خارج الموقع هي إضافة $1.99/شهر في منطقة العميل. ثلاثون دقيقة من الوقاية، نقرة واحدة من التأمين.