שאלה שאילתות LogParser מומלצות לניטור IIS?


עם הגדילה של Stack Overflow, אנו מתחילים לבחון מקרוב את יומני ה- IIS שלנו כדי לזהות לקוחות HTTP בעייתיים - דברים כמו עכבישים אינטרנט סוררים, משתמשים שיש להם דף גדול להגדיר לרענן כל שנייה, כתוב גרוע אחד off-off scrapers, משתמשים טריקים המנסים להגדיל את ספירת הדף zillion פעמים, וכן הלאה.

באתי עם כמה LogParser שאילתות המסייעות לנו לזהות את רוב המוזרויות והפרעות בעת הצבעה לקובץ יומן IIS.

השימוש ברוחב הפס העליון לפי כתובת אתר

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
כתובת האתר פוגעת avgbyte צפיות
------------------------------------------------- - ---- ---- ------- -------
/favicon.ico 16774 522 8756028
/ content/img/search.png 15342 446 6842532

התאמות מובילות לפי כתובת אתר

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

רוחב פס למעלה ו צפיות על ידי IP / User-Agent

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 Mozilla / 5.0 + (תואם; + Googlebot / 2.1; 135131089 16640
194.90.190.41 omgilibot / 0.3 ++ omgili.com 133805

רוחב פס למעלה לפי שעה על ידי IP / User-Agent

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 הלקוח סוכן סוכן טוטביטים צפיות
- ------------- ----------------------------------- ------ -------- ----
19.19.90.190.41 omgilibot / 0.3 ++ omgili.com 306348
0 0 0 0 0 0 0 0 0 0 0 0 0 0

למעלה כניסות לפי שעה על ידי IP / User-Agent

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 לקוח סוכן סוכן פוגע totbytes
- ------------- ----------------------------------- ------ ---- --------
20.90.90.190.41 omgilibot / 0.3 ++ omgili.com 1503 29070370
12 66.249.68.47 Mozilla / 5.0 + (תואם; + Googlebot / 2.1 1363 13186302

{Filename} כמובן יהיה נתיב ליומן IIS, כגון

c:\working\sologs\u_ex090708.log

עשיתי הרבה חיפושים באינטרנט עבור שאילתות IIS LogParser טוב ומצאתי מעט יקר. אלה 5, לעיל, סייעו לנו מאוד לזהות לקוחות בעיה רצינית. אבל אני תוהה - מה אנחנו חסרים?

אילו דרכים אחרות יש לחתוך לקוביות את יומני IIS (רצוי עם שאילתות) לכרות אותם על חריגות סטטיסטיות? האם יש לך שאלות טובות של IIS LogParser שאתה מפעיל בשרתים שלך? 


86
2017-07-25 11:19




על ידי blog.stackoverflow.com/2009/07/podcast-63 - Brad Gilbert
בשאילתה של השימוש ברוחב הפס העליון יש מילת מפתח של DISTINCT. למה זה טוב? - Jakub Šturc


תשובות:


אינדיקטור טוב לפעולות פריצה או להתקפות אחרות הוא מספר השגיאות לשעה. הסקריפט הבא מחזיר את תאריכים ושעות שבהם היו יותר מ 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
...

השאילתה הבאה מזהה מספר גבוה במיוחד של התאמות בכתובת אתר יחידה מכתובת IP אחת. בדוגמה זו בחרתי 500, אך ייתכן שיהיה עליך לשנות את השאילתה עבור מקרי קצה (למעט כתובת ה- IP של Google London לדוגמה ;-)).

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
תאריך כתובת אתר 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
...

19
2017-07-25 11:47



את השאילתה השנייה, אנחנו כבר עושים - לציין את קיבוץ בכמה שאילתות. על ידי IP ו - User Agent, זה הטוב ביותר של שני העולמות, שכן אם סוכן משתמש הוא ריק, זה זהה IP, ואם לא, זה מידע נוסף. - Jeff Atwood
אוקיי ג 'ף, הוספת סוכן המשתמש הגיוני. סליחה, שילוב של זיכרון קצר בזמן קצר הפרעת קשב וריכוז. Youנות - splattne
החלפת having עם Limit n עשוי ליצור דרך טובה לכוון את השאילתה הראשונה - BCS


דבר אחד שאתה יכול לשקול כדי לסנן את התנועה לגיטימית (ולהרחיב את היקף) היא לאפשר cs(Cookie) ביומני ה- IIS שלך, הוסף מעט קוד שמגדיר קובץ cookie קטן באמצעות JavaScript, והוסף WHERE cs(Cookie)=''.

בגלל קוד הקוד הקטן שלך, כל משתמש צריך להיות קובץ cookie, אלא אם כן הם משביתים קובצי Cookie באופן ידני (שאחוז קטן מהאנשים יכולים לעשות), או אם המשתמש הזה הוא למעשה בוט שאינו תומך ב- Javascript (לדוגמה, wget, httpclient , וכו 'אינם תומכים ב- Javascript).

אני חושד שאם למשתמש יש נפח פעילות גבוה, אך הם מקבלים קובצי cookie ומאפשרים JavaScript, סביר יותר שהם יהיו משתמשים חוקיים, ואילו אם אתה מוצא משתמש עם נפח פעילות גבוה אך אין תמיכה בקובץ cookie / JavaScript , הם נוטים יותר להיות בוט.


6
2017-07-25 17:26





מצטער, עדיין לא יכול להגיב כך אני נאלץ לענות.

יש באג קטן עם שאילתה 'השימוש ברוחב הפס העליון על ידי כתובת האתר'. בעוד שרוב הזמן אתה יכול להיות בסדר לקחת את הבקשות שלך עבור הדף הכפלת גודל הקובץ, במקרה זה, שכן אתה לא שם לב פרמטרים כל שאילתה, אתה הולך לרוץ לתוך קצת עד - מספרים לא מדויקים.

לקבלת ערך מדויק יותר, פשוט לעשות SUM (sc-bytes) במקום ה MUL (כניסות, AvgBytes) כ- ServedBytes.


6
2017-09-10 13:11





אנדרס לונדסטרום כבר כותב סדרה של מאמרים בבלוג לגבי שאילתות נפוצות LogParser.

אני משתמש באלה:


6
2017-10-28 14:12





הבחור הזה יש בערך תריסר שאילתות שימושיות:

http://logparserplus.com/Examples/Queries.aspx


5
2017-08-09 15:07



והבחור הזה (אני) תמיד מחפש עוד שאילתות לכתוב. - James Skemp


ייתכן שתרצה לחפש את הבקשות הארוכות ביותר שלך (גבעולים ו / או שאילתות), ואת אלה עם רוב הבתים המתקבלים על ידי השרת. הייתי גם לנסות אחד כי קבוצות על ידי בתים שהתקבלו ואת ה- IP, כך שתוכל לראות אם פורמט בקשה מסוים זה כנראה חזר על ידי IP אחד.

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

הייתי גם לספור את הלהיטים עבור קבוצה של בקשת IP במשך שעה ודקה של יום, או קבוצה IP המבקש עם דקה של שעה כדי למצוא אם יש ביקורים חוזרים באופן קבוע שעשויים להיות סקריפטים. זה יהיה שינוי קטן על להיטים לפי סקריפט שעה.

בכל האתרים שאינם תכנות, חיפוש היומנים שלך עבור מילות מפתח SQL הוא גם רעיון טוב, דברים כמו SELECT, UPDATE, DROP, DELETE ו מוזרויות אחרות כמו FROM sys.tables, ORing כי יחד וספירה על ידי ה- IP נראה שימושי. עבור רוב האתרים, כולל אלה, לעתים רחוקות מופיעים המילים בחלק השאילתה של ה- URI, אך כאן הם עשויים להופיע באופן חוקי בגופן URI ובנתוני הנתונים. אני אוהב להפוך את כתובות ה- IP של כל להיטים רק כדי לראות מי מפעיל סקריפטים מראש. אני נוטה לראות .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

P.S. אין באפשרותי לאמת כי שאילתות אלו אכן יפעלו כהלכה. ערוך אותם באופן חופשי אם הם זקוקים לתיקון.


4
2017-07-30 17:06





כל אלה נמצאו כאן (שהוא מדריך מצוין לניתוח logfiles IIS שלך, אגב):

20 הקבצים החדשים ביותר באתר האינטרנט שלך

logparser -i: FS "בחר למעלה 20 נתיב, CreationTime מ c: \ inetpub \ wwwroot *. * ORDER by CreationTime 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 נתיב, LastWriteTime מ c: \ inetpub \ wwwroot *. * 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 קודי מצב (במקרה trojans נמחקו)

logparser "בחר DISTINCT TO_LOWERCASE (cs-uri- גזע) AS URL, Count () כניסות מאקס.log WHERE sc-status = 200 GROUP BY URL ORDER by URL "-rtp: -1

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

הצג כל כתובת IP שפגעה באותו דף יותר מ -50 פעמים ביום אחד

logparser "בחר תאריך DISTINCT, cs-uri, גזע, c-ip, Count () כניסות מאקס.log GROUP לפי תאריך, c-ip, cs-uri-stone עם להיטים> 50 סדר לפי כניסות 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

3
2017-08-06 20:58



הסתכלתי על אלה ולא מצאתי אותם מועילים במיוחד. הם בעיקר "למצוא את הפשרה" וזה לא באמת המטרה שלנו (אנחנו לא נפרצו) - Jeff Atwood


אני לא יודע איך לעשות את זה עם LogParser אבל מחפש מחרוזות של בקשות עבור דברים כמו "phpMyAdmin" (או אחרים vunerablities) שמקבלים 404s יכול להיות דרך טובה לזהות התקפות תסריט.


0
2017-08-06 19:32



המטרה היא לא למצוא התקפות תסריט מסוג זה, אבל לקוחות חסרי אחריות / בעיה הקשורים רוחב פס התנועה. - Jeff Atwood
הייתי אומר כל לקוח כי הוא מנסה לפגוע בי הוא לקוח בעיה ואני מעדיף לא לקבל אותם באמצעות רוחב הפס שלי. - BCS