ایمن‌سازی سرور مجازی لینوکس یکی از نخستین و مهم‌ترین کارهایی است که هر مدیر سرور باید بلافاصله پس از تحویل گرفتن یک سرور مجازی (VPS) انجام دهد. یک سرور تازه‌نصب که با تنظیمات پیش‌فرض روی اینترنت قرار می‌گیرد، تنها چند دقیقه پس از فعال شدن، هدف اسکن‌های خودکار و تلاش‌های ورود غیرمجاز قرار می‌گیرد. در این راهنمای کامل، گام‌به‌گام و به‌صورت عملی نشان می‌دهیم که چطور یک سرور لینوکس (اوبونتو، دبیان یا CentOS) را از پایه سخت‌سازی (Hardening) کنید تا در برابر رایج‌ترین حملات مقاوم شود. اگر به‌دنبال زیرساخت امن هستید، می‌توانید از همان ابتدا با خرید سرور مجازی مناسب، بستر درستی برای اجرای این اقدامات فراهم کنید.

چرا ایمن‌سازی سرور مجازی لینوکس ضروری است؟

بسیاری از کاربران تصور می‌کنند که چون لینوکس ذاتاً امن‌تر از ویندوز است، نیازی به اقدامات امنیتی اضافه ندارند. این تصور خطرناک است. امنیت لینوکس بیشتر به «پیکربندی درست» وابسته است تا به خودِ سیستم‌عامل. یک سرور با رمز عبور ضعیف روی کاربر root، پورت SSH پیش‌فرض و بدون فایروال، عملاً یک دعوت‌نامه برای مهاجمان است.

مهاجمان معمولاً به‌دنبال ارزش خاص شما نیستند؛ آن‌ها با ابزارهای خودکار (بات‌ها) کل فضای آدرس اینترنت را اسکن می‌کنند و هر سروری که آسیب‌پذیر باشد را تصاحب می‌کنند تا از آن برای استخراج رمزارز، ارسال هرزنامه، میزبانی بدافزار یا شرکت در حملات DDoS استفاده کنند. بنابراین حتی اگر روی سرور شما «چیز مهمی» وجود ندارد، باز هم یک هدف ارزشمند برای سوءاستفاده هستید.

مدل تهدید در یک سرور عمومی

  • حملات Brute-force روی SSH: تلاش برای حدس زدن رمز عبور کاربران، مخصوصاً root.
  • سوءاستفاده از سرویس‌های آسیب‌پذیر: نسخه‌های قدیمی نرم‌افزار با حفره‌های امنیتی شناخته‌شده.
  • پیکربندی نادرست: پورت‌های باز غیرضروری، مجوزهای فایل نامناسب و سرویس‌های بی‌استفاده.
  • افزایش سطح دسترسی (Privilege Escalation): نفوذ اولیه با کاربر کم‌دسترسی و سپس رسیدن به root.

درک این مدل تهدید به شما کمک می‌کند تا اقدامات امنیتی را بر اساس اولویت واقعی انجام دهید، نه به‌صورت پراکنده. فلسفه کلی سخت‌سازی بر پایه دو اصل بنا شده است: اصل «حداقل دسترسی» (Principle of Least Privilege) که می‌گوید هر کاربر و سرویس فقط باید به حداقل منابع لازم برای انجام کارش دسترسی داشته باشد، و اصل «دفاع لایه‌ای» (Defense in Depth) که می‌گوید نباید به یک لایه دفاعی واحد اکتفا کرد؛ اگر یک لایه شکست خورد، لایه‌های بعدی باید جلوی مهاجم را بگیرند. در ادامه این راهنما، هر دو اصل را در عمل پیاده خواهیم کرد.

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

گام اول در ایمن‌سازی سرور مجازی لینوکس: به‌روزرسانی و کاربر غیر root

پیش از هر کاری، سیستم را کاملاً به‌روز کنید. بسیاری از آسیب‌پذیری‌ها با یک به‌روزرسانی ساده برطرف می‌شوند. سپس یک کاربر عادی با دسترسی sudo بسازید و از ورود مستقیم با root خودداری کنید.

apt update && apt upgrade -y
adduser rapido
usermod -aG sudo rapido

در توزیع‌های مبتنی بر RHEL (مانند CentOS و AlmaLinux) دستورها کمی متفاوت هستند:

dnf update -y
adduser rapido
passwd rapido
usermod -aG wheel rapido

پس از ساخت کاربر جدید، با یک ترمینال دیگر (بدون بستن نشست فعلی) وارد شوید تا مطمئن شوید دسترسی sudo به‌درستی کار می‌کند. هیچ‌گاه نشست root فعلی را نبندید تا زمانی که از کارکرد کاربر جدید مطمئن نشده‌اید؛ در غیر این صورت ممکن است خودتان را از سرور بیرون بیندازید.

