IIS निगरानी के लिए अनुशंसित LogParser प्रश्न?


86

स्टैक ओवरफ़्लो होती है, इसलिए हमने अपने आईआईएस लॉग को बारीकी से देखने के लिए समस्या HTTP ग्राहकों की पहचान के लिए शुरू कर रहे हैं - तरह बातें दुष्ट वेब मकड़ियों , जो एक बड़ी हर दूसरे को ताज़ा करने के लिए सेट पृष्ठ है उपयोगकर्ताओं, खराब एक बंद वेब स्क्रेपर्स लिखा है, धोखेबाज है वे उपयोगकर्ता जो वेतन वृद्धि का प्रयास करते हैं, वे एक ज़िलियन समय की गिनती करते हैं, और इसके बाद।

जब आईआईएस लॉग फाइल में बताया गया है, तो हम कुछ लॉगपैर प्रश्नों के साथ आए हैं , जो हमें अधिकांश विषमताओं और असामान्यताओं की पहचान करने में मदद करते हैं।

URL द्वारा शीर्ष बैंडविड्थ उपयोग

SELECT top 50 DISTINCT 
SUBSTR(TO_LOWERCASE(cs-uri-stem), 0, 55) AS Url, 
Count(*) AS Hits, 
AVG(sc-bytes) AS AvgBytes, 
SUM(sc-bytes) as ServedBytes 
FROM {filename} 
GROUP BY Url 
HAVING Hits >= 20 
ORDER BY ServedBytes DESC
url ने अवगेट को परोसा
------------------------------------------------- - ---- ------- -------
/ फ़ेविकॉन.िको 16774 522 8756028
/content/img/search.png 15342 446 6842532

URL द्वारा शीर्ष हिट

SELECT TOP 100 
cs-uri-stem as Url, 
COUNT(cs-uri-stem) AS Hits 
FROM {filename} 
GROUP BY cs-uri-stem 
ORDER BY COUNT(cs-uri-stem) DESC
url हिट
------------------------------------------------- - ----
/content/img/sf/vote-arrow-down.png 14076
/content/img/sf/vote-arrow-up.png 14018

आईपी ​​/ उपयोगकर्ता-एजेंट द्वारा शीर्ष बैंडविड्थ और हिट

SELECT TOP 30
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
Count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent) 
ORDER BY TotalBytes desc
क्लाइंट उपयोगकर्ता-एजेंट टोटबिट्स हिट करता है
------------- ------------------------------------- -------- --------- -----
66.249.68.47 मोज़िला / 5.0 + (संगत; + Googlebot / 2.1; 135131089 16640)
194.90.190.41 omgilibot / 0.3 ++ omgili.com 133805857 6447

आईपी ​​/ उपयोगकर्ता-एजेंट द्वारा घंटे के हिसाब से शीर्ष बैंडविड्थ

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY sum(sc-bytes) desc
hr क्लाइंट यूजर-एजेंट टोटबिट्स हिट करता है
- ------------- ----------------------------------- ------ -------- ----
9 194.90.190.41 omgilibot / 0.3 ++ omgili.com 30634860 ​​1549
10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 29070370 1503

आईपी ​​/ उपयोगकर्ता-एजेंट द्वारा घंटे के शीर्ष हिट

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
count(*) as Hits, 
Sum(sc-bytes) AS TotalBytes 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY Hits desc
hr क्लाइंट उपयोगकर्ता-एजेंट टोटबाइट्स हिट करता है
- ------------- ----------------------------------- ------ ---- --------
10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 1503 29070370
12 66.249.68.47 मोज़िला / 5.0 + (संगत; + Googlebot / 2.1 1363 13186302)

निश्चित रूप से {फ़ाइल नाम} एक IIS लॉगफ़ाइल के लिए एक रास्ता होगा, जैसे

c:\working\sologs\u_ex090708.log

मैंने अच्छे IIS LogParser प्रश्नों के लिए बहुत सारी वेब खोजें कीं और कीमती कम पाया। इन 5, ऊपर, ने हमें गंभीर समस्या ग्राहकों की पहचान करने में काफी मदद की है। लेकिन मैं सोच रहा हूँ - हम क्या याद कर रहे हैं?

