امن سازی سرور لینوکس

چک‌لیست امن سازی سرور لینوکس: چطور نگذاریم سرورمان شخم بخورد!

بگذارید همین اول کار رک و بی‌تعارف یک حقیقت تلخ را به شما بگویم: لینوکس خام، امن نیست!

 

خیلی‌ها فکر می‌کنند همین که یک سرور لینوکسی خام (اوبونتو، دبیان، راکی یا هر چیز دیگری) تحویل گرفتند، چون «لینوکس» است دیگر ضدگلوله شده! سخت در اشتباهید. طبق آمار، معمولاً کمتر از ۴ دقیقه بعد از اینکه سرور شما IP پابلیک می‌گیرد، بات‌های اسکنر و کرولرهای اینترنتی پیدایش می‌کنند و باران درخواست‌های مخرب شروع می‌شود. بدتر از آن اینکه حدود ۷۸ درصد هک‌ سرور لینوکس به خاطر باگ‌های عجیب و غریب یا زیرو دی (Zero-day) نیست؛ دقیقاً به خاطر کانفیگ اشتباه و سهل‌انگاری ادمین سرور است!

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

 

⚡ سه کار حیاتی (اگر وقت هیچ کاری نداری، فقط همین ۳ تا را انجام بده!)

اگر عجله داری و نمی‌توانی کل مقاله را پیاده کنی، حداقل همین سه تا کار را انجام بده تا ۹۰٪ اتک‌های اتوماتیک پوچ شوند:

  1. سوراخ SSH را ببند: لاگین مستقیم یوزر root را ببند، پسورد را کلاً غیرفعال کن، لاگین را فقط با SSH Key بگذار و پورت پیش‌فرض ۲۲ را عوض کن.
  2. فایروال + Fail2ban را روشن کن: فقط پورت‌هایی که نیاز داری را باز بگذار و بقیه را ببند. Fail2ban هم بگذار تا هر آی‌پی که چند بار پسورد اشتباه زد، درجا بلاک شود.
  3. همین الان پکیج‌ها را آپدیت کن: سیستم‌عامل آپدیت‌نشده، شاه‌کلید ورود نفوذگرهاست. پچ‌های امنیتی را نصب و خودکارسازی کن.

حالا برویم سراغ جزئیات و بخش‌بندی تخصصی‌تر.

۱. امن سازی SSH (درب ورودی سرور)

پروتکل SSH درگاه اصلی ورود به سرور شماست و اولین جایی است که اتکرهای اینترنتی به آن حمله بروت‌فورس (Brute-force) می‌زنند. امن کردنش زیر نیم ساعت زمان می‌برد:

چک‌لیست SSH:

  • بستن لاگین مستقیم روت (PermitRootLogin no): روت نباید مستقیم به اینترنت دسترسی داشته باشد. با یک یوزر معمولی وارد شوید، بعد اگر نیاز بود sudo بزنید.
  • حذف لاگین با رمز عبور (PasswordAuthentication no): پسوردها قابل حدس و کرک شدن هستند، اما SSH Key معتبر را در طول عمر نوح هم نمی‌شود کرک کرد!
  • عوض کردن پورت پیش‌فرض ۲۲: پورت را به یک شماره بالای ۱۰۲۴ تغییر دهید (مثلاً 2299). با همین یک کار، ۹۰ درصد اسکنرهای بی‌مغز اینترنتی سرورتان را نادیده می‌گیرند.
  • استفاده اجباری از پروتکل نسخه ۲ (Protocol 2): نسخه ۱ پروتکل SSH باگ‌های رمزنگاری شدیدی دارد و تحت هیچ شرایطی نباید فعال باشد.
  • تعیین لیست مجاز کاربران (AllowUsers یا AllowGroups): صریحاً بنویسید چه کسانی حق لاگین دارند؛ بقیه اکانت‌ها خودکار ریجکت شوند.
  • تنظیم Timeout نشست‌های رها شده: اگر ارتباط قطع شد یا ادمین پشت سیستم خوابش برد، سشن بعد از چند دقیقه خودکار بسته شود (ClientAliveInterval 300).
  • بستن قابلیت‌های غیرضروری: ارسال گرافیک (X11Forwarding no) و TCP Forwarding را اگر لازم ندارید ببندید.
  • نصب Fail2ban: بعد از ۳ یا ۵ تلاش ناموفق برای ورود، آی‌پی طرف را ساعت‌ها بفرستید در بلک‌لیست.

⚠️ یک نکته حیاتی قبل از ری‌استارت SSH: وقتی کانفیگ فایل /etc/ssh/sshd_config را تغییر دادید، قبل از ری‌استارت کردن سرویس، ترمینال فعلی‌تان را نبندید! یک تب دیگر باز کنید و تست کنید که آیا لاگین جدید کار می‌کند یا نه. اگر کار نکرد، در همان پنجره باز قبلی می‌توانید مشکل را رفع کنید وگرنه برای همیشه پشت در می‌مانید!

۲. مدیریت یوزرها و دسترسی‌ها (اصل کمترین دسترسی)

