دليل أمان Apache Tomcat والأمان
نشرت: 2015-02-14دليل عملي لتقوية وتأمين Apache Tomcat Server بأفضل الممارسات.
يعد Tomcat أحد أشهر خوادم Servlet و JSP Container. يتم استخدامه من قبل بعض مواقع الويب التالية ذات حركة المرور العالية:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Wallmart.com
- Reuters.com
- Meetup.com
- Webs.com
يوضح الرسم البياني أدناه موقع سوق Tomcat في خادم تطبيق Java.

من الناحية الفنية ، يمكنك استخدام Tomcat كخادم أمامي لخدمة طلبات الموقع مباشرة. ومع ذلك ، في بيئة الإنتاج ، قد ترغب في استخدام بعض خوادم الويب مثل Apache و Nginx كواجهة أمامية لتوجيه الطلبات إلى Tomcat.
يؤدي استخدام خادم ويب للتعامل مع الطلبات إلى توفير مزايا الأداء والأمان . إذا كنت تستخدم Apache HTTP كخادم ويب أمامي ، فيجب أن تفكر في تأمين ذلك أيضًا.
قد يؤدي وجود تكوين Tomcat الافتراضي إلى الكشف عن معلومات حساسة ، مما يساعد المتسلل على الاستعداد لهجوم على التطبيق.
تم اختبار ما يلي على Tomcat 7.x ، بيئة UNIX.
جمهور
تم تصميم هذا لمدير البرامج الوسيطة أو دعم التطبيقات أو محلل النظام أو أي شخص يعمل أو حريص على تعلم Tomcat Hardening and Security.
المعرفة الجيدة بأمر Tomcat & UNIX إلزامي.
ملحوظات
نحتاج إلى بعض الأدوات لفحص رؤوس HTTP للتحقق منها. هناك نوعان من الطرق التي يمكنك القيام بذلك.
إذا كنت تختبر تطبيقًا مواجهًا للإنترنت ، فيمكنك استخدام أدوات رأس HTTP التالية للتحقق من التنفيذ.
- مدقق رأس HTTP
- هدف القراصنة
وبالنسبة لتطبيق إنترانت ، يمكنك استخدام أدوات مطور Google Chrome و Firefox.
كأفضل ممارسة ، يجب أن تحتفظ بنسخة احتياطية من أي ملف توشك على تعديله.
سوف نسمي مجلد تثبيت Tomcat باسم $ tomcat خلال هذه الإرشادات.
دعنا نذهب من خلال إجراءات التصلب والتأمين.
قم بإزالة شعار الخادم
تعد إزالة Server Banner من HTTP Header أحد الأشياء الأولى التي يجب القيام بها كتصلب.
يؤدي وجود لافتة خادم إلى كشف المنتج والإصدار الذي تستخدمه ويؤدي إلى ثغرة أمنية في تسرب المعلومات.
بشكل افتراضي ، ستظهر الصفحة التي يقدمها Tomcat مثل هذا.

دعنا نخفي تفاصيل المنتج والإصدار من رأس الخادم.
- انتقل إلى مجلد $ tomcat / conf
- قم بتعديل server.xml باستخدام vi
- أضف ما يلي إلى
Connector port
Server =” “
السابق: -
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- احفظ الملف وأعد تشغيل Tomcat. الآن ، عند الوصول إلى أحد التطبيقات ، يجب أن ترى قيمة فارغة لرأس الخادم.

بدء Tomcat مع مدير الأمن
يحميك Security Manager من تطبيق صغير غير موثوق به يعمل في متصفحك.
تشغيل Tomcat مع مدير أمان أفضل من التشغيل بدون مدير. لدى Tomcat وثائق ممتازة حول Tomcat Security Manager.
الشيء الجيد في هذا هو أنك لست بحاجة إلى تغيير أي ملف تكوين. إنها فقط طريقة تنفيذ ملف startup.sh
.
كل ما عليك فعله هو أن تبدأ القط بحجة –security
.
[root@geekflare bin]# ./startup.sh -security Using CATALINA_BASE: /opt/tomcat Using CATALINA_HOME: /opt/tomcat Using CATALINA_TMPDIR: /opt/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar Using Security Manager Tomcat started. [root@geekflare bin]#
تفعيل SSL / TLS
يعد تقديم طلبات الويب عبر HTTPS أمرًا ضروريًا لحماية البيانات بين العميل و Tomcat. لجعل تطبيق الويب الخاص بك يمكن الوصول إليه من خلال HTTPS ، تحتاج إلى تنفيذ شهادة SSL.
بافتراض أن لديك بالفعل keystore جاهزًا مع الشهادة ، يمكنك إضافة السطر أدناه في server.
xml ضمن قسم Connector port
.
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
قم بتغيير اسم ملف Keystore وكلمة المرور باسمك.
إذا كنت بحاجة إلى مساعدة في عملية تخزين المفاتيح وعملية المسؤولية الاجتماعية للشركات ، فارجع إلى هذا الدليل.
فرض HTTPS
هذا ينطبق فقط عندما تكون قد قمت بتمكين SSL. إذا لم يكن كذلك ، فسيؤدي ذلك إلى كسر التطبيق.
بمجرد تمكين SSL ، سيكون من الجيد فرض إعادة توجيه جميع طلبات HTTP إلى HTTPS للاتصال الآمن بين المستخدم إلى خادم تطبيق Tomcat.
- انتقل إلى مجلد $ tomcat / conf
- قم بتعديل
web.xml
باستخدامvi
- أضف ما يلي قبل بناء الجملة
</web-app>
<security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
- احفظ الملف وأعد تشغيل Tomcat
أضف علامة Secure & HttpOnly إلى ملف تعريف الارتباط
من الممكن سرقة أو التلاعب بجلسة تطبيق الويب وملفات تعريف الارتباط دون وجود ملف تعريف ارتباط آمن. إنها علامة يتم إدخالها في رأس الاستجابة.

