लगातार आईपी के लिए लॉगिंग फ़ाइलों को पार्स करना


12

इसलिए, मैंने डीडीओएस हमले से गुजरते हुए शरारती लॉग को अपने लॉग से बाहर निकालने के दौरान एक साथ इसे हैक किया । इसे बेहतर बनाने के लिए किसी के पास कोई सुधार या अन्य सुझाव हैं?

यहाँ सामान्य विचार है:

  1. लॉग फ़ाइल से केवल IP को बाहर निकालें
  2. उन्हें क्रमबद्ध करें
  3. uniq और उन्हें गिनें
  4. उन्हें फिर से छाँटें

और स्ट्रिंग ओ'पाइप्स:
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt


यकीन नहीं होता कि यह वेबमास्टरों में बेहतर पूछा जाएगा ... लेकिन चूंकि यह सभी यूनिक्स बर्तनों का उपयोग कर रहा है, और कमांड लाइन ... मुझे लगा कि यहां अधिक उपयुक्त होगा।
गाबा

यहाँ ठीक लगता है। यह यूनिक्स आधारित है, और वेब सामग्री के लिए विशिष्ट नहीं है (यह संभवत: अपाचे या फ़ायरवॉल लॉग आईपी में कई अलग-अलग चीजों पर लागू हो सकता है)
स्टीफन लासिवस्की

जवाबों:


7

मैंने हमेशा इसका उपयोग किया है:

tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1

जब tailतक आप लॉग रोटेट (जो भी कारण हो) का उपयोग नहीं करते हैं, तो मैं इस बात की सीमा निर्धारित करने में सक्षम हूं कि मैं कितना अच्छा जाना चाहता हूं - दूसरा, मैं उपयोग कर रहा हूं awk- क्योंकि अधिकांश लॉग स्पेस सीमांकित हैं। ' मैंने अतिरिक्त $चर को बाहर निकालने की क्षमता के साथ अपने आप को छोड़ दिया (संभवत: वे कौन से URL मार रहे थे, स्थिति, ब्राउज़र, आदि) उपयुक्त चर जोड़कर । अंत में uniqइसमें एक दोष केवल छूने वाले जोड़े में काम करता है - IE:

A
A
A
A
B
A
A

उत्पादन करेंगे:

4 A
1 B
2 A

वांछित आउटपुट नहीं। इसलिए हम पहले कॉलम को छांटते हैं (इस मामले में ips, लेकिन हम अन्य कॉलम को सॉर्ट कर सकते हैं) फिर uniqउन्हें, अंत में आरोही गिनती को सॉर्ट करें ताकि मैं उच्चतम अपराधियों को देख सकूं।


हाँ, मुझे uniq के साथ भी समस्या का एहसास हुआ है, इसलिए मेरी पहली IPS को सभी IPS क्रम में रखना है ताकि डुप्लिकेट एक दूसरे के बगल में हो। पूंछ की टिप अच्छी है, साथ ही लगभग 4GB तक पूरे लॉग को पार्स करने के बाद से कुछ समय लग सकता है। अच्छी चीजें, धन्यवाद।
गाबा

-k1बेमानी है, (1) बस एक कुंजी है (2) sortवैसे भी कुंजी के रूप में पहले शब्द का उपयोग करना शुरू कर देती है।
लेकेनस्टाइन

7

ऐसा लगता है कि आप असफल 2 व्हील को फिर से स्थापित करने के बीच में हैं ।

विफलता 2ban को एक रूप दें। यह संभवतः वही करता है जो आप पहले से चाहते हैं, और यदि नहीं, तो इसे अनुकूलित करना आसान है।


1
यह एक बहुत ही दिलचस्प परियोजना है जिसके बारे में मुझे जानकारी नहीं थी, धन्यवाद। उसी समय, मैं लॉग सर्वर पर कुछ भी स्थापित नहीं करना चाहता, जिसकी आवश्यकता नहीं है, और यह करना आसान है जो मैं पहले से कर रहा हूं। मैं सिर्फ सुधारों के सुझाव की तलाश कर रहा हूं। धन्यवाद!
गाबा

यह वास्तव में अच्छा लग रहा है, और जीपीएल भी।
एली फ्रे

7

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

cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -nवह करेंगे जो आपको चाहिए लेकिन बड़ी फ़ाइलों के लिए बहुत तेज़ है। यह आईपी की एक सरणी को जागृत करता है, आईपी पते को एक कुंजी के रूप में उपयोग करता है और आईपी जितनी बार होता है मूल्य के रूप में होता है।

गति आती है क्योंकि awk डेटा पर एक पास करता है और अंतिम आउटपुट को छाँटने के अलावा अधिकांश काम करता है। दूसरी विधि का उपयोग करते हुए, यदि आपके पास हस्तांतरण लॉग में 1,000,000 पंक्तियाँ हैं, तो awk उन 1,000,000 पंक्तियों को पढ़ता है जो 1,000,000 IPs से बाहर निकलती हैं, फिर सॉर्ट पूरे 1,000,000 IP पर हो जाती है, अब सॉर्ट किए गए 1,000,000 IP को uniq में भेजती है, जो इसे बहुत कम कर देता है सॉर्ट करने से पहले डेटा की मात्रा। 1,000,000 IP पर कई पास करने / करने के बजाय, awk एक पास में लगभग सब कुछ करता है।

मेरे लैपटॉप पर 5,513,132 लाइन अपाचे लॉग (1.1 गिग्स) का उपयोग करना, यहां गति की तुलना है:

  • 2 मी 45 से cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
  • 0 मी 40 से cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n

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