एक LAMP सर्वर की सुरक्षा के लिए युक्तियाँ


जवाबों:


107

डेविड का जवाब सर्वर सख्त के सामान्य सिद्धांतों की एक अच्छी आधार रेखा है। जैसा कि डेविड ने संकेत दिया, यह एक बहुत बड़ा सवाल है। आपके द्वारा ली जाने वाली विशिष्ट तकनीकें आपके वातावरण पर अत्यधिक निर्भर करती हैं और आपके सर्वर का उपयोग कैसे किया जाएगा। चेतावनी, यह एक परीक्षण वातावरण में बहुत सारे काम कर सकता है ताकि निर्माण और सही तरीके से किया जा सके। आपके उत्पादन वातावरण में एकीकृत करने के लिए बहुत सारे कामों का पालन किया गया, और इससे भी महत्वपूर्ण बात, व्यवसाय प्रक्रिया।

सबसे पहले, हालांकि, यह देखने के लिए जांचें कि क्या आपके संगठन की कोई सख्त नीतियां हैं, क्योंकि वे सबसे सीधे प्रासंगिक हो सकते हैं। यदि नहीं, तो आपकी भूमिका के आधार पर, उन्हें बनाने के लिए यह एक अच्छा समय हो सकता है। मैं भी नीचे से ऊपर प्रत्येक घटक से निपटने की सिफारिश करेंगे।

एल
वहाँ बहुत सारे अच्छे मार्गदर्शक हैं जो आपकी मदद करने के लिए उपलब्ध हैं। यह सूची आपके वितरण के आधार पर आपकी मदद कर सकती है या नहीं।

A
Apache सुरक्षित करने के लिए मज़ेदार हो सकती है। मुझे OS को सख्त करना और Apache या PHP की तुलना में प्रयोज्य बनाए रखना आसान लगता है।

उन्हें

P
यह सिक्योर प्रोग्रामिंग प्रैक्टिस के पूरे विचार में सुर्खियों में है, जो अपने आप में संपूर्ण अनुशासन है। SANS और OWASP में इस विषय पर हास्यास्पद जानकारी है, इसलिए मैं इसे यहां दोहराने की कोशिश नहीं करूंगा। मैं रनटाइम कॉन्फ़िगरेशन पर ध्यान केंद्रित करूंगा और अपने डेवलपर्स को बाकी के बारे में चिंता करने दूंगा। कभी-कभी LAMP में 'P' का अर्थ पर्ल होता है, लेकिन आमतौर पर PHP। मैं बाद की बात मान रहा हूं।


1
मैं इस उत्तर को कम से कम 10 बार वोट देना चाहता हूं।
user58859

10
साइलेंट N - IPTables या किसी बाहरी फ़ायरवॉल के साथ, नेटवर्क कनेक्शन को केवल उसी चीज़ के लिए ब्लॉक करें जो जनता तक पहुँचने के लिए आवश्यक है।
मैट

यह एक सामुदायिक विकि होना चाहिए
ब्रायन एडकिंस

1
फ़ायरवॉल को भूलना इतना आसान है। मैंने किसी ऐसे व्यक्ति के बारे में सुना है जिसने एक वेबसाइट के लिए एक वेब सर्वर बनाया और यहां तक ​​कि ट्रैफ़िक को फेंकने के लिए टीसीपी / आईपी स्टैक को हैक करने के लिए चला गया जो कि 80 पोर्ट नहीं था। एक और बात जो अनदेखी हो जाती है वह अनावश्यक सेवाएं हैं - अगर इसकी आवश्यकता नहीं है चालू करने के लिए, इसे बंद करें।
एरोन मेसन

4
@AaronMason: बधाई! आपका एक सफल किस्सा है। आइए याद रखें कि आपकी विशिष्ट स्थिति ने अच्छी तरह से काम किया, लेकिन आशा है कि भविष्य के पाठक आपके असामान्य वातावरण को समझेंगे। सामान्य स्थिति में यह सलाह बहुत खतरनाक है।
स्कॉट पैक

14