يتم ذلك عن طريق إضافة أسفل السطر في قسم session-config
من ملف web.xml
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
لقطة شاشة التكوين:

احفظ الملف وأعد تشغيل Tomcat لفحص رأس استجابة HTTP.
قم بتشغيل Tomcat من حساب غير مميز
من الجيد استخدام مستخدم منفصل غير مميز لـ Tomcat. الفكرة هنا هي حماية الخدمات الأخرى التي تعمل في حالة تعرض أي حساب للاختراق.
- قم بإنشاء مستخدم UNIX ، دعنا نقول tomcat
useradd tomcat
- أوقف Tomcat إذا ركض
- تغيير ملكية $ tomcat إلى المستخدم tomcat
chown -R tomcat:tomcat tomcat/
ابدأ تشغيل Tomcat وتأكد من أنه يعمل مع مستخدم القط
إزالة التطبيقات الافتراضية / غير المرغوب فيها
بشكل افتراضي ، يأتي Tomcat مع تطبيقات الويب التالية ، والتي قد تكون مطلوبة أو لا تكون مطلوبة في بيئة الإنتاج.
يمكنك حذفها للحفاظ على نظافتها وتجنب أي مخاطر أمنية معروفة باستخدام تطبيق Tomcat الافتراضي.
- ROOT - صفحة الترحيب الافتراضية
- المستندات - وثائق Tomcat
- أمثلة - JSP و servlets للشرح
- مدير ، مدير مضيف - إدارة Tomcat
وهي متوفرة ضمن مجلد $ tomcat / webapps
[root@geekflare webapps]# ls -lt drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT [root@geekflare webapps]#
قم بتغيير منفذ SHUTDOWN والأمر
بشكل افتراضي ، يتم تكوين tomcat ليتم إيقاف تشغيله على منفذ 8005.
هل تعلم أنه يمكنك إيقاف تشغيل مثيل tomcat عن طريق إجراء telnet إلى IP: port وإصدار أمر SHUTDOWN؟
Chandans # telnet localhost 8005 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SHUTDOWN Connection closed by foreign host. Chandans #
خطير!
كما ترى ، يؤدي وجود التكوين الافتراضي إلى مخاطر أمنية عالية.
يوصى بتغيير منفذ إيقاف التشغيل tomcat والأمر الافتراضي إلى شيء لا يمكن التنبؤ به.
- قم بتعديل ما يلي في server.xml
<Server port="8005" shutdown="SHUTDOWN">
8005 - التغيير إلى منفذ آخر غير مستخدم
إيقاف - التغيير إلى شيء معقد
السابق-
<Server port="8867" shutdown="NOTGONNAGUESS">
استبدل الافتراضي 404 ، 403 ، 500 صفحة
وجود صفحة افتراضية لـ غير موجود ، محظور ، خطأ في الخادم يعرض تفاصيل الإصدار.
لنلقِ نظرة على صفحة 404 الافتراضية.

للتخفيف ، يمكنك أولاً إنشاء صفحة خطأ عامة وتكوين web.xml لإعادة التوجيه إلى صفحة خطأ عامة.
- انتقل إلى تطبيق $ tomcat / webapps / $
- قم بإنشاء ملف error.jsp باستخدام محرر
vi
<html> <head> <title> صفحة خطأ </ title> </head> <body> هذا خطأ! </body> </html>
- انتقل إلى مجلد $ tomcat / conf
- أضف ما يلي في ملف web.xml. تأكد من الإضافة قبل بناء الجملة
</web-app>
<error-page> <error-code> 404 </error-code> <location> /error.jsp </location> </error-page> <error-page> <error-code> 403 </error-code> <location> /error.jsp </location> </error-page> <error-page> <error-code> 500 </error-code> <location> /error.jsp </location> </error-page>
- أعد تشغيل خادم tomcat لاختباره

أفضل بكثير!
يمكنك القيام بذلك لـ java.lang.Exception
أيضًا. سيساعد هذا في عدم الكشف عن معلومات إصدار القط إذا كان هناك أي استثناء من جافا لانج.
ما عليك سوى إضافة ما يلي في web.xml
وإعادة تشغيل خادم tomcat.
<error-page> <exception-type> java.lang.Exception </exception-type> <location> /error.jsp </location> </error-page>
آمل أن يعطيك الدليل أعلاه فكرة عن تأمين Tomcat. إذا كنت تتطلع إلى معرفة المزيد عن إدارة Tomcat ، فقم بإلقاء نظرة على هذه الدورة التدريبية عبر الإنترنت.
تعرف أيضًا على كيفية تكوين WAS لإيقاف طلب كلمة المرور أثناء إيقاف التشغيل هنا.