बाध्यकारी 80 से 443 के लिए अन्य अनुप्रयोगों को रोकना


16

पिछले हफ्ते मुझे एक डरे हुए ग्राहक का फोन आया क्योंकि उसे लगा कि उसकी वेबसाइट हैक हो गई है। जब मैंने उसकी वेबसाइट देखी तो मैंने apache2डिफ़ॉल्ट पृष्ठ देखा । उस रात मेरे सर्वर ( Ubuntu 16.04 LTS) ने अपग्रेड किया और रिबूट किया। आम तौर पर जब कुछ गलत होता है तो मुझे रात के दौरान अलर्ट हो जाता था। इस बार नहीं, क्योंकि निगरानी प्रणाली HTTP स्थिति कोड 200 के लिए जांचती है, और apache2डिफ़ॉल्ट पृष्ठ स्थिति कोड 200 के साथ आता है।

क्या हुआ कि स्टार्टअप के दौरान apache2मेरे वास्तविक वेबसर्वर नग्नेक्स की तुलना में 80 और 443 पोर्ट करने के लिए तेजी से बांधना था। मैंने स्वयं Apache2 स्थापित नहीं किया था। के माध्यम से aptitude why apache2मुझे पता चला php7.0 पैकेज की आवश्यकता है।

केवल हटाने apache2से काम नहीं चलेगा क्योंकि जाहिरा तौर पर php7.0 को इसकी आवश्यकता होती है। क्या यह किसी भी तरह संभव है एक प्रतिबंध बनाएं ताकि केवल नगीनेक्स को 80 और 443 को पोर्ट करने की अनुमति दी जाए?

अन्य समाधान भी स्वागत से अधिक हैं।


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

2
मैं पहले एक परीक्षण मशीन पर उन्नयन का परीक्षण नहीं करता हूं, लेकिन मैन्युअल रूप से उन्नयन का समय निर्धारण करने से पहले हमेशा चैंज की जांच करता हूं । इसके अलावा ऐसा लगता है कि अपाचे 2 पहले के अपग्रेड के दौरान फिसल गया था। बस यह है कि इस बार इसने apache2 को रीबूट किया था जो सबसे पहले http और https पोर्ट से बंधे थे।
बॉयड

9
एक साइड नोट के रूप में - This time not, because the monitoring system checks for HTTP status code 200। आप वेब पेज की वास्तविक सामग्री (शरीर या हेडर में कुछ विशेष स्ट्रिंग) की जांच करने के लिए इसे बनाकर निगरानी प्रणाली में सुधार कर सकते हैं, यह अधिक विश्वसनीय होगा।
वीएल -80

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

5
@ निष्पक्ष होने के लिए ऐसा लगता है कि इस तरह का मुद्दा एक परीक्षण मशीन पर नहीं दिखा हो सकता है ... वह प्रभावी रूप से एक दौड़ की स्थिति है जैसे कि अपाचे 2 या नेग्नेक्स बंदरगाहों को बांध देगा, और परीक्षण मशीन सैद्धांतिक रूप से समाप्त हो सकती है। nginx जीत (सिर्फ संयोग से) परीक्षण की अवधि के लिए तो समस्या की खोज नहीं की जाएगी।
डॉकटोर जे।

जवाबों:


29

आप किसी पोर्ट को गलत सेवा से बंधने से नहीं रोक सकते। आपके मामले में, बस ऑटोस्टार्ट से अपाचे को हटा दें और आपको अच्छा होना चाहिए।

16.04 और नए के लिए:

sudo systemctl disable apache2

पुराने उबंटू संस्करणों के लिए:

sudo update-rc.d apache2 disable

2
मैं ऐसा करूंगा, लेकिन मुझे उम्मीद थी कि मैं भविष्य की स्थितियों से खुद का बचाव कर सकता हूं जिसमें एक और पैकेज जो 80 और 443 को पोर्ट करता है वह अनजाने में मेरे सिस्टम पर दूसरे पैकेज की निर्भरता के रूप में स्थापित है।
बॉयड

1
चूँकि यह 16.04 है, इसलिए:systemctl disable apache2
muru

12
@ बोयड: आप आँख बंद करके "अनजाने में" पैकेज क्यों स्थापित कर रहे हैं? कैसे आए, ग्राहकों द्वारा उपयोग किए जाने वाले आपके लाइव सर्वर पर, आप यह भी नहीं पढ़ रहे हैं कि कौन से पैकेज और निर्भरताएं स्थापित की जा रही हैं? और कैसे आए आप निष्पादन से पहले दर्पण सर्वर पर सब कुछ परीक्षण नहीं कर रहे हैं? ये मूल संचालन सिद्धांत हैं और आपकी सभी समस्याओं को हल करेंगे।
मोनिका

6
@BoundaryImposition बंदरगाहों के लिए सॉफ्टवेयर बाइंडिंग से बचाव का मतलब यह नहीं है कि मैं सिर्फ आँख बंद करके पैकेज स्थापित कर रहा हूं। लेकिन हम लोग भी गलतियाँ करते हैं। दुर्भाग्य से हम पहले प्रत्येक ऑपरेशन को एक डमी सर्वर पर परीक्षण करने में सक्षम नहीं हैं, लेकिन इस मामले में यह तुरंत समस्या नहीं दिखाएगा, क्योंकि समस्या सामने आने के एक सप्ताह पहले apache2 स्थापित किया गया था (सिस्टम को इस बीच भी बिना किसी समस्या के रीबूट किया गया था )। जबकि हम अभी भी साप्ताहिक उन्नयन हर उन्नयन का परीक्षण करने में सक्षम नहीं है। हम डाउनटाइम जोखिम सीमित (मॉनिटरिंग के माध्यम से) पर अप-टू-डेट सुरक्षा पैच पसंद करते हैं।
बॉयड

3
@ बॉय: "दुर्भाग्य से हम पहले डमी सर्वर पर हर ऑपरेशन का परीक्षण करने में सक्षम नहीं हैं" क्यों नहीं? क्या आपके ग्राहक जानते हैं कि आप इस प्रक्रिया को छोड़ देते हैं?
मोनिका

27

यदि आप वास्तव में उपयोग नहीं कर रहे हैं apache2, और यह PHP 7.0 की आवश्यकता है, तो ऐसा लगता है कि आपने libapache2-mod-php7.0स्थापित किया है। वह पैकेज अपाचे के बिना बेकार है। चूँकि आप नगनेक्स का उपयोग कर रहे हैं, आप संभावना भी रखते हैं php7.0-fpmया php7.0-cgiस्थापित करते हैं, दोनों में से कोई भी संतोषजनक php7.0निर्भरता आवश्यकताओं के लिए पर्याप्त है :

$ apt-cache depends php7.0
php7.0
 |Depends: php7.0-fpm
 |Depends: libapache2-mod-php7.0
  Depends: php7.0-cgi
  Depends: php7.0-common
  Conflicts: <php5>

यदि आपके पास या तो php7.0-{fpm,cgi}स्थापित है, तो आप आगे जा सकते हैं और अपाचे की स्थापना रद्द कर सकते हैं।


6
मैं वास्तव में आज है कि मेरी स्थिति में मैं बेहतर बस स्थापित करने के साथ बंद कर रहा हूँ सीखा php7.0-fpmऔर नहीं php7.0पैकेज। यह Ondřej Surý github.com/oerdnj/deb.sury.org/wiki/…
Boyd

5
यह वास्तविक समस्या का वास्तविक समाधान है: अपाचे स्थापित किए बिना उबंटू पर नग्नेक्स और पीएचपी कैसे स्थापित करें।
डेविड कुलेन

2

अपने प्रश्न का उत्तर देने के लिए, आप शायद सेलाइनक्स का उपयोग करके किसी विशिष्ट एप्लिकेशन के पोर्ट को प्रतिबंधित कर सकते हैं। मैंने स्वयं इसका उपयोग नहीं किया है और इसकी क्षमताओं का केवल सतही ज्ञान है, लेकिन यहाँ एक संकेत है जो मुझे इस साइट में मिला है:

