2016-06-03 2 views
2

Quick Hintergrund: Verwenden der Zugriffsprotokollierung von HAProxy und Parsing mit Grok. HAProxy der% {+ Q} r log Variable druckt "<http verb> <uri> <HTTP version>" die wir Parsen verwendenGibt es eine Möglichkeit, URIPATHPARAM zu parsen, wenn die URL ungültige Zeichen enthält

"%{WORD:method} %{URIPATHPARAM:url} HTTP/%{NUMBER:httpversion}" 

Dies funktioniert gut für die meisten Anfragen, aber wenn wir treffen mit verschiedenen Arten von Scannern versuchen Injection-Angriffe zu tun usw. durch Junk-Senden in Die URL grok kann das uri nicht analysieren. Hier sind einige Beispiele, die diese grok Filter abstürzen:

"GET /index.html?14068'#22><bla> HTTP/1.1" 
"GET /index.html?fName=\Windows\system.ini%00&lName=&guestEmail= HTTP/1.1" 

Kann jemand denken Sie an eine Lösung, die vorzugsweise auch ungültige URIs analysieren würde oder zumindest nicht zum Absturz bringen, das heißt zu analysieren, wie viel von der URL wie möglich und Junk verwerfen?

+0

interessant Ihre Das erste Beispiel hat meinen Grok nicht gebrochen, aber ich sehe deinen Punkt –

Antwort

2

Ja, durch die Verwendung der Multiple-Match-Fähigkeit von grok.

https://groups.google.com/forum/#!topic/logstash-users/H3_3gnWY2Go

https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-match

In Kombination mit break_on_match => true (Standardeinstellung), können Sie mehrere Muster für grok zu versuchen geben, und es wird aufhören, nachdem sie ein Musterabgleich findet und wendet sie.

Hier wird, wenn das erste Muster nicht funktioniert, wird es das nächste Muster versuchen, die eine NOTSPACE verwendet, die diese schlechten Charaktere werden auffressen, und Tags, das Feld bad_url statt url

filter { 
    grok { 
    match => { 
     "message" => [ 
     "%{WORD:method} %{URIPATHPARAM:url} HTTP/%{NUMBER:httpversion}", 
     "%{WORD:method} %{NOTSPACE:bad_url} HTTP/%{NUMBER:httpversion}" 
     ] 
    } 
    break_on_match => true 
    } 
} 
+0

Wenn du das Feld namens url behalten möchtest, könntest du später einen Mutate-Filter haben, der 'bad_url' in' url' umbenennt und ein Tag hinzufügt, dass es eine schlechte URL ist 'bad_url' existiert –

Verwandte Themen