मैं अपने मशीन से सभी आउटगोइंग अनुरोधों / कनेक्शनों की निगरानी कैसे कर सकता हूं?


71

मेरी मशीन एक सर्वर है इसलिए मैं अपने सर्वर से किए जा रहे कनेक्शन को अनदेखा करना चाहता हूं (जैसे जब कोई मेरी वेबसाइट पर जाता है)। मैं अपने सर्वर द्वारा अन्य स्थानों के लिए केवल कनेक्शन / अनुरोध देखना चाहता हूं ।

मैं केवल उन आउटगोइंग कनेक्शनों को कैसे देख सकता हूं ?

संपादित करें: मैं इस प्रकार की चीजों के लिए नया हूं। मैं जो करने की कोशिश कर रहा हूं वह सिर्फ यह देखना है कि क्या मेरे सर्वर से कुछ भी मेरे वेब ऐप्स के लिए डेटा के अलावा बाहर भेजा जा रहा है। उदाहरण के लिए, यदि कोई मेरी वेबसाइटों पर जाता है, तो जाहिर है कि मेरा सर्वर क्लाइंट के ब्राउज़र में डेटा भेजेगा। लेकिन मान लीजिए कि मेरे वेब ऐप के ढांचे में कहीं-कहीं कोड भी है जो सांख्यिकीय डेटा को कहीं और भेजता है जिससे मैं अवगत नहीं हूं। मैं उन स्थानों को देखना चाहूंगा, जहां मेरा सर्वर डेटा भेज रहा है, यदि कोई हो। यह संभवत: संभव नहीं है, लेकिन मान लीजिए कि आपने php या नोडज फ्रेमवर्क का उपयोग करने का निर्णय लिया है जो आपने नहीं लिखा है: एक छोटा सा मौका है कि यह कुछ प्रकार के डेटा को कहीं भेज सकता है। यदि हां, तो मैं यही देखना चाहता हूं।

जवाबों:


76

का उपयोग करें netstat। उदाहरण के लिए