/server//a/257056/392230

उस उत्तर में, wzzrd यह दर्शाता है कि किसी विशिष्ट अनुप्रयोग (foo) को किसी विशिष्ट पोर्ट (803) को बाइंड करने की अनुमति कैसे दी जाती है। आपको बस पॉलिसी सेट-अप करनी होगी ताकि आपके द्वारा निर्दिष्ट पोर्ट (80 और 44%) में केवल आपके आवेदन (नग्नेक्स) की अनुमति हो।

वज़ीरे के उत्तर के आधार पर, इसे नीति में जोड़ना उतना ही सरल हो सकता है

allow nginx_t nginx_port_t:tcp_socket name_bind;

और यह चल रहा है

semanage port -a -t nginx_port_t -p tcp 80
semanage port -a -t nginx_port_t -p tcp 443

हालाँकि, मुझे लगता है कि आपको उस नीति में एक पंक्ति की आवश्यकता होगी जो यह निर्दिष्ट करती है कि कोई अन्य कार्यक्रम उन बंदरगाहों के लिए बाध्य नहीं हो सकता है।

अंत में, मैं सिर्फ अनुमान लगा रहा हूं कि उपयुक्त विन्यास क्या है।

वैसे भी, मुझे नहीं लगता कि कोई उबंटू रहा हो जिसमें सीलिनक्स स्थापित हो और डिफ़ॉल्ट रूप से सक्षम हो। क्योंकि मेरा मानना ​​है कि इसे विभिन्न उपयोगिताओं और कर्नेल विकल्प के लिए कुछ पैच लगाने की आवश्यकता है, इसलिए सेंटो का उपयोग करना आसान हो सकता है जिसमें सेलाइनक्स स्थापित हो और गेट-गो से सक्षम हो।

क्षमा करें, मैं अधिक मदद का नहीं हूं। शायद कुछ और समय, मैं Centos की एक छवि डाउनलोड करूँगा और यह कोशिश करूँगा; यह एक अच्छा शिक्षण कदम होगा। यदि मैं करता हूं तो मैं इस उत्तर को अपडेट करूंगा।


2
lol @ "सेंटो का उपयोग करना आसान हो सकता है"
डेविड कुलेन

2

ऐसा कुछ जो मैंने अभी तक उत्तर में नहीं देखा है, लेकिन अभी भी एक संभावना है:

केवल मामले में, दूसरे पोर्ट को सुनने के लिए अपाचे कॉन्फिगर को बदलें। आप ऐसा कर सकते हैं कि अपाचे कॉन्फिगर फाइल को खोलकर, और Listen 80दूसरी पोर्ट के लिए लाइनों को बदलकर ।


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

0

मेरे पास आपके सटीक प्रश्न का उत्तर नहीं है, लेकिन शायद आपको अपने डिस्ट्रो को देखने की आवश्यकता है। मैं किसी भी डिस्ट्रो पर विचार करूंगा जो असुरक्षित होने के लिए सेवाओं (एपाचे 2 यहां) को सक्षम बनाता है। ऐसा नहीं करने वाले डिस्ट्रो में देखने पर विचार करें। मैं यह नहीं कह सकता कि मैंने आर्चलिनक्स के उस व्यवहार को कभी देखा है, मुझे यकीन है कि अन्य लोग भी हैं।


1
तो आप क्या सलाह देते हैं, सर्वर को प्रारूपित करने और कुछ अन्य वितरण को स्थापित करने के लिए? और आप क्यों मानते हैं कि उबंटू विशिष्ट सेवाओं को संभालने में सक्षम नहीं है, जैसा कि कुछ अन्य जवाब में संकेत दिया गया है? यह उत्तर एक धार्मिक टिप्पणी है और जो भी मददगार नहीं है।
Wtower

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

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

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