18 نصائح لأمان وتقوية خادم ويب أباتشي

خادم الويب أباتشي هو أحد أكثر خوادم الويب شهرة واستخدامًا على نطاق واسع لـ تضمين الملفات والمواقع. من السهل تثبيته وتكوينه لتلبية احتياجاتك الإقامة. ومع ذلك ، لا تكون الإعدادات الافتراضية مأمونة لتقديم الحماية التي يحتاجها موقعك.

في هذا الدليل ، نلقي نظرة على بعض نصائح وحيل تصون خادم أباتشي التي يمكنك تنفيذها لتعزيز أمان خادم الويب الخاص بك.

1. كيفية إخفاء إصدار أباتشي ومعلومات نظام التشغيل

بشكل افتراضي ، يعرض خادم الويب أباتشي إصداره في حالة تصفحك للرابط الخاطئ لموقع. فيما يلي مثال على صفحة الخطأ التي تشير إلى أن الصفحة لا يمكن العثور عليها في الموقع. السطر الأخير يشير إلى إصدار أباتشي ، نظام التشغيل المضيف ، عنوان IP ، والمنفذ الذي يستمع إليه.

Show Apache Version Info

ليس من الجيد أبدًا فكرة الكشف عن معلومات خادم الويب الخاص بك حيث يمكن أن تكون هذه هدية جيدة للمتسللين في مهمة استطلاع الرصاص. لإضافة مرحلة من الأمان وجعل الأمر أكثر صعوبة للمتسللين ، يوصى بإخفاء معلومات خادم الويب.

للقيام بذلك ، فتح ملف تكوين أباتشي الافتراضي على التوزيعات المبنية على ديبيان.

$ sudo vim /etc/apache2/apache2.conf

For أنظمة تعتمد على RHEL مثل RHEL, Fedora, CentOS, Rocky, و AlmaLinux.

$ sudo vim /etc/httpd/conf/httpd.conf

أضف الأسطر التالية في نهاية الملف.

ServerTokens Prod
ServerSignature Off

احفظ التغييرات وأعد تشغيل خادم الويب Apache.

$ sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
$ sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

الآن أعد تحميل الموقع وهذه المرة، لن يتم عرض معلومات خادم الويب.

Check Apache Version Info

2. تعطيل قائمة الدليل في Apache

بشكل افتراضي، يسمح Apache بقائمة الدليل، وقد يرى الزوار أي ملفات أو دلائل قد تكون لديك على دليل المستند الجذري.

لتوضيح ذلك، سنقوم بإنشاء دليل يسمى test.

$ sudo mkdir -p /var/www/html/test

بعد ذلك، سننتقل إلى الدليل وننشئ بعض الملفات.

$ cd /var/www/html/test
$ sudo touch app.py main.py

الآن، إذا قمنا بالوصول إلى عنوان URL، http://localhost/test سنتمكن من رؤية قائمة الدليل.

Disable Apache Directory Listing

لتعطيل قائمة الدليل، انتقل إلى ملف التكوين الرئيسي لـ Apache وابحث عن سمة ‘Directory‘. ضبط المعلمة ‘Options‘ إلى '-Indexes' كما هو موضح.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

أعد تحميل Apache، وهذه المرة، عند زيارة العنوان URL، لن تعرض الدلائل بعد الآن.

Disable Directory Listing in Apache

3. تحديث Apache بانتظام

من الأفضل دائمًا تحديث جميع تطبيقاتك، حيث تأتي أحدث التطبيقات مع إصلاحات للأخطاء وتصحيحات أمان تعالج الثغرات الكامنة في الإصدارات القديمة للبرنامج.

لذلك، من الجيد ترقية تطبيقاتك بانتظام إلى أحدث الإصدارات.

$ sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
$ sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
Update System Packages

4. استخدم تشفير HTTPS على Apache