आपने एक प्रश्न पूछा है, जो बहुत स्पष्ट रूप से, इस विषय पर कुछ पुस्तकों के योग्य है। लेकिन कुछ सामान्य बुनियादी दिशानिर्देश हैं जो अच्छी तरह से काम करते हैं:

  1. अपडेट करते रहें। इसका अर्थ है OS, सभी सेवाएँ, और ESPECIALLY आपके द्वारा चलाए जा रहे सभी webapps।
  2. किसी भी अनावश्यक सेवाओं को अक्षम करें, उन्हें न्यूनतम जोखिम के लिए सीमित करें (यदि आप दूरस्थ रूप से MySQL से कनेक्ट नहीं कर रहे हैं, तो इसे TCP पर सुनना नहीं है), और होस्ट-आधारित फ़ायरवॉल चलाएं। (यदि यह सख्ती से LAMP है, तो आपको 80 और 443 के साथ अच्छा होना चाहिए, लेकिन शायद SSH और प्रशासन के लिए भी।)
  3. मजबूत पासवर्ड का उपयोग करें। बेहतर है, यदि आप SSH का उपयोग करते हैं, तो केवल कुंजी-आधारित स्थिति का उपयोग करें।
  4. सुनिश्चित करें कि आप रूट के रूप में लॉग इन नहीं कर रहे हैं। उपयोगकर्ताओं के रूप में लॉग इन करें और su & sudo का उपयोग करें।
  5. हालांकि यह चीजों को अधिक सुरक्षित नहीं बनाता है, आपको लॉगवाच जैसे टूल चलाना चाहिए ताकि आपको पता रहे कि आपके सर्वर पर क्या हो रहा है।

आशा है कि आप शुरू करने में मदद करता है।


1
मैं NSA द्वारा लिखित "Red Hat Enterprise Linux 5 के सुरक्षित विन्यास के लिए गाइड" पढ़ने का सुझाव
दूंगा

1
पार्टी के लिए देर से, लेकिन मैंने हाल ही में पढ़ा है कि "रूट के रूप में लॉग इन नहीं करना" अब इतना बड़ा सौदा नहीं है, खासकर यदि आप सार्वजनिक / निजी कुंजी के आधार पर एसएसएच विशेषाधिकार का उपयोग कर रहे हैं।
the0ther

8

यहाँ एक अच्छी चेकलिस्ट है जिसकी शुरुआत मुझे पसंद है।

फ़ायरवॉल

  • एक अच्छा तरीका यह है कि किसी भी ट्रैफ़िक को शुरू न होने दें, उसके बाद ही अपनी ज़रूरत के अनुसार खोलें । इससे चीजों को काम करने के लिए न्यूनतम पोर्ट / इप्स खोलने में मदद मिलती है और यह आपके जोखिम को कम करता है।
  • एक LAMP सर्वर के लिए आपको केवल दुनिया के लिए http / https के लिए पोर्ट खोलने और sysadmins के लिए ssh की आवश्यकता हो सकती है।
  • सुनिश्चित करें कि IPv6 ट्रैफ़िक जैसी चीज़ों का उपयोग न करने पर बंद कर दिया जाता है
  • AWS सुरक्षा समूह प्रदान करता है, linux में iptables और साथ ही चुनने के लिए बहुत सारे पैकेज हैं।

SSH और उपयोगकर्ता

  • Ssh एक्सेस के लिए कोई पासवर्ड नहीं (निजी कुंजी का उपयोग करें)
  • रूट को ssh (उपयुक्त उपयोगकर्ताओं को ssh, फिर su या sudo में नहीं करना चाहिए) की अनुमति न दें
  • उपयोगकर्ताओं के लिए sudo का उपयोग करें ताकि कमांड लॉग हो
  • अनधिकृत लॉगिन प्रयास लॉग करें (और उन उपयोगकर्ताओं को ब्लॉक करने / प्रतिबंधित करने के लिए सॉफ़्टवेयर पर विचार करें, जो आपके सर्वर तक पहुंचने की कोशिश करते हैं, जैसे कि कई बार विफल। 2ban)
  • गैर-मानक पोर्ट पर ssh (यह सुनिश्चित करने के लिए उपयोगी हो सकता है कि आप कम लटके हुए फल नहीं हैं, और बहुत कष्टप्रद यातायात को दूर रखें, लेकिन सुरक्षा के लिए बहुत कुछ नहीं करेंगे, विशेष रूप से)
  • केवल अपनी आवश्यकता के लिए आईपी रेंज को लॉक करें ssh (कोई बड़ी रेंज सीमा से बेहतर है)

डेटाबेस

  • उपयोगकर्ता डेटा को संचित करें
  • प्रश्नों को परिमार्जित करें
  • DB को अमूर्त करने पर विचार करें कि यह स्वयं की मशीन है। यह पृथक्करण किसी हमलावर के लिए आपके वेब स्टैक और इसके विपरीत होने के लिए और अधिक कठिन बना सकता है।
  • जैसे किसी भी सॉफ्टवेयर को अपडेट रखना महत्वपूर्ण है।
  • प्रत्येक उद्देश्य के लिए एक उपयोगकर्ता । उपयोगकर्ताओं को बनाते समय कोई विशेषाधिकार नहीं के साथ शुरू होता है और उन्हें केवल अपनी भूमिका को सुधारने की आवश्यकता होती है। अलग-अलग अनुप्रयोगों (या कभी-कभी अनुप्रयोगों के अलग-अलग हिस्सों) के लिए अलग-अलग उपयोगकर्ता होने से एक हमलावर को किसी भी खाते से समझौता करने वाले लाभ को कम करने में मदद मिलेगी। GRANT जैसे विशेष विशेषाधिकारों से सावधान रहें जिन्हें हल्के ढंग से नहीं सौंपा जाना चाहिए।
  • पासवर्ड को समय-समय पर बदलने की नीति रखना एक अच्छा विचार है। यदि आप प्रयास की मात्रा के बारे में चिंतित हैं, तो याद रखें कि कम लगातार होना कभी नहीं से बेहतर है।
  • पासवर्ड एन्क्रिप्शन को समझें। नमक के पासवर्ड । Md5 का उपयोग न करें!

सॉफ्टवेयर

  • सॉफ़्टवेयर को अद्यतित रखें (ओएस, वेब सर्वर, स्क्रिप्टिंग भाषा, सीएमएस)। बहुत से लोग पुराने (अनपेक्षित) संस्करणों में ज्ञात कमजोरियों के लिए स्कैन करेंगे
  • किसी भी ऐसे सॉफ़्टवेयर को निकालें जिसकी आपको ज़रूरत नहीं है (आदर्श रूप से उत्पादन सर्वर पर सॉफ़्टवेयर संकलित करने के लिए आवश्यक पैकेज न रखें, सॉफ़्टवेयर को पूर्व-संकलन करना और इसे अपनी उत्पादन मशीनों के पैकेज के रूप में उपलब्ध कराना बेहतर है)
  • सुनिश्चित करें कि फ़ाइल अनुमतियाँ बंद हैं (विशेष रूप से उपयोगकर्ता अपलोड और कॉन्फ़िगर फ़ाइलों जैसी चीजों के लिए)
  • पासवर्ड वेब सर्वर के स्तर पर सीएमएस के लिए व्यवस्थापक क्षेत्र की रक्षा ( http प्रमाणीकरण में सामने एक vulnerabile सीएमएस और मदद ब्लॉक का उपयोग, जो हमलों को रोकने के लिए एक अच्छा तरीका है की बैठ सकते हैं)
  • व्यवस्थापक क्षेत्र और अन्य संवेदनशील डेटा के लिए एसएसएल का उपयोग करें
  • अपने सर्वर और बुनियादी ढांचे के प्रबंधन को स्वचालित करें (कुछ कठपुतली, बावर्ची या साल्टस्टैक की तरह। यदि एडब्ल्यूएस क्लाउडफ़ॉर्म का उपयोग कर रहे हैं)। यह आपको बहुत से सर्वरों में चीजों को पैच करने में मदद करेगा, और सर्वर ए पर अनुमतियों को ठीक करने जैसे परिदृश्यों में कटौती करेगा, लेकिन इसे सर्वर बी पर करना भूल जाएगा
  • जहां संभव हो अपने सीएमएस, पीएचपी या वेबसेवर के विशेष संस्करण को दूर न करें। इस जानकारी को अस्पष्ट करते समय सुरक्षा नहीं है, कई लोग हैं जो विभिन्न सॉफ़्टवेयर के विशेष संस्करणों के लिए स्कैन करते हैं और कम जानकारी जो आप स्वतंत्र रूप से देते हैं जितना अधिक हमलावर को काम करना पड़ता है। यह सुनिश्चित करने का एक अच्छा तरीका है कि आप कम लटके फलों में से एक नहीं हैं। निश्चित रूप से यह उस व्यक्ति के लिए कुछ भी नहीं करेगा जो इसमें प्राप्त करने के लिए थोड़ा और प्रयास करना चाहता है
  • सर्वर तक पहुँच रखने वाले लोगों को सीमित करें

5

डेविड जो बताता है, वह आपके इंस्टॉलेशन को और अधिक मॉड्यूलर करता है, इसका मतलब है कि मैं कुछ उपयोगकर्ताओं / समूहों के लिए विशेष रूप से एक कार्य के लिए उपयोग को प्रतिबंधित करता हूं और उनके दायरे को सीमित करता हूं, आपका LAMP स्टैक जितना सुरक्षित होता है: इसका एक उदाहरण अपाचे उपयोगकर्ता के लिए है अपाचे फ़ाइलों / फ़ोल्डरों के लिए अनुमतियों के अनुसार सेट किया गया है और किसी भी समूह में नहीं है जो महत्वपूर्ण सिस्टम फ़ाइलों / फ़ोल्डरों तक पहुंच सकता है। एक उपयोगकर्ता जो MySql तालिकाओं का उपयोग कर सकता है जो आपकी वेबसाइटों से संबद्ध हैं जिन्हें आप सेवा देने जा रहे हैं और केवल उन तालिकाओं को। इसके अतिरिक्त, आप PHP कॉल से न्यूनतम राशि तक पहुँच देने के लिए उनकी पहुँच को प्रतिबंधित कर सकते हैं। यह भी सुनिश्चित करें कि PHP फ़ाइल के माध्यम से उपयोग किया गया / उजागर किया गया MySQL उपयोगकर्ता नाम एक ही उपयोगकर्ता नाम या पासवर्ड का उपयोग नहीं करता है।

इसका क्या अर्थ है: यदि अपाचे उपयोगकर्ता या MySql उपयोगकर्ता समझौता कर रहे हैं, तो वे फ़ोल्डर के दायरे के बाहर कोई नुकसान नहीं कर सकते हैं (अपाचे उपयोगकर्ता के मामले में) अपाचे की पहुंच है (तालिका के बाहर) और ( s) / डेटाबेस (s) (MySQL डेटाबेस के लिए उपयोगकर्ता के मामले में)।

यदि किसी तरह MySQL उपयोगकर्ता से छेड़छाड़ की जाती है, तो वे उदाहरण के लिए, डेटाबेस तक नहीं पहुँच सकते हैं और MySQL से सभी डेटाबेस को छोड़ सकते हैं और आपके सभी डेटा को बर्बाद कर सकते हैं। वे कुछ परिस्थितियों में टेबल को गिराने या एक अलग डेटाबेस में कुछ तालिकाओं में जानकारी डालने में सक्षम हो सकते हैं, यही कारण है कि केवल टेबल एक्सेस देना महत्वपूर्ण है जहां यह बिल्कुल आवश्यक है और केवल आवश्यक अनुमतियाँ प्रदान करें ... यदि आप डॉन ' टी के लिए ड्रॉप टेबल विशेषाधिकार या विशेषाधिकारों को अद्यतन करने की आवश्यकता है, फिर उन्हें उस उपयोगकर्ता को न दें।

इसके अलावा, यदि किसी कारण से आपका प्रशासनिक खाता उपयोगकर्ता नाम और पासवर्ड MySQL के लिए पाया जाता है, यदि आप अपने सिस्टम पर किसी भी उपयोगकर्ता नाम की तुलना में एक अलग उपयोगकर्ता नाम का उपयोग करते हैं, तो उन्हें नुकसान करने के लिए अपने डेटाबेस में आने से पहले अपने सिस्टम की सुरक्षा को तोड़ना होगा। वही अपाचे उपयोगकर्ता और फाइलों तक पहुंच के बारे में सही है।

उदाहरण समय! मैं एक प्रणाली का उदाहरण देने जा रहा हूं ताकि विचार को सरल बनाया जा सके।

कहते हैं कि आपके पास आपके सिस्टम पर उपयोगकर्ता हैं (रूट को सुरक्षा के लिए umod -l या passwd -l, इत्यादि के माध्यम से अक्षम किया जाना चाहिए): जॉन, बार्नी, टेरेन्स, और लिसा।

