همه مقاله‌ها

امن‌سازی سرور مجازی اوبونتو: کلید SSH، فایروال و آپدیت خودکار

بعد از خرید VPS اوبونتو چه کار کنیم؟ ساخت کاربر sudo، ورود با کلید SSH، فایروال UFW، آپدیت خودکار و Fail2ban را قدم‌به‌قدم یاد بگیرید.

۲۴ آبان ۱۴۰۵
6 دقیقه مطالعه

چرا ده دقیقه اول مهم است؟

به‌محض اینکه یک سرور مجازی جدید آی‌پی عمومی می‌گیرد، ربات‌های خودکار شروع می‌کنند به حدس زدن نام کاربری و رمزهای رایج از طریق SSH. اگر لاگ تقریباً هر سرور تازه‌ای را چند دقیقه بعد ببینید، این تلاش‌ها را می‌بینید. اگر تنظیمات پایه را انجام داده باشید خطری ندارد؛ ده دقیقه کار کافی است تا این حمله‌ها بی‌نتیجه بمانند.

این راهنما مراحل استاندارد اولیه روی اوبونتو ۲۲.۰۴ یا ۲۴.۰۴ را نشان می‌دهد (روی دبیان هم تقریباً همین است): به‌روزرسانی سیستم، ساخت کاربر معمولی، ورود با کلید SSH به‌جای رمز عبور، فعال‌سازی فایروال، آپدیت خودکار امنیتی و نصب Fail2ban. فقط یک ترمینال، آی‌پی سرور و اطلاعات ورود روت لازم دارید.

مرحله ۱: وارد شوید و سیستم را به‌روز کنید

با آی‌پی که در پنل سرور می‌بینید، به‌عنوان root وصل شوید:

ssh root@YOUR_SERVER_IP

سپس فهرست بسته‌ها را تازه کنید و همه آپدیت‌های منتظر را نصب کنید:

apt update && apt upgrade -y

اگر کرنل جدید نصب شد، سیستم ری‌استارت می‌خواهد. دستور reboot را بزنید، یک دقیقه صبر کنید و دوباره وارد شوید.

مرحله ۲: یک کاربر معمولی با دسترسی sudo بسازید

همیشه با کاربر root کار کردن خطرناک است؛ یک دستور اشتباه می‌تواند کل سیستم را خراب کند. یک کاربر معمولی بسازید و به آن دسترسی sudo بدهید:

adduser deploy
usermod -aG sudo deploy

به‌جای deploy هر نامی بخواهید انتخاب کنید و رمز عبور را طولانی و یکتا بگذارید. این رمز فقط برای اجرای sudo است، نه برای ورود.

مرحله ۳: ورود با کلید SSH را راه بیندازید

جفت‌کلید SSH بسیار امن‌تر از هر رمز عبوری است. کلید خصوصی روی کامپیوتر شما می‌ماند و فقط کلید عمومی روی سرور کپی می‌شود.

روی کامپیوتر خودتان (لینوکس، مک یا ویندوز PowerShell) کلید بسازید:

ssh-keygen -t ed25519 -C "my-vps"

مسیر پیش‌فرض را بپذیرید و یک passphrase بگذارید. سپس کلید عمومی را برای کاربر جدید کپی کنید:

ssh-copy-id deploy@YOUR_SERVER_IP

اگر در ویندوز دستور ssh-copy-id وجود نداشت، محتوای فایل id_ed25519.pub را در فایل /home/deploy/.ssh/authorized_keys روی سرور بچسبانید.

حالا یک ترمینال دوم باز کنید و امتحان کنید:

ssh deploy@YOUR_SERVER_IP
sudo whoami

دستور دوم باید root چاپ کند. تا وقتی این مرحله جواب نداده، نشست اول را باز نگه دارید تا دسترسی‌تان قطع نشود.

مرحله ۴: ورود با رمز عبور و ورود مستقیم root را ببندید

وقتی ورود با کلید کار کرد، رمز عبور و ورود مستقیم root را ممنوع کنید. در اوبونتوی جدید روش تمیز، ساخت یک فایل تنظیمات جداگانه است:

sudo nano /etc/ssh/sshd_config.d/00-hardening.conf

با این محتوا:

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no

درستی نگارش را بررسی کنید و سرویس را دوباره بارگذاری کنید:

sudo sshd -t
sudo systemctl reload ssh

قبل از بستن هر چیزی، در ترمینال سوم مطمئن شوید ssh deploy@YOUR_SERVER_IP هنوز کار می‌کند. با دستور sudo sshd -T | grep -i passwordauthentication هم ببینید مقدار واقعاً no است. بعضی ایمیج‌های ابری فایل خودشان را دارند که رمز عبور را مجاز می‌کند؛ SSH فایل‌ها را به ترتیب حروف می‌خواند و مقدار اول برنده است، برای همین نام فایل با 00- شروع می‌شود.