يستخدم Apache بشكل افتراضي بروتوكول HTTP الذي يعتبر ضعيفًا وغير آمن ومعرض للاستماع. لتعزيز أمان موقعك، وأكثر من ذلك، تحسين تصنيفات Google SEO الخاصة بك، افكر في تشفير موقعك باستخدام شهادة SSL.

عن طريق القيام بذلك، يتم تبديل بروتوكول HTTP الافتراضي إلى HTTPS، مما يجعل من الصعب على أي شخص اعتراض وفك تشفير التواصل الذي يتم إرساله ذهابًا وإيابًا من الخادم.

تحقق من كيفية تأمين خادم الويب Apache باستخدام شهادة SSL Let’s Encrypt على نظام التشغيل Linux.

5. قم بتمكين الأمان النقلي الصارم للـ HTTP (HSTS) على Apache

بالإضافة إلى تشفير موقعك الإلكتروني بشهادة TLS/SSL، ضع في الاعتبار تنفيذ آلية أمان الويب HSTS فوق HTTPS.

HTTP Strict Transport Security (HSTS) هي آلية سياسية تحمي المواقع من هجوم الرجل في الوسط وسرقة الكوكيز. ويحدث هذا عندما يقوم المهاجمون بتخفيف بروتوكول HTTPS إلى بروتوكول HTTP غير الآمن.

HSTS يمكّن الويب سيرفر من التصريح بشكل صارم أنه يجب أن يتفاعل المتصفحات الإلكترونية فقط معه عبر HTTPS، وأبداً من خلال بروتوكول HTTP.

لتمكين HSTS، تأكد من أن موقعك الإلكتروني يعمل HTTPS ولديه شهادة TLS/SSL صالحة.

بعد ذلك، قم بتمكين وحدة رؤوس الذاكرة لـ Apache:

$ sudo a2enmod headers

ثم أعد تشغيل Apache لتطبيق التغييرات.

$ sudo systemctl restart apache2

بعد ذلك، استعرض ملف تكوين مضيف الويب للمجال الخاص بك.

$ sudo vim /etc/apache2/sites-available/mydomain.conf

بعد ذلك، أضف هذا السطر داخل <VirtualHost *:443> الكتلة:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

يبدو هذا كما يلي.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

المعلمة max-age تأمر المتصفحات الإلكترونية بالوصول فقط إلى موقعك باستخدام HTTPS للسنة المقبلة (31536000 = 1 عام).

أخيرًا، أعد تشغيل Apache ليأخذ سياسة HSTS تأثير.

$ sudo systemctl restart apache2

6. تمكين HTTP/2 على Apache

في عام 2015، تم إصدار HTTP/2، وهو نسخة جديدة من بروتوكول HTTP تسعى لحل أو حل مشاكل متعددة لم يتوقعها مبتكرو HTTP/1.1.

بينما HTTP/1.1 لا يزال مستخدمًا على نطاق واسع، فإنه مرتبط بمشاكل الأداء المتعلقة باستخدام اتصالات TCP متعددة لمعالجة طلبات متعددة من المتصفح، مما يؤدي إلى تكبد تكاليف موارد عالية على جانب العميل، مما يؤدي إلى تدهور أداء الشبكة.

مع نمو التطبيقات في التعقيد والوظائف، تم إنشاء HTTP/2 لحل نقاط الضعف في HTTP/1.1 والتي تشمل رؤوس HTTP الطويلة، وبطء سرعة تحميل صفحات الويب، وتدهور الأداء العام.

HTTP/2 يوفر حماية وخصوصية أكثر من سلفه. ومن مثل أهمية ذلك، هو تحسين الأداء من خلال استخدام تيارات متعددة للبيانات. مع HTTP/2 يضمن اتصال TCP واحد استخدام النطاق الترددي بشكل فعال، حتى عند نقل تيارات بيانات متعددة.

تحقق من كيفية تمكين HTTP/2 على خادم الويب Apache باستخدام:

