سؤال نصائح لتأمين خادم LAMP


هذا ال السؤال الكنسي حول تأمين مكدس LAMP

ما هي الإرشادات المطلقة لتأمين خادم LAMP؟


91
2017-12-14 01:52


الأصل




الأجوبة:


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

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

ال
هناك الكثير من الأدلة الجيدة المتاحة لمساعدتك. قد تساعدك هذه القائمة أو لا تساعدك على التوزيع.

ال
يمكن أن يكون Apache ممتعاً للتأمين. أجد أنه من الأسهل لتصلب نظام التشغيل والحفاظ على سهولة الاستخدام من إما أباتشي أو PHP.

معهم

ف
يندفع هذا إلى كل فكرة "ممارسات البرمجة الآمنة" ، التي هي نظام كامل خاص بها. لدى SANS و OWASP كمية سخيفة من المعلومات حول الموضوع ، لذلك لن أحاول تكرارها هنا. سأركز على تهيئة وقت التشغيل ودع المطورين قلقين بشأن الباقي. أحيانًا تشير كلمة "P" في LAMP إلى Perl ، ولكن عادةً ما تكون PHP. أفترض هذا الأخير.

  • تصلب فب - بعض المناقشة الثانوية ، وأيضا على موقع SE أمن تكنولوجيا المعلومات.
  • تصلب مشروع PHP - المشروع الرئيسي الذي ينتج Suhosin، محاولة لتصحيح تطبيق PHP للمشروع ضد أنواع معينة من الهجمات.
  • تصلب PHP مع Suhosin - موجز HowTo خصيصا لسوشين
  • تقوية PHP من php.ini - مناقشة قصيرة ، ولكن ليست سيئة على بعض خيارات وقت التشغيل المتعلقة بالأمن

105
2017-12-14 14:50



أرغب في التصويت لهذه الإجابة 10 مرات على الأقل. - user58859
الصامت N - إما مع IPTables أو جدار ناري خارجي ، قم بتوصيل اتصالات الشبكة بما هو ضروري فقط للوصول للجمهور. - Matt
هذا ينبغي أن يكون ويكي المجتمع - Brian Adkins
من السهل جدا أن ننسى جدار الحماية. سمعت عن شخص قام ببناء خادم ويب لموقع ويب وذهب إلى حد اختراق قرص TCP / IP للتخلص من حركة المرور التي لم يكن المنفذ 80. شيء آخر يتم التغاضي عنه هو خدمات غير ضرورية - إذا لم تكن بحاجة ليتم تشغيله ، قم بإيقاف تشغيله. - Aaron Mason
AaronMason: مبروك! لديك حكاية ناجحة. دعنا نتذكر أن وضعك المحدد قد نجح بشكل جيد ، ولكن دعونا نأمل أن يفهم القراء المستقبليون بيئتك غير العادية. في الحالة العامة هذه النصيحة خطيرة جدا. - Scott Pack


لقد طرحت سؤالًا ، بصراحة ، يستحق بضع كتب حول الموضوع. ولكن هناك بعض المبادئ التوجيهية العامة التي تعمل بشكل جيد:

  1. حافظ على تحديث. هذا يعني نظام التشغيل ، وجميع الخدمات ، وبشكل خاص جميع تطبيقات الويب التي تقوم بتشغيلها.
  2. قم بتعطيل أي خدمات غير مطلوبة ، قم بتحديد الخدمات المطلوبة للحد الأدنى للتعرض (إذا كنت لا تتصل عن بعد بـ MySQL ، ثم لا تستمع إلى TCP) ، وقم بتشغيل جدار حماية قائم على المضيف. (إذا كان LAMP صارمًا ، يجب أن تكون جيدًا مع 80 و 443 ، ولكن ربما SSH أيضًا للإدارة.))
  3. استخدم كلمات مرور قوية. والأفضل من ذلك ، إذا كنت تستخدم SSH ، فاستخدم فقط المصادقة المستندة إلى المفتاح.
  4. تأكد من عدم تسجيل الدخول كجذر. تسجيل الدخول كمستخدمين واستخدام su & sudo.
  5. في حين أنه لا يجعل الأشياء أكثر أمانًا ، يجب تشغيل أدوات مثل ساعة المراقبة حتى تكون على علم بما يحدث على الخادم الخاص بك.

نأمل أن يساعدك على البدء.


13
2017-12-14 02:23



سأقترح عليك قراءة "دليل التكوين الآمن لـ Red Hat Enterprise Linux 5" من تأليف NSA - ALex_hha
في وقت متأخر من الحفلة ، لكني قرأت مؤخرًا أن "عدم تسجيل الدخول كجذر" لم يعد أمرًا كبيرًا ، خاصة إذا كنت تستخدم SSH auth استنادًا إلى المفاتيح العامة / الخاصة. - the0ther


إليك قائمة تحقق جيدة وأحب أن أبدأ بها.

جدار الحماية

  • النهج الجيد هو عدم السماح لأي حركة مرور ببدء ، ثم فقط افتح ما تحتاجه، كما تحتاجها. هذا يؤدي إلى فتح الحد الأدنى من المنافذ / ips لجعل الأشياء تعمل والتي تقلل من مكشف.
  • بالنسبة لخادم LAMP ، قد تحتاج فقط إلى فتح المنافذ http / https إلى العالم و ssh for sysadmins.
  • تأكد من تأمين أشياء مثل مرور ipv6 إذا لم يتم استخدامه
  • يوفر AWS مجموعات الأمان ، وقد linux iptables فضلا عن الكثير من الحزم للاختيار من عند.

SSH والمستخدمون

  • لا توجد كلمة مرور للوصول إلى ssh (استخدم المفتاح الخاص)
  • لا تسمح الجذر ل ssh (يجب على المستخدمين المناسبين استخدام ssh أو su أو sudo)
  • استخدم sudo للمستخدمين بحيث يتم تسجيل الأوامر
  • تسجيل محاولات تسجيل الدخول غير المصرح به (والنظر في البرنامج لحظر / حظر المستخدمين الذين يحاولون الوصول إلى الخادم الخاص بك مرات كثيرة جدًا ، مثل fail2ban)
  • ssh على منفذ غير قياسي (يمكن أن يكون ذلك مفيدًا للتأكد من أنك لست من الفواكه المعلقة المنخفضة ، وأنك تبقي الكثير من حركة المرور المزعجة بعيدا ، ولكنك لن تفعل الكثير للأمن ، خاصة من تلقاء نفسها)
  • قفل إس إس إس إلى فقط مجموعة الملكية الفكرية الخاصة بك تتطلب (مجموعة كبيرة أفضل من أي مجموعة)

قاعدة البيانات

  • تطهير بيانات المستخدم
  • معاملة الاستعلامات
  • خذ بعين الاعتبار استخراج DB إلى الجهاز الخاص به. يمكن أن يزيد هذا الفصل من صعوبة حصول المهاجم على مكدس الويب والعكس صحيح.
  • مثل أي برنامج مواكبة أنه مهم.
  • مستخدم لكل غرض. عند إنشاء المستخدمين ، لا تبدأ أي امتيازات ولا تضيف سوى الامتيازات التي يحتاجونها لتهيئة دورهم. يساعد وجود مستخدمين منفصلين لتطبيقات مختلفة (أو في بعض الأحيان أجزاء مختلفة من التطبيقات) في تقليل الفائدة التي قد يتعرض لها المهاجم إذا قاموا بتهديد أي حساب واحد. كن حذرا أيضا مع امتيازات خاصة مثل GRANT التي لا ينبغي أن تعين على محمل الجد.
  • إن وجود سياسة لتغيير كلمات المرور بشكل دوري يعد فكرة جيدة. إذا كنت قلقًا بشأن مقدار الجهد المطلوب ، فتذكر أن التكرار الأقل أفضل من عدمه أبدًا.
  • فهم تشفير كلمة المرور. كلمات السر. لا تستخدم md5!

البرمجيات

  • حافظ على تحديث البرنامج (نظام التشغيل ، خادم الويب ، لغة البرمجة ، CMS). سيقوم الكثير من الأشخاص بالبحث عن الثغرات المعروفة في الإصدارات القديمة (غير المثبتة)
  • قم بإزالة أي برنامج لا تحتاج إليه (من الناحية المثالية لا تحتفظ بالعبوة المطلوبة لتجميع البرامج على خوادم الإنتاج ، فمن الأفضل أن تقوم مسبقًا بتجميع البرامج وإتاحتها كحزمة لأجهزة الإنتاج الخاصة بك)
  • تأكد من الملف يتم تأمين الأذونات (خصوصًا للأشياء مثل تحميلات المستخدم وملفات التهيئة)
  • حماية كلمة مرور المسؤول لمساحة CMS على مستوى خادم الويب (مصادقة HTTP يمكن أن يجلس أمام نظام CMS ضعيف ويساعد على حظر الوصول ، وهو طريقة جيدة لمنع الهجمات)
  • استخدم SSL بالنسبة لمساحة الإدارة والبيانات الحساسة الأخرى
  • أتمتة إدارة الخوادم والبنية التحتية (شيء مثل Puppet ، Chef أو SaltStack. إذا كنت تستخدم AWF CloudFormation أيضًا). سيساعدك هذا على تصحيح الأشياء عبر الكثير من الخوادم ، وتقليل السيناريوهات مثل إصلاح الأذونات على الخادم أ ، مع نسيان القيام بذلك على الخادم B
  • حيثما أمكن ، لا تتنازل عن إصدار معين من CMS أو PHP أو WebServer. في حين أن حجب هذه المعلومات ليس أمانًا ، فهناك العديد من الأشخاص الذين يقومون بالمسح بحثًا عن إصدارات معينة من برامج مختلفة وتقليل المعلومات التي تعطيها بحرية كلما زاد عدد المهاجمين الذين يتعين عليهم العمل. هذه طريقة جيدة للتأكد من أنك لست واحدة من الفاكهة المتدلية. بالطبع هذا لن يفعل شيئًا لشخص يرغب في إنفاق المزيد من الجهد في الدخول
  • الحد من الأشخاص الذين لديهم حق الوصول إلى الخادم

