مؤثرترین قدم امنیتی سرور لینوکس این است که ورود با رمز را ببندید و فقط با کلید SSH وارد شوید. ترتیب درست: ساخت کلید روی کامپیوتر خودتان ← افزودن آن به سرور ← تست ورود با کلید در یک پنجرهٔ جدید ← سپس PasswordAuthentication no. تغییر پورت اختیاری است و فقط حملات خودکار را کم میکند؛ قبل از تغییر، پورت جدید را در فایروال باز کنید.
چرا ورود با رمز خطرناک است؟
هر سرور با آیپی عمومی، چند دقیقه پس از روشن شدن هدف رباتهایی قرار میگیرد که مدام رمزهای رایج را روی پورت ۲۲ امتحان میکنند. اگر رمز ضعیف باشد یا جایی لو رفته باشد، سرور در اختیار مهاجم قرار میگیرد. کلید SSH عملاً قابل حدس نیست و با بستن ورود رمزی، این حملات بیاثر میشوند. برای دیدن این تلاشها روی سرور خودتان:
sudo journalctl -u ssh --since "1 hour ago" | grep -i "failed" | tail
- قابل حدس و حملهٔ Brute Force
- رمز روی شبکه فرستاده میشود (رمزنگاریشده)
- اشتراکگذاری اشتباه رایج است
- کلید خصوصی هرگز از کامپیوتر شما خارج نمیشود
- حدس زدن عملاً ناممکن است
- قابل لغو برای هر دستگاه
گام ۱: ساخت کلید روی کامپیوتر خودتان
کلید را روی کامپیوتر شخصی بسازید، نه روی سرور:
ssh-keygen -t ed25519 -C "laptop-1405"
- مسیر پیشفرض را بپذیرید (
~/.ssh/id_ed25519). - یک passphrase بگذارید تا اگر لپتاپ گم شد، کلید قابل استفاده نباشد.
- دو فایل ساخته میشود:
id_ed25519(خصوصی؛ هرگز به کسی ندهید) وid_ed25519.pub(عمومی؛ روی سرور قرار میگیرد).
$ ssh-keygen -t ed25519 -C "me@laptop"Your identification has been saved in ~/.ssh/id_ed25519$ ssh-copy-id root@203.0.113.10Number of key(s) added: 1$
گام ۲: افزودن کلید عمومی به سرور
در مک و لینوکس:
ssh-copy-id root@203.0.113.10
در ویندوز (PowerShell):
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
اگر برای کار روزمره کاربر جداگانه دارید (توصیه میشود)، کلید را برای همان کاربر هم اضافه کنید: ssh-copy-id deploy@203.0.113.10.
گام ۳: تست ورود با کلید (حیاتی)
پنجرهٔ SSH فعلی را نبندید. یک ترمینال جدید باز کنید و وصل شوید:
ssh -i ~/.ssh/id_ed25519 root@203.0.113.10
اگر بدون پرسیدن رمز سرور (فقط passphrase کلید) وارد شدید، کلید درست کار میکند.
گام ۴: بستن ورود با رمز
در اوبونتوهای جدید بهتر است تنظیمات را در یک فایل جداگانه داخل sshd_config.d بنویسید تا با بهروزرسانیها بازنویسی نشود:
sudo tee /etc/ssh/sshd_config.d/10-hardening.conf >/dev/null <<'CONF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
CONF
sudo sshd -t && sudo systemctl reload ssh
sshd -tتنظیمات را پیش از اعمال آزمایش میکند؛ اگر خطا داد، reload نکنید.prohibit-passwordیعنی root فقط با کلید وارد میشود. اگر کاربر sudo دارید، میتوانید آن راnoکنید.- در برخی تصاویر ابری فایلی مانند
50-cloud-init.confدر همان پوشهPasswordAuthentication yesدارد؛ چون فایلها به ترتیب الفبایی خوانده میشوند و اولین مقدار معتبر است، نام فایل خودتان را با عدد کوچکتر (مثل10-) شروع کنید. با این دستور مقدار نهایی را ببینید:
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin'
دوباره در یک پنجرهٔ جدید ورود را تست کنید. ورود با رمز باید با Permission denied (publickey) رد شود.
گام ۵ (اختیاری): تغییر پورت SSH
تغییر پورت امنیت واقعی اضافه نمیکند، اما لاگها را از حملات خودکار خلوتتر میکند. ترتیب درست مهم است:
# ۱) باز کردن پورت جدید در فایروال (اگر UFW فعال است)
sudo ufw allow 2222/tcp
اوبونتو ۲۲.۱۰ به بعد (از جمله ۲۴.۰۴) — حالت socket activation
در این نسخهها SSH بهطور پیشفرض با ssh.socket گوش میدهد و تغییر Port در sshd_config بهتنهایی کافی نیست:
sudo mkdir -p /etc/systemd/system/ssh.socket.d
sudo tee /etc/systemd/system/ssh.socket.d/port.conf >/dev/null <<'CONF'
[Socket]
ListenStream=
ListenStream=2222
CONF
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
دبیان و اوبونتوهای قدیمیتر
echo "Port 2222" | sudo tee /etc/ssh/sshd_config.d/20-port.conf
sudo sshd -t && sudo systemctl restart ssh
سپس در پنجرهٔ جدید تست کنید: ssh -p 2222 root@203.0.113.10. فقط پس از موفقیت، پورت ۲۲ را در فایروال ببندید: sudo ufw delete allow OpenSSH.
اگر قفل شدید چه کنید؟
| وضعیت | راه نجات |
|---|---|
| پنجرهٔ قبلی SSH هنوز باز است | از همان پنجره تنظیمات را برگردانید |
| سرور خارج با «حالت Rescue» | سرور را در Rescue بوت کنید، دیسک را mount و فایل تنظیمات را اصلاح کنید |
| هیچ راهی ندارید | تیکت پشتیبانی؛ یا در بدترین حالت «نصب مجدد» (دادهها پاک میشود) |
به همین دلیل همیشه پیش از تغییرات SSH یک اسنپشات (اگر پلن پشتیبانی میکند) یا بکاپ بگیرید.
گامهای تکمیلی
- فایروال: فقط پورتهای لازم باز باشند؛ آموزش فایروال UFW.
- Fail2ban: آیپیهایی که مکرر ورود ناموفق دارند را موقتاً مسدود میکند؛ در چکلیست امنیتی آمده است.
- کلید برای هر دستگاه: برای لپتاپ و موبایل کلید جدا بسازید تا در صورت گم شدن یک دستگاه، فقط همان کلید را از
authorized_keysحذف کنید.
سؤالات متداول
RSA بهتر است یا ed25519؟
ed25519 کوتاهتر، سریعتر و امروز توصیهٔ رایج است. اگر سیستم قدیمیای از آن پشتیبانی نمیکند، از rsa -b 4096 استفاده کنید.
کلید خصوصی را گم کردم؛ چه کنم؟
اگر هنوز راه دیگری برای ورود دارید (کلید دیگر یا پنجرهٔ باز)، کلید جدید بسازید و کلید قبلی را از ~/.ssh/authorized_keys حذف کنید. در غیر این صورت از Rescue یا پشتیبانی کمک بگیرید.
تغییر پورت SSH لازم است؟
الزامی نیست. ورود فقط با کلید و Fail2ban مهمترند؛ تغییر پورت فقط لاگها را خلوتتر میکند.
بعد از تغییر پورت، Fail2ban هم باید تغییر کند؟
بله؛ در تنظیم jail مربوط به sshd، port = 2222 را قرار دهید.
آیا میتوانم ورود با رمز را فقط برای یک آیپی باز بگذارم؟
بله، با بلوک Match Address در sshd_config؛ اما سادهتر و امنتر این است که همه با کلید وارد شوند.
از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی



