संभावित एसएच हमलावरों के आईपी पते कैसे प्राप्त करें?


18

मैंने सिर्फ cat /var/log/auth.logलॉग किया है और देखा है, कि कई | grep "Failed password for"रिकॉर्ड हैं।

हालाँकि, मान्य / अमान्य उपयोगकर्ता के लिए दो संभावित रिकॉर्ड प्रकार हैं। यह | cutउनके लिए मेरे प्रयासों को जटिल बनाता है।

मैं संभावित हमलावरों के आईपी पते और प्रत्येक आईपी पते के लिए प्रयासों की संख्या के साथ एक सूची (टेक्स्ट फ़ाइल) बनाना चाहूंगा। क्या इसे बनाने का कोई आसान तरीका है?

इसके अलावा, केवल के बारे में ssh: /var/log/auth.logसंभावित हमलावरों की सूची बनाते समय मुझे क्या विचार करना चाहिए?

छिपी हुई संख्या के साथ मेरे 'ओर्ट.लॉग' का उदाहरण:

cat /var/log/auth.log | grep "Failed password for" | sed 's/[0-9]/1/g' | sort -u | tail

परिणाम:

Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user ucpss from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user vijay from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user webalizer from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user xapolicymgr from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user yarn from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zookeeper from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zt from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for mysql from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.111.111.1 port 11111 ssh1

मेरा सुझाव है कि आप ssh कुंजियाँ बनाएँ, उन्हें अपने सर्वर पर स्थापित करें और पासवर्ड को पूरी तरह से अपने सर्वर sshd config फाइल /etc/ssh/sshd_config... लुकअप सेटिंग्स PasswordAuthentication noऔर PermitRootLogin without-password ... में अक्षम करें और फिर ऐसे सभी पासवर्ड प्रयासों को पहले कभी भी दर्ज किया जाए, जो पहलेभी दर्ज करें।
स्कॉट स्टेंसलैंड

जवाबों:


20

आप कुछ इस तरह का उपयोग कर सकते हैं:

grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort | uniq -c

यह स्ट्रिंग Failed password forऔर अर्क ( -o) आईपी पते के लिए greps है । इसे क्रमबद्ध किया जाता है, और uniqघटनाओं की संख्या गिना जाता है।

तब आउटपुट इस तरह दिखेगा (इनपुट फ़ाइल के रूप में आपके उदाहरण के साथ):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

आउटपुट में अंतिम 6 बार कोशिश की गई है।


यह सबसे अच्छा उत्तर है @chaos - उपयोगी ऑनेलाइनर्स के मेरे बॉक्स में जोड़ा गया - धन्यवाद!
जेक

महान समाधान। मुझे नहीं पता था कि grep regex मैच निकाल सकता है, न कि केवल फ़िल्टर लाइनें। मैंने अभी | sort -nचेन में जोड़ा है।
क्रैविमीर

1
अच्छा जवाब - कई ग्रीप्स आमतौर पर sed का उपयोग करने के लिए एक संकेत है। sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'दोनों greps की जगह।
ओरियन

1
@ सही, लेकिन कल्पना कीजिए कि पहला grep भी zgrep "Failed" /var/log/auth.log*संकुचित लॉग अभिलेखागार को खोज सकता है, जो sedनहीं कर सकता।
अराजक

1
IPv6 के बारे में क्या?
ओट्टोमला लोकनी

6

यह एक फूला हुआ समाधान हो सकता है लेकिन मेरा सुझाव है कि आप Fail2Ban जैसी किसी चीज को स्थापित करने पर ध्यान दें

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


खैर, अच्छी टिप्पणी, लेकिन सवाल का जवाब नहीं। यह सुझाव की तरह है जो प्रश्न की आवश्यकता को दूर कर सकता है, लेकिन मुझे अपनी फ़ाइलों की निगरानी के लिए डेमॉन की आवश्यकता नहीं है। मुझे अपने कारण मिल गए हैं कि मुझे उस सूची को केवल स्क्रिप्ट द्वारा पाठ फ़ाइल के रूप में बनाने की आवश्यकता क्यों है। :)
क्रविमीर

मैं @Miro से सहमत हूं, आपने इसका उल्लेख यहां नहीं किया है, मैंने इसे एक टिप्पणी में जोड़ा होगा।
सेलोरायर

@ मिरो, आप सही कह रहे हैं, सवाल का जवाब नहीं, यह सिर्फ इस तरह के लॉगिंग के लिए एक सुविधाजनक उपकरण के रूप में दिमाग में आया।
जेक

0

इसने मेरे लिए असली काम किया। (दोषियों को बचाने के लिए आईपी बदल दिए गए हैं)

$ awk '/Failed/ {x[$(NF-3)]++} END {for (i in x){printf "%3d %s\n", x[i], i}}' /var/log/auth.log | sort -nr
 65 10.0.0.1
 14 10.0.0.2
  4 10.0.0.3
  1 10.0.0.4

0
grep "Failed password for" /var/log/auth.log |
    awk -F"from" {'print $2'} |
    awk {'print $1'} |
    sort -u

परिणाम है password- काम नहीं करना। यह विभिन्न प्रवेश प्रकारों को भी कवर नहीं करता है, awkप्रिंट कॉलम वैकल्पिक है cut, समाधान नहीं।
क्रैविमीर

यह ou real /var/log/auth.log के ऊपर के नमूने के साथ मेरे लिए काम करता है
आर्कमेयर

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