پیکربندی امن SSH؛ قلب ایمن‌سازی سرور مجازی لینوکس

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

احراز هویت با کلید SSH

احراز هویت مبتنی بر کلید (Key-based) به‌مراتب امن‌تر از رمز عبور است، زیرا کلید خصوصی عملاً غیرقابل حدس زدن است. روی سیستم محلی خود (نه سرور) کلید بسازید:

ssh-keygen -t ed25519 -C "rapido@laptop"
ssh-copy-id rapido@YOUR_SERVER_IP

الگوریتم ed25519 نسبت به RSA سریع‌تر و امن‌تر است. پس از انتقال کلید، بدون وارد کردن رمز باید بتوانید وارد شوید.

سخت‌سازی فایل پیکربندی SSH

فایل /etc/ssh/sshd_config را ویرایش کنید و مقادیر زیر را تنظیم کنید:

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers rapido

سپس سرویس را ری‌استارت کنید:

sudo systemctl restart sshd
هشدار امنیتی: پیش از بستن پورت پیش‌فرض ۲۲ در فایروال، ابتدا مطمئن شوید که با پورت جدید (مثلاً ۲۲۲۲) می‌توانید وارد شوید. در غیر این صورت ممکن است دسترسی خود را کاملاً از دست بدهید و مجبور به استفاده از کنسول اضطراری شوید.

غیرفعال کردن ورود با رمز عبور

با تنظیم PasswordAuthentication no، حملات brute-force عملاً بی‌اثر می‌شوند، چون دیگر هیچ رمزی برای حدس زدن وجود ندارد و تنها دارنده کلید خصوصی می‌تواند وارد شود. این یکی از مؤثرترین اقدامات در ایمن‌سازی سرور مجازی لینوکس است.

راه‌اندازی فایروال و کاهش سطح حمله

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

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

با این پیکربندی، تنها پورت‌های ضروری (SSH سفارشی، HTTP و HTTPS) باز می‌مانند و باقی ترافیک ورودی مسدود می‌شود. برای بررسی وضعیت فایروال از دستور زیر استفاده کنید:

sudo ufw status verbose

حذف سرویس‌های غیرضروری

هر سرویسی که در حال اجراست، یک سطح حمله بالقوه است. سرویس‌های باز را بررسی و موارد بی‌استفاده را غیرفعال کنید:

sudo ss -tulpn
sudo systemctl disable --now telnet.socket
sudo systemctl disable --now rpcbind

محافظت خودکار با Fail2ban

ابزار Fail2ban لاگ‌های سرور را رصد می‌کند و آدرس‌های IP که تلاش‌های ورود ناموفق مکرر دارند را به‌صورت خودکار مسدود می‌کند. این ابزار مکمل بسیار خوبی برای امنیت SSH و سایر سرویس‌هاست:

sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

در فایل /etc/fail2ban/jail.local، بخش SSH را فعال و تنظیم کنید:

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600

سپس سرویس را فعال کنید و وضعیت آن را ببینید:

sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

با این تنظیمات، هر IP که در بازه ۱۰ دقیقه (findtime) سه بار ورود ناموفق داشته باشد، به‌مدت یک ساعت (bantime) مسدود می‌شود.

به‌روزرسانی خودکار و مدیریت وصله‌های امنیتی

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

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

این پکیج تضمین می‌کند که وصله‌های امنیتی حیاتی بدون دخالت دستی نصب شوند. با این حال، توصیه می‌شود به‌روزرسانی‌های اصلی سیستم را همچنان به‌صورت دستی و پس از تهیه نسخه پشتیبان انجام دهید تا از پایداری سرویس‌ها مطمئن شوید.

پایش لاگ‌ها و رفتار سرور

نظارت مداوم بر لاگ‌ها به شما کمک می‌کند رفتار غیرعادی را زودتر تشخیص دهید:

sudo journalctl -u sshd --since "1 hour ago"
sudo lastb | head -20
sudo tail -f /var/log/auth.log

دستور lastb فهرست تلاش‌های ورود ناموفق را نشان می‌دهد و ابزار خوبی برای شناسایی حملات جاری است. برای پایش حرفه‌ای‌تر می‌توانید ابزارهایی مانند auditd را نصب کنید که رویدادهای امنیتی سیستم را با جزئیات کامل ثبت می‌کند و امکان بررسی دقیق رفتار فایل‌ها و فرایندها را فراهم می‌سازد. در محیط‌های بزرگ‌تر، ارسال لاگ‌ها به یک سرور متمرکز (مانند یک سامانه SIEM) توصیه می‌شود، چون اگر مهاجم به سرور نفوذ کند، اولین کاری که انجام می‌دهد پاک کردن ردپای خود از لاگ‌های محلی است؛ اما لاگ‌هایی که به سرور دیگری ارسال شده‌اند دست‌نخورده باقی می‌مانند.