7. قيود الوصول إلى الدلائل الحساسة في Apache

إجراء إضافي للأمان يمكنك اتخاذه هو تقييد الوصول إلى الدلائل التي قد تحتوي على معلومات حساسة مثل بيانات المستخدمين، والسجلات، وملفات التكوين.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

في التكوين أعلاه، تمنع Require all denied الوصول لأي شخص يحاول الوصول إلى الملفات في /sensitive_directory.

احفظ التغييرات واخرج من الملف. ثم أعد تشغيل Apache لتنفيذ التغييرات.

8. قم بتعطيل توجيه ServerSignature في Apache

توجيه ServerSignature في ملف تكوين Apache يضيف رصيفًا إلى المستندات التي يولدها الخادم والتي تحمل معلومات حول تكوين خادم الويب الخاص بك مثل الإصدار ونظام التشغيل الذي يعمل عليه. تعريض تفاصيل حساسة حول خادم الويب الخاص بك للمتطفلين الخبيث سيزيد بشكل كبير من فرصة الهجوم.

لمنع تعريض مثل هذه المعلومات ، تحتاج إلى تعطيل هذا التوجيه في ملف تكوين Apache:

ServerSignature Off

احفظ التغييرات ومرة أخرى أعد تشغيل Apache لتأتي التغييرات في النفع.

$ sudo systemctl restart apache2

9. ضع توجيه “ServerTokens” على “Prod”

توجيه “ServerTokens” يتحكم في المعلومات التي يرسلها الخادم بما في ذلك إصدار Apache (الإصدار الرئيسي والثانوي) ونظام التشغيل ونوع خادم الويب الذي يعمل.

أقل قدر من المعلومات التي تريد تعريضها للجمهور هو أن خادم الويب هو Apache. أي شيء آخر سيعرض خادمك للهجوم المحتمل. لذلك ، يوصى بتعيين توجيه “ServerTokens” في ملف تكوين Apache إلى “prod“.

ServerTokens Off

كالعادة احفظ التغييرات وتأكد من إعادة تشغيل Apache.

10. حماية Apache باستخدام Fail2ban

Fail2ban هو تطبيق مفتوح المصدر لمنع الإخفاقات والحماية من التطبيقات الإدارية التي تحمي الأنظمة الليبرالية من التهديدات الخارجية بما في ذلك DoS والهجوم الغضب. يعمل بمراقبة السجلات الخاصة بالنظام باستمرار للأنشطة الشريرة وحظر المضيفين الذين يتطابقون مع الأنماط التي تشبه سلوك الهجوم.

Fail2ban يمكن تكوينه لحماية Apache من هجمات DoS عن طريق مراقبة سجلات Apache باستمرار بحثًا عن محاولات تسجيل دخول فاشلة وحظر عناوين IP المسيئة مؤقتًا.

تعرف على كيفية تثبيت Fail2ban على لينكس باستخدام:

١١. تعطيل الوحدات غير الضرورية

وحدات Apache هي برامج تُحمّل لتوسيع وظائف خادم الويب. الوظائف التي توسعها الوحدات تشمل المصادقة الأساسية، التخزين المؤقت للمحتوى، التشفير، الأمان، إلخ.

يُوصى دائمًا بتعطيل جميع تلك الوحدات التي لا تُستخدم حاليًا لتقليل فرص التعرض لهجوم.

لعرض جميع الوحدات المفعلة، قم بتشغيل الأمر

$ apache2ctl -M
View Apache Modules

للتحقق إذا كانت وحدة معينة مفعلة، على سبيل المثال، وحدة إعادة الكتابة، قم بتشغيل الأمر.

$ apache2ctl -M | grep rewrite
Check Apache Module

لتعطيل الوحدة، قم بتشغيل الأمر:

$ sudo a2dismod rewrite 
Disable Apache Module

