اولین اتصال SSH و امنسازی سرور اوبونتو
سرور تازهای که IP عمومی دارد، از همان دقیقههای اول هدف رباتهایی است که رمزهای ساده را روی SSH امتحان میکنند. در این آموزش اولین بار با SSH به سرور وصل میشوید و چند کار پایه را انجام میدهید که هر سرور لینوکسی باید داشته باشد: کاربر جدا با دسترسی sudo، ورود فقط با کلید، بستن ورود root، بهروزرسانی خودکار امنیتی و مسدود کردن خودکار IPهای مهاجم با fail2ban.
این آموزش برای سرور ابری و سرور مجازی (VPS) آریانت با Ubuntu 24.04 نوشته شده است و روی Ubuntu 22.04 هم کار میکند؛ تفاوتها جدا گفته شدهاند.
پیشنیازها
- یک سرور با Ubuntu 24.04 و IP عمومی
- یک کلید SSH روی کامپیوتر خودتان، ترجیحاً اضافهشده به پنل پیش از ساخت سرور (کلید SSH و توکن API)
- اگر سرور را با رمز عبور ساختهاید، رمز root که هنگام ساخت نمایش داده شد
تا پایان این آموزش، یک ترمینال SSH باز را نبندید. هر تغییر در تنظیمات SSH را اول در یک ترمینال دوم آزمایش کنید. اگر راه ورود را بستید، از کنسول پنل (در سرور ابری «کنسول»، در VPS «کنسول VNC») وارد شوید.
۱. ساخت کلید SSH روی کامپیوتر خودتان
اگر کلید ندارید، در ترمینال macOS، لینوکس یا PowerShell ویندوز بسازید:
ssh-keygen -t ed25519 -C "my-laptop"
cat ~/.ssh/id_ed25519.pub
خروجی cat کلید عمومی است. آن را در پنل در «تنظیمات حساب ← کلیدهای SSH» اضافه کنید تا هنگام ساخت سرور انتخابش کنید. کلید خصوصی (~/.ssh/id_ed25519) را هرگز جایی وارد نکنید.
اگر سرور را با رمز عبور ساختهاید، کلید را اینطور روی آن کپی کنید (رمز root یک بار پرسیده میشود):
ssh-copy-id root@SERVER_IP
۲. اولین اتصال
ssh root@SERVER_IP
بار اول پیام The authenticity of host ... can't be established و اثر انگشت کلید سرور نمایش داده میشود. yes را تایپ کنید. از این به بعد، این اثر انگشت در ~/.ssh/known_hosts ذخیره میشود.
در صفحهی سرور ابری، زبانهی «مشخصات» دستور SSH آماده را با IP سرور نشان میدهد.
۳. بهروزرسانی سیستم
apt update && apt full-upgrade -y
اگر فایل /var/run/reboot-required ساخته شد، هسته یا کتابخانهی مهمی بهروز شده و باید سرور را یک بار راهاندازی مجدد کنید:
[ -f /var/run/reboot-required ] && reboot
۴. ساخت کاربر با دسترسی sudo
کار روزمره با root خطرناک است. یک کاربر جدا بسازید (به جای deploy هر نامی میخواهید بگذارید):
adduser deploy
usermod -aG sudo deploy
adduser یک رمز برای کاربر میپرسد. رمز قوی بگذارید: SSH با این رمز کار نخواهد کرد، ولی sudo و ورود از کنسول پنل به آن نیاز دارند.
کلید SSH که root با آن وارد شده را به کاربر جدید بدهید:
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
در ترمینال دوم وارد شوید و sudo را آزمایش کنید:
ssh deploy@SERVER_IP
sudo whoami
باید root چاپ شود.
۵. بستن ورود root و رمز عبور
تنظیمات را در یک فایل جدا در sshd_config.d بنویسید. در OpenSSH اولین مقدار هر گزینه برنده است و فایلهای این پوشه به ترتیب حروف خوانده میشوند؛ نام 00- باعث میشود تنظیمات شما پیش از فایلهایی مثل 50-cloud-init.conf (که ممکن است PasswordAuthentication yes داشته باشد) اعمال شود.
sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
EOF
تنظیمات را بررسی و SSH را دوباره راهاندازی کنید:
sudo sshd -t && sudo systemctl restart ssh
sudo sshd -T | grep -Ei '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '
خروجی باید permitrootlogin no، passwordauthentication no و kbdinteractiveauthentication no باشد. حالا در یک ترمینال جدید امتحان کنید:
ssh deploy@SERVER_IP # should work
ssh root@SERVER_IP # should fail: Permission denied (publickey)
در Ubuntu 24.04 سرویس SSH با ssh.socket فعال میشود. اگر Port را عوض کردید، پس از sudo sshd -t این دو دستور لازم است: sudo systemctl daemon-reload و sudo systemctl restart ssh.socket. در Ubuntu 22.04 همان sudo systemctl restart ssh کافی است. پیش از تغییر پورت، پورت جدید را در فایروال باز کنید. تغییر پورت امنیت جدی اضافه نمیکند و فقط لاگها را خلوتتر میکند؛ ورود فقط با کلید مهمتر است.
۶. بهروزرسانی خودکار امنیتی
بستهی unattended-upgrades وصلههای امنیتی را هر روز خودکار نصب میکند. در تصویرهای استاندارد اوبونتو معمولاً نصب است؛ مطمئن شوید و فعالش کنید:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
در پرسش، Yes را انتخاب کنید. نتیجه را بررسی کنید:
cat /etc/apt/apt.conf.d/20auto-upgrades
sudo unattended-upgrade --dry-run --debug 2>&1 | tail -n 5
فایل 20auto-upgrades باید هر دو خط APT::Periodic::Update-Package-Lists "1"; و APT::Periodic::Unattended-Upgrade "1"; را داشته باشد.
بعضی بهروزرسانیها (مثل هسته) تا راهاندازی مجدد اعمال نمیشوند. اگر میخواهید سرور در صورت نیاز خودش در ساعت خلوت ریاستارت شود:
sudo tee /etc/apt/apt.conf.d/52unattended-upgrades-local > /dev/null <<'EOF'
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
EOF
ساعت بر اساس منطقهی زمانی سرور است (تنظیم timezone).
۷. نصب fail2ban
fail2ban لاگهای SSH را میخواند و IPهایی را که چند بار پشت سر هم ورود ناموفق دارند، برای مدتی مسدود میکند.
sudo apt install -y fail2ban
تنظیمات خودتان را در jail.local بنویسید (فایل jail.conf را تغییر ندهید؛ با بهروزرسانی بازنویسی میشود). به جای 203.0.113.4 IP ثابت خودتان را بگذارید تا هرگز مسدود نشوید، یا آن را حذف کنید:
sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 203.0.113.4
[sshd]
enabled = true
EOF
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
در Ubuntu 24.04 بستهی fail2ban بهطور پیشفرض لاگها را از journal سیستم (backend = systemd) میخواند و با nftables مسدود میکند؛ در Ubuntu 22.04 از /var/log/auth.log میخواند. تنظیمات بالا روی هر دو کار میکند.
برای آزاد کردن یک IP مسدودشده:
sudo fail2ban-client set sshd unbanip 198.51.100.7
بررسی نهایی
sudo sshd -T | grep -Ei '^(permitrootlogin|passwordauthentication) '
systemctl is-active fail2ban unattended-upgrades
sudo fail2ban-client status sshd
- ورود با
deployو کلید کار میکند و ورود root رد میشود. - هر دو سرویس
activeهستند. fail2ban-clientزندانsshdرا با تعداد IPهای مسدودشده نشان میدهد.
خطاهای رایج
| خطا | علت و راهحل |
|---|---|
Permission denied (publickey) | کلید درست در ~/.ssh/authorized_keys کاربر نیست یا دسترسی فایلها باز است. روی سرور: chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys. اگر چند کلید دارید، کلید را مشخص کنید: ssh -i ~/.ssh/id_ed25519 deploy@SERVER_IP. با ssh -v جزئیات را ببینید. |
REMOTE HOST IDENTIFICATION HAS CHANGED! | پس از نصب مجدد سیستمعامل یا گرفتن IP قبلی دیگری، کلید سرور عوض شده است. اگر مطمئنید سرور خودتان است: ssh-keygen -R SERVER_IP. |
Connection timed out | پورت ۲۲ در فایروال ابر یا ufw بسته است، یا IP شما را fail2ban مسدود کرده است. از کنسول پنل وارد شوید و بررسی کنید. |
| راه ورود کاملاً بسته شد | از کنسول پنل با کاربر deploy و رمزش (یا root و رمز root) وارد شوید و فایل /etc/ssh/sshd_config.d/00-hardening.conf را اصلاح کنید. اگر رمز را هم ندارید، از «حالت نجات» (در VPS «حالت رسکیو») استفاده کنید. |
قدم بعدی
- فایروال: ufw روی سرور و فایروال ابر آریانت
- تنظیم swap، timezone و hostname
- نصب Docker و Docker Compose
- راهنمای پنل ابر آریانت
سرور خود را بسازید
سرور ابری آریانت ساعتی حساب میشود، با کلید SSH ساخته میشود و معمولاً در کمتر از یک دقیقه آماده است. در پنل آریانت از «سرور ابری / Cloud Computing ← سرور جدید» اولین سرور خود را بسازید و همین آموزش را روی آن اجرا کنید.