सांख्यिकीय विसंगतियों के लिए उन्हें खान में IIS लॉग (अधिमानतः LogParser प्रश्नों के साथ ) स्लाइस और पासा करने के लिए और क्या तरीके हैं ? क्या आपके पास अपने सर्वरों पर चलने वाले किसी भी अच्छे IIS लॉगपैरसर प्रश्न हैं?



शीर्ष बैंडविड्थ उपयोग क्वेरी में DISTINCT कीवर्ड है। ये किस काम के लिए अच्छा है?
जैकब cturc

जवाबों:


19

सक्रियण हैकिंग या अन्य हमलों के लिए एक अच्छा संकेतक प्रति घंटे त्रुटियों की संख्या है। निम्न स्क्रिप्ट उन तिथियों और घंटों को लौटाती है जिनमें 25 से अधिक त्रुटि कोड थे । साइट पर ट्रैफ़िक की मात्रा (और आपके वेब एप्लिकेशन की गुणवत्ता ;-)) के आधार पर मूल्य समायोजित करें।

SELECT date as Date, QUANTIZE(time, 3600) AS Hour, 
       sc-status as Status, count(*) AS ErrorCount
FROM   {filename} 
WHERE  sc-status >= 400 
GROUP BY date, hour, sc-status 
HAVING ErrorCount > 25
ORDER BY ErrorCount DESC

परिणाम कुछ इस तरह हो सकता है:

दिनांक घंटे की स्थिति में त्रुटि
---------- -------- ------ ------
2009-07-24 18:00:00 404 187
2009-07-17 13:00:00 500 99
2009-07-21 21:00:00 404 80
2009-07-03 04:00:00 404 45
...

अगली क्वेरी एक आईपी पते से एकल URL पर असामान्य रूप से उच्च संख्या में हिट का पता लगाती है । इस उदाहरण में मैंने 500 को चुना है, लेकिन आपको किनारे के मामलों के लिए क्वेरी को बदलना पड़ सकता है (उदाहरण के लिए Google लंदन के आईपी पते को छोड़कर ;-))।

SELECT DISTINCT date AS Date, cs-uri-stem AS URL,
      c-ip AS IPAddress, Count(*) AS Hits
FROM  {filename}
GROUP BY date, c-ip, cs-uri-stem
HAVING Hits > 500
ORDER BY Hits Desc
दिनांक URL IPAddress हिट्स
---------- ----------------------------------- ----- ---------- ----
2009-07-24 /Login.aspx 111.222.111.222 1889
2009-07-12 / AccountUpdate.aspx 11.22.33.44 973
2009-07-19 /Login.aspx 123.231.132.123 821
2009-07-21 / Admin.aspx 44.55.66.77 571
...

दूसरी क्वेरी, हम पहले से ही कर रहे हैं - कई प्रश्नों में समूहीकरण पर ध्यान दें। IP और User Agent द्वारा, यह दोनों दुनिया के लिए सबसे अच्छा है, क्योंकि अगर User Agent शून्य है, तो यह IP के समान है, और यदि नहीं, तो यह अधिक जानकारी है।
जेफ एटवुड

ठीक है जेफ, उपयोगकर्ता-एजेंट को जोड़ने से समझ में आता है। क्षमा करें, खराब अल्पकालिक मेमोरी और ध्यान डेफिसिट विकार का एक संयोजन। :-)
splattne

जगह havingएक साथ Limit nएक अच्छा तरीका के लिए धुन पर पहली क्वेरी बना सकता है
BCS

6

एक चीज़ जिसे आप वैध ट्रैफ़िक को फ़िल्टर करने पर विचार कर सकते हैं (और अपना दायरा व्यापक कर सकते हैं) cs(Cookie)अपने IIS लॉग में सक्षम करना है, एक छोटा कोड जो जावास्क्रिप्ट का उपयोग करके कुकी सेट करता है, उसमें थोड़ा सा जोड़ें और जोड़ें WHERE cs(Cookie)=''

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