١٢. استخدام وحدات mod_security وmod_evasive لتأمين Apache

يمكنك تفعيل وحدات mod_security وmod_evasive لتأمين Apache ضد هجمات القوة الغاشمة أو هجمات DDoS.

  • وحدة mod_security تعمل مثل جدار حماية تطبيقات الويب (WAF) وتحظر حركة المرور المشبوهة وغير المرغوب فيها إلى موقعك.
  • وحدة mod_evasive تحمي خادمك من هجمات القوة الغاشمة وهجمات الحرمان من الخدمة (DoS).

اقرأ المزيد حول كيفية حماية Apache باستخدام وحدات mod_security و mod_evasive.

13. تقييد الخدمات غير المرغوب فيها في Apache

لتأمين Apache بشكل أفضل، يُنصح بتعطيل بعض الخدمات مثل الروابط الرمزية وتنفيذ CGI إذا لم تكن مطلوبة حاليًا. بشكل افتراضي، يتبع Apache الروابط الرمزية، يمكننا إيقاف هذه الميزة بالإضافة إلى ميزة -Includes و CGI في سطر واحد.

للقيام بذلك، أضف السطر '-ExecCGI -FollowSymLinks -Includes' لتوجيه ‘Options’ في قسم ‘Directory‘.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

يمكن أيضًا تحقيق ذلك على مستوى الدليل. على سبيل المثال، هنا، نقوم بإيقاف Includes وتنفيذ ملفات Cgi للدليل “/var/www/html/mydomain1”.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

احفظ التغييرات وأعد تشغيل Apache.

14. تحديد حجم تحميل الملف في Apache

طريقة أخرى لتأمين خادم الويب الخاص بك هي تحديد الحجم الإجمالي لجسم طلب HTTP المُرسل إلى خادم الويب من العميل. يمكنك تعيينه في سياق الخادم، لكل دليل، لكل ملف، أو لكل موقع.

على سبيل المثال، إذا كنت ترغب في السماح بتحميل ملف إلى دليل معين، مثل الدليل /var/www/domain.com/wp-uploads، وتقييد حجم الملف المحمل إلى 4M = 4194304Bytes، أضف التوجيه التالي إلى ملف تكوين Apache الخاص بك أو .htaccess.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

احفظ التغييرات وتذكر أن تعيد تشغيل Apache.

يمكنك ضبطه في سياق الخادم، لكل دليل، لكل ملف، أو لكل موقع. الأمر يحمي من سلوك طلب العميل غير الطبيعي الذي قد يكون أحيانًا شكلاً من أشكال هجوم الحرمان من الخدمة (DoS).

15. تمكين السجلات في Apache

السجلات توفر كل التفاصيل حول طلبات العملاء وأي معلومات أخرى تتعلق بأداء خادم الويب الخاص بك. هذا يوفر معلومات مفيدة في حال حدوث شيء خاطئ. تمكين سجلات Apache، خاصة في ملفات المضيف الافتراضي يسمح لك بتحديد المشكلة في حال حدوث خطأ ما مع خادم الويب.

لتمكين السجلات، تحتاج إلى تضمين وحدة mod_log_config، التي توفر توجيهين رئيسيين للسجلات.

  • ErrorLog – يحدد مسار ملف سجل الأخطاء.
  • CustomLog – ينشئ وينسق ملف سجل.

يمكنك استخدام هذه السمات في ملف المضيف الافتراضي في قسم المضيف الافتراضي لتمكين السجلات.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

توجيه {APACHE_LOG_DIR} في أنظمة Debian محدد كمسار /var/log/apache2.

16. تشغيل Apache كمستخدم ومجموعة منفصلين

تشغيل Apache كمستخدم ومجموعة منفصلين هو ممارسة أمان شائعة. من خلال القيام بذلك، يمكنك عزل عملية خادم الويب عن عمليات النظام الأخرى وتقليل الضرر المحتمل إذا تم اختراق خادم الويب.

أولاً، سترغب في إنشاء مستخدم ومجموعة جديدين خصيصًا لـ Apache.

$ sudo groupadd apachegroup
$ sudo useradd -g apachegroup apacheuser

بعد ذلك، ستحتاج إلى تعديل ملف تكوين Apache لتحديد المستخدم والمجموعة الجديدة.

User apacheuser
Group apachegroup

نظرًا لأنك تقوم بتغيير المستخدم والمجموعة التي يعمل بها Apache، قد تحتاج إلى تحديث ملكية الدلائل والملفات على الويب لضمان أن يمكن لـ Apache ما زال قراءتها.

$ sudo chown -R apacheuser:apachegroup /var/www/html

بعد إجراء هذه التغييرات، أعد تشغيل Apache لتطبيقها:

$ sudo systemctl restart httpd      # For RHEL/CentOS
$ sudo systemctl restart apache2    # For Debian/Ubuntu

17. حماية من هجمات DDOS وتقوية

حسنًا، من الصحيح أنه لا يمكنك حماية موقع الويب الخاص بك بالكامل من هجمات DDoS. ومع ذلك، إليك بعض الإرشادات التي يمكن أن تساعدك في التخفيف منها وإدارتها.

  • TimeOut – هذا التوجيه يسمح لك بتحديد مدى انتظار الخادم لاكتمال بعض الأحداث قبل إرجاع خطأ. القيمة الافتراضية هي 300 ثانية. بالنسبة للمواقع العرضة لهجمات DDoS، من المستحسن الاحتفاظ بهذه القيمة منخفضة. ومع ذلك، تعتمد الإعداد المناسب إلى حد كبير على طبيعة الطلبات التي يتلقاها موقع الويب الخاص بك. ملاحظة: يمكن أن يتسبب وقت الانتظار المنخفض في مشاكل مع بعض النصوص CGI.
  • MaxClients – يحدد هذا التوجيه الحد الأقصى لعدد الاتصالات التي يمكن خدمتها بشكل متزامن. سيتم تخزين أي اتصالات جديدة تتجاوز هذا الحد. هو متوفر في كل من Prefork و Worker MPMs. القيمة الافتراضية هي 256.
  • KeepAliveTimeout – يحدد هذا التوجيه مدى انتظار الخادم لطلب لاحق قبل إغلاق الاتصال. القيمة الافتراضية هي 5 ثوانٍ.
  • LimitRequestFields – يُحدّد هذا التوجيه الحد الأقصى لعدد حقول رأس طلب HTTP المقبولة من قِبل العملاء. القيمة الافتراضية هي 100. إذا كانت هجمات DDoS تحدث بسبب عدد مفرط من رؤوس طلبات HTTP، فيُوصى بتقليل هذه القيمة.
  • LimitRequestFieldSize – يُحدّد هذا التوجيه حدًا للحجم لرأس طلب HTTP.

18. إجراء فحوصات دورية على الثغرات الأمنية

طريقة أخرى لحماية خادم الويب الخاص بك هي إجراء اختبارات دورية لفحص الثغرات الأمنية. هذا يساعد على تحديد الثغرات الأمنية المحتملة التي قد يستغلها المتسللون للوصول إلى ملفات حساسة أو حقن برامج ضارة.

أدوات فحص الثغرات الأمنية تساعد أيضًا في تحديد إعدادات التكوين غير الآمنة وتساعد في التدقيق من أجل الامتثال. من بين أدوات فحص الثغرات الأمنية الشهيرة Acutenix، Nessus، Nexpose، Sucuri، وغيرها الكثير.

الخاتمة

هذه بعض نصائح تحسين Apache التي يمكنك تنفيذها على خادم الويب الخاص بك لتوفير طبقة إضافية من الحماية وإبعاد الاختراقات.

Source:
https://www.tecmint.com/apache-security-tips/