پرش به مطلب اصلی

اولین اتصال 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)
تغییر پورت SSH در Ubuntu 24.04

در 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 «حالت رسکیو») استفاده کنید.

قدم بعدی​

سرور خود را بسازید​

سرور ابری آریانت ساعتی حساب می‌شود، با کلید SSH ساخته می‌شود و معمولاً در کمتر از یک دقیقه آماده است. در پنل آریانت از «سرور ابری / Cloud Computing ← سرور جدید» اولین سرور خود را بسازید و همین آموزش را روی آن اجرا کنید.