मुझे संदेह है कि यदि किसी उपयोगकर्ता के पास अधिक मात्रा में गतिविधि है, लेकिन वे कुकीज़ स्वीकार करते हैं और जावास्क्रिप्ट सक्षम है, तो वे एक वैध उपयोगकर्ता होने की अधिक संभावना रखते हैं, जबकि यदि आप एक उपयोगकर्ता को अधिक मात्रा में गतिविधि के साथ पाते हैं, लेकिन कोई कुकी / जावास्क्रिप्ट समर्थन नहीं है , वे एक बॉट होने की अधिक संभावना रखते हैं।


6

क्षमा करें, अभी तक टिप्पणी नहीं कर सकता इसलिए मुझे जवाब देने के लिए मजबूर किया गया है।

'URL द्वारा शीर्ष बैंडविड्थ उपयोग' क्वेरी के साथ एक मामूली बग है। जबकि अधिकांश समय आप एक पृष्ठ के लिए अपने अनुरोधों को लेने और फ़ाइल के आकार से गुणा करने के लिए ठीक हैं, इस मामले में, चूंकि आप किसी क्वेरी पैरामीटर पर ध्यान नहीं दे रहे हैं, आप थोड़े-थोड़े समय में चलने वाले हैं -सुरक्षित गलत संख्या।

अधिक सटीक मूल्य के लिए , SULBytes के रूप में MUL (हिट्स, औसत दर्जे) के बजाय केवल एक SUM (sc-bytes) करें


6


4

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

SELECT TOP 30
cs-uri-stem,
cs-uri-query,
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-bytes,
c-ip,
FROM {filename} 
WHERE cs-uri-stem != '/search'
ORDER BY LEN(cs-uri-query) desc

SELECT TOP 30
COUNT(*) AS Hits
cs-uri-stem,
cs-uri-query,
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-bytes,
c-ip,
FROM {filename} 
GROUP BY c-ip, cs(User-Agent), cs-bytes 
ORDER BY Hits desc

मैं या तो एक दिन के एक घंटे और मिनट के लिए आईपी अनुरोध करने के समूह के लिए हिट की गिनती करूंगा, या किसी भी नियमित रूप से आवर्ती यात्राओं कि स्क्रिप्ट हो सकती है खोजने के लिए घंटे के मिनट के साथ अनुरोध आईपी समूह। यह घंटे की स्क्रिप्ट द्वारा हिट पर एक छोटा संशोधन होगा।

किसी भी गैर-प्रोग्रामिंग साइटों पर, आपके लॉग खोज एसक्यूएल कीवर्ड के लिए भी एक अच्छा विचार, जैसी चीजों है SELECT, UPDATE, DROP, DELETEकी तरह और अन्य विषमताएं FROM sys.tablesहै कि एक साथ और आईपी से गिनती, Oring काम प्रतीत होता है। इनमें से अधिकांश साइटों के लिए, शब्द शायद ही कभी यूआरआई के क्वेरी हिस्से में दिखाई देंगे, लेकिन यहां वे वैध रूप से यूआरआई स्टेम और डेटा भागों में दिखाई दे सकते हैं। मैं किसी भी हिट के आईपी को उलट देना पसंद करता हूं, यह देखने के लिए कि प्रीमियर स्क्रिप्ट कौन चला रहा है। मैं देख रहा हूँ के लिए करते हैं .ru, .br, .czऔर .cn। मुझे न्याय करने से कोई मतलब नहीं है, लेकिन मैं उन्हें रोकना चाहता हूं। उनके बचाव में, उन देशों में आम तौर पर ज्यादातर भर जाती है हालांकि मैं अब तक मैं कहना बारे में ज्यादा नहीं दिख रहा है .in, .fr, .usया .auएक ही कर रही है।

SELECT TOP 30
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-uri-stem,
LOWER(cs-uri-query) AS q,
count(*) as Hits,
SUM(sc-bytes) AS BytesSent,
SUM(cs-bytes) AS BytesRecv
FROM {filename} 
WHERE q like '%select%' OR q like '%sys.tables%' OR etc... 
GROUP BY c-ip, cs(User-Agent) 
ORDER BY Hits desc

