وقتی یک سرور مجازی (VPS) تهیه میکنید، در واقع وارد دنیایی میشوید که در آن کنترل کامل یک محیط مستقل و قابلمدیریت را در اختیار دارید. این سرور میتواند میزبان وبسایتها، اپلیکیشنها، دیتابیسها یا حتی زیرساختهای توسعه و عملیات (DevOps) شما باشد. اما همین استقلال، مسئولیتهایی را نیز به همراه دارد، مهمترین آنها، تأمین امنیت سرور است.
برخلاف سرویسهای میزبانی اشتراکی که معمولاً توسط شرکت ارائهدهنده مدیریت میشوند، بعد از خرید VPS شما مسئول مستقیم حفظ امنیت هستید. اگر اقدامات اولیه را جدی نگیرید، ممکن است در همان ساعات ابتدایی پس از راهاندازی، سرور شما هدف حملات خودکار قرار گیرد؛ حملاتی که میتوانند منجر به سرقت اطلاعات، ارسال اسپم، یا سوءاستفاده از منابع سرور برای اهداف مخرب شوند.
امنیت در فضای ابری و زیرساختهای مدرن، یک انتخاب نیست بلکه یک ضرورت است. بهویژه اگر از VPS برای اجرای سرویسهای حساس، ذخیرهسازی دادههای کاربران، یا راهاندازی ابزارهای CI/CD استفاده میکنید، باید مطمئن باشید که هیچ در پشتی، پورت باز یا رمز عبور ضعیفی باقی نمانده است. حتی اگر هنوز هیچ سرویسی روی سرور نصب نکردهاید، مهاجمان منتظر نمیمانند تا شما آماده شوید؛ آنها با ابزارهای اسکن خودکار، سرورهای تازهراهاندازیشده را شناسایی و بررسی میکنند.
در این مطلب، قصد داریم اقدامات امنیتی مهم و فوری را معرفی کنیم که بهتر است بلافاصله پس از خرید VPS انجام دهید. این نکات بهگونهای طراحی شدهاند که هم برای کاربران تازهکار قابل اجرا باشند و هم برای متخصصان DevOps قابل توسعه. هر بخش شامل توضیح کاربردی، دستورالعمل عملی و نکتهای حرفهای است تا بتوانید امنیت سرور خود را از همان ابتدا بهدرستی پایهگذاری کنید.
تغییر رمز عبور پیشفرض کاربر root
پس از خرید VPS و دریافت دسترسی اولیه، نخستین اقدامی که باید انجام دهید، تغییر رمز عبور پیشفرض کاربر root است. این رمز معمولاً توسط ارائهدهنده سرور بهصورت خودکار تولید یا از طریق ایمیل ارسال میشود و در بسیاری از موارد، از نظر امنیتی ضعیف یا قابلحدس است. استفاده از چنین رمزی، سرور شما را در معرض حملات خودکار و هدفمند قرار میدهد؛ بهویژه حملات brute-force که با آزمون و خطا تلاش میکنند به حسابهای کاربری دسترسی پیدا کنند.
برای تغییر رمز عبور، کافیست پس از ورود به سرور از طریق SSH، دستور زیر را اجرا کنید:
passwd
سیستم از شما میخواهد رمز جدید را وارد کرده و تأیید کنید. توصیه میشود از یک رمز عبور طولانی و پیچیده استفاده کنید. ترکیبی از حروف بزرگ و کوچک، اعداد و نمادها. اگر از ابزارهای مدیریت رمز عبور مانند Bitwarden یا 1Password استفاده میکنید، میتوانید یک رمز تصادفی و امن تولید کرده و در فضای امن ذخیره کنید.
این مرحله ساده، پایهایترین لایه امنیتی سرور شما را تشکیل میدهد. با تغییر رمز عبور پیشفرض، دسترسی غیرمجاز به حساب root را بهطور مؤثری محدود میکنید و از همان ابتدا، کنترل واقعی سرور را در دست میگیرید.
غیرفعالسازی دسترسی مستقیم کاربر root از طریق SSH
پس از تغییر رمز عبور، گام بعدی برای افزایش امنیت VPS، غیرفعالسازی دسترسی مستقیم کاربر root از طریق SSH است. کاربر root بالاترین سطح دسترسی را در سیستم دارد و اگر مهاجمی بتواند به این حساب وارد شود، کنترل کامل سرور را در اختیار خواهد داشت. حتی اگر رمز عبور قوی باشد، وجود امکان ورود مستقیم به root همچنان یک خطر بالقوه محسوب میشود.
برای جلوگیری از این نوع دسترسی، میتوان تنظیمات سرویس SSH را بهگونهای تغییر داد که ورود مستقیم به حساب root ممنوع شود. در این حالت، کاربران باید ابتدا با یک حساب معمولی وارد شوند و سپس در صورت نیاز، با استفاده از دستور sudo یا su به سطح دسترسی root ارتقاء پیدا کنند. این روش، یک لایه امنیتی اضافی ایجاد میکند و مسیر نفوذ را برای مهاجمان دشوارتر میسازد.
برای اعمال این تغییر، مراحل زیر را دنبال کنید:
۱. فایل تنظیمات SSH را با یک ویرایشگر متنی باز کنید. برای مثال:
sudo nano /etc/ssh/sshd_config
۲. در این فایل، گزینه زیر را پیدا کرده و مقدار آن را به no تغییر دهید:
PermitRootLogin no
۳. فایل را ذخیره کرده و سرویس SSH را مجدداً راهاندازی کنید:
sudo systemctl restart sshd
پس از انجام این تنظیمات، دیگر امکان ورود مستقیم به حساب root از طریق SSH وجود نخواهد داشت. اگر هنوز هیچ کاربر غیر روتی در سیستم ندارید، پیش از اعمال این تغییر، حتماً یک حساب کاربری جدید با دسترسی sudo ایجاد کنید تا در آینده بتوانید مدیریت سرور را ادامه دهید.
نکته حرفهای: برای امنیت بیشتر، میتوانید نام کاربری جدید را بهگونهای انتخاب کنید که قابلحدس نباشد و از نامهای رایج مانند admin یا user پرهیز کنید. همچنین، در بخشهای بعدی به نحوه فعالسازی احراز هویت با کلید SSH اشاره خواهیم کرد که در کنار غیرفعالسازی ورود root، امنیت سرور را بهطور چشمگیری افزایش میدهد.
فعالسازی احراز هویت با کلید SSH
یکی از مؤثرترین روشها برای افزایش امنیت دسترسی به VPS، جایگزینی رمز عبور با احراز هویت مبتنی بر کلید SSH است. در این روش، بهجای وارد کردن رمز عبور هنگام اتصال به سرور، از یک جفت کلید رمزنگاریشده استفاده میشود. در این حالت کلید عمومی روی سرور ذخیره میشود و کلید خصوصی در اختیار شما باقی میماند. این مکانیزم نهتنها امنیت را بهطور چشمگیری افزایش میدهد، بلکه عملاً حملات brute-force را بیاثر میکند، چرا که بدون کلید خصوصی، ورود به سرور ممکن نیست.
برای فعالسازی این روش، مراحل زیر را دنبال کنید:
۱. در سیستم محلی خود (مثلاً لپتاپ یا کامپیوتر شخصی)، یک جفت کلید SSH تولید کنید:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
پس از اجرای این دستور، از شما خواسته میشود مسیر ذخیرهسازی کلید را مشخص کنید. میتوانید مسیر پیشفرض را تأیید کرده و در صورت تمایل، یک رمز عبور برای محافظت از کلید خصوصی تعیین کنید.
۲. کلید عمومی تولیدشده را به سرور منتقل کنید. اگر از سیستم لینوکس یا macOS استفاده میکنید، میتوانید از دستور زیر بهره ببرید:
ssh-copy-id root@your_server_ip
در صورتی که از ویندوز استفاده میکنید یا ابزار ssh-copy-id در دسترس نیست، میتوانید محتوای فایل id_rsa.pub را بهصورت دستی در فایل زیر روی سرور کپی کنید:
~/.ssh/authorized_keys
۳. پس از انتقال کلید، فایل تنظیمات SSH را ویرایش کرده و ورود با رمز عبور را غیرفعال کنید:
sudo nano /etc/ssh/sshd_config
مطمئن شوید گزینههای زیر بهدرستی تنظیم شدهاند:
PasswordAuthentication no
PubkeyAuthentication yes
۴. در پایان، سرویس SSH را مجدداً راهاندازی کنید:
sudo systemctl restart sshd
با این تنظیمات، از این پس فقط کاربرانی که کلید خصوصی معتبر در اختیار دارند میتوانند به سرور متصل شوند. این روش، یکی از استانداردترین و مطمئنترین شیوههای احراز هویت در دنیای لینوکس و زیرساختهای ابری محسوب میشود.
نکته حرفهای: اگر چندین کاربر به سرور دسترسی دارند، میتوانید برای هر کاربر یک کلید مجزا تعریف کرده و آنها را در فایل authorized_keys ثبت کنید. همچنین، برای مدیریت بهتر کلیدها، استفاده از ابزارهایی مانند ssh-agent یا gpg توصیه میشود.
نصب و پیکربندی فایروال (UFW یا iptables)
پس از بستن پورتهای غیرضروری، وقت آن است که یک فایروال فعال و قابلاعتماد روی سرور خود نصب و پیکربندی کنید. فایروال، نقش نگهبان ورودی و خروجی سرور را ایفا میکند و تعیین میکند که چه نوع ترافیکی اجازه عبور دارد و چه نوعی باید مسدود شود. بدون وجود یک فایروال فعال، سرور شما در برابر انواع حملات شبکهای آسیبپذیر باقی میماند، حتی اگر پورتها بهصورت دستی بسته شده باشند.
در توزیعهای مبتنی بر Debian و Ubuntu، ابزار UFW (Uncomplicated Firewall) گزینهای ساده و مؤثر برای مدیریت فایروال است. اگر به کنترل دقیقتری نیاز دارید یا از توزیعهای دیگر استفاده میکنید، میتوانید از iptables یا nftables بهره ببرید.
برای نصب و فعالسازی UFW، مراحل زیر را دنبال کنید:
۱. نصب UFW (در صورت نصب نبود):
sudo apt install ufw
۲. فعالسازی فایروال:
sudo ufw enable
۳. تعریف سیاستهای پیشفرض:
sudo ufw default deny incoming
sudo ufw default allow outgoing
این تنظیمات باعث میشوند که تمام ترافیک ورودی بهصورت پیشفرض مسدود شود، مگر اینکه بهطور خاص مجاز اعلام شده باشد. در مقابل، ترافیک خروجی از سرور مجاز خواهد بود.
۴. بررسی وضعیت فایروال:
sudo ufw status verbose
اگر ترجیح میدهید از iptables استفاده کنید، باید قوانین را بهصورت دستی تعریف کنید. برای مثال، قانون زیر اجازه میدهد ترافیک SSH وارد شود:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
و برای مسدود کردن همه ترافیک ورودی دیگر:
sudo iptables -P INPUT DROP
بستن پورتهای غیرضروری با فایروال
یکی از مهمترین اصول در امنیت سرور، محدود کردن سطح دسترسی به منابع است، بهویژه در مورد پورتهایی که بهصورت پیشفرض باز هستند. هر پورتی که روی سرور باز باشد، در واقع یک در ورودی بالقوه برای مهاجمان محسوب میشود. اگر این پورتها به سرویسهای غیرضروری یا تنظیمنشده متصل باشند، احتمال نفوذ و سوءاستفاده بهطرز قابلتوجهی افزایش مییابد.
برای شروع، ابتدا UFW را فعال کنید:
sudo ufw enable
سپس، فقط پورتهایی را که واقعاً نیاز دارید باز کنید. برای مثال، اگر فقط از SSH استفاده میکنید، میتوانید فقط پورت ۲۲ را مجاز کنید:
sudo ufw allow 22/tcp
اگر سرور شما میزبان یک وبسایت است، احتمالاً به پورتهای 80 (HTTP) و 443 (HTTPS) نیز نیاز دارید:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
در ادامه، میتوانید وضعیت فایروال را بررسی کنید:
sudo ufw status
این دستور فهرستی از پورتهای مجاز و مسدودشده را نمایش میدهد. اگر پورتهایی را مشاهده کردید که به آنها نیازی ندارید، مانند پورتهای مربوط به FTP ،SMTP یا MySQL میتوانید آنها را با دستور زیر ببندید:
sudo ufw deny 3306/tcp
نکته حرفهای: اگر از ابزارهای DevOps مانند Jenkins، داکر یا GitLab استفاده میکنید، حتماً بررسی کنید که این سرویسها از چه پورتهایی استفاده میکنند و دسترسی به آنها را فقط از IPهای مشخص یا از طریق VPN مجاز کنید. همچنین، در محیطهای حساس، استفاده از فایروالهای سطح پایینتر مانند iptables یا nftables میتواند کنترل دقیقتری فراهم کند.
نصب Fail2Ban برای مقابله با حملات brute-force
یکی از رایجترین روشهای نفوذ به سرورهای لینوکسی، حملات brute-force است، حملاتی که در آن مهاجم با استفاده از اسکریپتهای خودکار، هزاران ترکیب نام کاربری و رمز عبور را امتحان میکند تا به حسابهای SSH یا سرویسهای دیگر دسترسی پیدا کند. حتی اگر رمز عبور شما قوی باشد، این نوع حملات میتوانند منابع سرور را مصرف کرده و باعث اختلال در عملکرد شوند. برای مقابله با این تهدید، ابزار قدرتمندی به نام Fail2Ban وجود دارد.
Fail2Ban بهصورت خودکار فایلهای لاگ را بررسی میکند و در صورت مشاهده تلاشهای مشکوک برای ورود، آدرس IP مهاجم را برای مدت مشخصی مسدود میکند. این ابزار نهتنها از ورود غیرمجاز جلوگیری میکند، بلکه فشار حملات را نیز کاهش میدهد.
برای نصب و راهاندازی Fail2Ban، مراحل زیر را دنبال کنید:
۱. نصب Fail2Ban:
sudo apt install fail2ban
۲. پس از نصب، سرویس را فعال و راهاندازی کنید:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
۳. برای پیکربندی، فایل تنظیمات اصلی را کپی کرده و نسخه سفارشی ایجاد کنید:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
۴. فایل jail.local را با یک ویرایشگر باز کرده و تنظیمات مربوط به SSH را بررسی یا فعال کنید:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
در این مثال، اگر یک IP بیش از ۵ بار تلاش ناموفق برای ورود داشته باشد، بهطور خودکار برای مدت مشخصی (مثلاً ۱۰ دقیقه) مسدود میشود. این زمان و تعداد تلاشها قابل تنظیم هستند.
۵. پس از اعمال تغییرات، سرویس را مجدداً راهاندازی کنید:
sudo systemctl restart fail2ban
برای بررسی وضعیت و مشاهده IPهای مسدودشده، میتوانید از دستور زیر استفاده کنید:
sudo fail2ban-client status sshd
نصب آنتیویروس یا ابزارهای تشخیص بدافزار
اگرچه سرورهای لینوکسی بهطور طبیعی کمتر از سیستمهای دسکتاپ در معرض ویروسهای سنتی قرار دارند، اما این بههیچوجه به معنای مصونیت کامل نیست. سرورهای VPS، بهویژه آنهایی که به اینترنت عمومی متصل هستند یا فایلهایی از منابع ناشناس دریافت میکنند، میتوانند هدف بدافزارها، اسکریپتهای مخرب، یا ابزارهای استخراج رمزارز قرار بگیرند. نصب یک آنتیویروس سبک و قابلاعتماد، به شما کمک میکند تا فایلهای مشکوک را شناسایی کرده و از اجرای کدهای خطرناک جلوگیری کنید.
یکی از گزینههای رایج و متنباز برای این منظور، ابزار ClamAV است. این آنتیویروس قابلیت اسکن فایلها، دایرکتوریها و حتی ایمیلها را دارد و بهصورت منظم دیتابیس تهدیدات خود را بهروزرسانی میکند.
برای نصب ClamAV در توزیعهای Debian یا Ubuntu، مراحل زیر را دنبال کنید:
sudo apt install clamav clamav-daemon
پس از نصب، پایگاه داده ویروسها را بهروزرسانی کنید:
sudo freshclam
برای اسکن یک دایرکتوری خاص، میتوانید از دستور زیر استفاده کنید:
sudo clamscan -r /home
اگر ترجیح میدهید سیستم بهصورت خودکار فایلها را اسکن کند، میتوانید سرویس clamav-daemon را فعال کرده و زمانبندی اسکنها را با cron تنظیم کنید.
علاوه بر ClamAV، ابزارهایی مانند rkhunter و chkrootkit نیز برای شناسایی rootkitها و تهدیدات سطح پایینتر مناسب هستند. برای مثال، نصب و اجرای rkhunter بهصورت زیر انجام میشود:
sudo apt install rkhunter
sudo rkhunter --update
sudo rkhunter --check
اگر سرور شما بهعنوان هاست دانلود یا میزبان فایلهای کاربران عمل میکند، اسکن منظم فایلهای آپلودشده ضروریست. همچنین، اگر از سرویسهای ایمیل یا FTP استفاده میکنید، آنتیویروس باید بهصورت یکپارچه با آنها پیکربندی شود تا از ورود فایلهای آلوده جلوگیری شود.
تهیه نسخه پشتیبان منظم از دادهها و تنظیمات
آخرین لایه دفاعی در امنیت سرور، داشتن نسخههای پشتیبان منظم و قابلاعتماد از دادهها و تنظیمات حیاتی است. حتی اگر تمام اقدامات امنیتی را بهدرستی انجام داده باشید، هیچ سیستمی صددرصد مصون نیست. حملات سایبری، خطاهای انسانی، خرابی سختافزار یا حتی بهروزرسانیهای اشتباه میتوانند باعث از دست رفتن اطلاعات شوند. در چنین شرایطی، تنها چیزی که میتواند شما را نجات دهد، نسخه پشتیبان سالم و قابل بازیابی است.
برای شروع، میتوانید از ابزارهای سادهای مانند rsync برای انتقال فایلها به یک مقصد امن استفاده کنید:
rsync -avz /var/www/ user@backup-server:/home/backups/site/
اگر ترجیح میدهید از ابزارهای خودکار بهره ببرید، گزینههایی مانند Duplicity،BorgBackup، یا Restic امکانات پیشرفتهتری برای رمزنگاری، فشردهسازی و زمانبندی بکاپها فراهم میکنند.
همچنین، اگر از دیتابیس مانند MySQL یا PostgreSQL استفاده میکنید، تهیه نسخه پشتیبان از دیتابیسها نیز ضروریست. برای مثال، در MySQL میتوانید از دستور زیر استفاده کنید:
mysqldump -u root -p database_name > backup.sql
برای زمانبندی بکاپها، میتوانید از cron بهره ببرید و اسکریپتهای بکاپگیری را بهصورت روزانه یا هفتگی اجرا کنید. نمونهای از زمانبندی روزانه:
0 2 * * * /home/user/backup.sh
جمعبندی
در پایان، ایمنسازی یک VPS تازهراهاندازیشده فقط با تنظیمات اولیه کامل نمیشود؛ بلکه نیازمند توجه مستمر، بررسی دورهای و بهروزرسانیهای منظم است. هر اقدامی که برای محافظت از سرور انجام میدهید، بخشی از یک مسیر بلندمدت برای حفظ پایداری، اعتماد و امنیت زیرساخت شماست.
با رعایت اصول پایهای امنیتی، استفاده از ابزارهای مانیتورینگ، و بهرهگیری از راهکارهای مدیریت سرور مانند آنچه پچیم ارائه میدهد، میتوانید محیطی امن و قابلاتکا برای توسعه، میزبانی و عملیات فراهم کنید. امنیت، یک فرآیند پویا و مشارکتیست و هر قدمی که در این مسیر بردارید، ارزشمند و مؤثر خواهد بود.