سخت‌سازی پیشرفته و لایه‌های دفاعی اضافی

پس از انجام موارد پایه، می‌توانید امنیت را با اقدامات پیشرفته‌تر تقویت کنید. این لایه‌ها به‌ویژه برای سرورهایی که داده حساس نگهداری می‌کنند اهمیت دارند.

فعال‌سازی SELinux یا AppArmor

این ابزارها با اعمال کنترل دسترسی اجباری (MAC)، حتی در صورت نفوذ به یک سرویس، دامنه خسارت را محدود می‌کنند. در اوبونتو AppArmor به‌صورت پیش‌فرض فعال است؛ وضعیت آن را بررسی کنید:

sudo aa-status

احراز هویت دومرحله‌ای برای SSH

افزودن یک عامل دوم (مانند کد یک‌بارمصرف Google Authenticator) به ورود SSH، حتی در صورت لو رفتن کلید نیز مانع نفوذ می‌شود. این کار امنیت را به‌شکل چشمگیری بالا می‌برد اما نیازمند پیکربندی دقیق است تا از قفل شدن حساب جلوگیری شود.

مدیریت مجوزهای فایل و کاربران

بسیاری از نفوذها پس از دسترسی اولیه، از طریق مجوزهای نادرست فایل گسترش می‌یابند. اطمینان حاصل کنید که فایل‌های حساس مانند کلیدهای خصوصی و فایل‌های پیکربندی، مجوزهای محدود دارند. به‌عنوان مثال، پوشه کلیدهای SSH باید تنها برای صاحب آن قابل خواندن باشد:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
sudo find / -perm -4000 -type f 2>/dev/null

دستور آخر تمام فایل‌های دارای بیت SUID را فهرست می‌کند؛ این فایل‌ها با دسترسی صاحب اجرا می‌شوند و می‌توانند برای افزایش سطح دسترسی سوءاستفاده شوند، بنابراین باید به‌دقت بررسی شوند. همچنین به‌صورت دوره‌ای کاربران سیستم را مرور کنید و حساب‌های بی‌استفاده را غیرفعال یا حذف کنید تا سطح حمله کاهش یابد.

محدود کردن دسترسی sudo

به‌جای دادن دسترسی کامل sudo به همه کاربران، می‌توانید دسترسی هر کاربر را به دستورهای خاصی محدود کنید. این کار از طریق ویرایش امن فایل sudoers انجام می‌شود:

sudo visudo

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

جدول جمع‌بندی اقدامات امنیتی

اقداماولویتاثر امنیتی
به‌روزرسانی سیستمبسیار بالارفع آسیب‌پذیری‌های شناخته‌شده
غیرفعال کردن ورود rootبسیار بالاحذف هدف اصلی حملات
احراز هویت با کلید SSHبسیار بالاخنثی‌سازی brute-force
فایروال UFWبالاکاهش سطح حمله
Fail2banبالامسدودسازی خودکار مهاجمان
به‌روزرسانی خودکارمتوسطوصله مستمر امنیتی

نگهداری و بازبینی دوره‌ای امنیت

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

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

سوالات متداول

آیا واقعاً باید پورت SSH را تغییر دهم؟

تغییر پورت SSH یک اقدام «امنیت از طریق ابهام» است و به‌تنهایی امنیت واقعی ایجاد نمی‌کند، اما حجم عظیمی از اسکن‌های خودکار روی پورت ۲۲ را حذف می‌کند و لاگ‌های شما را تمیزتر نگه می‌دارد. این کار در کنار احراز هویت با کلید و Fail2ban بسیار مؤثر است.

اگر کلید SSH خود را گم کنم چه اتفاقی می‌افتد؟

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

آیا فعال کردن به‌روزرسانی خودکار خطر ندارد؟

به‌روزرسانی خودکار وصله‌های امنیتی معمولاً بسیار امن است و به‌ندرت باعث اختلال می‌شود. با این حال برای سرورهای حساس تولیدی، بهتر است به‌روزرسانی‌های اصلی نسخه (Major) را دستی و پس از تهیه بکاپ انجام دهید تا کنترل کامل بر فرایند داشته باشید.

آیا این اقدامات برای ویندوز سرور هم صدق می‌کند؟

مفاهیم کلی مانند به‌روزرسانی، فایروال، حذف سرویس‌های اضافه و اصل حداقل دسترسی برای ویندوز سرور نیز صادق است، اما ابزارها و دستورها متفاوت‌اند. در ویندوز از Windows Firewall، Group Policy و RDP سخت‌سازی‌شده استفاده می‌شود که موضوع مقاله جداگانه‌ای است.