امنیت Apache چیست؟ راهنمای Hardening وبسرور Apache
امنیت Apache به مجموعه روشها و تنظیماتی گفته میشود که از وبسرور Apache در برابر نفوذ، افشای اطلاعات، دسترسی غیرمجاز و حملات سایبری محافظت میکنند. سختسازی یا Hardening این وبسرور شامل بهروزرسانی نرمافزار، محدودسازی دسترسی فایلها، غیرفعالکردن قابلیتهای غیرضروری و ایمنسازی ارتباطات HTTPS است. استفاده از هدرهای امنیتی، WAF، نظارت بر لاگها و مدیریت منابع نیز به کاهش تهدیدات کمک میکند. اجرای اصولی این اقدامات، امنیت و پایداری وبسایتهای میزبانیشده روی Apache را افزایش میدهد.
امنیت Apache به مجموعهای از تنظیمات، اقدامات پیشگیرانه و روشهای نظارتی گفته میشود که برای محافظت از وبسرور Apache HTTP Server در برابر نفوذ، دسترسی غیرمجاز، افشای اطلاعات، حملات محرومسازی از سرویس و سوءاستفاده از پیکربندیهای ناامن انجام میشوند. سختسازی یا Hardening وبسرور Apache شامل بهروزرسانی نرمافزار، محدودکردن دسترسیها، ایمنسازی HTTPS، مدیریت ماژولها، تنظیم هدرهای امنیتی و پایش مستمر فعالیتهای سرور است.
مقدمه؛ چرا امنیت Apache برای وبسایتها اهمیت دارد؟
وبسرور Apache یکی از شناختهشدهترین نرمافزارهای ارائه خدمات وب است که در بسیاری از وبسایتها، سامانههای سازمانی، فروشگاههای اینترنتی و زیرساختهای میزبانی استفاده میشود. این وبسرور به دلیل انعطافپذیری، پشتیبانی از ماژولهای مختلف، سازگاری با سیستمعاملهای گوناگون و قابلیت مدیریت چندین وبسایت روی یک سرور، جایگاه مهمی در زیرساخت اینترنت دارد.
بااینحال، قدرتمندبودن Apache به معنای امنبودن تمام پیکربندیهای آن نیست. تنظیمات پیشفرض ممکن است برای یک محیط عمومی مناسب باشند، اما لزوماً پاسخگوی نیازهای امنیتی یک وبسایت حساس یا سرور عملیاتی نیستند.
برای مثال، فعالبودن قابلیت فهرستکردن فایلهای دایرکتوری، تنظیم نادرست سطح دسترسی، استفاده از نسخههای آسیبپذیر یا انتشار ناخواسته فایلهای پیکربندی میتواند مسیر دسترسی به اطلاعات حساس را باز کند.
همچنین حملاتی مانند Brute Force، حملات مبتنی بر درخواستهای HTTP، سوءاستفاده از سرویسهای Reverse Proxy و تلاش برای مصرف بیشازحد منابع سرور ممکن است عملکرد وبسایت را مختل کنند.
در چنین شرایطی، اجرای اصول Hardening اهمیت پیدا میکند.
سختسازی Apache صرفاً شامل نصب یک فایروال یا فعالکردن SSL نیست؛ بلکه مجموعهای از کنترلهای امنیتی در چندین لایه است که باید با یکدیگر هماهنگ باشند.
در این راهنمای جامع از رخنهکاو، امنیت Apache را از مفاهیم پایه تا تنظیمات پیشرفته بررسی میکنیم و روشهای کاربردی محافظت از وبسرور، نمونه پیکربندیهای دفاعی، اشتباهات متداول و مراحل ارزیابی امنیت را توضیح میدهیم.
وبسرور Apache چیست و چگونه کار میکند؟
Apache HTTP Server که معمولاً با نام Apache یا httpd شناخته میشود، یک وبسرور متنباز است که درخواستهای HTTP و HTTPS کاربران را دریافت و پردازش میکند.
هنگامی که کاربر آدرس یک وبسایت را در مرورگر وارد میکند، درخواست او از طریق شبکه به سرور مقصد ارسال میشود. Apache این درخواست را دریافت میکند و براساس تنظیمات موجود، پاسخ مناسب را برمیگرداند.
این پاسخ میتواند یک فایل HTML، تصویر، فایل CSS، محتوای تولیدشده توسط PHP یا نتیجه پردازش یک برنامه در سرور دیگری باشد.
اجزای اصلی معماری Apache
معماری Apache از چند بخش مهم تشکیل شده است:
Apache Core: هسته اصلی وبسرور که وظایفی مانند پردازش درخواست، مدیریت ارتباطات و اجرای دستورالعملهای پایه را انجام میدهد.
Modules: ماژولهایی که امکاناتی مانند مدیریت SSL/TLS، بازنویسی URL، احراز هویت، پروکسی معکوس و کنترل هدرها را اضافه میکنند.
Virtual Hosts: قابلیتی برای میزبانی چندین وبسایت با دامنهها یا تنظیمات متفاوت روی یک سرور.
Configuration Files: فایلهای پیکربندی که رفتار وبسرور، دسترسیها، مسیرها و قابلیتهای فعال را مشخص میکنند.
MPM: ماژول پردازش چندگانه یا Multi-Processing Module که روش مدیریت پردازشها، رشتهها و ارتباطات را تعیین میکند.
Logging System: سیستم ثبت رویدادها که اطلاعات مربوط به درخواستها، خطاها و فعالیتهای سرور را ذخیره میکند.
امنیت Apache زمانی مؤثر است که تمام این اجزا بهدرستی پیکربندی شوند.
تفاوت Apache با سایر وبسرورها
Apache و Nginx دو گزینه شناختهشده در زیرساخت وب هستند.
Apache از معماری ماژولار و قابلیتهایی مانند فایلهای .htaccess پشتیبانی میکند. Nginx نیز با معماری رویدادمحور خود برای مدیریت تعداد زیادی ارتباط همزمان طراحی شده است.
البته Apache هم از طریق Event MPM میتواند ارتباطات را بهصورت بهینه مدیریت کند.
از نظر امنیتی، هیچکدام صرفاً به دلیل نام یا معماری خود کاملاً مصون نیستند. میزان امنیت به نسخه نرمافزار، ماژولهای فعال، تنظیمات، برنامههای میزبانیشده و نحوه مدیریت سرور بستگی دارد.
بنابراین انتخاب Apache بهخودیخود یک ضعف امنیتی محسوب نمیشود؛ اما پیکربندی اشتباه آن میتواند سطح حمله را افزایش دهد.
Hardening وبسرور Apache چیست؟
Hardening یا سختسازی وبسرور فرآیندی است که طی آن قابلیتهای غیرضروری حذف، دسترسیها محدود و تنظیمات پیشفرض براساس نیازهای امنیتی اصلاح میشوند.
هدف اصلی Hardening کاهش Attack Surface یا سطح حمله است.
سطح حمله به مجموعه مسیرها، خدمات، قابلیتها و نقاطی گفته میشود که ممکن است برای دسترسی غیرمجاز یا سوءاستفاده مورد استفاده قرار گیرند.
برای مثال، یک وبسرور با ماژولهای متعدد و بدون کنترل دسترسی مناسب معمولاً قابلیتهای بیشتری در معرض درخواستهای خارجی دارد.
در مقابل، سروری که تنها خدمات ضروری را اجرا میکند و برای هر مسیر سیاست مشخصی دارد، از سطح حمله محدودتری برخوردار است.
تفاوت امنیت Apache و Hardening Apache
امنیت Apache مفهوم گستردهتری است که پیشگیری، شناسایی، پاسخگویی و بازیابی از حوادث را در بر میگیرد.
Hardening بخشی از این مفهوم است و بیشتر بر کاهش خطرهای ناشی از تنظیمات، امکانات و دسترسیهای غیرضروری تمرکز دارد.
برای نمونه:
- نصب وصلههای امنیتی بخشی از نگهداری امن سرور است.
- غیرفعالکردن قابلیت فهرستکردن دایرکتوریها یک اقدام Hardening محسوب میشود.
- بررسی لاگها به شناسایی رویدادهای مشکوک کمک میکند.
- پشتیبانگیری و بازیابی، پیامدهای حوادث احتمالی را محدود میکند.
- استفاده از WAF لایه محافظتی دیگری در برابر درخواستهای مخرب ایجاد میکند.
بنابراین Hardening جایگزین سایر اقدامات امنیتی نیست، بلکه یکی از پایههای ضروری امنیت وبسرور است. 
مهمترین تهدیدات امنیتی وبسرور Apache
شناخت تهدیدها کمک میکند تنظیمات امنیتی براساس خطرهای واقعی انتخاب شوند.
افشای اطلاعات حساس
Information Disclosure زمانی رخ میدهد که اطلاعاتی خارج از سطح دسترسی موردنظر در اختیار کاربران قرار گیرند.
این اطلاعات ممکن است شامل فایلهای پشتیبان، فایلهای تنظیمات، مسیرهای داخلی، پیامهای خطای تفصیلی یا اطلاعات مربوط به نرمافزارهای نصبشده باشد.
برای مثال، قرارگرفتن یک فایل پشتیبان پایگاه داده در مسیر عمومی وبسایت میتواند خطر جدی ایجاد کند؛ حتی اگر خود Apache کاملاً بهروز باشد.
حملات Brute Force
در حملات Brute Force مهاجم تلاش میکند از طریق تعداد زیادی درخواست احراز هویت، رمز عبور معتبر یا اطلاعات ورود را پیدا کند.
این حملات معمولاً مستقیماً یک نقص در Apache نیستند و بیشتر صفحات ورود برنامههای میزبانیشده را هدف میگیرند.
بااینحال، وبسرور میتواند از طریق محدودسازی نرخ درخواست، ثبت رویدادها و همکاری با ابزارهای دفاعی به کاهش این تهدید کمک کند.
حملات DoS و DDoS
حمله Denial of Service یا DoS با هدف مختلکردن دسترسپذیری سرویس انجام میشود.
اگر درخواستها از چندین منبع توزیعشده ارسال شوند، اصطلاح Distributed Denial of Service یا DDoS به کار میرود.
مصرف بیشازحد ارتباطات، حافظه، پردازنده یا پهنای باند میتواند موجب کندی یا توقف پاسخگویی سایت شود.
تنظیم محدودیتهای منطقی در Apache مفید است، اما مقابله با حملات حجیم DDoS معمولاً به محافظت شبکهای و خدمات بالادستی نیز نیاز دارد.
سوءاستفاده از پیکربندی نامناسب
گاهی مشکل اصلی، وجود یک آسیبپذیری نرمافزاری نیست؛ بلکه تنظیم نادرست وبسرور است.
نمونههایی از این وضعیت عبارتاند از:
- دسترسی عمومی به مسیرهای مدیریتی
- فعالبودن سرویسهای غیرضروری
- مجوز نوشتن بیشازحد روی فایلها
- استفاده نادرست از Reverse Proxy
- محافظتنشدن از فایلهای مخفی
- فعالبودن روشهای HTTP بدون نیاز عملیاتی
این موارد نشان میدهند که بررسی پیکربندی باید بخشی ثابت از فرآیند امنیت Apache باشد.
آسیبپذیریهای برنامههای تحت وب
حملاتی مانند Cross-Site Scripting یا XSS، تزریق SQL، جعل درخواست بینسایتی یا CSRF و نقص کنترل دسترسی معمولاً به لایه برنامه مربوط هستند.
Apache بهتنهایی نمیتواند تمام این آسیبپذیریها را برطرف کند.
برای نمونه، جلوگیری از CSRF به طراحی صحیح کنترلهای برنامه، توکنهای معتبر و سیاستهای مناسب کوکی وابسته است.
وبسرور با تنظیم هدرهای امنیتی و استفاده از WAF میتواند دفاع تکمیلی ایجاد کند، اما اصلاح مشکل در کد برنامه همچنان ضروری است.
بررسی وضعیت فعلی Apache پیش از سختسازی
قبل از اعمال تغییرات امنیتی، لازم است وضعیت موجود سرور مشخص شود.
تغییر مستقیم تنظیمات بدون شناخت ساختار سرویس ممکن است موجب اختلال در وبسایت، ازکارافتادن ارتباط با PHP یا قطع دسترسی کاربران شود.
شناسایی نسخه Apache
در بسیاری از سیستمهای لینوکسی میتوان از دستور زیر استفاده کرد:
apache2 -v
در برخی توزیعها نام برنامه بهجای apache2 برابر با httpd است:
httpd -v
این دستور نسخه نرمافزار را نشان میدهد، اما برای تشخیص وضعیت امنیتی کافی نیست.
بعضی توزیعهای لینوکس وصلههای امنیتی را روی نسخههای بستهبندیشده اعمال میکنند، بدون اینکه شماره نسخه اصلی الزاماً تغییر عمدهای داشته باشد.
بنابراین باید علاوه بر شماره نسخه، اطلاعیههای امنیتی توزیع و وضعیت بسته نصبشده بررسی شوند.
بررسی ماژولهای فعال
برای مشاهده ماژولهای بارگذاریشده میتوان از دستور زیر استفاده کرد:
apache2ctl -M
در بعضی محیطها دستور زیر کاربرد دارد:
httpd -M
خروجی این دستور مشخص میکند چه ماژولهایی در فرآیند پردازش درخواست حضور دارند.
وجود یک ماژول لزوماً به معنای آسیبپذیربودن آن نیست؛ اما هر قابلیت فعال باید دلیل مشخصی داشته باشد.
شناسایی فایلهای پیکربندی
در توزیعهای Debian و Ubuntu معمولاً فایلها و پوشههای زیر اهمیت دارند:
/etc/apache2/apache2.conf/etc/apache2/sites-available//etc/apache2/sites-enabled//etc/apache2/mods-enabled/
در توزیعهای مبتنی بر RHEL نیز مسیرهایی مانند /etc/httpd/conf/httpd.conf و /etc/httpd/conf.d/ متداول هستند.
مسیر واقعی باید مطابق سیستمعامل، روش نصب و خروجی تنظیمات Apache بررسی شود.
تهیه نسخه پشتیبان
قبل از تغییر تنظیمات، از فایلهای پیکربندی، گواهیهای مرتبط و اطلاعات ضروری نسخه پشتیبان تهیه کنید.
همچنین داشتن دسترسی مدیریتی جایگزین، بهویژه در سرورهای راهدور، اهمیت زیادی دارد.
بهتر است ابتدا تغییرات در محیط آزمایشی اعمال شوند و سپس با برنامه بازگشت مشخص به محیط عملیاتی منتقل شوند.
بهروزرسانی Apache و مدیریت آسیبپذیریها
یکی از مهمترین اصول امنیت Apache، نصب بهموقع اصلاحیههای امنیتی است.
آسیبپذیریهای نرمافزاری ممکن است بر اثر خطاهای پردازش درخواست، مدیریت حافظه، اعتبارسنجی ورودی یا تعامل ماژولها به وجود آیند.
حتی سروری که بهدرستی پیکربندی شده است، در صورت استفاده از نسخه آسیبپذیر همچنان در معرض خطر قرار دارد.
بهروزرسانی در Ubuntu و Debian
در سرورهایی که Apache از مخازن سیستمعامل نصب شده است، میتوان ابتدا اطلاعات بستهها را بهروزرسانی کرد:
sudo apt update
سپس بسته Apache را مطابق سیاست نگهداری سرور بهروزرسانی کرد:
sudo apt install --only-upgrade apache2
در سایر توزیعها باید از مدیر بسته مناسب مانند DNF استفاده شود.
در محیط عملیاتی، قبل از اجرای بهروزرسانی باید سازگاری ماژولها، پنجره نگهداری و امکان بازگشت بررسی شود.
چرا فقط به شماره نسخه توجه نکنیم؟
یک بسته توزیعشده ممکن است اصلاحیه امنیتی دریافت کرده باشد، درحالیکه شماره نسخه اصلی آن با آخرین نسخه منتشرشده یکسان نیست.
برعکس، نصب نسخه جدید از منبع نامعتبر نیز تضمینی برای امنیت محسوب نمیشود.
به همین دلیل، بررسی اطلاعیههای امنیتی فروشنده یا توزیعکننده و وضعیت پشتیبانی بسته اهمیت بیشتری از مقایسه سطحی شماره نسخه دارد.
بهروزرسانی وابستگیها
Apache معمولاً بهتنهایی اجرا نمیشود.
کتابخانههای TLS، مفسر PHP، ماژولهای جانبی، سیستمعامل و برنامههای وب نیز باید بهروز باشند.
برای مثال، بهروزرسانی Apache بدون رسیدگی به یک افزونه آسیبپذیر وردپرس، خطر مربوط به آن افزونه را برطرف نمیکند.
کاهش سطح حمله با غیرفعالکردن ماژولهای غیرضروری
یکی از مؤثرترین اقدامات Hardening، اجرای اصل حداقل قابلیت یا Minimum Functionality است.
طبق این اصل، فقط امکاناتی باید فعال باشند که برای عملکرد واقعی وبسایت ضروری هستند.
Apache از ماژولهای متنوعی پشتیبانی میکند، اما تمام آنها برای همه وبسایتها لازم نیستند.
کدام ماژولها باید بررسی شوند؟
ماژولهایی مانند mod_autoindex، mod_status، mod_info، mod_dav، mod_cgi و ماژولهای Proxy باید براساس نیاز عملیاتی بررسی شوند.
برای مثال:
mod_autoindex قابلیت تولید فهرست دایرکتوری را فراهم میکند.
mod_status اطلاعات وضعیت فعالیت وبسرور را ارائه میدهد.
mod_dav امکانات مربوط به WebDAV را اضافه میکند.
mod_proxy برای کاربردهایی مانند Reverse Proxy استفاده میشود.
هیچکدام از این ماژولها ذاتاً مخرب نیستند؛ اما فعالبودن بدون نیاز یا پیکربندی نادرست میتواند خطر ایجاد کند.
غیرفعالکردن ایمن ماژول
در برخی سیستمهای Debian و Ubuntu، دستور زیر برای غیرفعالکردن یک ماژول استفاده میشود:
sudo a2dismod autoindex
این دستور صرفاً یک مثال است و نباید بدون بررسی وابستگیها برای تمام ماژولها اجرا شود.
پس از هر تغییر، باید صحت فایل پیکربندی و عملکرد سایت بررسی شود.
گاهی حذف یک ماژول باعث اختلال در برنامه، سیستم مانیتورینگ یا قواعد بازنویسی میشود.
بنابراین هدف، حذف حداکثری ماژولها نیست؛ بلکه حفظ مجموعهای حداقلی و ضروری از قابلیتها است.
مخفیکردن اطلاعات نسخه و مشخصات وبسرور Apache
وبسرور ممکن است اطلاعاتی درباره نوع نرمافزار یا نسخه آن در هدر پاسخ یا صفحات خطا نمایش دهد.
کاهش این اطلاعات میتواند میزان جزئیات آشکارشده برای کاربران ناشناس را محدود کند.
دو دستور شناختهشده برای این منظور عبارتاند از:
ServerTokens Prod
ServerSignature Off
کاربرد ServerTokens
دستور ServerTokens میزان اطلاعات نسخه و مشخصات نرمافزار را در هدر Server کنترل میکند.
مقدار Prod معمولاً اطلاعات را به نام محصول محدود میکند.
کاربرد ServerSignature
دستور ServerSignature Off نمایش امضای خودکار سرور در برخی صفحات تولیدشده توسط Apache را غیرفعال میکند.
این تنظیمات باید در محل مناسب پیکربندی سرور اعمال شوند؛ برای مثال ServerTokens یک دستور سطح سرور است و نمیتوان آن را بهدلخواه داخل هر Virtual Host قرار داد.
نکته مهم این است که مخفیکردن نسخه، آسیبپذیری نرمافزار را اصلاح نمیکند.
حتی اگر اطلاعات نسخه در پاسخ نمایش داده نشوند، شناسایی نوع وبسرور از طریق رفتار ارتباطی یا سایر نشانهها همچنان ممکن است.
بنابراین این اقدام باید یک کنترل تکمیلی محسوب شود، نه جایگزین بهروزرسانی. 
مدیریت دسترسی فایلها و دایرکتوریها در Apache
یکی از حساسترین بخشهای امنیت Apache، تعیین این موضوع است که کاربران به چه فایلها و مسیرهایی دسترسی داشته باشند.
وبسرور باید فقط محتوایی را ارائه کند که انتشار عمومی آن مجاز است.
اصل دسترسی حداقلی
Principle of Least Privilege یا اصل حداقل دسترسی بیان میکند که هر سرویس و کاربر باید فقط مجوزهای موردنیاز خود را داشته باشد.
برای مثال، فرآیند سرویسدهنده وب معمولاً نیازی به امکان تغییر فایلهای اجرایی Apache یا تنظیمات اصلی سرور ندارد.
همچنین کاربر اجرای وبسایت نباید بدون دلیل به فایلهای سایر سرویسها دسترسی داشته باشد.
محدودکردن دسترسی پیشفرض
یکی از الگوهای دفاعی در سطح پیکربندی Apache به شکل زیر است:
<Directory "/">
AllowOverride None
Require all denied
</Directory>
این تنظیم، دسترسی پیشفرض به مسیرهای فایلسیستمی را محدود میکند.
سپس باید برای دایرکتوریهای واقعاً مجاز، دسترسی مشخص تعریف شود.
برای مثال، در یک وبسایت آزمایشی با مسیر فرضی /var/www/example/public:
<Directory "/var/www/example/public">
Options -Indexes
AllowOverride None
Require all granted
</Directory>
این نمونه برای نمایش منطق کنترل دسترسی است و پیکربندی کامل یک سایت عملیاتی محسوب نمیشود.
در سایتهای مبتنی بر CMS، تنظیمات .htaccess، بازنویسی URL و مجوزهای برنامه نیز باید در نظر گرفته شوند.
مدیریت مالکیت فایلها
فایلهای پیکربندی اصلی Apache باید تحت کنترل حسابهای مدیریتی مناسب باشند.
پوشههای قابلنوشتن برنامه نیز باید از فایلهای اجرایی و تنظیمات حساس تفکیک شوند.
دادن مجوز نوشتن عمومی به تمام فایلها، بهخصوص با تنظیماتی مانند 777، راهکار مناسبی برای رفع مشکلات دسترسی نیست.
مجوزهای صحیح به مالکیت فایل، نوع برنامه، کاربران سرویس و ساختار میزبانی وابسته هستند.
جلوگیری از Directory Listing در Apache
Directory Listing به قابلیتی گفته میشود که در صورت وجود شرایط مناسب، فهرست فایلهای یک دایرکتوری را به کاربر نمایش میدهد.
اگر این قابلیت بدون نیاز فعال باشد، ممکن است نام فایلهای داخلی، نسخههای پشتیبان یا ساختار محتوای سایت آشکار شود.
برای غیرفعالکردن فهرستسازی میتوان از دستور زیر در محل مناسب استفاده کرد:
Options -Indexes
این دستور باید در محدوده پیکربندی موردنظر قرار گیرد.
چرا غیرفعالکردن Indexes مهم است؟
فرض کنید در یک پوشه عمومی چند فایل قدیمی باقی مانده باشد.
اگر فهرست دایرکتوری فعال باشد، کاربر میتواند نام این فایلها را مشاهده کند.
غیرفعالکردن Indexes جلوی نمایش فهرست خودکار را میگیرد؛ اما بهتنهایی دسترسی مستقیم به فایلهایی را که آدرسشان مشخص است، مسدود نمیکند.
بنابراین فایلهای حساس باید خارج از مسیر عمومی نگهداری شوند یا با قواعد دسترسی مناسب محافظت شوند.
محافظت از فایلهای پیکربندی و اطلاعات حساس
یکی از مهمترین اقدامات Hardening وبسرور Apache، جلوگیری از انتشار فایلهایی است که برای دسترسی عمومی طراحی نشدهاند.
این فایلها ممکن است شامل تنظیمات پایگاه داده، کلیدهای برنامه، نسخههای پشتیبان یا اطلاعات محیط اجرا باشند.
فایلهای حساس متداول
ازجمله فایلها و پوشههایی که باید بررسی شوند میتوان به موارد زیر اشاره کرد:
- فایلهای محیطی مانند
.env - فایلهای مربوط به کنترل نسخه مانند
.git - فایلهای پشتیبان پایگاه داده
- نسخههای قدیمی فایلهای پیکربندی
- گزارشهای داخلی برنامه
- فایلهای حاوی رمز عبور یا کلیدهای خصوصی
- فایلهای تنظیمات اختصاصی CMS
بهترین روش، نگهداری اطلاعات حساس خارج از DocumentRoot یا ریشه عمومی وبسایت است.
محدودکردن دسترسی به فایلهای مخفی
یک نمونه دفاعی در سطح پیکربندی Apache:
<FilesMatch "^\.(?!well-known)">
Require all denied
</FilesMatch>
این قاعده برای محدودسازی دسترسی به فایلهای مخفی، با درنظرگرفتن استثنایی برای مسیرهای مرتبط با .well-known طراحی شده است.
بااینحال، استثناها و قواعد دسترسی باید متناسب با ساختار واقعی سایت ارزیابی شوند.
همچنین محافظت از یک نام فایل به معنای امنبودن تمام نسخههای پشتیبان یا مسیرهای جایگزین آن نیست.
جلوگیری از انتشار نسخههای پشتیبان
فایلهای پشتیبان بهتر است در فضای ذخیرهسازی جداگانه و با کنترل دسترسی مشخص نگهداری شوند.
نگهداری فایل ZIP یا خروجی پایگاه داده در پوشه عمومی سایت میتواند ریسک بالایی داشته باشد.
اگر نگهداری موقت چنین فایلهایی ضروری است، باید امکان دسترسی عمومی به آنها از ابتدا مسدود شود.
امنیت فایل htaccess در Apache
فایل .htaccess یکی از قابلیتهای شناختهشده Apache است که امکان اعمال برخی تنظیمات در سطح دایرکتوری را فراهم میکند.
این فایل در بسیاری از سایتهای وردپرسی برای مدیریت پیوندهای یکتا و قواعد بازنویسی URL استفاده میشود.
بااینحال، امکان تغییر رفتار وبسرور از طریق فایلهای داخل مسیر برنامه باید کنترلشده باشد.
نقش AllowOverride در امنیت Apache
دستور AllowOverride مشخص میکند کدام دسته از تنظیمات میتوانند از طریق .htaccess اعمال شوند.
برای مثال:
AllowOverride None
این مقدار استفاده از قواعد .htaccess را در محدوده مربوط غیرفعال میکند.
در محیطهایی که مدیر سرور به فایلهای اصلی پیکربندی دسترسی دارد، انتقال قواعد ضروری به تنظیمات مرکزی معمولاً کنترل بیشتری فراهم میکند.
اما این تغییر برای تمام سایتها مناسب نیست.
ملاحظات htaccess در وردپرس
وردپرس ممکن است برای مدیریت Permalink یا پیوندهای یکتا به قواعد بازنویسی نیاز داشته باشد.
اگر AllowOverride None فعال شود، ولی قواعد لازم به پیکربندی اصلی منتقل نشده باشند، ممکن است برخی آدرسهای سایت با خطای 404 مواجه شوند.
در هاست اشتراکی نیز معمولاً کاربر امکان ویرایش مستقیم پیکربندی اصلی Apache را ندارد.
در چنین شرایطی استفاده کنترلشده از .htaccess ممکن است بخشی ضروری از ساختار میزبانی باشد.
پس امنیت Apache به معنای حذف اجباری تمام فایلهای .htaccess نیست؛ بلکه باید قابلیتهای مجاز آنها متناسب با محیط محدود شوند. 
افزایش امنیت Apache با HTTPS و TLS
رمزنگاری ارتباطات یکی از مهمترین کنترلهای امنیتی وبسرور است.
HTTPS از پروتکل TLS برای محافظت از دادههای منتقلشده بین مرورگر و سرور استفاده میکند.
بدون رمزنگاری مناسب، اطلاعات حساس ممکن است در مسیر ارتباط در معرض مشاهده یا تغییر قرار گیرند.
تفاوت SSL و TLS
اصطلاح SSL هنوز در نام برخی تنظیمات و پنلهای مدیریت استفاده میشود، اما پروتکلهای قدیمی SSL برای کاربردهای امروزی مناسب نیستند.
TLS نسل جدیدتر و امنتر پروتکل محافظت از ارتباطات است.
در پیکربندیهای امروزی معمولاً TLS 1.2 و TLS 1.3 مورد استفاده قرار میگیرند.
محدودکردن نسخههای قدیمی پروتکل
در محیطی که نسخه Apache و کتابخانه TLS از این قابلیت پشتیبانی میکنند، نمونه زیر میتواند مبنایی برای تنظیم پروتکلهای مجاز باشد:
SSLProtocol -all +TLSv1.2 +TLSv1.3
این تنظیم باید داخل محدوده پیکربندی مناسب و با بررسی سازگاری کلاینتها اعمال شود.
همچنین انتخاب مجموعه رمزنگاری یا Cipher Suites باید متناسب با نسخه TLS، کتابخانه رمزنگاری و سیاست امنیتی سازمان انجام شود.
تنظیمات TLS 1.3 در همه محیطها دقیقاً مانند TLS 1.2 مدیریت نمیشوند.
مدیریت گواهی دیجیتال
نصب گواهی SSL/TLS معتبر تنها مرحله نخست است.
گواهی باید با دامنه مطابقت داشته باشد، زنجیره اعتبار آن کامل باشد و پیش از انقضا تمدید شود.
همچنین کلید خصوصی گواهی باید در مسیری با مجوزهای محدود ذخیره شود.
انتشار کلید خصوصی میتواند امنیت ارتباطات را به خطر بیندازد، حتی اگر سایر تنظیمات Apache صحیح باشند.
هدایت کاربران از HTTP به HTTPS
یکی از اقدامات رایج، هدایت درخواستهای HTTP به نسخه HTTPS سایت است.
برای مثال، در یک Virtual Host مخصوص پورت 80 میتوان از الگوی زیر استفاده کرد:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
این نمونه برای یک دامنه فرضی است و باید با ساختار واقعی سایت هماهنگ شود.
همچنین دامنههای جایگزین، زیردامنهها و شرایط استفاده از Reverse Proxy باید در طراحی هدایتها در نظر گرفته شوند. 
تنظیم هدرهای امنیتی Apache
HTTP Security Headers مجموعهای از هدرهای پاسخ هستند که به مرورگر درباره سیاستهای امنیتی سایت اطلاع میدهند.
این هدرها میتوانند در کاهش برخی خطرهای مرتبط با اجرای محتوا، بارگذاری منابع و استفاده از فریمها مؤثر باشند.
برای تنظیم بسیاری از این موارد در Apache از ماژول mod_headers استفاده میشود.
هدر X-Content-Type-Options
این هدر به مرورگر اعلام میکند که نوع محتوای اعلامشده توسط سرور را رعایت کند و از حدسزدن نامناسب نوع فایل جلوگیری کند.
نمونه تنظیم:
Header always set X-Content-Type-Options "nosniff"
این هدر برای کاهش خطرهای مربوط به MIME Type Sniffing کاربرد دارد.
البته لازم است نوع محتوای فایلها نیز بهدرستی در پاسخ مشخص شود.
هدر X-Frame-Options
این هدر برای کنترل نمایش صفحه داخل Frame یا Iframe به کار میرود.
برای سایتی که نباید داخل صفحات دیگر نمایش داده شود، میتوان مقدار زیر را بررسی کرد:
Header always set X-Frame-Options "DENY"
در بعضی برنامهها استفاده از SAMEORIGIN مناسبتر است.
انتخاب مقدار باید براساس نیاز سایت انجام شود؛ زیرا برخی درگاهها یا قابلیتهای تعبیه محتوا ممکن است به نمایش صفحه در فریم وابسته باشند.
هدر Referrer-Policy
هدر Referrer-Policy میزان اطلاعات مربوط به صفحه مبدأ را که مرورگر هنگام درخواست ارسال میکند، کنترل میکند.
یک تنظیم متداول:
Header always set Referrer-Policy "strict-origin-when-cross-origin"
این سیاست به کاهش انتشار غیرضروری اطلاعات مسیرهای داخلی در درخواستهای بینسایتی کمک میکند.
هدر Strict-Transport-Security
هدر HSTS به مرورگر اعلام میکند که برای دسترسیهای بعدی به دامنه، اتصال HTTPS را ترجیح ندهد، بلکه طبق سیاست اعلامشده آن را الزامی بداند.
برای شروع آزمایشی و پس از اطمینان از عملکرد صحیح HTTPS میتوان از نمونه زیر استفاده کرد:
Header always set Strict-Transport-Security "max-age=86400"
این مقدار معادل یک روز است و صرفاً میتواند نقطه شروع یک فرآیند استقرار مرحلهای باشد.
پس از اعتبارسنجی کامل، مدتزمان سیاست ممکن است افزایش پیدا کند.
استفاده از includeSubDomains یا preload باید با دقت بیشتری انجام شود، زیرا میتواند بر تمام زیردامنهها و امکان بازگشت از سیاست تأثیر بگذارد.
هدر HSTS فقط باید روی پاسخ HTTPS معتبر اعمال شود و نباید بدون بررسی وضعیت گواهیها فعال شود.
هدر Content-Security-Policy
سیاست امنیت محتوا یا CSP یکی از مهمترین قابلیتهای امنیتی مرورگر برای محدودکردن منابع قابلبارگذاری و رفتار اجرای محتوا است.
این سیاست میتواند در کاهش برخی حملات XSS و Clickjacking نقش داشته باشد.
اما تعریف یک CSP مؤثر نیازمند شناخت اسکریپتها، فونتها، تصاویر، APIها و سرویسهای خارجی سایت است.
برای شروع فرآیند ارزیابی، میتوان از حالت گزارشگیری یا Report-Only استفاده کرد.
مثال ساده:
Header always set Content-Security-Policy-Report-Only "default-src 'self'"
این نمونه برای شروع بررسی رفتار بارگذاری منابع است و سیاست نهایی امنیتی محسوب نمیشود.
در سایتهای وردپرسی، قالبها و افزونهها ممکن است از منابع خارجی یا اسکریپتهای Inline استفاده کنند.
در نتیجه اعمال یک CSP سختگیرانه بدون آزمایش میتواند بخشی از امکانات سایت را مختل کند.
نکته دیگر اینکه هدرهای امنیتی مکمل اعتبارسنجی ورودی، خروجیسازی امن و کنترل دسترسی هستند؛ نه جایگزین آنها.
مدیریت روشهای HTTP و غیرفعالکردن قابلیتهای غیرضروری
درخواستهای HTTP با روشهایی مانند GET، POST، HEAD، PUT و DELETE ارسال میشوند.
هر روش کاربرد مشخصی دارد و مجازبودن آن باید براساس نیاز برنامه تعیین شود.
مدیریت TRACE
روش TRACE برای برخی کاربردهای تشخیصی در پروتکل HTTP تعریف شده است.
اگر این قابلیت در محیط شما موردنیاز نیست، میتوان آن را غیرفعال کرد:
TraceEnable Off
این تنظیم باعث میشود Apache درخواستهای TRACE را طبق سیاست تعیینشده نپذیرد.
البته فعالبودن TRACE بهتنهایی اثبات وجود آسیبپذیری در Apache نیست.
محدودسازی روشهای غیرضروری
روشهایی مانند PUT و DELETE ممکن است برای برخی APIها یا سرویسهای WebDAV ضروری باشند.
بنابراین مسدودسازی سراسری آنها بدون شناخت برنامه صحیح نیست.
بهتر است ابتدا فهرست روشهای موردنیاز هر سرویس مشخص شود و سپس مجوزها در سطح برنامه، مسیر و وبسرور هماهنگ شوند.
همچنین کنترل روش HTTP نباید جایگزین احراز هویت و مجوزدهی صحیح شود.
جلوگیری از حملات DoS و مصرف بیشازحد منابع
تنظیمات مدیریت ارتباطات و منابع میتوانند بر مقاومت Apache در برابر درخواستهای غیرعادی تأثیر بگذارند.
هدف این تنظیمات جلوگیری از اشغال غیرضروری منابع و حفظ توان پاسخگویی سرور است.
استفاده از mod_reqtimeout
ماژول mod_reqtimeout برای تعیین محدودیت زمانی دریافت بخشهای مختلف درخواست HTTP کاربرد دارد.
برای مثال:
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
این تنظیم زمان دریافت هدر و بدنه درخواست را با درنظرگرفتن حداقل نرخ انتقال کنترل میکند.
مقادیر مناسب به نوع سایت، کیفیت ارتباط کاربران و اندازه درخواستهای معمول بستگی دارند.
برای سایتهایی که فایلهای بزرگ دریافت میکنند، تنظیم نامناسب میتواند باعث قطع درخواستهای قانونی شود.
مدیریت KeepAliveTimeout
دستور KeepAliveTimeout مدت انتظار برای درخواست بعدی روی یک ارتباط پایدار را کنترل میکند.
مقدار بیشازحد بالا ممکن است در برخی معماریها موجب اشغال غیرضروری منابع شود.
از طرف دیگر، مقدار بسیار پایین میتواند تعداد برقراری ارتباطات جدید را افزایش دهد.
بنابراین انتخاب مقدار باید با آزمون عملکرد و بررسی الگوی ترافیک انجام شود.
محدودکردن اندازه درخواست
Apache دستورهایی برای کنترل اندازه درخواستها ارائه میکند.
برای مثال:
LimitRequestBody 10485760
این نمونه حداکثر اندازه بدنه درخواست را به ۱۰ مگابایت محدود میکند.
چنین محدودیتی برای همه وبسایتها مناسب نیست.
در سایتهایی که آپلود فایل، دریافت ویدئو یا تبادل دادههای حجیم دارند، باید سقف متناسب با نیاز واقعی تعیین شود.
تنظیم MaxRequestWorkers
دستور MaxRequestWorkers تعداد درخواستهای همزمان قابلپردازش را در چارچوب MPM فعال محدود میکند.
اگر مقدار آن بیشازحد بالا باشد، ممکن است سرور در شرایط بار زیاد با کمبود حافظه مواجه شود.
اگر بسیار پایین باشد، درخواستهای کاربران در صف قرار میگیرند یا پاسخگویی کاهش پیدا میکند.
انتخاب مقدار مناسب باید براساس حافظه RAM، الگوی مصرف هر پردازش یا رشته، نوع MPM و رفتار برنامه انجام شود.
این تنظیمات میتوانند مقاومت سرور را افزایش دهند، اما راهکار کامل مقابله با DDoS حجیم نیستند.
استفاده از WAF برای افزایش امنیت Apache
Web Application Firewall یا WAF نوعی سامانه امنیتی است که ترافیک HTTP را براساس قواعد مشخص بررسی میکند.
WAF میتواند درخواستهای مشکوک را شناسایی، ثبت یا در شرایط تعریفشده مسدود کند.
ModSecurity چیست؟
ModSecurity یک موتور فایروال برنامه وب است که میتواند در معماریهای سازگار برای بررسی درخواستها و پاسخهای HTTP مورد استفاده قرار گیرد.
این ابزار معمولاً همراه با مجموعهای از قوانین امنیتی به کار میرود.
یکی از مجموعهقوانین شناختهشده، OWASP Core Rule Set یا CRS است.
قواعد CRS برای شناسایی الگوهای شناختهشده حملات وب طراحی شدهاند.
WAF چه حملاتی را کاهش میدهد؟
WAF با پیکربندی مناسب میتواند در شناسایی برخی الگوهای مرتبط با موارد زیر مؤثر باشد:
- تلاشهای متداول تزریق SQL
- برخی الگوهای XSS
- درخواستهای غیرعادی HTTP
- تلاش برای دسترسی به منابع حساس
- الگوهای شناختهشده سوءاستفاده از برنامههای وب
بااینحال، هیچ مجموعهقانونی نمیتواند تمام حملات را تشخیص دهد.
اهمیت حالت Detection
در زمان استقرار اولیه WAF، فعالسازی حالت شناسایی و ثبت رویدادها میتواند به تحلیل درخواستهای قانونی کمک کند.
پس از بررسی هشدارها و اصلاح قواعد، میتوان سیاستهای مسدودسازی را مرحلهای اجرا کرد.
این روش احتمال False Positive یا مثبت کاذب را کاهش میدهد.
مثبت کاذب زمانی رخ میدهد که یک درخواست قانونی به اشتباه مخرب تشخیص داده شود.
برای مثال، یک فرم مدیریتی ممکن است اطلاعات فنی یا کدهای نمونه دریافت کند و برخی قواعد عمومی آن را مشکوک تشخیص دهند.
بنابراین WAF باید متناسب با برنامه تنظیم و نگهداری شود.
امنیت Apache در معماری Reverse Proxy
Apache میتواند در نقش Reverse Proxy یا پروکسی معکوس قرار گیرد.
در این معماری، درخواست کاربران ابتدا به Apache میرسد و سپس به یک سرویس داخلی هدایت میشود.
این ساختار در برنامههای Node.js، سرویسهای داخلی، APIها و معماریهای چندلایه کاربرد دارد.
خطر Open Proxy
اگر قابلیت Forward Proxy بدون محدودیت فعال شود، ممکن است سرور برای ارسال درخواست به مقصدهای ناخواسته مورد استفاده قرار گیرد.
برای بسیاری از معماریهای Reverse Proxy، تنظیم زیر مناسب است:
ProxyRequests Off
این دستور مانع فعالبودن قابلیت عمومی Forward Proxy میشود و بهتنهایی استفاده از ProxyPass برای پروکسی معکوس را غیرفعال نمیکند.
محدودسازی مقصدهای Proxy
مقصدهای Reverse Proxy باید مشخص، قابلاعتماد و براساس نیاز برنامه تعریف شوند.
استفاده از مقصدهای پویا که بدون اعتبارسنجی از ورودی کاربر ساخته میشوند، ممکن است خطر درخواست سمت سرور یا SSRF را افزایش دهد.
SSRF زمانی مطرح میشود که یک سرویس از طرف کاربر به منابعی درخواست ارسال کند که دسترسی مستقیم به آنها نباید مجاز باشد.
مدیریت IP واقعی کاربران
هنگامی که Apache پشت CDN یا Load Balancer قرار دارد، ممکن است IP مشاهدهشده متعلق به واسط شبکه باشد.
ماژول mod_remoteip میتواند اطلاعات IP اصلی را از هدرهای مشخص استخراج کند.
اما اعتماد بدون محدودیت به هدرهایی مانند X-Forwarded-For خطرناک است؛ زیرا این اطلاعات در شرایط خاص میتوانند توسط درخواستکننده جعل شوند.
فقط پراکسیهای معتبر و شناختهشده باید مجاز به ارائه اطلاعات IP قابلاعتماد باشند.
همچنین باید دسترسی مستقیم به Origin Server براساس معماری شبکه کنترل شود.
ایمنسازی Apache در سایتهای وردپرسی
امنیت Apache برای وبسایتهای وردپرسی اهمیت ویژهای دارد؛ زیرا وبسرور در کنار PHP، پایگاه داده، قالبها و افزونهها فعالیت میکند.
بااینحال، امنیت وردپرس و امنیت Apache دو حوزه کاملاً یکسان نیستند.
محافظت از wp-config.php
فایل wp-config.php شامل اطلاعات مهم پیکربندی وردپرس است.
دسترسی عمومی به محتوای این فایل باید مسدود باشد و نحوه پردازش فایلهای PHP باید درست پیکربندی شده باشد.
همچنین مجوزهای فایل و محل نگهداری آن باید متناسب با ساختار میزبانی تنظیم شوند.
جلوگیری از اجرای کد در مسیرهای آپلود
پوشههای آپلود معمولاً برای نگهداری تصاویر، اسناد و فایلهای رسانهای طراحی شدهاند.
اگر برنامه نیازی به اجرای کد در این مسیرها ندارد، باید از اجرای اسکریپتهای سمت سرور در آنها جلوگیری شود.
این محدودیت بهتر است در سطح پیکربندی وبسرور و پردازشگر PHP اعمال شود.
صرفاً مسدودکردن یک پسوند مشخص ممکن است در تمام معماریها کافی نباشد؛ زیرا نحوه نگاشت فایلها به پردازشگرها متفاوت است.
بررسی دسترسی به wp-admin
مسیر مدیریت وردپرس باید با احراز هویت مناسب محافظت شود.
فعالکردن احراز هویت دومرحلهای یا 2FA برای حسابهای مدیریتی، محدودسازی تلاشهای ورود و استفاده از رمزهای عبور قوی اهمیت زیادی دارند.
در محیطهای مشخص، محدودسازی دسترسی مدیریتی براساس IP یا VPN نیز ممکن است مناسب باشد.
اما چنین محدودیتی برای مدیرانی با IP متغیر باید با برنامه دسترسی اضطراری طراحی شود.
هماهنگی Apache و PHP-FPM
در بسیاری از نصبهای جدید، PHP از طریق PHP-FPM اجرا میشود.
در چنین محیطهایی باید مجوزهای فایل، کاربران اجرای PHP و مسیرهای قابلنوشتن بهدرستی تفکیک شوند.
اگر چند وبسایت روی یک سرور قرار دارند، تفکیک دسترسی بین سایتها اهمیت بیشتری پیدا میکند.
نفوذ به یکی از سایتها نباید بهسادگی امکان تغییر فایلهای سایر سایتها را فراهم کند.
امنیت فروشگاههای ووکامرسی
در فروشگاههای WooCommerce، محافظت از اطلاعات کاربران، نشستهای ورود، ارتباطات HTTPS و سرویسهای پرداخت اهمیت بیشتری دارد.
همچنین فعالسازی قوانین بسیار سختگیرانه WAF ممکن است فرآیندهایی مانند ثبت سفارش، بازگشت از درگاه پرداخت یا استفاده از REST API را مختل کند.
به همین دلیل، تمام تغییرات امنیتی باید با سناریوهای واقعی خرید آزمایش شوند.
امنیت سیستمعامل و سرویس اجرای Apache
امنیت وبسرور تنها به فایل پیکربندی Apache محدود نیست.
سیستمعامل، حسابهای کاربری، سرویسهای شبکه و سطح دسترسی فرآیندها نیز نقش مهمی دارند.
اجرای سرویس با دسترسی محدود
در نصبهای متداول Unix/Linux، ممکن است فرآیند اصلی Apache با دسترسی مدیریتی شروع شود تا بتواند عملیات ضروری مانند اتصال به پورتهای ویژه را انجام دهد.
سپس پردازشهای پاسخدهنده با حساب کاربری محدودتری فعالیت میکنند.
نباید بدون بررسی معماری و نیاز سرویس، تمام پردازشهای وبسرور با دسترسی مدیریتی اجرا شوند.
مدیریت دسترسی SSH
مدیریت سرور بهتر است از طریق حسابهای مشخص، احراز هویت قوی و سیاستهای دسترسی محدود انجام شود.
استفاده از کلیدهای SSH، محدودسازی حسابهای مدیریتی و ثبت فعالیتها میتواند ریسک دسترسی غیرمجاز را کاهش دهد.
در صورت امکان، دسترسی مدیریتی باید از شبکههای شناختهشده یا VPN انجام شود.
فایروال سیستمعامل
فایروال باید تنها پورتها و ارتباطات ضروری را مجاز بداند.
برای یک وبسرور عمومی، معمولاً دسترسی به پورتهای HTTP و HTTPS موردنیاز است.
اما سرویسهای پایگاه داده، ابزارهای مدیریتی و پورتهای داخلی نباید بدون دلیل در دسترس اینترنت قرار گیرند.
جداسازی سرویسها
در زیرساختهای چندسایتی، استفاده از حسابهای مجزا، سیاستهای فایلسیستم و کنترلهای ایزولهسازی میتواند دامنه اثر یک حادثه را محدود کند.
ابزارهایی مانند SELinux یا AppArmor نیز در سیستمهای سازگار امکان اعمال سیاستهای کنترل دسترسی اجباری را فراهم میکنند.
این کنترلها باید متناسب با نیاز نرمافزارها تنظیم شوند تا باعث اختلال در سرویس نشوند.
ثبت لاگ و مانیتورینگ امنیتی Apache
Logging یا ثبت رویدادها یکی از مهمترین قابلیتهای شناسایی و بررسی مشکلات امنیتی است.
بدون اطلاعات مناسب درباره درخواستها، خطاها و وضعیت سرویس، تشخیص علت بسیاری از رویدادها دشوار میشود.
Access Log چیست؟
Access Log اطلاعات مربوط به درخواستهای دریافتشده توسط وبسرور را ثبت میکند.
این اطلاعات ممکن است شامل زمان، آدرس درخواست، IP، روش HTTP، کد پاسخ و اطلاعات دیگری براساس قالب تعریفشده باشد.
بررسی Access Log میتواند به شناسایی افزایش ناگهانی درخواستها، الگوهای غیرعادی و مراجعه مکرر به مسیرهای حساس کمک کند.
Error Log چیست؟
Error Log رویدادهای خطا و پیامهای تشخیصی وبسرور را ثبت میکند.
خطاهای دسترسی، مشکلات ماژولها و برخی خطاهای مربوط به پردازش درخواست ممکن است در این فایل ثبت شوند.
البته تمام خطاهای برنامه الزاماً در Error Log مربوط به Apache ظاهر نمیشوند.
برای مثال، PHP-FPM یا برنامه اصلی ممکن است فایل لاگ جداگانه داشته باشند.
کنترل اطلاعات حساس در لاگها
ثبت اطلاعات بیشتر همیشه به معنای امنیت بالاتر نیست.
لاگها نباید بدون ضرورت حاوی رمزهای عبور، توکنهای نشست یا اطلاعات حساس کاربران باشند.
همچنین بعضی پارامترهای URL ممکن است دادههای محرمانه داشته باشند.
بنابراین قالب ثبت رویداد، سطح دسترسی به فایلها و سیاست نگهداری باید متناسب با الزامات امنیتی و حریم خصوصی تنظیم شوند.
شناسایی رفتارهای غیرعادی
برخی نشانههایی که ارزش بررسی دارند عبارتاند از:
- افزایش ناگهانی خطاهای 401 و 403
- تعداد زیاد درخواست به صفحات ورود
- افزایش غیرمعمول خطاهای 404
- درخواستهای پرتکرار به مسیرهای حساس
- رشد شدید مصرف منابع سرور
- افزایش خطاهای 500
- تغییرات غیرمنتظره در فایلهای پیکربندی
این موارد بهتنهایی اثبات حمله نیستند، اما میتوانند نقطه شروع تحلیل امنیتی باشند.
محافظت از صفحات مدیریتی و وضعیت سرور
Apache و برخی ماژولهای آن قابلیتهایی برای نمایش اطلاعات مدیریتی یا وضعیت عملکرد فراهم میکنند.
اگر این اطلاعات بدون کنترل دسترسی منتشر شوند، ممکن است جزئیاتی درباره رفتار سرور در اختیار کاربران غیرمجاز قرار گیرند.
محافظت از mod_status
اگر قابلیت mod_status برای مانیتورینگ لازم است، باید دسترسی به آن محدود شود.
برای مثال، در یک سرور که فقط دسترسی محلی موردنیاز است:
<Location "/server-status">
SetHandler server-status
Require local
</Location>
این نمونه به ساختار ماژولها و تنظیمات واقعی سرور وابسته است.
اگر سیستم مانیتورینگ از یک میزبان جداگانه استفاده میکند، باید فقط همان مسیر ارتباطی مجاز شود.
جلوگیری از نمایش اطلاعات تشخیصی
پیامهای خطای عمومی نباید اطلاعات غیرضروری درباره ساختار داخلی برنامه منتشر کنند.
نمایش مسیرهای کامل فایلسیستم، جزئیات استثناها یا اطلاعات اتصال به پایگاه داده میتواند به افشای اطلاعات منجر شود.
صفحات خطا بهتر است برای کاربر قابلفهم باشند، درحالیکه جزئیات تشخیصی در لاگهای محافظتشده ثبت شوند.
تهیه نسخه پشتیبان و برنامه بازیابی Apache
پشتیبانگیری یکی از اجزای مهم راهبرد امنیتی است.
حتی با اجرای کنترلهای مناسب، همچنان احتمال بروز خطای انسانی، اختلال سختافزاری یا حادثه امنیتی وجود دارد.
بنابراین باید امکان بازگرداندن سرویس به وضعیت سالم فراهم باشد.
چه اطلاعاتی باید پشتیبانگیری شوند؟
نسخه پشتیبان باید متناسب با معماری، موارد ضروری زیر را پوشش دهد:
- فایلهای پیکربندی Apache
- فایلهای Virtual Host
- تنظیمات ماژولهای موردنیاز
- فایلهای برنامههای تحت وب
- اطلاعات پایگاه داده
- اطلاعات لازم برای بازیابی گواهیها و تنظیمات TLS
- مستندات زیرساخت و وابستگیهای سرویس
کلیدهای خصوصی و اطلاعات حساس باید با رمزنگاری و کنترل دسترسی مناسب نگهداری شوند.
آزمون بازیابی
وجود فایل پشتیبان بهتنهایی کافی نیست.
باید بهصورت دورهای مشخص شود که فایلها سالم هستند و فرآیند بازیابی واقعاً کار میکند.
در محیطهای حساس، نگهداری یک نسخه جدا از سرور اصلی و تعریف اهداف بازیابی میتواند پیامدهای حوادث را کاهش دهد. 
مراحل عملی Hardening وبسرور Apache
برای اجرای اصول امنیت Apache بهتر است از یک روند مرحلهای استفاده شود.
این روش احتمال خطای پیکربندی و اختلال در خدمات را کاهش میدهد.
مرحله اول: شناسایی داراییها و سرویسها
ابتدا فهرستی از وبسایتها، دامنهها، ماژولها، پورتها، پردازشگرهای برنامه و سرویسهای وابسته تهیه کنید.
مشخص کنید کدام خدمات عمومی و کدام خدمات فقط داخلی هستند.
مرحله دوم: بررسی نسخه و وصلههای امنیتی
وضعیت Apache، سیستمعامل و نرمافزارهای وابسته را بررسی کنید.
برای اصلاح آسیبپذیریهای شناختهشده، برنامه بهروزرسانی مناسب تهیه کنید.
مرحله سوم: کاهش امکانات غیرضروری
ماژولها و قابلیتهایی را که استفاده نمیشوند شناسایی کنید.
قبل از غیرفعالسازی، اثر آنها بر سرویسهای فعال را بررسی کنید.
مرحله چهارم: اعمال کنترل دسترسی
دسترسی فایلها، دایرکتوریها و مسیرهای مدیریتی را براساس اصل حداقل دسترسی اصلاح کنید.
فایلهای حساس را خارج از مسیرهای عمومی قرار دهید.
مرحله پنجم: ایمنسازی ارتباطات
گواهی TLS، نسخههای پروتکل، هدایت HTTP به HTTPS و سیاستهای مربوط به HSTS را بررسی کنید.
مرحله ششم: تنظیم هدرها و کنترل درخواستها
هدرهای امنیتی مناسب را اعمال کنید.
همچنین اندازه درخواستها، زمان دریافت اطلاعات و محدودیتهای منابع را متناسب با نوع برنامه تنظیم کنید.
مرحله هفتم: فعالسازی پایش و دفاع تکمیلی
لاگها، هشدارهای نظارتی و در صورت نیاز WAF را پیکربندی کنید.
قبل از فعالسازی قواعد مسدودسازی، احتمال اختلال در ترافیک قانونی را ارزیابی کنید.
مرحله هشتم: آزمایش و استقرار کنترلشده
پس از هر مجموعه تغییر، صحت پیکربندی، عملکرد برنامه و وضعیت پاسخهای HTTP را آزمایش کنید.
تنها زمانی تغییرات را در محیط عملیاتی اعمال کنید که نتیجه آزمایشها قابلقبول باشد.
نمونه پیکربندی پایه امنیت Apache
نمونه زیر مجموعهای محدود از تنظیمات دفاعی است که میتواند مبنای بررسی در یک سرور آزمایشی Apache 2.4 باشد:
ServerTokens Prod
ServerSignature Off
TraceEnable Off
<Directory "/">
AllowOverride None
Require all denied
</Directory>
<FilesMatch "^\.(?!well-known)">
Require all denied
</FilesMatch>
ProxyRequests Off
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
این نمونه یک فایل پیکربندی کامل و آماده جایگزینی نیست.
دستورهای آن باید در محل مجاز قرار گیرند و برای اجرا به وجود ماژولهای مربوط وابسته هستند.
برای مثال، RequestReadTimeout به mod_reqtimeout و ProxyRequests به ماژول مربوط به Proxy نیاز دارد.
همچنین پس از محدودسازی دسترسی پیشفرض، باید دایرکتوریهای مجاز وبسایت بهطور جداگانه تعریف شوند.
اعتبارسنجی فایل پیکربندی
پس از اعمال تغییرات، میتوان صحت نحوی پیکربندی را بررسی کرد:
sudo apache2ctl configtest
در محیطهای دیگر ممکن است دستور معادل زیر استفاده شود:
sudo httpd -t
در صورت موفقبودن بررسی نحوی، همچنان باید رفتار واقعی وبسایت آزمایش شود.
قبولشدن آزمون Syntax تضمین نمیکند که تمام مسیرها، قوانین دسترسی یا تنظیمات امنیتی مطابق انتظار عمل میکنند.
اعمال تغییرات با کمترین اختلال
در سیستمهایی که از systemd استفاده میکنند، پس از تأیید تنظیمات میتوان عملیات Reload را مطابق نام سرویس انجام داد.
برای مثال:
sudo systemctl reload apache2
در برخی توزیعها نام سرویس httpd است.
قبل از اجرای این عملیات در محیط عملیاتی، باید وضعیت سرویس، میزان ترافیک و امکان بازگشت به تنظیمات قبلی بررسی شود.
روشهای بررسی امنیت Apache پس از Hardening
اجرای تنظیمات امنیتی بدون ارزیابی نتیجه، فرآیندی ناقص است.
باید مشخص شود آیا تغییرات واقعاً اعمال شدهاند و آیا برنامه همچنان بهدرستی کار میکند.
تمام آزمونها باید فقط روی سامانههای متعلق به خودتان یا محیطهایی که برای ارزیابی آنها مجوز دارید انجام شوند.
بررسی پاسخهای HTTP
ابزارهایی مانند مرورگر و دستور curl امکان مشاهده هدرهای پاسخ را فراهم میکنند.
برای مثال:
curl -I https://example.com/
با بررسی خروجی میتوان وجود برخی هدرهای امنیتی، وضعیت هدایتها و اطلاعات عمومی پاسخ را مشاهده کرد.
البته درخواست HEAD همیشه دقیقاً معادل درخواست GET نیست و ممکن است رفتار برنامه برای این روشها متفاوت باشد.
بررسی HTTPS و گواهی
اعتبار گواهی، زنجیره اعتماد، تاریخ انقضا و نسخههای پشتیبانیشده TLS باید بررسی شوند.
این بررسی میتواند با ابزارهای مدیریتی و سرویسهای معتبر ارزیابی TLS انجام شود.
بررسی مجوزهای دسترسی
پس از Hardening باید اطمینان حاصل شود که کاربران ناشناس به فایلهای حساس دسترسی ندارند.
همزمان باید تأیید شود که فایلهای عمومی، تصاویر، صفحات سایت و APIهای مجاز همچنان قابلاستفاده هستند.
بررسی عملکرد وردپرس
در سایت وردپرسی، موارد زیر باید آزمایش شوند:
- صفحه اصلی و صفحات داخلی
- پیوندهای یکتا
- ورود و خروج کاربران
- بارگذاری فایلهای رسانهای
- عملکرد افزونهها
- ارتباط REST API
- صفحات مدیریت
- فرآیندهای خرید در فروشگاههای ووکامرسی
این آزمایشها کمک میکنند محدودیتهای امنیتی ناخواسته عملکرد سایت را مختل نکنند.
تفاوت Hardening، فایروال و WAF در امنیت Apache
گاهی این سه مفهوم بهجای یکدیگر استفاده میشوند، درحالیکه اهداف متفاوتی دارند.
| راهکار | وظیفه اصلی | نمونه کاربرد |
|---|---|---|
| Hardening | کاهش خطرهای ناشی از پیکربندی | محدودکردن ماژولها و دسترسیها |
| Network Firewall | کنترل ارتباطات شبکه | محدودکردن پورتها و IPها |
| WAF | بررسی درخواستهای برنامه وب | شناسایی الگوهای مشکوک HTTP |
| IDS/IPS | شناسایی یا جلوگیری از فعالیتهای مشکوک | تشخیص رفتارهای غیرعادی |
| Monitoring | پایش وضعیت و رویدادها | هشدار درباره خطاها و مصرف منابع |
| Backup | پشتیبانی از بازیابی | بازگردانی تنظیمات و دادهها |
ترکیب این کنترلها به ایجاد Defense in Depth یا دفاع چندلایه کمک میکند.
در دفاع چندلایه، شکست یک کنترل امنیتی نباید به معنای ازدسترفتن تمام محافظتهای سامانه باشد.
اشتباهات رایج در افزایش امنیت Apache
حتی مدیران باتجربه ممکن است هنگام سختسازی وبسرور مرتکب اشتباهاتی شوند که امنیت یا دسترسپذیری را کاهش میدهد.
اتکا به مخفیکردن نسخه Apache
محدودکردن اطلاعات هدر Server مفید است، اما جایگزین نصب وصلههای امنیتی نیست.
سروری با نسخه آسیبپذیر همچنان در معرض خطر قرار دارد؛ حتی اگر شماره نسخه نمایش داده نشود.
تغییر تنظیمات بدون تهیه پشتیبان
ویرایش مستقیم فایلهای پیکربندی بدون امکان بازگشت میتواند بازیابی سرویس را دشوار کند.
پیشنهاد میشود تمام تغییرات ثبت و در صورت امکان از سیستم کنترل نسخه مناسب برای تنظیمات استفاده شود.
البته مخزن تنظیمات نباید حاوی رمزهای عبور یا کلیدهای خصوصی افشاشده باشد.
غیرفعالکردن تمام ماژولها
حذف بیبرنامه ماژولها ممکن است امکانات ضروری را از کار بیندازد.
برای مثال، غیرفعالکردن ماژول بازنویسی URL در یک سایت وابسته به آن میتواند باعث اختلال گسترده شود.
استفاده از قواعد آماده بدون بررسی
کپیکردن تنظیمات امنیتی از یک سرور دیگر همیشه مناسب نیست.
یک سایت فروشگاهی با درخواستهای پرداخت، آپلود فایل و API ممکن است نیازهای متفاوتی نسبت به یک وبسایت ایستا داشته باشد.
فعالکردن CSP سختگیرانه بدون آزمایش
سیاست نامناسب CSP ممکن است اسکریپتهای ضروری، فونتها یا سرویسهای خارجی را مسدود کند.
بهتر است فرآیند تنظیم CSP با تحلیل منابع و حالت گزارشگیری آغاز شود.
محدودکردن بیشازحد درخواستها
تنظیم زمان انتظار یا اندازه درخواست بسیار پایین ممکن است کاربران واقعی را با خطا مواجه کند.
بهویژه در ارتباطات کند، آپلود فایلهای بزرگ و استفاده از APIها، این مسئله اهمیت دارد.
اعتماد به IPهای ارسالی از سمت کاربر
اعتماد بدون بررسی به هدرهایی مانند X-Forwarded-For میتواند باعث ثبت IP نادرست یا اختلال در کنترلهای امنیتی شود.
فقط واسطهای شبکه معتبر باید مجاز به معرفی IP واقعی باشند.
نگهداری فایلهای پشتیبان در مسیر عمومی
حتی اگر Directory Listing غیرفعال باشد، یک فایل پشتیبان ممکن است از طریق آدرس مستقیم قابلدسترسی باشد.
پشتیبانها باید در محیطی با دسترسی محدود نگهداری شوند.
بررسینکردن لاگها
وجود لاگ بدون پایش، ارزش امنیتی محدودی دارد.
باید مشخص باشد چه رویدادهایی بررسی میشوند، چه شرایطی هشدار ایجاد میکند و مسئول رسیدگی به آنها چه کسی است.
چکلیست نهایی امنیت Apache
برای بررسی وضعیت Hardening وبسرور Apache میتوان از چکلیست متنی زیر استفاده کرد:
بخش بهروزرسانی و نگهداری
- نسخه Apache و وضعیت وصلههای امنیتی بررسی شده است.
- سیستمعامل و وابستگیهای اصلی بهروز هستند.
- ماژولهای غیرضروری شناسایی و در صورت امکان غیرفعال شدهاند.
بخش دسترسی و فایلها
- دسترسی به مسیرهای فایلسیستمی براساس اصل حداقل دسترسی تنظیم شده است.
- فایلهای پیکربندی و نسخههای پشتیبان در معرض دسترسی عمومی نیستند.
- قابلیت Directory Listing در مسیرهای غیرضروری غیرفعال است.
- مالکیت و مجوزهای فایلها بهدرستی تعیین شدهاند.
- دسترسی به صفحات مدیریتی و وضعیت سرور کنترل میشود.
بخش ارتباطات
- گواهی TLS معتبر و قابل تمدید است.
- پروتکلهای رمزنگاری قدیمی و نامناسب غیرفعال شدهاند.
- هدایت HTTP به HTTPS بهدرستی عمل میکند.
- هدرهای امنیتی با نیازهای برنامه هماهنگ هستند.
بخش درخواستها و شبکه
- اندازه و زمان دریافت درخواستها متناسب با نوع سرویس محدود شدهاند.
- قابلیت Forward Proxy بدون نیاز عملیاتی فعال نیست.
- اطلاعات IP واقعی فقط از واسطهای معتبر پذیرفته میشود.
- پورتهای غیرضروری از طریق سیاست شبکه محدود شدهاند.
بخش نظارت و بازیابی
- ثبت رویدادهای لازم فعال است.
- لاگها با سطح دسترسی محدود نگهداری میشوند.
- هشدارهای مربوط به رفتار غیرعادی تعریف شدهاند.
- نسخه پشتیبان قابلبازیابی وجود دارد.
- آزمون بازیابی بهصورت دورهای انجام میشود.
- تغییرات امنیتی در محیط آزمایشی ارزیابی شدهاند.
اجرای این موارد به معنای تضمین امنیت کامل نیست، اما میتواند بخش مهمی از خطرهای قابلپیشگیری را کاهش دهد.
سؤالات متداول درباره امنیت Apache
امنیت Apache چیست؟
امنیت Apache مجموعهای از تنظیمات و کنترلهای دفاعی برای محافظت از وبسرور در برابر دسترسی غیرمجاز، افشای اطلاعات، سوءاستفاده از منابع و آسیبپذیریهای نرمافزاری است. این اقدامات شامل بهروزرسانی، مدیریت مجوزها، ایمنسازی TLS، محدودسازی قابلیتهای غیرضروری و نظارت بر فعالیتها میشوند.
Hardening وبسرور Apache به چه معناست؟
Hardening به فرآیند سختسازی تنظیمات Apache برای کاهش سطح حمله گفته میشود. در این فرآیند، امکانات غیرضروری محدود میشوند، دسترسیها بازبینی میشوند و تنظیمات امنتری برای ارتباطات و مدیریت درخواستها اعمال میشود.
آیا Apache بهصورت پیشفرض امن است؟
Apache دارای قابلیتهای امنیتی متعددی است، اما میزان امنیت یک نصب به پیکربندی، نسخه، ماژولهای فعال و برنامههای میزبانیشده بستگی دارد. بنابراین نمیتوان تمام نصبهای پیشفرض را برای هر محیطی کاملاً امن دانست.
چگونه امنیت Apache را افزایش دهیم؟
مهمترین اقدامات شامل نصب بهروزرسانیها، غیرفعالکردن امکانات غیرضروری، محدودسازی دسترسی فایلها، استفاده از HTTPS، تنظیم هدرهای امنیتی، کنترل منابع و پایش لاگها هستند. در سامانههای حساس میتوان از WAF و کنترلهای شبکهای تکمیلی استفاده کرد.
آیا مخفیکردن نسخه Apache باعث جلوگیری از هک میشود؟
خیر. مخفیکردن شماره نسخه فقط بخشی از اطلاعات آشکارشده را کاهش میدهد. آسیبپذیریهای واقعی نرمافزار باید از طریق وصلههای امنیتی و تنظیمات صحیح برطرف شوند.
آیا غیرفعالکردن htaccess امنیت را افزایش میدهد؟
در محیطهایی که تمام تنظیمات در فایلهای مرکزی Apache مدیریت میشوند، محدودسازی .htaccess میتواند کنترل بیشتری فراهم کند. اما در سایتهای وردپرسی ممکن است این فایل برای پیوندهای یکتا ضروری باشد. بنابراین غیرفعالسازی باید با انتقال قواعد لازم و آزمایش عملکرد انجام شود.
بهترین تنظیمات SSL برای Apache چیست؟
تنظیمات مناسب معمولاً شامل استفاده از TLS 1.2 و TLS 1.3 در محیطهای سازگار، گواهی معتبر، مدیریت امن کلید خصوصی و انتخاب مجموعه رمزنگاری مناسب است. تنظیم نهایی باید براساس نسخه Apache، کتابخانه TLS و نیاز کاربران تعیین شود.
آیا ModSecurity برای امنیت Apache ضروری است؟
ModSecurity میتواند لایه دفاعی مفیدی ایجاد کند، اما استفاده از آن برای تمام محیطها الزام مطلق نیست. ضرورت آن به حساسیت برنامه، معماری زیرساخت و سیاست امنیتی بستگی دارد. همچنین WAF جایگزین اصلاح آسیبپذیریهای برنامه یا بهروزرسانی نرمافزار نیست.
آیا Apache در برابر حملات DDoS محافظت میکند؟
Apache تنظیماتی برای کنترل زمان دریافت درخواست، تعداد پردازشها و مصرف منابع دارد که میتوانند مقاومت در برابر برخی الگوهای DoS را افزایش دهند. بااینحال، مقابله با حملات DDoS حجیم معمولاً به خدمات محافظتی در سطح شبکه و زیرساخت بالادستی نیاز دارد.
آیا امنیت Apache برای وردپرس کافی است؟
خیر. امنیت وردپرس علاوه بر وبسرور به امنیت PHP، پایگاه داده، قالبها، افزونهها، حسابهای کاربران و تنظیمات خود وردپرس وابسته است. ایمنسازی Apache یک لایه مهم از حفاظت است، اما بهتنهایی تمام خطرها را برطرف نمیکند.
تفاوت امنیت Apache و امنیت سرور چیست؟
امنیت Apache بر محافظت از سرویس وب و تنظیمات مربوط به آن متمرکز است. امنیت سرور دامنه گستردهتری دارد و شامل سیستمعامل، شبکه، کاربران، سرویسهای جانبی، ذخیرهسازی و سیاستهای مدیریتی میشود. این دو حوزه به یکدیگر وابستهاند.
آیا تغییر تنظیمات Apache میتواند سایت را از دسترس خارج کند؟
بله. تنظیم اشتباه دسترسیها، ماژولها، TLS یا قواعد بازنویسی ممکن است باعث بروز خطا یا اختلال شود. به همین دلیل، تهیه پشتیبان، آزمون پیکربندی و اجرای تغییرات بهصورت مرحلهای ضروری است.
جمعبندی؛ چگونه امنیت Apache را بهصورت اصولی تأمین کنیم؟
امنیت Apache یکی از بخشهای اساسی محافظت از زیرساخت وب است و نقش مستقیمی در محرمانگی اطلاعات، یکپارچگی سرویس و دسترسپذیری وبسایت دارد.
وبسروری که بدون بررسی تنظیمات، مدیریت دسترسی و بهروزرسانی مستمر فعالیت میکند، ممکن است به دلیل خطاهای قابلپیشگیری در معرض خطر قرار گیرد.
فرآیند Hardening وبسرور Apache با شناسایی وضعیت فعلی آغاز میشود و سپس به کاهش امکانات غیرضروری، محدودسازی مجوزها، محافظت از فایلهای حساس، ایمنسازی HTTPS و کنترل درخواستها میرسد.
در کنار این اقدامات، استفاده از هدرهای امنیتی مناسب، فایروال، WAF، پایش لاگها و برنامه پشتیبانگیری میتواند دفاع چندلایه مؤثرتری ایجاد کند.
نکته مهم این است که هیچ تنظیم واحدی امنیت کامل را تضمین نمیکند. حتی پیکربندیهای مناسب نیز باید با تغییر نسخه نرمافزار، معماری سرویس و نیازهای برنامه بازبینی شوند.
همچنین سختسازی نباید بدون شناخت محیط انجام شود؛ زیرا تنظیمی که برای یک وبسایت ایستا مناسب است، ممکن است در یک فروشگاه اینترنتی یا برنامه دارای API مشکلات عملیاتی ایجاد کند.
در نهایت، بهترین راهکار برای افزایش امنیت Apache، ایجاد یک فرآیند مستمر شامل بهروزرسانی، کاهش سطح حمله، کنترل دسترسی، نظارت، آزمایش و بهبود تدریجی تنظیمات است.
با اجرای اصولی این اقدامات، میتوان ریسک بسیاری از تهدیدهای متداول را کاهش داد و زیرساختی پایدارتر و قابلاعتمادتر برای میزبانی وبسایتها فراهم کرد.