۳۰ دقیقه اول: چکلیست سختسازی VPS
یک VPS تازه، اولین تلاش SSH را در عرض چند دقیقه پس از دریافت IP تجربه میکند. این دنباله دقیقی است که من روی هر سرور جدید اجرا میکنم — آماده کپیپیست برای دبیان ۱۳، با جدول چکلیست در انتها.
پیشفرضها: یک تصویر تازه Debian 13 از استقرار VPSRento، شما به عنوان root از طریق SSH وارد شدهاید، و IP نمونه 185.220.101.14 است — مال خودتان را جایگزین کنید. کل زمان: حدود نیم ساعت. مراحل را به ترتیب انجام دهید؛ مرحله ۲ اگر عجله کنید میتواند شما را قفل کند.
۱. کاربر sudo خود را بسازید
کار کردن به عنوان root راهی است که تایپ اشتباه به حادثه تبدیل شود. یک کاربر واقعی بسازید، به آن sudo بدهید، و همه کارها را از آنجا انجام دهید:
# create the user (you'll set a password — still useful for sudo)
adduser ops
# grant sudo
usermod -aG sudo ops
همه موارد زیر این نقطه به عنوان ops اجرا میشود، مگر اینکه خلاف آن ذکر شود.
۲. فقط کلیدهای SSH — بدون رمز عبور، بدون ورود root
احراز هویت با رمز عبور بزرگترین سوراخ در یک سرور متصل به اینترنت است. باتها تمام روز با لیستهای اعتبارنامه به پورت ۲۲ حمله میکنند. کلیدها کل این کلاس حمله را بیاثر میکنند. روی دستگاه محلی شما:
# 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 برای روت به عمد: روت همچنان میتواند با کلید از ایستگاه کاری شما احراز هویت کند، که گاهی برای بازیابی از کنسول ارائهدهنده مفید است — اما هیچ رمز عبوری هرگز کار نخواهد کرد، برای هیچکس، از هیچجا. با sshd -T | grep -E 'passwordauthentication|permitrootlogin'.
تأیید کنید. ۳. فایروال: رد پیشفرض، فقط چیزی که اجرا میکنید را باز کنید
ufw دبیان یک لایه نازک و منطقی روی 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
هر پورتی که باز میکنید باید نام و دلیلی داشته باشد. اگر نمیتوانید بگویید یک پورت برای چیست، قانونی نمیگیرد.
۴. fail2ban: رباتها را به حرکت آهسته بیندازید
با غیرفعال کردن احراز هویت رمز عبور، حمله brute force قبلاً مرده است — اما 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
۵. بهروزرسانیهای امنیتی خودکار
CVE وصلهنشده ریسک بزرگتری از راهاندازی مجدد است. unattended-upgrades دبیان بهروزرسانیهای امنیتی را بهتنهایی نصب میکند:
apt install -y unattended-upgrades
# answer Yes to auto-install updates
dpkg-reconfigure -plow unattended-upgrades
پیکربندی پیشفرض در /etc/apt/apt.conf.d/50unattended-upgrades فقط از مخزن امنیتی میگیرد — که همان چیزی است که در سرور میخواهید: رفع امنیتی بهصورت خودکار، بقیه چیزها وقتی خودتان انتخاب کنید.
۶. چیزی را که اجرا نمیکنید خاموش کنید
هر سرویس در حال اجرا سطح حملهای است که باید وصله کنید. ببینید واقعاً چه چیزی در حال گوش دادن است:
# 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 کد گوشی — در راهنمای همراه.
چکلیست ۱۰ بندی
بعد از هر استقرار جدید و دوباره بعد از هر سرویسی که اضافه میکنید، این جدول را مرور کنید:
| # | مورد | محل قرارگیری | بررسی با |
|---|---|---|---|
| 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 | jail فعال fail2ban برای sshd | jail.local | fail2ban-client status sshd |
| 7 | بهروزرسانی امنیتی خودکار | apt | systemctl status unattended-upgrades |
| 8 | بدون listener غیرقابل توضیح | — | ss -tulpn |
| 9 | مدیریت از طریق WireGuard (اختیاری) | wg0.conf | wg show |
| 10 | اسنپشات بعد از سختسازی | افزونه ناحیه کلاینت، $1.99/ماه | سرویسها → VPS شما → اسنپشاتها |
مورد ۱۰ یک جمله میخواهد: اول سختسازی، دوم اسنپشات، به همین ترتیب — اسنپشات یک سرور تمیز و سختشده، برگشت شما برای هر اشتباه آینده است. اسنپشات روزانه خارج از سایت یک افزونه $1.99/ماه در ناحیه کلاینت است. سی دقیقه پیشگیری، یک کلیک بیمه.