برچسب: افزایش امنیت سرور لینوکسی

  • چگونه امنیت سرور لینوکسی را افزایش دهیم؟ (فایروال، Fail2Ban و SSH)

    چگونه امنیت سرور لینوکسی را افزایش دهیم؟ (فایروال، Fail2Ban و SSH)

    اگر یک سرور لینوکسی دارید، یکی از مهم‌ترین کارهایی که باید انجام بدید، بالا بردن امنیت سروره.

    فرقی نمیکنه سرورتون برای میزبانی سایت استفاده بشه، یک VPS باشه یا برای اجرای برنامه و سرویس‌های مختلف؛

    اگر تنظیمات امنیتی رو جدی نگیرید، ممکنه سرورتون هدف حملات مختلف قرار بگیره.

    خبر خوب اینه که برای افزایش امنیت سرور لینوکسی لازم نیست همیشه کارهای پیچیده‌ای انجام بدید.

    با چند تنظیم ساده مثل فعال کردن فایروال، امن کردن SSH و استفاده از Fail2Ban میتونید بخش زیادی از ریسک‌های امنیتی رو کاهش بدید.

    در این مقاله از بلاگ رهام کلود قراره قدم‌به‌قدم بررسی کنیم که چطور امنیت یک سرور لینوکسی رو بهتر کنیم. پس با ما همراه باشید.

     

    فهرست موضوعات:

    • چرا امنیت سرور لینوکسی مهمه؟
    • آپدیت بودن سیستم‌عامل لینوکس
    • فعال بودن فایروال
    • استفاده از Firewalld در AlmaLinux و CentOS
    • بستن پورت‌های غیرضروری
    • امنیت SSH
    • استفاده از کلید SSH
    • محدود سازی ورود کاربر Root
    • تغییر یا عدم تغییر پورت SSH
    • Fail2Ban چیه و چه کاری میکنه؟
    • تنظیمات مناسب برای امنیت
    • بررسی لاگ سرور
    • غیرفعال کردن سرویس‌های غیرضروری
    • Backup
    • اشتباهات رایج در امنیت سرور لینوکسی
    • نتیجه‌گیری
    • سوالات متداول

     

    چرا امنیت سرور لینوکسی مهمه؟

    خیلی از سرورها به‌صورت مستقیم به اینترنت وصل هستن.

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

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

    بعد هم با امتحان کردن تعداد زیادی نام کاربری و رمز عبور، سعی میکنن وارد سرور بشن.

    حالا تصور کنید روی سرور شما یک رمز عبور ساده وجود داشته باشه یا SSH بدون هیچ محدودیتی در دسترس باشه. در چنین شرایطی احتمال حمله بیشتر میشه.

    پس بهتره از همون اول چند لایه امنیتی داشته باشید.

    برای افزایش امنیت سرور لینوکسی بهتره روی چند مورد تمرکز کنید که در ادامه مهمترینشون رو باهم بررسی میکنیم.

     

    آپدیت بودن سیستم‌عامل لینوکس

    یکی از ساده‌ترین کارها برای بالا بردن امنیت سرور، به‌روزرسانی سیستم‌عامله.

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

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

    در Ubuntu و Debian میتونید از دستورهای زیر استفاده کنید:

    sudo apt update
    sudo apt upgrade

    در سیستم‌عامل‌های مبتنی بر RHEL مثل AlmaLinux و Rocky Linux هم میتونید از دستور زیر استفاده کنید:

    sudo dnf update

    قبل از انجام آپدیت روی سرورهای مهم، بهتره بررسی کنید که آپدیت موردنظر باعث ناسازگاری با سرویس‌های شما نشه.

    در سرورهای production معمولا بهتره قبل از آپدیت‌های بزرگ، Backup یا Snapshot داشته باشید.

     

    فعال بودن فایروال

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

    فایروال مثل یک نگهبان برای سرور عمل می‌کنه. یعنی مشخص می‌کنه چه ترافیکی اجازه ورود یا خروج داشته باشه و چه ترافیکی مسدود بشه.

    برای مثال، اگر روی سرور شما فقط یک سایت و SSH فعال باشه، منطقی نیست که ده‌ها پورت بدون استفاده باز باشن.

    هرچه سرویس‌های غیرضروری کمتری در دسترس اینترنت باشن، سطح حمله هم کمتر میشه.

    فایروال UFW در Ubuntu

    در Ubuntu یکی از ابزارهای ساده برای مدیریت فایروال، UFW هست.

    برای فعال کردن UFW:

    sudo ufw enable

    برای مشاهده وضعیت:

    sudo ufw status

    اگر SSH روی پورت پیش‌فرض 22 فعال باشه، قبل از فعال کردن فایروال حتماً اجازه دسترسی به SSH رو باز کنید:

    sudo ufw allow 22/tcp

    برای باز کردن پورت HTTP:

    sudo ufw allow 80/tcp

    و برای HTTPS:

    sudo ufw allow 443/tcp

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

    مثال: فرض کنید یک سرور Ubuntu دارید که روی اون یک سایت اجرا میشه و از طریق SSH هم مدیریت میشه.
    در این حالت معمولاً حداقل پورت‌های زیر نیاز هستن:

    پورت 22 برای SSH
    پورت 80 برای HTTP
    پورت 443 برای HTTPS

    در نتیجه میتونید این پورت‌ها رو مجاز کنید:

    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp

    البته اگر SSH شما روی پورت دیگه‌ای تنظیم شده، باید همون پورت رو در فایروال باز کنید.

     

    استفاده از Firewalld در AlmaLinux و CentOS

    در سیستم‌عامل‌هایی مثل AlmaLinux، Rocky Linux و CentOS معمولاً Firewalld یکی از ابزارهای رایج برای مدیریت فایرواله.

    برای بررسی وضعیت:

    sudo firewall-cmd –state

    برای باز کردن سرویس SSH:

    sudo firewall-cmd –permanent –add-service=ssh

    برای باز کردن HTTP:

    sudo firewall-cmd –permanent –add-service=http

    برای HTTPS:

    sudo firewall-cmd –permanent –add-service=https

    بعد از تغییر قوانین، تنظیمات رو Reload کنید:

    sudo firewall-cmd –reload

    برای مشاهده قوانین فعال هم میتونید از این دستور استفاده کنید:

    sudo firewall-cmd –list-all

     

    بستن پورت‌های غیرضروری

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

    مثلاً اگر روی سرور شما سرویس FTP، Mail Server یا دیتابیس اجرا نمیشه، نیازی نیست پورت‌های مربوط به اون‌ها رو به اینترنت باز کنید.

    قبل از بستن پورت‌ها بهتره بررسی کنید چه سرویس‌هایی روی سرور در حال اجرا هستن.

    برای مشاهده پورت‌های Listening میتونید از دستور زیر استفاده کنید:

    sudo ss -tulpn

    این دستور به شما کمک می‌کنه متوجه بشید چه سرویس‌هایی روی چه پورت‌هایی در حال گوش دادن هستن.

    ### نکته مهم

    قبل از بستن هر پورتی، مطمئن بشید که سرویس مهمی به اون وابسته نیست. مخصوصاً اگر از طریق SSH به سرور متصل هستید، حواستون باشه که دسترسی SSH رو به اشتباه مسدود نکنید.

     

    امنیت SSH

    SSH یکی از مهم‌ترین راه‌های مدیریت سرور لینوکسیه. اما اگر تنظیماتش به‌درستی انجام نشده باشه، می‌تونه یکی از اهداف حملات Brute Force باشه.

    در حمله Brute Force، مهاجم سعی می‌کنه با امتحان کردن تعداد زیادی رمز عبور، وارد حساب کاربری بشه.

    برای همین بهتره SSH رو امن‌تر کنیم.

    فایل تنظیمات SSH معمولاً اینجاست:

    /etc/ssh/sshd_config

    برای ویرایش فایل:

    sudo nano /etc/ssh/sshd_config

    البته قبل از تغییر تنظیمات، بهتره از فایل اصلی Backup بگیرید.

     

    استفاده از کلید SSH

    یکی از بهترین کارها برای افزایش امنیت سرور لینوکسی اینه که به‌جای ورود با Password از SSH Key استفاده کنید.

    در این روش یک جفت کلید ساخته میشه:

    کلید خصوصی (Private Key)
    کلید عمومی (Public Key)

    کلید عمومی روی سرور قرار می‌گیره و کلید خصوصی روی سیستم شما باقی می‌مونه.

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

    برای ساخت کلید SSH روی سیستم خودتون میتونید از دستور زیر استفاده کنید:

    ssh-keygen

    بعد از ساخت کلید، باید کلید عمومی رو روی سرور قرار بدید.

    در بسیاری از سیستم‌ها میتونید از این دستور استفاده کنید:

    ssh-copy-id username@server-ip

    بعد از اینکه مطمئن شدید ورود با SSH Key به‌درستی کار می‌کنه، میتونید ورود با Password رو غیرفعال کنید.

    در فایل تنظیمات SSH:

    PasswordAuthentication no

    بعد سرویس SSH رو Restart یا Reload کنید:

    sudo systemctl restart ssh

    در بعضی توزیع‌ها نام سرویس sshd هست:

    sudo systemctl restart sshd

     

    هشدار: قبل غیرفعال کردن ورود با رمز عبور، حتما یک Session فعال و یک روش مطمئن برای ورود با SSH Key داشته باشید.
    اگر بدون تست این گزینه رو غیرفعال کنید و کلید SSH درست کار نکنه، ممکنه دسترسی شما به سرور قطع بشه.

     

    محدود سازی ورود کاربر Root

    کاربر Root بالاترین سطح دسترسی در لینوکس رو داره. اگر یک مهاجم بتونه مستقیماً با حساب Root وارد سرور بشه، کنترل بسیار زیادی روی سیستم خواهد داشت.

    به همین دلیل بهتره ورود مستقیم Root از طریق SSH رو محدود یا غیرفعال کنید.

    در فایل:

    etc/ssh/sshd_config/

    میتونید تنظیم زیر رو بررسی کنید:

    PermitRootLogin no

    بعد تنظیمات SSH رو اعمال کنید:

    sudo systemctl restart ssh

    روش بهتر اینه که با یک کاربر معمولی وارد سرور بشید و فقط در مواقع لازم با sudo دستورات مدیریتی رو اجرا کنید. مثلا:

    sudo apt update یا sudo systemctl restart nginx

    این روش باعث میشه استفاده از دسترسی Root محدودتر و کنترل‌شده‌تر باشه.

     

    تغییر یا عدم تغییر پورت SSH

    یکی از پیشنهادهایی که زیاد درباره امنیت SSH گفته میشه، تغییر پورت پیش‌فرض 22 هست.

    مثلا میتونید SSH رو روی پورت دیگری مثل 2222 قرار بدید.

    این کار ممکنه تعداد زیادی از اسکن‌های خودکار ساده رو کاهش بده، اما نباید اون رو یک راهکار امنیتی اصلی در نظر بگیرید؛ چرا؟

    چون مهاجم می‌تونه پورت‌های مختلف رو Scan کنه و پورت SSH جدید رو پیدا کنه. پس تغییر پورت به‌تنهایی امنیت واقعی ایجاد نمیکنه.

    اگر تصمیم گرفتید پورت SSH رو تغییر بدید، باید هم‌زمان تنظیمات فایروال رو هم تغییر بدید. مثلا:

    sudo ufw allow 2222/tcp

    و در تنظیمات SSH:

    Port 2222

    بعد از تغییر تنظیمات، حتما اتصال جدید رو تست کنید. مثلا:

    ssh -p 2222 username@server-ip

     

    Fail2Ban چیه و چه کاری میکنه؟

    یکی دیگه از ابزارهای کاربردی برای افزایش امنیت سرور لینوکسی، Fail2Ban هست.

    Fail2Ban لاگ‌های سرویس‌های مختلف رو بررسی میکنه. اگر متوجه بشه یک IP در مدت کوتاهی تعداد زیادی تلاش ناموفق برای ورود داشته، میتونه اون IP رو به‌صورت موقت Block کنه.

    مثلا فرض کنید یک ربات مخرب در چند دقیقه 100 بار تلاش می‌کنه با رمزهای مختلف وارد SSH بشه.

    Fail2Ban می‌تونه این رفتار رو تشخیص بده و IP مربوطه رو برای مدت مشخصی مسدود کنه.

    این ابزار برای مقابله با حملات Brute Force خیلی کاربردیه.

     

    نصب Fail2Ban در Ubuntu

    برای نصب Fail2Ban در Ubuntu میتونید از دستور زیر استفاده کنید:
    sudo apt update
    sudo apt install fail2ban
    بعد سرویس رو فعال کنید:
    sudo systemctl enable fail2ban
    و اجرا کنید:
    sudo systemctl start fail2ban
    و برای بررسی وضعیت:
    sudo systemctl status fail2ban

     

    تنظیم Fail2Ban

    فایل تنظیمات اصلی Fail2Ban معمولاً در مسیر زیر قرار داره:
    /etc/fail2ban/
    برای تنظیمات شخصی بهتره به‌جای تغییر مستقیم فایل اصلی، از فایل `jail.local` استفاده کنید. مثلا:
    sudo nano /etc/fail2ban/jail.local
    یک تنظیم ساده برای SSH می‌تونه چیزی شبیه این باشه:
    [sshd]
    enabled = true
    port = ssh
    maxretry = 5
    findtime = 10m
    bantime = 1h

    enabled = true یعنی محافظت از SSH فعال باشه.
    maxretry = 5 یعنی بعد از 5 تلاش ناموفق، IP مشکوک شناسایی بشه.
    findtime = 10m یعنی این تلاش‌ها در بازه 10 دقیقه بررسی بشن.
    bantime = 1h یعنی IP برای یک ساعت مسدود بشه.

    بعد از تغییر تنظیمات:
    sudo systemctl restart fail2ban
    برای مشاهده وضعیت Jail مربوط به SSH:
    sudo fail2ban-client status sshd

     

    تنظیمات مناسب برای امنیت

    فرض کنید شما یک VPS با Ubuntu دارید و روی اون یک سایت وردپرسی اجرا میشه.

    سرور شما از طریق اینترنت در دسترسه و برای مدیریت اون از SSH استفاده می‌کنید.

    یک تنظیم امنیتی مناسب می‌تونه شامل این موارد باشه:

    مرحله اول: آپدیت سیستم

    sudo apt update
    sudo apt upgrade

    مرحله دوم: تنظیم فایروال

    فقط پورت‌های موردنیاز رو باز کنید:

    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    بعد:
    sudo ufw enable

    مرحله سوم: امن کردن SSH

    * استفاده از SSH Key
    * غیرفعال کردن Password Login
    * محدود کردن ورود مستقیم Root

    مرحله چهارم: نصب Fail2Ban

    sudo apt install fail2ban

    بعد Jail مربوط به SSH رو فعال کنید.

    حالا سرور شما چند لایه امنیتی داره:

    فایروال → پورت‌های غیرضروری رو مسدود می‌کنه.
    SSH Key → ورود با رمز عبور رو حذف میکنه.
    Fail2Ban → تلاش‌های مشکوک و تکراری رو شناسایی و IP مهاجم رو Block میکنه.
    کاربر معمولی + sudo → استفاده مستقیم از Root رو محدود می‌کنه.

    این یعنی برای نفوذ به سرور، مهاجم باید از چند لایه امنیتی عبور کنه.

     

    بررسی لاگ سرور

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

    لاگ‌ها می‌تونن اطلاعات مهمی درباره تلاش‌های ورود ناموفق، خطاهای سرویس‌ها و فعالیت‌های مشکوک در اختیار شما قرار بدن.

    برای مثال، در Ubuntu و Debian میتونید لاگ‌های مربوط به احراز هویت رو بررسی کنید:

    sudo tail -f /var/log/auth.log

    در بعضی توزیع‌های لینوکس مثل AlmaLinux ممکنه لاگ‌های احراز هویت در مسیر زیر باشن:

    /var/log/secure

    اگر تعداد زیادی تلاش ناموفق برای ورود مشاهده کردید، بهتره بررسی کنید که آیا این تلاش‌ها طبیعی هستن یا نشونه یک حمله Brute Force.

     

    غیرفعال کردن سرویس‌های غیرضروری

    هر سرویس اضافی که روی سرور اجرا میشه، می‌تونه یک نقطه احتمالی برای حمله باشه.

    اگر سرویسی استفاده نمی‌کنید، بهتره اون رو غیرفعال یا حذف کنید.

    برای مشاهده سرویس‌های فعال:

    systemctl list-units –type=service –state=running

    قبل از غیرفعال کردن هر سرویس، حتما مطمئن بشید که سرویس موردنظر برای عملکرد سایت یا برنامه شما ضروری نیست.

     

    Backup

    حتی اگر بهترین تنظیمات امنیتی رو هم داشته باشید، باز هم هیچ سروری صددرصد غیرقابل نفوذ نیست.

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

    اگر سرور هک بشه، اطلاعات حذف بشن یا مشکلی برای دیتابیس ایجاد بشه، داشتن Backup می‌تونه شما رو نجات بده.

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

    داشتن Backup بدون تست Restore، مثل داشتن کلیدی هست که هیچ‌وقت مطمئن نشدید قفل رو باز میکنه یا نه!

     

    اشتباهات رایج در امنیت سرور لینوکسی

    برای افزایش امنیت سرور لینوکسی فقط نصب فایروال و Fail2Ban کافی نیست. چند اشتباه رایج هم وجود داره که بهتره از اون‌ها دوری کنید.

    استفاده از رمز عبور ساده
    رمزهایی مثل 123456 یا رمزهای کوتاه به‌راحتی قابل حدس هستن.

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

    غیرفعال کردن SSH Password بدون تست
    اگر SSH Key درست تنظیم نشده باشه، ممکنه دسترسی خودتون رو از دست بدید.

    اعتماد کامل به تغییر پورت SSH
    تغییر پورت می‌تونه تعداد اسکن‌های ساده رو کمتر کنه، اما جایگزین فایروال، SSH Key و Fail2Ban نیست.

    نصب ابزارهای امنیتی بدون بررسی تنظیمات
    نصب یک ابزار به‌تنهایی امنیت ایجاد نمی‌کنه. تنظیم درست و بررسی عملکرد اون ابزار هم مهمه.

    نداشتن Backup
    امنیت یعنی فقط جلوگیری از حمله نیست؛ باید برای زمانی که مشکلی هم پیش میاد آماده باشید.

     

    نتیجه‌گیری

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

    فعال کردن فایروال و بستن پورت‌های غیرضروری باعث میشه دسترسی‌های اضافی محدود بشن.

    امن کردن SSH و استفاده از SSH Key، احتمال حملات مربوط به رمز عبور رو کاهش میده و Fail2Ban هم می‌تونه جلوی بسیاری از تلاش‌های تکراری و Brute Force رو بگیره.

    در کنار این موارد، آپدیت منظم سیستم‌عامل، بررسی لاگ‌ها و داشتن Backup هم اهمیت زیادی دارن.

    در واقع بهتره امنیت سرور رو به شکل چندلایه ببینید.

    هیچ ابزار واحدی نمیتونه امنیت کامل ایجاد کنه؛

    اما وقتی چند لایه امنیتی مثل Firewall ،SSH Key ،Fail2Ban، محدود کردن دسترسی Root و Backup رو کنار هم داشته باشید، سرور شما وضعیت بسیار امن‌تری خواهد داشت.

     


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

    آیا نصب Fail2Ban برای امنیت سرور کافی است؟
    خیر. Fail2Ban فقط یکی از لایه‌های امنیتیه. بهتره در کنار اون از فایروال، SSH Key، آپدیت منظم سیستم و تنظیمات مناسب SSH هم استفاده کنید.

    آیا تغییر پورت SSH باعث امن شدن سرور می‌شود؟
    تغییر پورت SSH می‌تونه بعضی اسکن‌های خودکار ساده رو کاهش بده، اما یک راهکار امنیتی کامل نیست. بهتره روی SSH Key، فایروال و Fail2Ban هم تمرکز کنید.

    آیا باید پورت 22 را ببندیم؟
    اگر SSH شما روی پورت 22 اجرا میشه و برای مدیریت سرور به اون نیاز دارید، نباید این پورت رو بدون جایگزین ببندید. در صورت تغییر پورت SSH، باید پورت جدید رو در فایروال باز کنید.

    آیا استفاده از SSH Key بهتر از Password است؟
    در بیشتر سناریوها بله. استفاده از کلید SSH می‌تونه امنیت ورود به سرور رو بیشتر کنه، مخصوصاً اگر ورود با Password هم غیرفعال شده باشه.

    آیا می‌توانیم ورود Root را کاملاً غیرفعال کنیم؟
    در بسیاری از سرورها بله، و معمولاً بهتره ورود مستقیم Root از طریق SSH محدود بشه. اما قبل از انجام این کار، باید مطمئن بشید یک حساب کاربری دیگر با دسترسی مدیریتی و `sudo` دارید.

    Fail2Ban دقیقا چه کاری انجام می‌دهد؟
    Fail2Ban لاگ‌ها رو بررسی می‌کنه و وقتی الگوهای مشکوک مثل تلاش‌های متعدد برای ورود ناموفق رو تشخیص بده، می‌تونه IP مربوطه رو برای مدت مشخصی مسدود کنه.

    آیا فایروال به‌تنهایی امنیت سرور را تضمین می‌کند؟
    خیر. فایروال فقط یکی از لایه‌های امنیتیه. برای امنیت بهتر باید از ترکیب فایروال، SSH امن، Fail2Ban، آپدیت منظم، Backup و مدیریت صحیح کاربران استفاده کنید.

    مهم‌ترین کار برای افزایش امنیت سرور لینوکسی چیست؟
    یک کار به‌تنهایی نمی‌تونه امنیت سرور رو تضمین کنه.
    اما اگر بخوایم از مهم‌ترین اقدامات شروع کنیم، بهتره ابتدا فایروال رو تنظیم کنید، دسترسی‌های غیرضروری رو ببندید، SSH رو با کلید امن کنید، ورود مستقیم Root رو محدود کنید و Fail2Ban رو برای مقابله با تلاش‌های ورود مشکوک فعال کنید.