पुनश्च मैं सत्यापित नहीं कर सकता कि ये प्रश्न वास्तव में सही ढंग से चलेंगे। कृपया उन्हें स्वतंत्र रूप से संपादित करें यदि उन्हें फिक्सिंग की आवश्यकता है।


3

ये सभी यहाँ पाए गए (जो आपके IIS लॉगफ़ाइल्स, btw को पार्स करने के लिए एक उत्कृष्ट मार्गदर्शिका है):

आपकी वेबसाइट पर 20 नवीनतम फाइलें

logparser -i: FS "Select TOP 20 पाथ, क्रिएशनटाइम फ्रॉम c: \ inetpub \ wwwroot *। * ORDER BY CreatTime DESC" -rtp: -1

Path                                                        CreationTime
----------------------------------------------------------- ------------------
c:\inetpub\wwwroot\Default.asp                              6/22/2003 6:00:01
c:\inetpub\wwwroot\About.asp                                6/22/2003 6:00:00
c:\inetpub\wwwroot\global.asa                               6/22/2003 6:00:00
c:\inetpub\wwwroot\Products.asp                             6/22/2003 6:00:00

20 सबसे हाल ही में संशोधित फ़ाइलें

logparser -i: FS "सेलेक्ट टॉप 20 पाथ, लास्ट वर्टाइटीम फ्रॉम c: \ inetpub \roroot *। * ORDER BY LastWriteTime DESC" -rtp: -1

Path                                                        LastWriteTime
----------------------------------------------------------- ------------------
c:\inetpub\wwwroot\Default.asp                              6/22/2003 14:00:01
c:\inetpub\wwwroot\About.asp                                6/22/2003 14:00:00
c:\inetpub\wwwroot\global.asa                               6/22/2003 6:00:00
c:\inetpub\wwwroot\Products.asp                             6/22/2003 6:00:00

फ़ाइलें जो 200 स्थिति कोड में परिणाम हुई हैं (यदि ट्रोजन को हटा दिया गया था)

logparser "SELIST DISTINCT TO_LOWERCASE (cs-uri-stem) AS URL, Count ( ) के रूप में हिट्स पूर्व से है। जहाँ WH-sc = स्थिति = URL के आधार पर 200 ग्रुप URL के अनुसार" -rtp: -1।

URL                                      Hits
---------------------------------------- -----
/About.asp                               122
/Default.asp                             9823
/downloads/setup.exe                     701
/files.zip                               1
/Products.asp                            8341
/robots.txt                              2830

एक ही दिन में एक ही पृष्ठ पर 50 से अधिक बार हिट करने वाला कोई भी आईपी पता दिखाएं

logparser "SELIST DISTINCT date, cs-uri-stem, c-ip, Count ( ) के रूप में HST से एक्सग्लिट ग्रुप बाय डेट, c-ip, cs-uri-stem HAVING हिट्स> 50 ORSER BY Hits Desc" -rtp: -1

date       cs-uri-stem                         c-ip            Hits
---------- ----------------------------------- --------------- ----
2003-05-19 /Products.asp                       203.195.18.24   281
2003-06-22 /Products.asp                       210.230.200.54  98
2003-06-05 /Products.asp                       203.195.18.24   91
2003-05-07 /Default.asp                        198.132.116.174 74

मैंने उन पर ध्यान दिया है और उन्हें विशेष रूप से मददगार नहीं पाया। वे ज्यादातर "समझौता पाते हैं" और यह वास्तव में हमारा लक्ष्य नहीं है (हम समझौता नहीं किया गया है)
जेफ एटवुड

0

मुझे नहीं पता कि इसे LogParser के साथ कैसे किया जाता है, लेकिन 404s पाने वाली "phpMyAdmin" (या अन्य सामान्य vunerablities) जैसी चीजों के लिए अनुरोधों की तलाश में स्क्रिप्टेड हमलों की पहचान करने का एक अच्छा तरीका हो सकता है।


लक्ष्य उस प्रकार के स्क्रिप्टेड हमलों को खोजने के लिए नहीं है, लेकिन बैंडविड्थ और ट्रैफ़िक से संबंधित गैर जिम्मेदार / समस्याग्रस्त ग्राहक।
जेफ एटवुड

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