
06 خرداد 1404 / 488 بازدید / 9 دقیقه
امروز قراره قدم به قدم با هم ببینیم چطور یک سرور VPS لینوکس رو پیکربندی کنیم و وقتی یک سرور خام به دستمون میرسه، چه مراحل اولیهای رو باید طی کنیم. در مقالات بعدی، بهتون نشون میدم چطور Nginx رو روی سرور نصب کنید و ازش به عنوان ریورس پروکسی (Reverse Proxy) استفاده کنید. همچنین یاد میگیریم چطور اپلیکیشنهای Next.js، Angular و React رو با استفاده از pm2 و Docker (برای مدیریت اپلیکیشنهای تحت وب) و Cloudflare (به عنوان DNS Resolver) روی VPS دیپلو کنید. اما فعلاً، بیایید فقط روی پیکربندی سرور تمرکز کنیم.
شما به دانش اولیه در مورد دستورات بش (Bash) نیاز دارید. همین! چیزهایی مثل جابجایی بین دایرکتوریها (cd, ls)، کپی کردن فایلها (cp) و درک نحوه اجرای دستورات خیلی به دردتون میخوره.
وقتی پلن مناسب برای خرید VPS رو انتخاب میکنید، ازتون میپرسن که چه نوع سیستمعاملی رو میخواید روی ماشینتون نصب کنید. این کاملاً به خودتون و تجربهتون بستگی داره. من خودم فقط از اوبونتو (Ubuntu) استفاده میکنم، چون تنها توزیع لینوکسیه که باهاش راحتم. اما به طور کلی، مراحل یکسانه، چون ما عمدتاً از دستورات بش در این مقاله استفاده میکنیم. اوبونتو اغلب یکی از بهترین گزینهها برای سرورهای وب توصیه میشه، و دلیل خوبی هم داره!
بعد از اینکه ماشینتون آماده شد، یک نام کاربری، رمز عبور و یک آدرس IP برای اتصال به VPS بهتون میدن. کاربر اولیه معمولاً root هست که اساساً میتونه هر کاری رو روی ماشین شما انجام بده. پس، اگه نمیخواید با فرآیند تیکت پشتیبانی هاستینگتون دست و پنجه نرم کنید، بهتره خیلی مواظب باشید! تا اینجا، شما یک IP، یک نام کاربری (احتمالاً root) و یک رمز عبور دارید.
برای اتصال به ماشینتون، به یک ترمینال خط فرمان (Command-line terminal) نیاز دارید. اگه ویندوز دارید، میتونید از PowerShell یا Command Prompt استفاده کنید. اگه از قبل روی لینوکس یا macOS هستید، میتونید از ترمینال استاندارد خودتون (bash، zsh و غیره) استفاده کنید.
به هر حال که انتخاب میکنید، میتونید با استفاده از دستور ssh به سرور متصل بشید:
ssh <username>@<your_vps_ip>
وقتی این دستور رو اجرا میکنید، ازتون رمز عبور خواسته میشه. بعد از اون، احتمالاً یک پیام خوشآمدگویی میبینید. از اینجا به بعد، یک سری اقدام وجود داره که باید برای یک شروع قوی برای پیکربندی و ایمنسازی سرورتون انجام بدید:
وقتی این کارها رو انجام دادید، یک نقطه شروع خوب دارید. همیشه میتونید با مطالعه و جستجوی بیشتر، اون رو بهتر کنید!
اولین کاری که بعد از اتصال به سرورتون باید انجام بدید، ساخت یک کاربر ادمینه. استفاده از کاربر root برای کارهای روزمره، نه ایمنه و نه حرفهای. در خط فرمان بش، میتونید از دستور زیر استفاده کنید:
adduser <username>
بعد از اجرای این دستور، باید یک رمز عبور برای کاربر جدید تعیین کنید و به سوالات اختیاری پاسخ بدید. در پایان، میتونید Y رو تایپ کنید و Enter رو بزنید تا ساخت کاربر تایید بشه. قدم بعدی اینه که این کاربر رو به گروه sudo اضافه کنید. این گروه به کاربر شما اجازه میده تا دستورات رو با دسترسیهای سوپریوزر (مثل root) و با پیشوند sudo اجرا کنه. به این ترتیب، شما فقط زمانی از قدرت root استفاده میکنید که صراحتاً بهش نیاز دارید، که این کار خیلی ایمنتره.
فقط کافیه این دستور رو اجرا کنید:
usermod -aG sudo <username>
با این دو دستور ساده، شما یک کاربر ادمین دارید. با این حال، این کاربر هنوز جایگزین کاربر root برای اتصال اصلی شما نشده.
کاربر root خیلی قدرتمنده و یک هدف رایج برای مهاجمانه، بنابراین ما باید ورود مستقیم با SSH رو برای اون غیرفعال کنیم. شما میتونستید رمز عبور رو ازش حذف کنید، اما من این روش رو نمیپسندم. من ترجیح میدم تنظیمات SSH رو بهروزرسانی کنم تا ورود root غیرفعال بشه. برای غیرفعال کردن ورود root و مجموعهای از تنظیمات دیگه، باید یک فایل خاص رو با یک ویرایشگر متن باز کنید. من اینجا از nano استفاده میکنم (همیشه برای ویرایش فایلهای پیکربندی سیستم، sudo رو اضافه کنید):
sudo nano /etc/ssh/sshd_config
برای غیرفعال کردن ورود root از طریق SSH، خط PermitRootLogin yes رو پیدا کنید و اون رو به no تغییر بدید:
PermitRootLogin no
حالا شما ورود root رو از طریق SSH غیرفعال کردید، اما کارهای بیشتری با این فایل داریم. در مرحله بعد، باید (و این یک ایده خیلی خوبه!) پورت پیشفرض ورود SSH رو تغییر بدید. پورت پیشفرض 22 هست که برای مهاجمان کاملاً شناخته شدهست. به دنبال خطی بگردید که به سادگی Port 22 هست و عدد 22 رو به هر شماره پورتی که ترجیح میدید تغییر بدید (مثلاً 2222، اما یک عدد منحصر به فرد و بالاتر از 1023 انتخاب کنید). Port 2222 # مثال: پورت دلخواه خودتون رو انتخاب کنید
بعد از اینکه از تغییراتتون راضی بودید، فایل رو با فشردن Ctrl + X، سپس Y برای تأیید ذخیره، و سپس Enter ذخیره کنید.
لطفاً توجه داشته باشید: قبل از اینکه برای آخرین بار با کاربر root خارج بشید، تست کنید که آیا میتونید با کاربر جدیدی که ساختید، وارد بشید یا نه.
یک پنجره ترمینال جدید روی دستگاه محلی خودتون باز کنید و سعی کنید با کاربر جدیدتون وصل بشید:
ssh <your_new_username>@<your_vps_ip>
رمز عبور کاربر جدیدتون رو وارد کنید. اگه با موفقیت وارد شدید، میتونید با خیال راحت اتصال SSH root رو ببندید. اگه نه، از جلسه root که هنوز باز دارید، مشکل رو حل کنید!
وقتی تأیید کردید که میتونید با کاربر جدیدتون وارد بشید، باید سرویس SSH رو روی VPS خودتون راهاندازی مجدد کنید تا تغییرات اعمال بشه:
sudo systemctl restart sshd
استفاده از رمز عبور هر بار که میخواید به یکی از سروراتون وصل بشید، ایده آل نیست، مخصوصاً اگه رمزهای عبور مختلفی برای به خاطر سپردن داشته باشید. به جای این، میتونیم احراز هویت مبتنی بر کلید SSH رو بین ماشین محلی و سرورمون تنظیم کنیم. این روش به طور کلی امنتر و خیلی راحتتره! برای این منظور، باید این مراحل رو طی کنید:
روی دستگاه محلی خودتون (هر سیستمعاملی که باشه: macOS، ویندوز یا لینوکس)، این دستور رو اجرا کنید:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
بعد از اجرای دستور، چند سوال ازتون پرسیده میشه. اولین سوال اینه که کلید رو کجا ذخیره کنه؛ مسیر پیشفرض رو داخل پرانتز نشون میده. توجه داشته باشید که اگه مسیر رو به یک مسیر دلخواه تغییر بدید، ممکنه لازم باشه اون مسیر رو به ssh-agent معرفی کنید. بهتون نشون میدم چطور، چون من شخصاً دوست دارم پیشفرضها رو به هر چیزی که دلم میخواد تغییر بدم. سوال بعدی "Enter passphrase" هست که میتونید برای امنیت بیشتر، یک عبارت عبور بهش اضافه کنید.
بعد از اینکه عبارت عبور رو تکرار کردید (یا خالی گذاشتید)، تصویر randomart کلیدتون رو میبینید، و این یعنی کلیدتون تولید شده.
در مرحله بعد، باید کلید عمومی رو روی VPS خودتون قرار بدید تا بتونید بدون رمز عبور وارد بشید. برای این منظور، به مسیری که کلیدتون در مرحله قبل تولید شد برید و فایل با پسوند .pub (که همون کلید عمومی شماست) رو با یک ویرایشگر متن باز کنید و محتواش رو کپی کنید.
با استفاده از SSH و رمز عبورتون (با کاربر ادمین جدیدتون)، به VPS وصل بشید. بعد از ورود، باید دایرکتوری .ssh رو زیر دایرکتوری خانگی کاربرتون پیدا کنید. برای این کار، میتونید اجرا کنید:
ls -lah # or ls -lah ~
باید دایرکتوری .ssh رو در بین دایرکتوریهای دیگه ببینید. حالا، باید یک فایل به نام authorized_keys داخل دایرکتوری .ssh بسازید. اگه وجود نداره، بسازیدش. اگه وجود داره، کلید جدیدتون رو بهش اضافه میکنید.
nano ~/.ssh/authorized_keys
بعد، کلید عمومی رو که از دستگاه محلیتون کپی کردید، اینجا بچسبونید و فایل رو ذخیره کنید (Ctrl + X، سپس Y، سپس Enter).
در مرحله بعد، باید مجوزهای این فایل رو برای امنیت تغییر بدید. این فایل فقط باید توسط صاحبش قابل خواندن و نوشتن باشه:
chmod 600 ~/.ssh/authorized_keys
همچنین باید مطمئن بشید که خود دایرکتوری .ssh هم مجوزهای صحیح رو داره:
chmod 700 ~/.ssh
بعد از این، سرویس SSH رو روی VPS خودتون راهاندازی مجدد کنید (همونطور که قبلاً نشون داده شد):
sudo systemctl restart sshd
حالا وقتشه که کارهایی که تا اینجا انجام دادیم رو تست کنیم. برای این کار، اتصال فعلیتون به VPS رو با فرمان زیر ببندید:
exit
سپس، سعی کنید با دستور ssh به سرور وصل بشید. این بار، نباید ازتون رمز عبور خواسته بشه و باید به طور خودکار به سرور وارد بشید (یا اگه برای کلیدتون عبارت عبور تنظیم کردهاید، ازتون عبارت عبور خواسته بشه).
قبل از رفتن به مرحله بعدی و حذف ورود با رمز عبور: اگه مسیر پیشفرض رو هنگام تولید کلید تغییر دادید و در ورود به سرور مشکل دارید (و هنوز هم باید رمز عبورتون رو تایپ کنید)، ممکنه لازم باشه مسیر جدید رو به ssh-agent معرفی کنید! (اغلب کاربران ویندوز ممکنه با این مشکل روبرو بشن، اما برای هر سیستمعاملی خوبه که این رو بدونید.)
برای حل این مشکل، باید مطمئن بشید که ssh-agent در حال حاضر فعال هست. این دستور رو در Windows PowerShell (که باید با دسترسی Administrator اجرا بشه) اجرا کنید:
Get-Service -Name ssh-agent
باید یک جدول با "Status" "Running" یا "Stopped" ببینید. اگه نتیجه یک خطا بود، ممکنه لازم باشه از یک AI بپرسید که چطور ssh-agent رو نصب کنید (من اینجا به این موضوع وارد نمیشم!). اگه نتیجه رو دیدید و وضعیت "Stopped" بود، باید این دستورات رو اجرا کنید:
Set-Service -Name ssh-agent -StartupType Manual ssh-add "C:\path\to\your\custom_private_key"
البته، باید "C:\path\to\your\custom_private_key" رو با مسیر واقعی و دلخواه کلید خصوصی خودتون جایگزین کنید. اگه همه چیز طبق انتظار پیش بره، پیامی شبیه این رو میبینید:
Identity added: C:/path/to/your/key ([email protected]).
و حالا میتونید بدون رمز عبور (یا فقط با وارد کردن عبارت عبور) وارد بشید.
قبل از انجام این کار، کاملاً مطمئن بشید که ورود با کلیدتون به درستی کار میکنه و از کلید خصوصی SSH خودتون بکآپ دارید! اگه کاربران دیگهای دارید که میتونن وارد VPS بشن، در صورت گم کردن کلید SSH، امنتره.
حالا دوباره وارد سرور VPS خودتون بشید (با استفاده از کلیدتون!) و فایل پیکربندی SSH رو باز کنید:
sudo nano /etc/ssh/sshd_config
مطمئن بشید که این خطوط به این شکل تنظیم شدهان:
PasswordAuthentication no PubkeyAuthentication yes
فایل رو ذخیره کنید و سرویس SSH رو دوباره بارگذاری کنید:
sudo systemctl reload sshd
به طور پیشفرض، اکثر ارائهدهندگان VPS سرورها رو بدون قوانین فایروال عرضه میکنند، به این معنی که همه پورتها ممکنه باز باشن. این شما رو در معرض اسکن پورت (Port Scanning)، تلاشهای ورود به زور (Brute-force login attempts) و اکسپلویتها (Exploits) قرار میده که سرویسهای استفاده نشده یا اشتباه پیکربندی شده رو هدف قرار میدن.
میتونید از UFW (Uncomplicated Firewall) برای کاهش این تهدیدات استفاده کنید. ابتدا، اگه از قبل روی VPS شما نصب نیست (که برای اوبونتو رایجه)، باید اون رو نصب کنید:
sudo apt update sudo apt install ufw
بعد از این، بهتره که به طور پیشفرض، همه درخواستهای ورودی رو مسدود کنید، و بعد فقط اونهایی رو که بهشون نیاز دارید و ازشون اطلاع دارید، اجازه بدید.
sudo ufw default deny incoming
و درخواستهای خروجی رو مجاز کنید (این کار به طور کلی ایمن و برای عملکرد سرور شما لازمه):
sudo ufw default allow outgoing
همین الان، شما در یک موقعیت ریسکی هستید، چون همه درخواستهای ورودی رو مسدود کردید. پس، قبل از اینکه UFW رو فعال کنید، مطمئن بشید که پورت SSH که ازش استفاده میکنید رو باز کردهاید (پیشفرض 22، اما من بهتون توصیه کردم که تغییرش بدید، یادتونه؟).
اگه از پورت پیشفرض SSH (22) استفاده میکنید، اجرا کنید:
sudo ufw allow ssh
اگه پورت پیشفرض رو تغییر دادید (مثلاً به 2222)، اجرا کنید:
sudo ufw allow 2222/tcp # مثال: replace 2222 with your chosen port
حالا، اگه قراره از این VPS به عنوان یک سرور وب برای اپلیکیشنهاتون استفاده کنید، باید ترافیک وب (HTTP و HTTPS) رو هم مجاز کنید:
sudo ufw allow 80/tcp # HTTP $ sudo ufw allow 443/tcp # HTTPS
حالا وقتشه که سرویس UFW رو فعال کنیم:
sudo ufw enable
حالا وقتشه که سرویس UFW رو فعال کنیم:
sudo ufw status verbose
میتونید از این چیتشیت (برگه تقلب) خلاصه برای استفاده از UFW استفاده کنید:
| Command | Description |
|---|---|
| ufw default | مسدود کردن تمام ترافیک ورودی |
| ufw allow ssh | اجازه دسترسی SSH (پورت 22/tcp) |
| ufw allow 80,443/tcp | اجازه HTTP و HTTPS |
| ufw enable | فعال کردن فایروال UFW |
| ufw status verbose | مشاهده قوانین فعال |
| ufw delete allow 22 | حذف یک قانون (مثال) |
| ufw reset | بازنشانی تمام قوانین UFW |
در این مقاله، بهتون نشون دادم چطور پیکربندی اولیه رو روی سرور VPS خودتون انجام بدید. از اینجا به بعد، باید عمیقتر بشید و بیشتر یاد بگیرید تا VPS خودتون رو حتی ایمنتر و متناسب با نیازهای خودتون سفارشی کنید. من قراره از همین پیکربندی در مقالات بعدیم استفاده کنم تا بهتون نشون بدم چطور Nginx رو به عنوان یک ریورس پروکسی نصب کنید و فریمورکهای جاوا اسکریپت مثل Angular و Next.js رو با استفاده از pm2 و Docker برای مدیریت اپلیکیشنها، و همچنین Cloudflare به عنوان یک DNS Resolver، دیپلو کنید.