هیچ کاری را تا مجبور نشدید با کاربر root انجام ندهید.

  • ساخت یوزر اختصاصی: برای هر شخصی که دسترسی می‌خواهد، یک یوزر مجزا با دسترسی sudo بسازید تا معلوم باشد چه کسی چه دستوری زده است.
  • حذف یا قفل کردن یوزرهای بی‌استفاده: اکانت‌های سرویس‌هایی که استفاده نمی‌شوند را با دستور passwd -l username یا usermod -L قفل کنید و شل آن‌ها را روی /sbin/nologin بگذارید.
  • محدودسازی دسترسی‌های Sudo: به همه دسترسی کامل ALL=(ALL) ALL ندهید. در صورت امکان فایل کانفیگ /etc/sudoers را طوری تنظیم کنید که فقط دستورات خاصی مجاز باشند.
  • چک کردن اکانت‌های بدون پسورد: با یک دستور ساده بررسی کنید هیچ کاربری با پسورد خالی وجود نداشته باشد: awk -F: '($2 == "") {print $1}' /etc/shadow

 

۳. فایروال و امنیت شبکه برای امن سازی سرور لینوکس (بستن پورت‌های اضافه)

یک قانون ساده در امنیت سرور: هر پورتی که نباید باز باشد، باید بسته باشد!

  • استفاده از UFW (در اوبونتو/دبیان) یا Firewalld (در راکی/ردهت):سیاست کلی فایروال باید این باشد: همه چیز را ببند، مگر آنچه صراحتاً مجاز شده!

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2299/tcp #
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

  • بررسی پورت‌های در حال گوش دادن (Listening): همیشه ببینید چه سرویس‌هایی واقعاً دارند به پورت‌ها گوش می‌دهند:

ss -tunlp

اگر دیدید دیتابیسی مثل MySQL یا Redis روی 0.0.0.0 گوش می‌دهد و برای عموم باز است، سریعاً در کانفیگشان bind-address را روی 127.0.0.1 بگذارید.

  • غیرفعال کردن پروتکل‌های قدیمی: سرویس‌های ناامن مثل Telnet یا FTP نباید حتی روی سیستم نصب باشند.

۴. پرمیشن‌ها و فایل‌سیستم

هکرها عاشق این هستند که فایل‌های اجرایی را در پوشه‌های موقت مثل /tmp بریزند و اجرا کنند.

  • پارتیشن‌بندی هوشمند با فلگ‌های امنیتی: اگر امکانش را دارید، پوشه‌های /tmp و /var/tmp را با گزینه‌های noexec, nosuid, nodev در فایل /etc/fstab مانت کنید تا هیچ فایلی نتواند در این مسیرها مستقیم اجرا شود.
  • شکار فایل‌های خطرناک SUID/SGID: فایل‌هایی که بیت SUID دارند می‌توانند با دسترسی صاحب فایل (معمولاً روت) اجرا شوند. گاهی اتکرها برای ترفیع دسترسی (Privilege Escalation) از این فایل‌ها سوءاستفاده می‌کنند. با این دستور آن‌ها را پیدا و مانیتور کنید:

find / -perm /6000 -type f 2>/dev/nul

مجوز دسترسی به فایل‌های حساس: فایل‌های کلیدی مثل /etc/shadow و /etc/passwd باید پرمیشن‌های بسیار سفت و سختی داشته باشند (مثلاً chmod 600 /etc/shadow).

 

۵. لاگ‌گیری و مانیتورینگ (چشم و گوش سیستم)

وقتی نمی‌دانید روی سرور چه می‌گذرد، یعنی کنترلی روی آن ندارید.

  • سنکرون‌سازی دقیق زمان با NTP: لاگ‌ها اگر تایم‌شان دقیق نباشد، برای تحلیل حمله بی‌فایده‌اند. سرویس chrony یا systemd-timesyncd را همیشه فعال نگه دارید.
  • مانیتورینگ لاگ‌های احراز هویت: مرتباً فایل لاگ ورودها را چک کنید:
    • در دبیان/اوبونتو: /var/log/auth.log
    • در ردهت/راکی: /var/log/secure
  • ابزارهای آدیت (Auditd): برای کارهای حساس‌تر می‌توانید سرویس auditd را نصب کنید تا هر تغییری در فایل‌های حساس سریعاً لاگ شود.

 

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

لازم نیست همه چیز را دستی تست کنید؛ ابزارهای اپن‌سورس و فوق‌العاده‌ای هستند که مثل آب خوردن سرور شما را بررسی می‌کنند:

  1. Lynis: محبوب‌ترین ابزار آدیت امنیتی در لینوکس. کافیست اجرا کنید تا به شما نمره امنیتی (Hardening Index) بدهد و لیست آسیب‌پذیری‌ها را مشخص کند: sudo lynis audit system
  2. Fail2ban: سپر دفاعی همیشگی در برابر حملات بروت‌فورس.

 

جمع‌بندی: امنیت یک مسیر است، نه یک مقصد!

امن سازی سرور لینوکس پروژه‌ای نیست که یک‌بار انجام دهید و برای همیشه فراموشش کنید. اما رعایت همین چک‌لیست پایه، بیش از ۹۵ درصد هکرهای آماتور و اسکریپت‌کیدی‌ها را پشت در نگه می‌دارد و سرور شما را از یک طعمه دم‌دستی به یک قلعه مستحکم تبدیل می‌کند.

اگر این مطلب برایتان مفید بود، لینک آن را برای دوستان لینوکسی‌تان بفرستید و حتماً در کانال تلگرام لینوکس‌فا عضو شوید تا آموزش‌ها و چالش‌های بعدی را از دست ندهید! 🚀

گالری مقاله

برای این نوشته برچسبی وجود ندارد !

avatar

حمایت مالی

avatar

دانلود متن مقاله

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب