लिनक्स में पोर्ट कैसे बंद करें?


38

पोर्ट बंद करने में मेरा कुछ सवाल है, मुझे लगता है कि मुझे कुछ अजीब चीजें मिलीं।

जब मैं निष्पादन का उपयोग करता हूं

nmap --top-ports 10 192.168.1.1

यह दर्शाता है कि 23 / TCP पोर्ट खुला है।

लेकिन जब मैं निष्पादित करता हूं

nmap --top-ports 10 localhost

यह दर्शाता है कि 23 / tcp पोर्ट बंद है।

उनमें से कौन सा सच है? मैं अपने पूरे सिस्टम पर इस पोर्ट को बंद करना चाहता हूं, मैं यह कैसे कर सकता हूं?


10
वे दोनों सत्य हैं। TCP पोर्ट होस्ट से संबद्ध नहीं हैं। वे नेटवर्क इंटरफेस से जुड़े हैं। अंतर सूक्ष्म लेकिन महत्वपूर्ण है। इंटरफेस अक्सर मेजबानों के समान होते हैं, लेकिन हमेशा नहीं। इस मामले में (जैसा कि उत्तर में कहा गया है ) इंटरफ़ेस (लूपबैक) localhostतक पहुंच रहा loहै। आईपी पता अपने वास्तविक इंटरफेस में जाकर किया जाता है, शायद eth0या wlan0या somesuch।
आवारा

3
इस सवाल के स्पष्ट भोलेपन के कारण कुछ भयानक जवाब मिले। सवाल के लिए आपका धन्यवाद!
dotancohen

जवाबों:


47

Nmap एक शानदार पोर्ट स्कैनर है, लेकिन कभी-कभी आप कुछ अधिक आधिकारिक चाहते हैं। आप कर्नेल से पूछ सकते हैं कि netstatउपयोगिता का उपयोग करके कौन सी प्रक्रियाएं खुली हैं :

me @ myhost: ~ $ sudo netstat -tlnp
सक्रिय इंटरनेट कनेक्शन (केवल सर्वर)
प्रोटो रिकव-क्यू सेंड-क्यू लोकल एड्रेस फॉरेन एड्रेस स्टेट पीआईडी ​​/ प्रोग्राम नाम
tcp 0 0 127.0.0.1.1.0 0.0.0.0:* LISTEN 1004 / dnsmasq    
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 380 / sshd        
tcp 0 0 127.0.0.1:631 0.0.0.0:* लिस्टेन 822 / कपड       
tcp6 0 0 ::: 22 ::: * LISTEN 380 / sshd        
tcp6 0 0 :: 1: 631 ::: * लिस्टेन 822 / कप       

मैंने जो विकल्प दिए हैं, वे हैं:

  • -t केवल टीसीपी
  • -l केवल बंदरगाहों को सुनकर
  • -n सेवा और होस्ट नाम न देखें, बस संख्याएँ प्रदर्शित करें
  • -p प्रक्रिया की जानकारी दिखाएं (रूट विशेषाधिकार की आवश्यकता है)

इस मामले में, हम देख सकते हैं कि sshdकिसी भी इंटरफ़ेस ( 0.0.0.0) पोर्ट 22 cupsdपर सुन रहा है , और लूपबैक ( 127.0.0.1) पोर्ट 631 पर सुन रहा है। आपका आउटपुट दिखा सकता है कि telnetdइसका स्थानीय पता है 192.168.1.1:23, जिसका अर्थ है कि यह लूपबैक एडाप्टर के कनेक्शन का जवाब नहीं देगा। (जैसे आप नहीं कर सकते हैं telnet 127.0.0.1)।

ऐसे अन्य उपकरण हैं जो समान जानकारी (जैसे lsofया /proc) दिखाएंगे , लेकिन नेटस्टैट सबसे व्यापक रूप से उपलब्ध है। यह विंडोज पर भी काम करता है ( netstat -anb)। BSD netstat थोड़ा अलग है: आपको प्रक्रिया की जानकारी प्राप्त करने के लिए sockstat (1) का उपयोग करना होगा।

एक बार जब आपके पास प्रक्रिया आईडी और प्रोग्राम का नाम होगा, तो आप पोर्ट को बंद करना चाहते हैं, तो आप इस प्रक्रिया को ढूंढ सकते हैं और इसे मार सकते हैं। केवल दानेदार नियंत्रण के लिए, आप केवल कुछ पतों तक पहुंच को सीमित करने के लिए फ़ायरवॉल (लिनक्स पर iptables) का उपयोग कर सकते हैं। आपको सेवा स्टार्टअप को अक्षम करना पड़ सकता है। यदि पीआईडी ​​लिनक्स पर "-" है, तो यह संभवतः एक कर्नेल प्रक्रिया है (उदाहरण के लिए एनएफएस के साथ यह आम है), इसलिए सौभाग्य यह है कि यह क्या है।

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


14

लिनक्स सिस्टम में एक तथाकथित लूपबैक इंटरफ़ेस होता है, जो आंतरिक संचार के लिए होता है। इसका hostname है localhostऔर इसका IP एड्रेस है 127.0.0.1

जब आप चलाने nmapपर localhost, आप वास्तव में पर portscan चलाने आभासी लूपबैक इंटरफ़ेस। 192.168.1.1आपके भौतिक (सबसे अधिक संभावना eth0) इंटरफ़ेस का आईपी पता है ।

तो आप nmapदो अलग-अलग नेटवर्क इंटरफेस पर चले हैं , यही कारण है कि खुले बंदरगाहों में अंतर है। वे दोनों सत्य हैं।

यदि आपके पास टीसीपी पोर्ट 23 खुला है, तो संभावना है कि आपके पास एक telnetसर्वर चल रहा हो (जो कि एन्क्रिप्शन की कमी के कारण अच्छी बात नहीं है) या आपके मशीन पर किसी प्रकार का ट्रोजन हॉर्स है।


1
तो मैं इसे कैसे बंद कर सकता हूं?
user74080

4
@ user74080 आप एक iptablesनियम जोड़ सकते हैं जैसा कि एक नजदीकी उत्तर सुझाता है, लेकिन यह सेवा को अप्रयुक्त बनाए रखेगा, जो संसाधनों का उपभोग करता है। इसलिए यदि आपके पास telnetdचल रहा है, तो इसे बंद कर दें।
Psimon

12

उस पोर्ट को "बंद" करने के लिए जिसका आप उपयोग कर सकते हैं iptables

sudo iptables -A INPUT -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j DROP

1
इस उत्तर में, "पोर्ट को बंद करना" का अर्थ है "किसी भी ट्रैफ़िक को अनदेखा करना"। पोर्ट अभी भी खुला है, लेकिन इसे अब तक नहीं पहुँचा जा सकता है। यह भी ध्यान दें कि DROPजैसा वह कहता है, वह पैकेट को देखता है और फिर उसे अनदेखा करता है। आम तौर पर (iptables सक्षम किए बिना), कर्नेल एक ICMP पोर्ट अगम्य पैकेट वापस भेजेगा (जिसे REJECTलक्ष्य के बजाय सिम्युलेटेड किया जा सकता है DROP)।
लेकेनस्टीन

3
@ Lekensteyn ICMP पोर्ट अगम्य यूडीपी के लिए है। उत्तर देने के लिए उचित पैकेट एक टीसीपी आरएसटी पैकेट है, जिसे REJECTलिखकर लक्ष्य का उपयोग करके भी उत्पन्न किया जा सकता है -j REJECT --reject-with tcp-reset
कास्परड

अपने कम स्कोर के बावजूद, यह वास्तव में सवाल का जवाब देने के लिए पहला जवाब है। जो भी यहां अधिक स्कोर जोड़ सकता है, कृपया ऐसा करें।
एनज़ोआर

2

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

पोर्ट 23 का उपयोग टेलनेट के लिए किया जाता है। आम तौर पर अब उपयोग नहीं किया जाता है। nmap -sV 192.168.1.1यह पता लगाने की कोशिश करें कि कौन सा प्रोग्राम पोर्ट को खोलता है।

(192 ... एक स्थानीय नेटवर्क IP है, इसलिए nmap <your outside world IP>संभावित फ़ायरवॉल सेटिंग्स आदि के कारण भी परिणाम एक अलग परिणाम देगा।


1

यदि आपके पास पोर्ट 23 पर चलने और सुनने की सेवा है, तो यह प्रक्रिया को रोकने के लिए यकीन है कि पोर्ट 23 को सुनता है (शायद telnet) इसे चालू रखने और पोर्ट 23 को बंद करने या उपयोग करने से रोकने के लिएiptables

यहां तक कि एक फ़ायरवॉल ब्लॉक के अभाव में एक बंदरगाह पर कोई प्रक्रिया सुन नहीं है जब, किसी भी प्रयास को (कनेक्ट करने के लिए करने के लिए यह एक तत्काल में परिणाम चाहिए "कनेक्शन से इनकार कर दिया" ECONNREFUSEDकरने के लिए connect(2))

पोर्ट 23 पर सुने जाने वाली प्रक्रिया (और इसकी पीड) को खोजने का एक तरीका है, अगर ऐसी कोई प्रक्रिया है, तो यह है:

sudo lsof -i -P | grep ':23 '

उपर्युक्त -iसूचियों में खुले इंटरनेट पोर्ट (यूडीपी और टीसीपी दोनों), और -पी पोर्ट के अनुवाद को सेवा नामों (के माध्यम से /etc/services) से रोकते हैं

पोर्ट 23 पर चलने वाली प्रक्रिया को सुनने के बाद, आप यह पता लगा सकते हैं कि प्रक्रिया पेड़ (कहने के साथ pstree) को देखकर इसकी शुरुआत कैसे हुई । यदि इसका मूल है init(बहुत संभावना है), तो आप प्रक्रिया के नाम के लिए पुन: खोज कर सकते हैं /etc। उदाहरण के लिए:

sudo grep -r telnet /etc

यह आपको 1 स्थान पर चलने से अक्षम करने का सबसे अच्छा तरीका है।


Grep का उपयोग करने की कोई आवश्यकता नहीं है (और यदि थे, तो उद्धरण की आवश्यकता नहीं है)। आप उपयोग कर सकते हैं sudo lsof -Pi :23
थियोफाइल

एक अच्छे कारण के लिए उद्धरण हैं। केवल टेलनेट पोर्ट ( 23) का मिलान सुनिश्चित करने के लिए । यदि आप इसके :23मिलान के बाद एक स्थान शामिल नहीं करते हैं :234, :2345आदि
arielf

ओह समझा। यह समझ में आता है। संयोग से, ऐसा लगता है कि grep के बिना कमांड ( lsof -Pi :23) एक सटीक मैच की तलाश में है।
थियोफाइल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.