مخفی کردن ورژن apache
برای مخفی کردن نسخه آپاچی کافی است دو دستور را در فایل پیکربندی سرور تنظیم کنید: ServerTokens Prod و ServerSignature Off. دستور اول هدر Server را به یک کلمه «Apache» خلاصه میکند و دستور دوم امضای انتهای صفحههای خطا را حذف میکند؛ بعد از تغییر، پیکربندی را تست و سرویس را بارگذاری مجدد کنید.
اما پیش از آنکه این کار را «امنسازی سرور» بنامیم، یک نکته را روشن کنیم: پنهان کردن بنر نسخه، امنیت از راه ابهام است، نه امنیت. هیچ آسیبپذیریای را نمیبندد. ارزشش را دارد که انجام شود چون هزینهاش صفر است، ولی جای وصلهکردن بهموقع را نمیگیرد. در ادامه هم روش درست را میبینید و هم اینکه یک مهاجم واقعاً از این بنر چه چیزی به دست میآورد.
بنر آپاچی دقیقاً چه چیزی را لو میدهد؟
وبسرور آپاچی بهصورت پیشفرض در دو جا خودش را معرفی میکند. اول در هدر پاسخ HTTP:
Server: Apache/2.4.x (AlmaLinux) OpenSSL/3.x mod_perl/2.0.x Perl/v5.x
دوم در پاورقی صفحههای خطای پیشفرض (۴۰۳، ۴۰۴، ۵۰۰) و صفحه فهرست دایرکتوری:
Apache/2.4.x (AlmaLinux) Server at example.com Port 80
برای دیدن وضعیت فعلی سرور خودتان کافی است بزنید:
curl -sI https://example.com | grep -i '^server'
خط بالا نهتنها شماره نسخه وبسرور، بلکه توزیع لینوکس و نسخه ماژولهای جانبی را هم اعلام میکند. برای کسی که دنبال هدف میگردد، این یعنی یک لیست آماده از موارد قابل بررسی؛ لازم نیست حدس بزند روی سروری که در ایران اجاره کردهاید چه چیزی نصب است، خودتان گفتهاید.
تفاوت ServerTokens و ServerSignature
این دو دستور اغلب با هم اشتباه گرفته میشوند، در حالی که دو چیز متفاوت را کنترل میکنند و تنظیم فقط یکی از آنها کار را ناقص میگذارد:
| دستور | چه چیزی را کنترل میکند |
ServerTokens |
محتوای هدر Server در تمام پاسخهای HTTP |
ServerSignature |
خط امضای پایین صفحههای خطا و لیست دایرکتوری |
مقادیر ServerTokens از پرگوترین تا کمحرفترین: Full (پیشفرض کامل با نام ماژولها)، OS، Minimal، Minor، Major و Prod. فقط Prod است که خروجی را به «Apache» خالی میرساند؛ بقیه هنوز بخشی از شماره نسخه را نشان میدهند.
یک نکته مهم: ServerTokens فقط در پیکربندی اصلی سرور معتبر است و در <VirtualHost> یا .htaccess کار نمیکند. در مقابل ServerSignature را میتوان در سطح ویرچوالهاست، دایرکتوری و .htaccess هم تنظیم کرد.
روش درست اعمال تغییر
ویرایش این فایلها دسترسی مدیریتی میخواهد؛ یعنی کاری است که روی سرور مجازی یا سرور اختصاصی ایران با دسترسی کامل مدیریتی انجام میدهید، نه روی یک اکانت میزبانی اشتراکی. مسیر فایل هم به توزیع بستگی دارد. روی خانواده رد هت (AlmaLinux، Rocky، CentOS Stream):
nano /etc/httpd/conf/httpd.conf
و روی دبیان و اوبونتو، بهجای دستزدن به فایل اصلی، فایل مخصوص همین کار را ویرایش کنید:
nano /etc/apache2/conf-available/security.conf
در هر دو حالت این دو خط باید موجود و یکتا باشند (اگر نمونه دیگری از همان دستور بالاتر در فایل هست، حذفش کنید تا تداخل پیش نیاید):
ServerTokens Prod
ServerSignature Off
سپس اول پیکربندی را اعتبارسنجی و بعد سرویس را بارگذاری مجدد کنید؛ reload برخلاف restart اتصالهای باز را قطع نمیکند:
apachectl configtest
systemctl reload httpd یا روی دبیان systemctl reload apache2
راهنماهای قدیمی این کار را با ویرایشگر pico و دستور service httpd restart توضیح میدهند و نمونه بنرشان چیزی شبیه Apache/2.0.40 است. هر سه مورد منسوخاند: شاخه ۲.۰ آپاچی سالهاست پایان پشتیبانی شده و اگر سرور شما واقعاً چنین نسخهای را نشان میدهد، مشکل اصلی پنهانکردن بنر نیست، بلکه ارتقای فوری وبسرور است.
اگر از کنترلپنل استفاده میکنید، فایل اصلی معمولاً از روی قالب بازتولید میشود و ویرایش مستقیم آن با اولین بازسازی از بین میرود؛ در سیپنل این تنظیم در بخش پیکربندی سراسری آپاچی در WHM آمده و در دایرکتادمین باید تغییر را در فایلهای سفارشی CustomBuild بگذارید تا بازسازی بعدی آن را پاک نکند. همین منطق «قالب را ویرایش کن، نه فایل تولیدشده را» درباره صفحه Account Suspended در سیپنل هم صدق میکند.
روی هاست اشتراکی چه کاری از دست شما برمیآید؟
عملاً هیچ. روی میزبانی اشتراکی به فایل پیکربندی وبسرور دسترسی ندارید و هدر Server کاملاً در دست مدیر سرور است. نکتهای که اغلب مقالهها از قلم میاندازند این است که بسیاری از پلنهای اشتراکی امروز اصلاً روی آپاچی اجرا نمیشوند؛ برای نمونه هاست لینوکس ایران آنلاین سرور طبق توضیح صفحه محصول با وبسرور LiteSpeed و کنترلپنل cPanel ارائه میشود. لایتاسپید بخش زیادی از دستورهای .htaccess را میشناسد، اما ServerSignature و ServerTokens از دستورهای پیکربندی خود آپاچیاند و لایتاسپید آنها را از .htaccess نمیخواند؛ معادلشان تنظیم امضای سرور در کنسول مدیریت خودِ لایتاسپید است که فقط از دست مدیر سرور برمیآید، نه از دست شما. پس اگر روی هاست اشتراکی هستید، این خطها را در .htaccess نگذارید و انتظار تغییر نداشته باشید.
معادل همین کار در Nginx و PHP
در انجینایکس این خط را در بلاک http فایل /etc/nginx/nginx.conf بگذارید و با nginx -t و سپس systemctl reload nginx اعمال کنید:
server_tokens off;
توجه کنید که این تنظیم فقط شماره نسخه را حذف میکند و کلمه nginx در هدر باقی میماند؛ حذف کامل هدر به ماژول headers-more و دستور more_clear_headers Server; نیاز دارد که در بستههای استاندارد کامپایل نشده است.
پیاچپی هم خودش را با هدر X-Powered-By معرفی میکند. در php.ini مقدار زیر را تنظیم و سرویس php-fpm را ریاستارت کنید:
expose_php = Off
و اگر پشت سرور یک لایه پروکسی معکوس یا شبکه توزیع محتوا دارید، همان لایه هم میتواند این هدرها را بازنویسی یا حذف کند و عملاً بنر سرور مبدأ را از دید کاربر نهایی بپوشاند.
مهاجم واقعاً چه چیزی از دست میدهد؟
کم. ابزارهای انگشتنگاری وبسرور از روی جزئیات دیگری هم نسخه را حدس میزنند: ترتیب هدرها، قالب ETag، متن دقیق صفحههای خطا، رفتار سرور در برابر درخواستهای بدشکل و مشخصات دستدادن TLS. یک اسکن معمولی با nmap یا ابزارهای مشابه بدون نیاز به بنر، تخمین نسبتاً خوبی میدهد.
مهمتر اینکه بیشتر حملات امروز اصلاً بنر را نمیخوانند؛ باتها اکسپلویت را کورکورانه روی هر آیپی شلیک میکنند. اگر سرور وصلهنشده باشد، پنهان بودن نسخه ذرهای جلوی آنها را نمیگیرد.
پس چرا انجامش میدهیم؟ چون هزینهاش نزدیک صفر است، نویز اسکنرهای تنبلی که هدفها را بر اساس رشته نسخه فیلتر میکنند کم میشود، و در ممیزیهای امنیتی بهعنوان یک مورد سختسازی استاندارد چک میشود. فقط جایگاهش را درست بشناسید: آخرین مورد فهرست، نه اولین.
کارهایی که واقعاً وزن دارند
- بهروزرسانی منظم بستهها؛
dnf updateیاapt update && apt upgradeبرنامهریزیشده و نه یکبار در سال. - غیرفعال کردن ماژولهای بلااستفاده آپاچی و نمایش ندادن فهرست دایرکتوری با
Options -Indexes. جابهجایی مسیر ریشه سایت هم در همین فایل پیکربندی انجام میشود؛ تغییر مسیر DocumentRoot آپاچی در لینوکس نمونهاش است. - یک فایروال نرمافزاری و یک WAF مثل ModSecurity با مجموعه قوانین بهروز.
- پایش فایل و اسکن شل؛ ابزاری مثل لایسنس CXS فایلها را در همان لحظه نوشتهشدن بررسی میکند و موارد مشکوک را به قرنطینه میبرد، که برای سرورهای میزبان چند سایت تفاوت محسوسی میسازد.
- ورود با کلید SSH بهجای رمز، و اجرای سرویسها با کمترین سطح دسترسی ممکن.
جمعبندی
سه خط تنظیم (ServerTokens Prod، ServerSignature Off و expose_php = Off) بنر نسخه را از دید عمومی برمیدارد و کار کوتاهی است. آن را انجام دهید، اما در همان جلسه سراغ وصلهها و فایروال هم بروید؛ چون پنهانکاری بدون بهروزرسانی، فقط پردهای نازک روی مشکل است. و اگر روی هاست اشتراکی هستید، بهجای تلاش برای تغییر هدر سرور، وقتتان را صرف بهروز نگه داشتن سیستم مدیریت محتوا و افزونهها کنید که واقعاً در اختیار شماست.
