امن سازی سرور یعنی مجموعه ای از تنظیمات پایه که بلافاصله پس از تحویل سرور انجام میدهید تا سرور در برابر حملات رایج مقاوم و برای بهره برداری آماده شود. یک سرور تازه با تنظیمات پیش فرض، هدف آسانی برای حملات خودکار اینترنتی است؛ این چک لیست کمک میکند از همان دقیقه اول امن شروع کنید، فرقی نمیکند سیستم عامل شما لینوکس باشد یا ویندوز.
مفهوم هر گام در همه سیستم عامل ها یکسان است، اما دستورها و ابزارها فرق دارند. به همین دلیل در هر گام، هم دستور لینوکس (اوبونتو، دبیان، آلمالینوکس و سنت او اس) و هم روش ویندوز سرور را کنار هم آورده ایم تا یک مرجع واحد برای امن سازی سرور داشته باشید.
این چک لیست همیشه سبز است؛ اصول آن سال ها ثابت میماند و فقط جزئیات دستورها ممکن است کمی تغییر کند. چه سرور مجازی تازه گرفته باشید و چه یک سرور اختصاصی، همین ترتیب را دنبال کنید.
این مقاله در یک نگاه
- مفهوم امن سازی در لینوکس و ویندوز یکی است، فقط ابزارها فرق دارند
- مهم ترین لایه، امن سازی دسترسی راه دور است: SSH در لینوکس و RDP در ویندوز
- فایروال و دفاع خودکار در برابر حملات ورود را حتما فعال کنید
لحظه ای که یک سرور به اینترنت وصل میشود، ربات های خودکار شروع به آزمایش ورود به آن میکنند. این ربات ها در لینوکس پورت SSH و کاربر روت را هدف میگیرند و در ویندوز سراغ پورت RDP و حساب Administrator میروند و هزاران رمز را در دقیقه امتحان میکنند. اگر سرور را با تنظیمات پیش فرض رها کنید، فقط مسئله زمان است تا یکی از این تلاش ها موفق شود.
امن سازی سرور دقیقا همین مسیرهای ساده حمله را می بندد و سرور شما را از یک هدف آسان به یک هدف سخت تبدیل میکند. نکته مهم این است که این کار را قبل از نصب هر سرویس یا انتقال داده انجام دهید، چون امن سازی یک کار یک بار اما با اثری دائمی است. چند دقیقه وقت گذاشتن در ابتدا، شما را از دردسرهای بزرگ بعدی مثل آلوده شدن سرور یا از دست رفتن داده ها نجات میدهد.
اولین کار روی هر سرور تازه، به روزرسانی کامل سیستم است تا وصله های امنیتی منتشرشده اعمال شوند. بسته ها و اجزای قدیمی یکی از رایج ترین راه های نفوذ هستند.
# لینوکس - اوبونتو و دبیان sudo apt update && sudo apt upgrade -y # لینوکس - آلمالینوکس و سنت او اس sudo dnf update -y
روی ویندوز سرور: به روزرسانی از مسیر Settings و سپس Windows Update انجام میشود. برای انجام خودکار با PowerShell میتوانید از ماژول رسمی استفاده کنید:
# ویندوز - PowerShell با دسترسی Administrator Install-Module PSWindowsUpdate -Force Install-WindowsUpdate -AcceptAll -AutoReboot
بعد از به روزرسانی، اگر هسته سیستم یا اجزای حیاتی به روز شده باشند، یک بار سرور را ری استارت کنید تا تغییرات کامل اعمال شوند.
کار مستقیم با حساب مدیر پیش فرض خطرناک است، چون این حساب برای همه شناخته شده است و هدف اول حملات قرار میگیرد. راه حل در هر دو سیستم عامل یکی است: یک حساب مدیر جدید بسازید و حساب پیش فرض را محدود یا تغییر نام دهید.
# لینوکس - ساخت کاربر و دادن دسترسی مدیر sudo adduser fama sudo usermod -aG sudo fama # اوبونتو و دبیان sudo usermod -aG wheel fama # آلمالینوکس و سنت او اس
روی ویندوز سرور: یک حساب مدیر جدید بسازید، سپس حساب Administrator پیش فرض را تغییر نام دهید یا غیرفعال کنید. حتما اول حساب جدید را تست کنید تا از سرور بیرون نمانید.
# ویندوز - PowerShell New-LocalUser -Name "fama" -Password (Read-Host -AsSecureString) Add-LocalGroupMember -Group "Administrators" -Member "fama" # تغییر نام حساب Administrator پیش فرض Rename-LocalUser -Name "Administrator" -NewName "fama-admin"
دسترسی راه دور دروازه اصلی ورود به سرور است و به همین دلیل مهم ترین لایه در امن سازی سرور محسوب میشود. در لینوکس این دروازه SSH و در ویندوز RDP است؛ هر دو باید سخت شوند.
سه تغییر کلیدی بیشترین اثر را دارند: ورود با کلید به جای رمز، بستن ورود مستقیم روت و تغییر پورت پیش فرض. اگر با مفهوم SSH آشنا نیستید، ابتدا راهنمای کامل اتصال و کار با SSH را ببینید. ابتدا روی دستگاه خودتان یک کلید بسازید و آن را به سرور منتقل کنید:
ssh-keygen -t ed25519 -C "fama@laptop" ssh-copy-id fama@YOUR_SERVER_IP
سپس فایل پیکربندی SSH را باز کنید و پورت را به یک عدد دلخواه تغییر دهید، ورود روت و رمز عبور را ببندید و سرویس را ری استارت کنید:
sudo nano /etc/ssh/sshd_config # این مقادیر را تنظیم کنید: Port 2222 PermitRootLogin no PasswordAuthentication no sudo systemctl restart ssh # در بعضی توزیعها sshd
برای سخت گیری بیشتر میتوانید با AllowUsers فقط به کاربر مشخصی اجازه ورود بدهید و برای جزئیات فنی به مستندات رسمی OpenSSH مراجعه کنید.
در ویندوز، RDP معادل SSH است و همان اصول را دارد: احراز هویت قوی، تغییر پورت و محدود کردن دسترسی. مهم ترین کار، فعال بودن NLA یعنی احراز هویت در سطح شبکه است که قبل از باز شدن نشست، هویت کاربر را بررسی میکند.
# ویندوز - فعال کردن NLA Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name 'UserAuthentication' -Value 1 # تغییر پورت پیش فرض RDP (مثلا به 3390) Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name 'PortNumber' -Value 3390 Restart-Service TermService -Force
علاوه بر این، اگر آی پی ثابت دارید، بهتر است در فایروال ویندوز دسترسی RDP را فقط به همان آی پی محدود کنید تا کسی جز شما حتی نتواند به پورت وصل شود.
قبل از بستن ورود پیش فرض یا تغییر پورت، حتما یک نشست باز نگه دارید و ورود با حساب و روش جدید را در یک اتصال دیگر تست کنید. اگر تنظیمات اشتباه باشد و نشست فعلی را ببندید، ممکن است کاملا از سرور قفل بیرون شوید. در این حالت کنسول مدیریت سرور تنها راه بازگشت است.
فایروال تعیین میکند چه پورت هایی از بیرون قابل دسترسی باشند و بقیه را می بندد. بعد از تغییر پورت دسترسی راه دور، حتما همان پورت جدید را در فایروال باز کنید، وگرنه دسترسی خود را از دست میدهید.
# لینوکس - اوبونتو و دبیان با UFW sudo ufw allow 2222/tcp sudo ufw allow http sudo ufw allow https sudo ufw enable # لینوکس - آلمالینوکس و سنت او اس با firewalld sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --permanent --add-service=http --add-service=https sudo firewall-cmd --reload
روی ویندوز سرور: فایروال Windows Defender را روشن نگه دارید و برای پورت جدید RDP یک قانون ورودی بسازید. با PowerShell:
# ویندوز - روشن نگه داشتن فایروال و افزودن قانون Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True New-NetFirewallRule -DisplayName "RDP-Custom" -Direction Inbound -Protocol TCP -LocalPort 3390 -Action Allow
قاعده کلی در هر دو سیستم عامل یکی است: فقط پورت های موردنیاز سرویس هایتان را باز بگذارید و بقیه را بسته نگه دارید. هر پورت باز یک مسیر بالقوه برای حمله است.
حتی با تنظیمات درست، ربات ها به تلاش برای ورود ادامه میدهند. یک لایه دفاع خودکار، آی پی مهاجم را بعد از چند تلاش ناموفق مسدود میکند. ابزار این کار در دو سیستم عامل متفاوت است اما هدف یکی است.
روی لینوکس: ابزار Fail2ban لاگ ورودها را زیر نظر میگیرد و هر آی پی که چند بار رمز اشتباه بزند را به صورت خودکار مسدود میکند.
sudo apt install fail2ban -y sudo systemctl enable --now fail2ban
روی ویندوز: معادل این کار، سیاست قفل شدن حساب (Account Lockout Policy) است که بعد از چند تلاش ناموفق، حساب را برای مدتی قفل میکند.
# ویندوز - قفل حساب بعد از 5 تلاش ناموفق net accounts /lockoutthreshold:5 /lockoutduration:15 /lockoutwindow:15
این سیاست جلوی حملات حدس رمز را میگیرد، بدون اینکه نیاز به نصب ابزار جداگانه ای در ویندوز داشته باشید.
بعد از لایه های اصلی، چند تنظیم پایانی سطح امنیت و پایداری سرور را کامل میکند. این موارد در هر دو سیستم عامل قابل اجرا هستند و بخشی جدایی ناپذیر از امن سازی سرور به حساب می آیند. هر کدام کوچک به نظر میرسند اما در مجموع تفاوت واقعی در پایداری و امنیت ایجاد میکنند.
هر سرویسی که در حال اجراست یک سطح حمله بالقوه است. سرویس هایی که نیاز ندارید را شناسایی و غیرفعال کنید تا سطح حمله کاهش پیدا کند.
# لینوکس
sudo systemctl list-unit-files --type=service --state=enabled
sudo systemctl disable --now SERVICE_NAME
# ویندوز - PowerShell
Get-Service | Where-Object {$_.Status -eq "Running"}
Set-Service -Name "SERVICE_NAME" -StartupType Disabled ساعت دقیق برای درستی لاگ ها و بررسی رخدادهای امنیتی ضروری است. منطقه زمانی را تنظیم و همگام سازی خودکار ساعت را فعال کنید.
# لینوکس sudo timedatectl set-timezone Asia/Tehran sudo timedatectl set-ntp true # ویندوز tzutil /s "Iran Standard Time" w32tm /resync
بعد از تنظیمات، خوب است بدانید تلاش های ورود ناموفق را کجا ببینید. بررسی دوره ای لاگ ها نشان میدهد آیا کسی در حال آزمایش ورود به سرور شماست یا نه.
# لینوکس
sudo tail -n 50 /var/log/auth.log # اوبونتو و دبیان
sudo journalctl -u sshd --no-pager | tail # آلمالینوکس و سنت او اس
# ویندوز - رخداد 4625 یعنی ورود ناموفق
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} -MaxEvents 20 پیش از بهره برداری، یک مسیر بازگشت برای خودتان بسازید. اگر ارائه دهنده امکان اسنپ شات (Snapshot) میدهد، یک نسخه از وضعیت سالم سرور بگیرید تا در صورت خرابی سریع بازگردید. همچنین مطمئن شوید به کنسول مدیریت سرور (مانند VNC یا کنسول ارائه دهنده) دسترسی دارید؛ این کنسول مستقل از SSH و RDP کار میکند و اگر روزی قفل بیرون ماندید، تنها راه ورود شماست.
پیش از راه اندازی سرویس اصلی، این جمع بندی سریع را مرور کنید تا مطمئن شوید چیزی جا نمانده است. این چک لیست برای لینوکس و ویندوز یکسان است.
1به روزرسانی و کاربر
سیستم به روز شد و یک حساب مدیر جدید به جای حساب پیش فرض ساخته شد.
2دسترسی راه دور
SSH یا RDP سخت شد: احراز هویت قوی، بستن حساب پیش فرض و تغییر پورت.
3فایروال و دفاع خودکار
فایروال با پورت های لازم فعال شد و دفاع خودکار در برابر حملات ورود برقرار شد.
4سخت سازی نهایی
سرویس های بی استفاده بسته، ساعت تنظیم، و مسیر پشتیبان و دسترسی اضطراری آماده شد.
برای عمیق تر شدن، مطلب امنیت سرور را هم بخوانید که فراتر از تنظیمات اولیه به مانیتورینگ و سخت سازی سرویس ها میپردازد.
جمع بندی: امن سازی سرور یک کار یک بار و سریع است که تفاوت بزرگی در امنیت طولانی مدت ایجاد میکند. با به روزرسانی سیستم، ساخت حساب مدیر جدید، امن سازی SSH یا RDP، فایروال و دفاع خودکار، سرور تازه شما در هر سیستم عاملی از یک هدف آسان به یک زیرساخت مقاوم تبدیل میشود.
مهم ترین توصیه این است که این گام ها را پیش از هر کار دیگری و با دقت، به خصوص در بخش دسترسی راه دور، انجام دهید تا هم امن و هم بدون قفل شدن، سرور را آماده بهره برداری کنید.
سرور امن را از فاماسرور شروع کن
زیرساخت پایدار برای لینوکس و ویندوز؛ بقیه اش با ما.
امن سازی دسترسی راه دور؛ یعنی SSH در لینوکس و RDP در ویندوز. احراز هویت قوی، بستن حساب پیش فرض و تغییر پورت بیشترین اثر را در کاهش حملات دارند.
مفهوم گام ها یکسان است اما ابزارها فرق دارند: در ویندوز به جای SSH از RDP، به جای UFW از فایروال ویندوز، و به جای Fail2ban از سیاست قفل حساب استفاده میشود.
تغییر پورت به تنهایی امنیت کامل نمی آورد، اما بخش بزرگی از حملات خودکار که فقط پورت پیش فرض را هدف میگیرند حذف میشوند. این کار را در کنار احراز هویت قوی و فایروال انجام دهید.
تا وقتی ورود با حساب و روش جدید را در یک نشست دیگر تست نکرده اید، نشست فعلی را نبندید. اگر قفل شدید، معمولا از کنسول مدیریت سرور (VNC یا کنسول ارائه دهنده) میتوانید دوباره وارد شوید.
هر دو. اصول امن سازی سرور برای سرور مجازی و اختصاصی و برای هر دو سیستم عامل لینوکس و ویندوز یکسان است.