چک لیست کامل امنیت سرور لینوکس
شما به تازگی سرور مجازی (VPS) جدید خود را تهیه کردهاید، اما سرور مجازی لینوکس شما در حالت پیشفرض مانند خانهای با درهای باز است. به محض آنلاین شدن، هزاران ربات و اسکنر در اینترنت در حال جستجو برای یافتن کوچکترین روزنه امنیتی در سرورهایی مانند سرور خام شما هستند. این چکلیست، یک نقشه راه عملی و جامع برای تبدیل سرور شما از یک هدف آسیبپذیر به یک سرور لینوکسی با امنیت بالا است.
امنیت سرور یک فرآیند مداوم است. یک اشتباه کوچک میتواند منجر به دسترسی غیرمجاز، سرقت اطلاعات، از کار افتادن کامل سرویسهای شما و یا حتی دریافت یک گزارش تخلف (Abuse) و مسدود شدن سرور از سمت دیتاسنتر شود. این مقاله، یک چکلیست جامع و کاربردی است که به شما کمک میکند تا لایههای دفاعی قدرتمندی را در سرور لینوکس خود ایجاد کنید.
پیش نیازها:
- سطح دسترسی: شما به دسترسی root یا یک کاربر با دسترسی sudo نیاز دارید.
- سیستم عامل: این آموزش برای انواع سیستم عامل های Ubuntu, Debian, Almalinux, Rockylinux, Centos Stream و سایر توزیع ها سازگار است.
بخش اول: امنیت دسترسی و مدیریت کاربران (قفل کردن درهای ورودی)
اولین و مهمترین لایه دفاعی، کنترل افرادی است که میتوانند به سرور شما وارد شوند و چه اختیاراتی دارند.
1. ایجاد کاربر جدید با دسترسی root
کار کردن مستقیم با کاربر root
یکی از بزرگترین اشتباهات امنیتی در مدیریت سرور لینوکس است. زیرا یک دستور اشتباه یا دسترسی غیرمجاز به این کاربر میتواند کل سیستم شما را در اختیار بگیرد. بهترین و امنترین روش، غیرفعال کردن ورود مستقیم کاربر root
و ایجاد یک کاربر جدید است که میتواند در مواقع لزوم، با استفاده از دستور sudo
به اختیارات مدیریتی دسترسی پیدا کند.
چرا این کار مهم است؟
نام کاربری root در تمام سیستمهای لینوکس یکسان است و اولین هدف برای حملات خودکار (Brute-force) محسوب میشود. با غیرفعال کردن آن، شما اصلیترین و قابل پیشبینیترین نقطه ورود را برای هکرها میبندید.
# 1. یک کاربر جدید با نام دلخواه خود ایجاد کنید (مثلا blue) adduser blue # 2. کاربر جدید را به گروه sudo اضافه کنید تا دسترسیهای مدیریتی را دریافت کند usermod -aG sudo blue
از این پس، همیشه با کاربر جدید خود (در این مثال blue
) به سرور متصل شوید و دیگر هرگز از root
برای ورود مستقیم استفاده نکنید. زمانی که به اختیارات مدیریتی نیاز داشتید، کافی است ابتدای دستور خود کلمه sudo
را اضافه کنید.
۲. امنسازی سرویس SSH
SSH اصلیترین دروازه ورود به سرور شماست. این تنظیمات در فایل /etc/ssh/sshd_config قرار دارند. با استفاده از ویرایشگر nano یا از هر روش دیگری، این فایل را باز کنید و طبق مراحل زیر، محتویات آنرا برای امنیت، تغییر بدهید
چرا این کار مهم است؟
بیش از 99٪ حملات خودکار به دنبال پورت پیشفرض ۲۲ هستند. با تغییر این پورت به یک عدد تصادفی، شما به سادگی سرور خود را از دید این رباتها مخفی میکنید.
غیرفعال کردن ورود کاربر root از طریق SSH:
بعد از باز کردن فایل تنظیمات، دسترسی ورود کاربر root را از حالت yes به no تغییر میدهیم. البته توجه داشته باشید که باید یوزر دیگه ای با دسترسی root، از قبل ایجاد کرده باشید.
PermitRootLogin no
تغییر پورت پیشفرض SSH (از 22 به یک پورت دیگر):
اکثر حملات خودکار Bot ها روی پورت پیشفرض 22 انجام میشود و باید این پورت را عوض کنید، مثلا از پورت 2200 استفاده کنید.
Port 2200
- نکته مهم: قبل از تغییر پورت، حتما پورت جدید را در فایروال خود باز کنید. در غیر این صورت، دسترسی شما به سرور قطع خواهد شد و از طریق دسترسی Console یا VNC باید وارد سرور شوید و پورت را در فایروال باز کنید.
- نکته مهم: به هیچ عنوان از پورت های پیش فرض و شناخته شده سایر سرویس ها، مثل 2222 برای پورت جدید SSH انتخاب نکنید، یک عدد تصادفی بین 1000 تا 30000 انتخاب مناسبی برای عدد پورت است.
ویرایش دستی فایل sshd_config نیازمند دقت است، برای سادهسازی و جلوگیری از خطاهای احتمالی میتوانید از اسکریپت متن بازی که توسط ایرج زاهدی مدیر فنی بلوسرور، برای تغییر پورت توسعه داده شده استفاده کنید. استفاده از این کد بسیار ساده است، کد زیر را در ترمینال SSH وارد کنید، سپس از شما خواسته میشود که عدد پورت جدید را وارد کنید.
این اسکریپت که سورس کد آن به صورت عمومی در Gist در دسترس است، به صورت خودکار پورت جدید را در فایروال باز کرده و سرویس SSH را ریستارت میکند.
bash <(curl -Ls https://gist.github.com/iraj-zahedi/d13f298071df8bcd2586f8482f132f16/raw)
استفاده از کلید SSH به جای رمز عبور :
رمزهای عبور قابل حدس زدن یا شکستن هستند. کلیدهای SSH یک روش احراز هویت بسیار امنتر هستند. پس از تنظیم کلید، ورود با رمز عبور را غیرفعال کنید.
PasswordAuthentication no
محدود کردن دسترسی کاربران:
میتوانید مشخص کنید که فقط کاربران خاصی اجازه ورود از طریق SSH را داشته باشند.
AllowUsers your_username
پس از هر تغییر در این فایل، سرویس SSH را ریاستارت کنید:
sudo systemctl restart sshd
بخش دوم: امنیت شبکه و فایروال
۱. راهاندازی فایروال با UFW
فایروال مانند یک نگهبان عمل میکند و تمام پورتهای ورودی و خروجی سرور را کنترل میکند. UFW (Uncomplicated Firewall) سادهترین راه برای مدیریت فایروال در اوبونتو است. این ابزار که به صورت رسمی توسط توسعهدهندگان اوبونتو (مستندات UFW در سایت اوبونتو) پشتیبانی میشود، به شما اجازه میدهد تا بتوانید پورت های ورودی و خروجی سرور را مدیریت کنید.
# 1. (مهم) ابتدا به پورت SSH جدید خود اجازه دسترسی بدهید sudo ufw allow 2200/tcp # 2. به سرویسهای عمومی مانند وبسرور اجازه دسترسی بدهید sudo ufw allow http sudo ufw allow https # 3. فایروال را فعال کنید sudo ufw enable # 4. وضعیت فایروال را بررسی کنید sudo ufw status
۲. نصب و کانفیگ Fail2Ban
Fail2Ban ابزاری مهمی است که لاگهای سرور شما را برای تلاشهای ناموفق ورود (مانند حملات Brute-force به SSH) اسکن کرده و IP مهاجم را برای مدتی مسدود میکند. برای آشنایی با تمام قابلیتهای آن میتوانید به مستندات رسمی Fail2Ban مراجعه کنید.
# 1. نصب Fail2Ban sudo apt update sudo apt install fail2ban # 2. ایجاد یک فایل کانفیگ محلی (هرگز فایل اصلی را ویرایش نکنید) sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
سپس فایل jail.local را ویرایش کرده و تنظیمات مربوط به [sshd] را مطابق نیاز خود تغییر دهید (مثلا زمان مسدود بودن یا تعداد تلاشهای مجاز). Fail2Ban به صورت پیشفرض برای SSH فعال است و نیاز به تنظیمات پیچیدهای ندارد.
بخش سوم: بهروزرسانی سیستم عامل
۱. بهروزرسانی منظم سیستم
بسیاری از حملات از طریق آسیبپذیریهای شناختهشدهای انجام میشوند که برای آنها آپدیت امنیتی منتشر شده است. سیستم خود را همیشه بهروز نگه دارید.
sudo apt update && sudo apt upgrade -y
۲. حذف سرویسهای غیرضروری
هر سرویسی که روی سرور شما در حال اجراست، یک نقطه بالقوه برای حمله است. با دستور ss -tuln لیست پورتهای در حال گوش دادن را مشاهده کنید و هر سرویسی را که نیاز ندارید، حذف یا غیرفعال کنید.
بخش چهارم: مانیتورینگ و پشتیبانگیری
۱. بررسی منظم لاگها
لاگها اتفاقات سرور شما را نگهداری میکنند. یاد بگیرید که لاگهای مهم را به صورت دورهای بررسی کنید تا فعالیتهای مشکوک را شناسایی نمایید.
- لاگ احراز هویت (ورود و خروجها): /var/log/auth.log
- لاگ کلی سیستم: /var/log/syslog
۲. پشتیبانگیری منظم و خودکار
هیچ استراتژی امنیتی بدون یک برنامه پشتیبانگیری (Backup) کامل نیست. حتی امنترین سرورها نیز ممکن است به دلیل خطای سختافزاری یا انسانی از دسترس خارج شوند.
- سه نسخه از دادههای خود داشته باشید، روی دو نوع سرور مختلف، که یکی از آنها داخل سرور، و دیگر خارج از محل سرور اصلی و یکی هم در کامپیوتر شخصی شما نگهداری شود.
- خودکارسازی: فرآیند بکاپگیری را خودکار کنید تا فراموش نشود.
- تست بکاپ: یک بکاپ تستنشده، بکاپ نیست! به صورت دورهای فرآیند بازیابی را تست کنید.
با اجرای دقیق این چکلیست، شما لایههای امنیتی قدرتمندی را برای سرور لینوکس خود ایجاد کردهاید. به یاد داشته باشید که امنیت یک روند ثابت و تضمینی نیست، بلکه یک فرآیند مداوم از بهروزرسانی، مانیتورینگ و هوشیاری است. با بررسی منظم لاگها و بهروز نگه داشتن سیستم، میتوانید اطمینان حاصل کنید که زیرساخت شما در برابر تهدیدات جدید نیز مقاوم باقی میماند.
فهرست تیترها
نویسنده: ایرج زاهدی، بنیانگذار و معمار فنی بلوسرور. محتوای این مقالات بر پایه تجربه عملی در طراحی، پیادهسازی و مدیریت پروژههای متنوع میزبانی وب در ایران و خارج از کشور، در طول بیش از یک دهه فعالیت مداوم نوشته شده است. به عنوان متخصص در بهینهسازی عملکرد و عیبیابی سیستمهای هاستینگ (از VPS تا هاست اشتراکی)، هدف من به اشتراکگذاری تجربیات و راهکارهای فنی است؛ همان دانشی که امروز ستون اصلی پایداری و کیفیت در سرویسهای بلوسرور محسوب میشود.