आप बिगबर्ड के नाम के साथ MySQL में एक उपयोगकर्ता बना सकते हैं (सुनिश्चित करें कि आप हैशेड पासवर्ड का उपयोग करते हैं)। बिगबर्ड में केवल विशेषाधिकारों और अद्यतन विशेषाधिकारों का चयन होता है, लेकिन ड्रॉप या क्रिएट नहीं, और निश्चित रूप से नहीं इसके अतिरिक्त, आप MySQL डेटाबेस पर काम करने के लिए नाम गारफ़ील्ड के साथ एक और प्रशासनिक MySQL उपयोगकर्ता बनाते हैं और आप रूट उपयोगकर्ता को MySQL डेटाबेस से हटा देते हैं ताकि इसे कंप्रेस न किया जा सके। गारफील्ड दी गई है MySQL में विशेषाधिकार (प्रभावी रूप से, यह केवल रूट का नाम बदल रहा है)।

अब, आप या तो एक अपाचे समूह या एक उपयोगकर्ता बनाते हैं और हम इसे apweb2 कहेंगे। Appweb2 अन्य समूहों का सदस्य नहीं है, और Apache के लिए सभी फ़ाइलें / फ़ोल्डर / home / apweb2 / में संग्रहीत किए जाते हैं। प्रत्येक वर्चुअल होस्ट का अपना सबफ़ोल्डर होगा और इनमें से प्रत्येक होस्ट के पास उस सबफ़ोल्डर में दस्तावेज़ रूट सेट होगा। सिम्बलिंक को निष्क्रिय कर दिया जाएगा ताकि गलती से बाकी सिस्टम तक पहुंच न हो सके।

इसके अलावा, आप केवल कुछ उपयोगकर्ताओं (या कुछ समूहों के लिए ssh अभिगमन को प्रतिबंधित कर सकते हैं, मैं उन्हें ssh समूह में रखना पसंद करता हूँ, और केवल वही चीज़ उपयोग करने में सक्षम बनाता हूँ)।

इसके अलावा, आप चुन सकते हैं कि किन उपयोगकर्ताओं के पास चीजों को आगे भी प्रतिबंधित करने के लिए sudo विशेषाधिकार हैं। एक और कदम आप इसे आगे ले जा सकते हैं कि कोई भी ssh उपयोगकर्ता sudo में सक्षम न हो, आप ऐसे विशेष उपयोगकर्ता बना सकते हैं जो sudo का उपयोग कर सकते हैं जो ssh का उपयोग नहीं कर सकते हैं, ताकि एक बार ssh में आने के बाद, आपको दूसरे उपयोगकर्ता में लॉग इन करना पड़े सुडो तक पहुँच।

इसलिए, प्रत्येक खंड को संशोधित करके, यदि एक समझौता किया जाता है, तो पूरे स्टैक से समझौता नहीं किया जाएगा और आप फिर से खरोंच से सभी को शुरू करने के बजाय 1 समस्या का उपाय कर सकते हैं।


3

मुझे यह दस्तावेज़ SANS.org से वास्तव में उपयोगी http://www.sans.org/score/checklists/linuxchecklist.pdf मिला


सर्वर दोष में आपका स्वागत है! आमतौर पर हम साइट पर उत्तर पसंद करते हैं जो अपने दम पर खड़े होने में सक्षम हैं - लिंक महान हैं, लेकिन अगर उस लिंक ने कभी भी उत्तर को तोड़ दिया तो अभी भी उपयोगी होने के लिए पर्याप्त जानकारी होनी चाहिए। अधिक विवरण शामिल करने के लिए कृपया अपने उत्तर को संपादित करने पर विचार करें। अधिक जानकारी के लिए FAQ देखें ।
slm

1

वर्तमान समय में, कंटेनर वर्चुअलाइजेशन, अर्थात् डोकर, सिस्टमड-एनएसपीएन और कंटेनर वर्चुअलाइजेशन के तंत्र की उपेक्षा नहीं करते हैं, जिस पर वे निर्मित होते हैं (नामस्थान, cgroups)। कंटेनर वर्चुअलाइजेशन का उपयोग आपको प्रक्रियाओं को अलग करने की अनुमति देता है, उदाहरण के लिए, यदि सेवाओं में से एक में समझौता किया जाता है, तो एक हमलावर अन्य सेवाओं तक पहुंच प्राप्त नहीं करेगा।

LAMP के मामले में, उदाहरण के लिए, SSH- सर्वर, अपाचे, MySQL, PHP-FPM / पायथन / पर्ल / आदि के साथ चार डॉक कंटेनर का उपयोग करना संभव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.