$ netstat -nputw
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
[...]
tcp        0      0 192.168.25.222:22       192.168.0.134:42903     ESTABLISHED 32663/sshd: gert [p

सभी यूडीपी ( u), टीसीपी ( t) और रॉ ( w) आउटगोइंग कनेक्शन (उपयोग नहीं lया नहीं a) को संख्यात्मक रूप में सूचीबद्ध करता है ( n,, संभव लंबे समय तक चलने वाले DNS प्रश्नों को रोकता है) और इसमें शामिल कार्यक्रम ( p) शामिल है।

cआउटपुट को लगातार अपडेट किए जाने के विकल्प को जोड़ने पर विचार करें ।


धन्यवाद। यह अच्छी जानकारी है। क्या आप मेरे अद्यतन प्रश्न पर एक नज़र डाल सकते हैं?
9

1
पूरी तरह से अनुचित अपहर्ता (सिवाय इसके कि यह उत्तर अच्छी तरह से गूगला गया): यह उत्तर विंडोज के साथ भी काम करता है। netstatवहां "निरंतर मोड" में उपयोग करने के लिए , -cकाम नहीं करता है। आप इसके बजाय संख्याओं का उपयोग करते हैं, जैसे netstat -na 1 | find "[Scan_Host_IP_Addr]"कि हर 1सेकंड (इस उदाहरण में) अपडेट करने के लिए। ( स्रोत )।
रफिन

4
यह चुनाव करता है, इसलिए यह हमेशा सभी कनेक्शनों को नहीं पकड़ेगा ।
रीइनियरियरपोस्ट

क्या अधिक उपयोगकर्ता-अनुकूल जानकारी जैसे डोमेन नाम, आईपी के बारे में जानकारी प्रदर्शित करने का कोई तरीका है? शायद एक कस्टम स्क्रिप्ट का उपयोग कर?
शाम

@ अच्छी तरह से, straceइस प्रक्रिया के साथ उल्लेखनीय होगा, नेमसर्वर लुक्स के लिए फ़िल्टरिंग (कोई विवरण नहीं, यह इसका पूर्ण उत्तर नहीं है)। वैकल्पिक रूप से, आप मेरे उत्तर में शामिल विकल्प netstatको छोड़ कर सूचीबद्ध IP के रिवर्स DNS को दिखा सकते हैं n
gertvdijk

11

यदि आप बस हर कनेक्शन के प्रयास को लॉग इन करना चाहते हैं, तो संभवत: सबसे आसान iptables LOGलिनक्स पर लक्षित है (या आपके सिस्टम पर बराबर फ़ायरवॉल लॉगिंग सुविधा)।

यदि आपको कनेक्शन की अवधि और दोनों दिशाओं में एक्सचेंज किए गए डेटा की मात्रा जैसी अधिक जानकारी की आवश्यकता है, तो conntrackd(लिनक्स पर) शायद सबसे अच्छा विकल्प है।

हालाँकि, ध्यान दें कि वे दोनों केवल नेटफिल्टर के माध्यम से जाने वाले ट्रैफ़िक को लॉग करते हैं, जो आम तौर पर सभी ट्रैफ़िक होता है, लेकिन उपयोगकर्ता स्पेस में IP स्टैक से उत्पन्न ट्रैफ़िक (जैसे वर्चुअल मशीन या कच्चे सॉकेट्स का उपयोग करके) या ट्रैफ़िक ट्रैफ़िक को खाता नहीं है।

अधिक सामान्य समाधान के लिए, आप जैसी चीजों पर एक नज़र हो सकता है argus, bro-ids, sancpया ntopकि यातायात वे एक अंतरफलक पर सूंघ के आधार पर जानकारी के सभी प्रकार के लॉग इन करें।


8

मैं उपकरणों का एक गुच्छा की कोशिश की है, सहित iftop, ntop, iptraf, और निश्चित रूप से बहुत ही उपयोगी में निर्मित netstat -tupln, लेकिन मेरे उपयोग स्थिति के लिए सबसे अधिक व्यावहारिक निकला होना करने के लिए (समर्थित विकल्प ओएस पर निर्भर कर रहे हैं) nethogs- यह कनेक्शन एकत्रित करता है जिसकी प्रारंभिक द्वारा एप्लिकेशन , और सभी का कम से कम शोर है।

के माध्यम से स्थापित:

sudo apt-get install nethogs

रूट के रूप में चलाएँ:

sudo nethogs

यदि आपका लक्ष्य किसी भी ऐप द्वारा शुरू किए गए सभी टीसीपी कनेक्शनों को देखना है तो आप इसका उपयोग कर सकते हैं:

sudo tcpdump -i lo -A | grep Host:

6

मुझे लगता है कि आप क्या करना चाहते हैं सुनने के बंदरगाहों की एक सूची प्राप्त करें और फिर उन्हें किसी अन्य टीसीपी कनेक्शन से हटा दें, फिर वह सभी आउटगोइंग कनेक्शन होंगे। Ss (सॉकेट स्थिति) कमांड आउटपुट "स्थानीय पता: पोर्ट" और "पीयर एड्रेस: ​​पोर्ट" कॉलम है, हमें "स्थानीय पता: पोर्ट" कॉलम से सुनने वाले पोर्ट को हटाने की आवश्यकता है न कि "पीयर एड्रेस: ​​पोर्ट" कॉलम, अन्यथा आप कुछ आउटगोइंग कनेक्शन को छोड़ सकते हैं। इसलिए यह प्राप्त करने के लिए कि मैं \s{2}+"लोकल एड्रेस: ​​पोर्ट" कॉलम के पीछे मौजूद रिक्त स्थान पर मैच करने के लिए grep में ": $ पोर्ट" स्ट्रिंग का उपयोग कर रहा हूं ; उस स्तंभ के पीछे दो या दो से अधिक सफ़ेद स्थान हैं, जहाँ "पीयर एड्रेस: ​​पोर्ट" में एक स्थान है और फिर एक नई रेखा (grrr ... बस एक नई रेखा होनी चाहिए, IMO,\s+\s{2}+।) आम तौर पर मैं ss की फ़िल्टरिंग कार्यक्षमता का उपयोग करने की कोशिश कर सकता हूं, जैसे कि ss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>। लेकिन ऐसा प्रतीत होता है कि स्ट्रिंग कितनी लंबी हो सकती है, इसकी एक सीमा है, यह एक ऐसी प्रणाली पर बमबारी करता है जहां मुझे बहुत सारे सुनने वाले बंदरगाह थे। इसलिए मैं यही काम जीआरपी के साथ करने की कोशिश कर रहा हूं। मेरा मानना ​​है कि निम्नलिखित काम करेगा:

FILTER=$(ss -tn state listening | gawk 'NR > 1 {n=split($3,A,":"); B[NR-1]=A[n]} END {for (i=1; i<length(B); i++) printf ":%s\\s{2}+|", B[i]; printf ":%s\\s{2}+", B[i]}')

ss -tn state established dst :* | grep -P -v "$FILTER"

ध्यान दें कि यह आपके द्वारा उपयोग किए जा रहे ss के संस्करण पर निर्भर करता है, पुराने संस्करण (जैसे: ss उपयोगिता, iproute2-ss111117) का एक अलग आउटपुट स्वरूप है, इसलिए आपको awk में $ 4 के बजाय $ 3 का उपयोग करना पड़ सकता है। ध्यान दें ss -tlnऔर ss -tn state listeningआपको अलग-अलग आउटपुट देता है, जो मेरे लिए थोड़ा जवाबी है। YMMV।

मुझे एक और अधिक सुरुचिपूर्ण समाधान मिला, जिसे होस्ट के आईपी को जानने की आवश्यकता नहीं है, ss -tn state established dst :*अच्छी तरह से काम करता है, मैंने ऊपर दिए गए कमांड लाइनों को संशोधित किया।


क्या आप कृपया कुछ स्पष्टीकरण जोड़ेंगे कि यह कैसे काम करता है? ( उत्तर संपादित करें ; सूचना को टिप्पणियों के रूप में स्पष्ट रूप से पोस्ट न करें।) मुझे लगता है कि मैंने आंशिक रूप से इसका पता लगा लिया है। ऐसा लगता है कि इसे थोड़ा और काम करने की आवश्यकता हो सकती है। मैं ss -tn state listeningएक होस्ट पर चला गया जो एक FTP सर्वर चलाता है, और स्वाभाविक रूप से कमांड ने दिखाया कि मशीन 21 पोर्ट पर सुन रही थी। तो इसका मतलब यह नहीं है कि egrep -vवसीयत किसी भी दूरस्थ होस्ट को फ़िल्टर करेगी जिसका आईपी पता "21" ("210 सहित") "," 211 "," 212 ", ...)? इसके अलावा, asortवास्तव में आवश्यक है, या सिर्फ खिड़की-ड्रेसिंग है?
जी-मैन

मुझे बहुत सारी चीजें ठीक करनी थीं, सही स्क्रिप्ट ऊपर है।
डेल

अंततः, यह बहुत अच्छा होगा यदि ss या netstat सिर्फ इस कार्यक्षमता को इसमें शामिल करेगा। एक है ss --outबाहर जाने वाले कनेक्शन की एक सूची प्राप्त करने के।
डैल

अच्छा, मुझे यह जवाब पसंद है। जब मैं अपने सर्वर पर सुरक्षा सुधारने के लिए वापस आऊंगा, तब मैं इसे आज़माऊंगा। : D
त्रिशुकर

ऐसा लगता है कि यूडीपी के लिए भी इस्तेमाल किया जा सकता है, लेकिन आपको बस अलग-अलग झंडे और राज्यों का उपयोग करना होगा।
डेल

4

tcpdumpआपको कुछ मानदंडों के आधार पर फ़िल्टर करने की क्षमता के साथ एक विशिष्ट इंटरफ़ेस से / के लिए सभी आईपी ट्रैफ़िक को बहने / देखने की अनुमति देता है। tcpdumpआम तौर पर डिफ़ॉल्ट रूप से अधिकांश * निक्स सिस्टम पर स्थापित किया जाता है, यदि आपके विशिष्ट डिस्ट्रो के लिए इसे हड़पने के लिए आमतौर पर कहीं पोर्ट नहीं है।


2

netstat एक अच्छा विकल्प है। आवश्यकतानुसार मापदंडों का उपयोग करें। (इसके मैन पेज देखें) उदाहरण के लिए

netstat -antup

यहां यह सभी (ए) सुनने वाले संख्यात्मक (एन) टीसीपी (टी) और यूडीपी (यू) प्रक्रिया (पी) की निगरानी कर सकता है।

आप ssकमांड को भी आज़मा सकते हैं । संदर्भ उपयोग के लिए:

एसएस लिनक्स टीसीपी / यूडीपी नेटवर्क और सॉकेट सूचना


1

यदि आप सोलारिस या व्युत्पन्न चलाते हैं, तो एक नज़र डालिए


अच्छा है, यह भी आर्क लिनक्स पर उपलब्ध है: archlinux.org/packages/community/i686/conntrack-tools - क्या आप इसका उदाहरण प्रदान कर सकते हैं कि आप स्थानीय से शुरू किए गए कनेक्शनों को देखने के लिए केवल कैसे उपयोग करेंगे, लेकिन कनेक्शन कहीं और से शुरू नहीं हुए?
त्रिकुट्र
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.