क्या इंटरनेट पर खुले सर्वर को रिबूट करना सुरक्षित है?


29

विशेष रूप से

मेरे पास एक iptables का नियम है जो CentOS चलाने वाले सर्वर पर परिभाषित है। क्या मैं गारंटी देता हूं / क्या मैं गारंटी दे सकता हूं / मैं कैसे गारंटी दे सकता हूं कि जब नेटवर्किंग ऑनलाइन आती है (या तो मशीन बूट पर, या नेटवर्क सेवा को फिर से शुरू करने के बाद) तो iptables के नियमों को पहले से ही लागू किया जाता है (और अगर iptables स्टार्ट अप करने में विफल रहा या नियम लागू करने में विफल रहा है नेटवर्क इंटरफेस ऊपर आने में विफल रहेगा)?

(मुझे पता है कि यह एक नॉब सवाल है, लेकिन मैंने कभी भी किसी सर्वर पर भरोसा नहीं किया है, लेकिन डीएचसीपी एनएटी और फायरवॉल के पीछे भरोसेमंद नेटवर्क के लिए कुछ भी नहीं है, इसलिए ... नॉब से नॉब के सवालों की उम्मीद करें।)


15
वास्तव में एक noob सवाल बिल्कुल नहीं। यह अनिवार्य रूप से हैकर्स को 2011 में PlayStation नेटवर्क में वापस मिल गया, जिससे 24 दिनों का आउटेज और बस्तियों में $ 15MM का नुकसान हुआ। जब उनके फायरवॉल ने रिबूट किया (जैसा कि उन्होंने मासिक किया) फायरवॉल कुछ क्षणों के लिए खुला हुआ था - जाहिर तौर पर काफी लंबा।
क्रिस एस

@ क्रिस, मेरे बारे में सबसे अजीब बात, यह होगा कि मुझे यकीन है कि उस नेटवर्क के लिए ज़िम्मेदार sysadmins लगभग निश्चित रूप से इतना स्मार्ट होगा कि अगर कोई फ़ायरवॉल बंद करने का सुझाव दे, लेकिन मासिक रूप से पलक नहीं झपकी, , इसे बंद कर ... और फिर से फिर से। यकीन नहीं है कि इनमें से कौन सा संयोजन इसे समझाएगा, हालांकि।
पार्थियन ने

एक अन्य विकल्प नेटवर्क स्विच पर पोर्ट को अक्षम करना है जब तक कि सर्वर पूरी तरह से बूट न ​​हो - यदि आप साइट पर हैं और स्विच एक्सेस है। यह आदर्श नहीं है, लेकिन यह निश्चित रूप से काम करेगा, जब तक कि सर्वर में एनएफएस जैसे नेटवर्क निर्भरता न हो।
jftuga

@jftuga खैर, यकीन है। लेकिन तब सर्वर इंटरनेट से जुड़ा नहीं होगा, और इसलिए वह समाधान तकनीकी रूप से इस प्रश्न के दायरे में नहीं आता है। यदि मैं साइट पर हूं, तो मैं रिबूट के दौरान ईथरनेट केबल को अनप्लग कर सकता हूं। और अंतर्निहित समस्या पोर्ट-ब्लॉकिंग समाधान के साथ रहेगी, वैसे भी; नेटवर्क पर हमला करने वाले एक अन्य कंप्यूटर को स्थानीय फ़ायरवॉल द्वारा रोका नहीं जाएगा। यदि राउटर हैक किया गया है, या खराबी, या स्थानीय नेट पर किसी अन्य व्यक्ति से समझौता किया गया है, तो खेल अभी भी खत्म हो गया है।
पार्थियन शॉट

@jftuga वास्तव में, मुद्दा इससे भी बदतर है। यह मानते हुए कि किसी ने पहले से ही स्थानीय मशीन पर चलने के लिए सॉफ्टवेयर का एक टुकड़ा प्राप्त कर लिया है, लेकिन मेरा फ़ायरवॉल इग्‍नोर फ़िल्टरिंग करता है, नियम कहता है कि आउटगोइंग पैकेट को केवल तभी अनुमति दी जाती है यदि वे स्थापित या संबंधित हैं, और आने वाले नए कनेक्शन केवल 80 पोर्ट करने की अनुमति है आम तौर पर, यह एक अप्रकाशित खाते से एक रिवर्स शेल को रोक देगा। लेकिन अगर कनेक्शन बूट पर शुरू किया जाता है, तो इसे फ़ायरवॉल इनिशियलाइज़ेशन के माध्यम से बनाए रखा जाएगा। मुझे लगता है कि इसका मतलब यह भी है कि फ़ायरवॉल नियम बदलने चाहिए, लेकिन यह एक आसान गलती है।
पार्थियन शॉट 15

जवाबों:


18

बॉक्स से बाहर, आपको गारंटी दी जाती है कि स्टार्टअप स्क्रिप्ट के आदेश द्वारा इंटरफ़ेस लाने से पहले iptables शुरू हो जाएगा। प्रत्येक स्टार्टअप स्क्रिप्ट में "chkconfig" लाइन को देखें और आप रनवेवेल्स देखेंगे यह "चालू" है जब सक्रिय, स्टार्ट ऑर्डर और स्टॉप ऑर्डर।

आपको इसकी गारंटी नहीं है कि इंटरफ़ेस को नहीं लाया जाएगा यदि iptables नियम को ठीक से (या बिल्कुल) लागू नहीं किया गया था।

उदाहरण:
chkconfig: 2345 08 92
यह पंक्ति बताती है कि विचाराधीन सेवा रनले 2, 3, 4 और 5 में सक्रिय होगी, और 8 से शुरू होगी और 92 पर रुकेगी। अधिक से अधिक "स्टार्ट" मान के साथ कुछ भी इस स्क्रिप्ट के पूरा होने के बाद ही शुरू होगा, लेकिन इस स्क्रिप्ट को पूरा करना एक पूर्णता माना जाता है और यह डाउनस्ट्रीम स्क्रिप्ट को चलने से नहीं रोकेगा।

कृपया ध्यान दें कि यह उत्तर CentOS 6 और इससे पहले लागू होता है, जरूरी नहीं कि CentOS 7. मैंने 7 के लिए इस प्रश्न का उत्तर देने के लिए व्यक्तिगत रूप से 7 का पर्याप्त शोध नहीं किया हो।


1
+1 और ... मुंह में एक उपहार के घोड़े को देखने के लिए नहीं, क्योंकि आप जवाब देने में काफी मददगार हैं, लेकिन ... क्या आप सेवाओं को निर्भरता आदेश देने के किसी भी मानक तरीके के बारे में जानते होंगे, ताकि यदि कोई विफल हो जाए श्रृंखला में शुरुआती बाद वाले शुरू नहीं होते हैं? ऊह- और यह भी कि अगर कोई फायरवॉल (किसी तरह) को क्रैश करने का प्रबंधन करता है, तो नेटवर्क इंटरफ़ेस "जहाज के साथ नीचे जाएगा"? आदर्श रूप से, मैं चाहता हूं कि सब कुछ सुरक्षित विफल हो जाए, यहां तक ​​कि किसी के पास भी किसी के पास फ़ायरवॉल पर 0day है ...
पार्थियन ने

5
SysV स्टार्टअप स्क्रिप्ट (यानी CentOS 6 और पहले) के साथ, ऐसा करने का एक अच्छा तरीका नहीं है। CentOS 7 निर्भरता करता है जैसा आप चाहते हैं - यदि B A पर निर्भर करता है और A विफल रहता है, B प्रारंभ नहीं करता है। 7 के लिए, निर्भरता के उपयोग को देखने के लिए systemctl list-dependencies --all(मैं सिर्फ 30 सेकंड पहले उस आदमी के पेज को देखता था)।
जॉन

जबकि यह समाचार थोड़ा निराशाजनक है (मैं इस समय 6 पर हूं), कम से कम अब मुझे पता है कि init स्क्रिप्ट को संशोधित करना एक स्वीकार्य भयानक हैक है।
पार्थियन ने

5
Init स्क्रिप्ट को संशोधित करने के बारे में बहुत सावधान रहें - ऐसा करने से आपके पास मौजूद किसी भी घुसपैठ का पता लगाने वाले सॉफ़्टवेयर पर झूठे अलार्म का कारण बन सकता है, और यदि initscriptsपैकेज कभी भी अपडेट हो जाता है (जैसे एक इरेटा रिलीज़) संशोधन संशोधित हो जाएगा । मैं वास्तव में ऐसा करने की सलाह नहीं देता।
जॉन

मैंने अभी तक एक आईडीएस सेट नहीं किया है, इसलिए झूठे अलार्म इस समय एक समस्या नहीं हैं (सर्वर अभी तक लाइव नहीं है, और मुझे पता है कि मैं कहीं भी तैयार होने के लिए तैयार नहीं हूं; यह सवाल मेरी तैयारी का हिस्सा है। लेकिन मैं एक HIDS में जा रहा हूँ)। मैं संभवतः उतना ही सावधान रहूंगा जितना संभव हो सकता है, और अगर कोई ऐसा तरीका है जो इनिट्स कॉन्फिगर के मुख्य भागों को मैन्युअल रूप से संशोधित नहीं करता है, तो मैं निश्चित रूप से ऐसा ही हूं।
पार्थियन ने

1

आप सेंटो में ifup-post विकल्प का भी उपयोग कर सकते हैं:

/ Etc / sysconfig / network-scripts / ifup-पोस्ट

किसी भी नेटवर्क डिवाइस की पुष्टि करने के लिए कॉल किया जाता है जब एक SLIP डिवाइस आता है। उस उपकरण पर निर्भर स्थिर मार्गों को लाने के लिए कॉल / etc / sysconfig / network-script / ifup- मार्ग। उस उपकरण के लिए उपनाम लाने के लिए कॉल / etc / sysconfig / network-script / ifup-aliases। होस्टनाम सेट करता है यदि यह पहले से सेट नहीं है और उस डिवाइस के लिए आईपी के लिए होस्टनाम मिल सकता है। किसी भी प्रोग्राम में SIGIO भेजता है जिसने नेटवर्क ईवेंट की सूचना का अनुरोध किया है।

जरूरत के अनुसार नेमवर्क कॉन्फ़िगरेशन को ठीक करने, मनमानी लिपियों, आदि को कॉल करने के लिए बढ़ाया जा सकता है।

यह स्क्रिप्ट चलती है और उपरोक्त (ifup-path और ifup-aliases) के बाद यह ifup-local के लिए दिखती है

if [ -x /sbin/ifup-local ]; then
   /sbin/ifup-local ${DEVICE}
fi

तो आप इस फ़ाइल को बना सकते हैं और सुनिश्चित कर सकते हैं कि यह iptables को फिर से कॉल करता है उदाहरण के लिए iptables-restore का उपयोग करके:

iptables-restore < /etc/sysconfig/iptables

1

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

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