مرحله ۵: فایروال UFW را روشن کنید

UFW (Uncomplicated Firewall) روی اوبونتو نصب است. قاعده ساده است: همه ورودی‌ها را ببندید و فقط آنچه لازم دارید باز کنید. اول SSH را مجاز کنید، وگرنه اتصال خودتان را قطع می‌کنید:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

پورت‌های ۸۰ و ۴۴۳ را فقط وقتی باز کنید که سرور وب‌سایت میزبانی می‌کند. برای بقیه سرویس‌ها (پایگاه داده، پنل مدیریت، سرور بازی) فقط در صورت نیاز و ترجیحاً فقط برای آی‌پی خودتان پورت باز کنید: sudo ufw allow from YOUR_HOME_IP to any port 5432.

مرحله ۶: آپدیت خودکار امنیتی را فعال کنید

بیشتر نفوذها از باگ‌های شناخته‌شده‌ای استفاده می‌کنند که وصله‌شان مدت‌هاست منتشر شده. بگذارید اوبونتو وصله‌های امنیتی را خودش نصب کند:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

به پرسش، پاسخ «Yes» بدهید. آپدیت کرنل گاهی ری‌استارت می‌خواهد؛ هر از چندگاهی با ls /var/run/reboot-required چک کنید و اگر فایل وجود داشت، سرور را در ساعت کم‌تردد ری‌استارت کنید.

مرحله ۷: Fail2ban برای جلوگیری از حمله Brute Force

Fail2ban لاگ‌ها را می‌خواند و آی‌پی‌هایی را که چند بار پشت‌سرهم ورود ناموفق دارند موقتاً مسدود می‌کند:

sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

تنظیمات پیش‌فرض برای محافظت از SSH کافی است. وقتی فقط با کلید وارد می‌شوید ربات‌ها به‌هرحال راه ندارند، اما Fail2ban لاگ‌ها را تمیز نگه می‌دارد و کمی مصرف پردازنده را کم می‌کند.

چک‌لیست هر سرور جدید

  • سیستم به‌روز و ری‌استارت شده است.
  • کاربر معمولی با sudo ساخته شده و ورود root بسته است.
  • ورود با رمز عبور غیرفعال و کلید SSH دارای passphrase است.
  • UFW روشن است و فقط پورت‌های لازم باز است.
  • آپدیت خودکار امنیتی فعال است.
  • Fail2ban در حال اجراست.
  • از داده‌های مهم بکاپ یا اسنپ‌شات گرفته می‌شود.

سرور را کجا بگیریم؟

امنیت فقط نیمی از تصمیم است؛ لوکیشن هم روی سرعت اثر دارد. اگر کاربران شما در ایران یا اروپا هستند، دیتاسنتری در آلمان یا یکی از کشورهای دیگر صفحه لوکیشن‌ها معمولاً کمترین تأخیر (پینگ) را می‌دهد. در هیرون سرور می‌توانید در بیش از ۵۰ کشور، با پرداخت ساعتی، هفتگی یا ماهانه، سرور اوبونتو بگیرید و لوکیشن‌ها را کم‌هزینه امتحان کنید؛ پلن‌های فعلی را در صفحه قیمت‌ها ببینید.

پرسش‌های متداول

نگه داشتن SSH روی پورت ۲۲ امن است؟

بله، به شرط اینکه ورود با رمز عبور بسته باشد و از کلید استفاده کنید. تغییر پورت فقط شلوغی لاگ را کم می‌کند و اقدام امنیتی واقعی نیست. کلید و فایروال خیلی مهم‌ترند.

دسترسی خودم را قطع کردم، چه کنم؟

از کنسول وب یا VNC در پنل ارائه‌دهنده استفاده کنید که به SSH وابسته نیست و از همان‌جا تنظیمات SSH یا قوانین UFW را اصلاح کنید. به همین دلیل هنگام تغییر این تنظیمات باید یک نشست فعال را باز نگه دارید.

اگر رمز عبور را بسته‌ام، باز هم Fail2ban لازم است؟

اختیاری است. برای SSH که فقط با کلید کار می‌کند حفاظت زیادی اضافه نمی‌کند، اما اگر سرویس‌های دیگری با صفحه ورود دارید، مثل پنل وب، مفید است.

برای هر برنامه کاربر جداگانه بسازم؟

بله، بهتر است. اگر هر سرویس با کاربر بدون دسترسی ویژه خودش اجرا شود، در صورت نفوذ به یک برنامه، خسارت محدود می‌ماند.

هر چند وقت یک‌بار آپدیت کنم؟

آپدیت‌های امنیتی را خودکار بگذارید و هر یکی دو هفته وارد شوید، دستور sudo apt update && sudo apt upgrade را بزنید و فایل reboot-required را چک کنید.

آماده‌اید خودتان امتحان کنید؟

در چند ثانیه یک سرور ابری بسازید.

پیکربندی سرور