7
2017-08-10 08:08





إضافة إلى ما يقترحه داود ، كلما كان التثبيت أكثر حداثة ، أعني تقييد الوصول إلى مستخدمين / مجموعات معينة تم إنشاؤها خصيصًا لمهمة واحدة والحد من نطاقها ، كلما كانت رصة LAMP أكثر أمانًا: مثال على ذلك هو أن يكون لديك مستخدم Apache لملفات / مجلدات Apache مع أذونات تم تعيينها وفقًا لذلك وليس في أي مجموعات يمكنها الوصول إلى ملفات / ملفات النظام الهامة. مستخدم يمكنه الوصول إلى جداول MySql المرتبطة بمواقعك الإلكترونية التي ستقوم بتقديمها ، وهذه الجداول فقط. بالإضافة إلى ذلك ، يمكنك تقييد وصولهم لمنح الحد الأدنى من الوصول من مكالمة PHP. أيضا ، تأكد من أن اسم مستخدم MySQL المستخدم / المكشوف من خلال ملف PHP ليس هو نفس اسم المستخدم أو كلمة المرور المستخدمة لمستخدم آخر.

ما يعنيه هذا: إذا تم اختراق مستخدم apache أو مستخدم MySql ، فلا يمكن أن يؤدي ذلك إلى أي ضرر خارج نطاق المجلد (أو المجلدات) الذي لديه حق الوصول (في حالة مستخدم apache) وخارج الجدول ( s) / database (s) (في حالة المستخدم لقاعدة بيانات MySQL).

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

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

مثال على الوقت! سأقدم مثالا على نظام لتبسيط الفكرة.

لنفترض أن لديك مستخدمين على نظامك (يجب تعطيل الجذر للأمان من خلال شيء مثل umod -l أو passwd -l ، وما إلى ذلك): جون ، بارني ، ترينس ، وليزا.

يمكنك إنشاء مستخدم في MySQL باسم bigbird (تأكد من استخدام كلمة مرور مجزأة). لدى Bigbird امتيازات واختيار امتيازات تحديث فقط ، ولكن لا تسقط أو تنشئ ، وبالتأكيد لا . بالإضافة إلى ذلك ، يمكنك إنشاء مستخدم MySQL إداري آخر بالاسم garfield للعمل على قاعدة بيانات MySQL وحذف المستخدم الجذر من قاعدة بيانات MySQL بحيث لا يمكن تجسيده. وقد تم منح غارفيلد . امتيازات في جميع أنحاء MySQL (على نحو فعال ، هذا هو مجرد إعادة تسمية الجذر).

الآن ، يمكنك إنشاء مجموعة apache أو مستخدم وسنطلق عليه apweb2. Appweb2 ليس عضوًا في مجموعات أخرى ، ويتم تخزين كافة الملفات / المجلدات الخاصة بأباتشي في / home / apweb2 /. سيكون لكل مضيف ظاهري مجلد فرعي خاص به ، وسيكون لكل من هؤلاء المضيفين مجموعة جذر وثيقة تم تعيينها لهذا المجلد الفرعي. سيتم تعطيل Symlinks من أجل عدم توفير الوصول بطريق الخطأ إلى باقي النظام.

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

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

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


4
2017-07-30 04:49





وجدت أن هذا المستند من SANS.org مفيد حقًا http://www.sans.org/score/checklists/linuxchecklist.pdf


2
2017-08-10 11:50



مرحبًا بك في خطأ الخادم! عموما نحن نحب الأجوبة على الموقع لتكون قادرة على الوقوف من تلقاء نفسها - روابط رائعة ، ولكن إذا كان هذا الرابط يكسر الجواب يجب أن يكون لديك معلومات كافية لتكون مفيدة. يرجى النظر في تحرير إجابتك لتشمل المزيد من التفاصيل. شاهد التعليمات لمزيد من المعلومات. - slm


في الوقت الحالي ، لا تتجاهل ظاهرية الحاوية ، وهي Docker و systemd-nspawn وآليات محاكاة الحاوية الافتراضية التي يتم بناؤها (مساحات الأسماء والمجموعات cgroups). يسمح استخدام virtual virtualization الحاوية لعزل العمليات ، على سبيل المثال ، إذا تم اختراق إحدى الخدمات ، فلن يتمكن أحد المهاجمين من الوصول إلى خدمات أخرى.

في حالة LAMP ، يمكن استخدام ، على سبيل المثال ، أربع حاويات Docker مع SSH-server و Apache و MySQL و PHP-FPM / Python / Perl / etc.


0
2017-07-27 20:00