راهنمای کامل
راهنمای امنیت سرور و هاردنینگ: ترتیب کار و خطاهای رایج
امنیت سرور از چند تصمیم مشخص ساخته میشود: چه کسی و از کجا وارد سرور میشود، کدام پورت باز میماند، وصلهها چه زمانی نصب میشوند و اگر تغییری سرویس را از کار انداخت، چطور به حالت قبل برمیگردید. هاردنینگ همین تصمیمها را روی خود سرور اعمال میکند. هر سروری که از اینترنت در دسترس است به آن نیاز دارد، چه سرور مجازی با یک سایت وردپرسی باشد، چه سرور دیتابیس یا ویندوز سروری که RDP آن باز است.
امنسازی سرور لینوکس از کجا شروع میشود؟
کار با فهرست کردن وضعیت فعلی شروع میشود. دستور ss روی خود سرور نشان میدهد کدام پورتها باز هستند و چه برنامهای پشت هر کدام گوش میدهد، و nmap از بیرون نشان میدهد کدامیک واقعاً از اینترنت در دسترس است. فهرست کاربران، کلیدهای داخل authorized_keys، سرویسهای فعال و نسخه بستهها را هم کنار آن بگذارید. بدون این فهرست، بستن پورت یا حذف سرویس بر اساس حدس انجام میشود. ترتیبی که بعد از بررسی دنبال میکنیم این است:
- ساخت کاربر با sudo محدود و کلید SSH، و آزمایش ورود با آن در یک نشست تازه
- غیرفعالکردن PasswordAuthentication و PermitRootLogin در sshd_config
- فایروال میزبان با سیاست پیشفرض drop، همراه fail2ban یا LFD
- نصب وصلههای امنیتی معوق و تنظیم نصب خودکار آنها
- تنظیمات sysctl، غیرفعالکردن سرویسهای بیاستفاده و اصلاح مجوز فایلها
- وبسرور، PHP، دیتابیس و TLS
تغییرات دسترسی و فایروال بیشترین خطر قفل شدن پشت در را دارند، به همین دلیل اول و با یک راه دسترسی جایگزین انجام میشوند. کارهای بعدی روی سروری انجام میشود که دیگر برای رباتهای brute-force باز نیست. سختسازی وبسرور و دیتابیس آخر میآید، چون بیشتر از بقیه روی سایت اثر میگذارد و بعد از هر تغییر باید سایت، ایمیل و کنترلپنل آزمایش شوند.
خطاهای رایج در هاردنینگ سرور
یک خطای رایج، بستن ورود با رمز پیش از آزمایش ورود با کلید است. تا وقتی نشست فعلی SSH باز است همهچیز درست به نظر میرسد و مشکل وقتی معلوم میشود که نشست بسته شده و راهی به سرور نمانده است. همین اتفاق برای فایروالی میافتد که سیاست drop آن پیش از باز کردن پورت SSH فعال شده باشد. کنسول VNC یا KVM پنل دیتاسنتر را پیش از این تغییرات امتحان کنید و بعد از هر ویرایش sshd_config، فایل را با sshd -t بررسی کنید.
پیش از تغییر تنظیمات SSH یا فایروال، نشست فعلی را باز نگه دارید و ورود را در یک نشست تازه آزمایش کنید. تا این آزمایش موفق نشده، نشست قبلی را نبندید.
تغییر پورت SSH تعداد تلاشهای ثبتشده در لاگ را کم میکند، ولی رباتها پورتهای دیگر را هم اسکن میکنند و تا ورود با رمز باز است، خطر سر جایش میماند. سرویسهای داخلی هم گاهی از قلم میافتند: MySQL با bind-address روی همه اینترفیسها یا Redis بدون رمز که از اینترنت در دسترس است، حتی کنار SSH امن راه نفوذ باز میگذارد. خطای دیگر، خاموش کردن کامل SELinux یا AppArmor بهخاطر یک خطای مجوز است. درستتر این است که context فایل یا قاعده مربوط اصلاح شود و محافظت برای بقیه سیستم فعال بماند.
هاردنینگ کنترلپنل و ویندوز سرور
روی سرورهای cPanel و DirectAdmin بخش بزرگی از هاردنینگ از داخل خود پنل انجام میشود، چون پنل بعضی فایلهای پیکربندی را خودش مدیریت میکند و تغییر دستی ممکن است با بهروزرسانی بعدی بازنویسی شود. در WHM، cPHulk جلوی تلاشهای مکرر ورود را میگیرد و CSF همراه LFD فایروال و مسدودسازی IP را یکجا مدیریت میکند؛ در DirectAdmin، Brute Force Monitor همین کار را انجام میدهد. حسابهای میزبانی را هم ایزوله میکنیم تا سایت آلوده در یک حساب به فایلهای حسابهای دیگر دسترسی نداشته باشد. جزئیات این تنظیمات را در راهنماهای افزایش امنیت سی پنل و افزایش امنیت دایرکت ادمین نوشتهایم.
در ویندوز سرور، RDP همان نقشی را دارد که SSH در لینوکس دارد و هدف همان حملات خودکار است. NLA را فعال کنید، دسترسی به پورت 3389 را در Windows Firewall به IPهای مشخص محدود کنید و برای ورودهای ناموفق پیاپی سیاست قفل حساب بگذارید. ممیزی رویدادهای ورود را هم روشن کنید تا تلاشهای ناموفق در Event Viewer ثبت شوند و دیده شوند.
بعد از هاردنینگ: وصله، بازبینی و نگهداری
هاردنینگ وضعیت سرور را در روز تحویل درست میکند، اما سرور بعد از آن ثابت نمیماند. آسیبپذیری تازه منتشر میشود، برنامهنویسی پورتی را برای آزمایش باز میکند و کاربر جدیدی با sudo اضافه میشود. unattended-upgrades در Ubuntu و Debian و dnf-automatic در AlmaLinux و Rocky وصلههای امنیتی را خودکار نصب میکنند، ولی کرنل جدید معمولاً تا ریبوت اثر نمیکند و ریبوت باید پنجره زمانی مشخص داشته باشد. نسخههای پایانعمر مثل CentOS 7 دیگر وصله نمیگیرند و برای آنها برنامه ارتقا لازم است.
در بازبینی دورهای، پورتهای باز را با فهرست روز تحویل مقایسه کنید، کاربران و کلیدهای SSH را مرور کنید و گزارشهای fail2ban و auditd را بخوانید. اگر تیم داخلی برای این کار وقت ندارد، نگهداری و پایش مستمر را میتوانید به خدمت پشتیبانی و مدیریت سرور بسپارید. سروری که پیش از هاردنینگ هک شده، اول به رفع هک و پاکسازی مالور نیاز دارد، چون هاردنینگ درِ پشتیای را که مهاجم گذاشته حذف نمیکند.
زمان و هزینه امنسازی سرور به چه بستگی دارد؟
تعداد سرورها و نقش هر کدام، وجود کنترلپنل، تعداد سایتها و سرویسها و حساسیت سرویس به قطعی، زمان کار را تعیین میکنند. سروری که تازه تحویل گرفته شده و هنوز داده واقعی ندارد سریعتر امن میشود، چون تغییرات را میتوان بدون پنجره زمانی اعمال کرد. روی سرور عملیاتی با چند سایت، هر مرحله در زمان هماهنگشده اجرا میشود و بعد از آن سرویسها آزمایش میشوند. سیستمعامل پایانعمر هم کار را به برنامه ارتقا گره میزند. قیمت پس از ارزیابی اولیه و مشخص شدن همین موارد اعلام میشود.