Düzenli ifade kalıpları oluşturuluyor

Bir günlük kaynağı uzantısı yaratmak için, desteklenmeyen günlük kaynağından metin dizgileriyle eşleştirmek için düzenli ifadeler (regex) kullanılır.

Bu görev hakkında

Aşağıdaki örnekte, adımlarda gönderme yapılan bir günlük girişi gösterilmektedir.

May 20 17:24:59 kernel: DROP MAC=<MAC_address> 
SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 TOS=0x00 PREC=0x00 TTL=64 ID=9582 
PROTO=UDP SPT=67 DPT=68 LEN=331
May 20 17:24:59 kernel: PASS MAC=<MAC_address> 
SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 TOS=0x00 PREC=0x00 TTL=64 
ID=9583 PROTO=TCP SPT=1057 DPT=80 LEN=331 
May 20 17:24:59 kernel: REJECT 
MAC=<MAC_address>  SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 
TOS=0x00 PREC=0x00 TTL=64 ID=9584 PROTO=TCP SPT=25212 DPT=6881 LEN=331 

İşlem

  1. Benzersiz örüntüleri tanımlamak için desteklenmeyen günlük kaynağını görsel olarak analiz edin.

    Bu örüntüler daha sonra düzenli ifadelere çevrilir.

  2. Eşleştirmek için metin dizgillerini bulun.
    İpucu: Temel hata denetimini sağlamak için, benzer değerlerin yanlışlıkla eşleşmesini önlemek için, değerleri önce ve sonra değerler dahil edin. Daha sonra, gerçek değeri ek karakterlerden yalıtabilirsiniz.
  3. Eşleşen kalıplar için sözde kod geliştirin ve bir örüntülerin başlangıcını ve sonunu belirtmek için boşluk karakterini ekleyin.

    Fiyat tekliflerini yoksayabilirsiniz. Örnek günlük girdisinde, olay adları DROP, PASS ve REJECT (Reddet) olur. Aşağıdaki listede kullanılabilir olay alanları gösterilir.

    • EventName: " çekirdek: VALUE "
    • SourceMAC: " MAK=DEĞER "
    • SourceIp: " SRC=DEĞER "
    • DestinationIp: " DST = VALUE "
    • Protokol: " PROTO=DEğER "
    • SourcePort: " SST = VALUE "
    • DestinationPort: " DPT = DEğER "
  4. \s düzenli ifadesiyle bir alanı değiştirin.

    Sayı olmayan ya da alfasayısal olmayan karakterler için bir çıkış karakteri kullanmanız gerekir. Örneğin, = olur \= ve: olur \: olur.

  5. Sözde kodu düzenli bir ifadeye çevir.
    Tablo 1. Sözde kodun düzenli ifadelere çevrilmesi
    Alan Sözde Kod Düzenli ifade

    EventName

    " çekirdek: VALUE

    "

    \skernel \:\s. * ?\s

    SourceMAC

    " MAK=DEĞER "

    \sMAC\=(?:[0-9a-fA-F]{2}\:){5}[0-9a-fA-F]{2}\s

    SourceIP

    " SRC=DEĞER "

    \sSRC\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    DestinationIp

    " DST = VALUE "

    \sDST\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    İletişim kuralı

    " PROTO=DEğER "

    \sPROTO\ = (TCP|UDP|ICMP|GRE) \s

    SourcePort

    " SST = VALUE "

    \sSPT\=\d{1,5}\s

    DestinationPort

    " DPT = DEğER "

    \sDPT\=\d{1,5}\s

  6. Yakalama gruplarını belirtin.

    Yakalama grubu, düzenli ifadede belirli bir değeri yalır.

    Örneğin, önceki örnekteki SourcePort örüntüünde, boşluk ve SRC=<code>içerdiği için tüm değeri geçiremezsiniz. Bunun yerine, yalnızca bir yakalama grubu kullanarak kapı numarasını belirtmenizi sağlar. Yakalama grubundaki değer, IBM® QRadar®içindeki ilgili alana geçirilir.

    Yakalamak istediğiniz değerleri ayraç içinde ekleyin:

    Tablo 2. Olay alanları için grupları yakalamak üzere düzenli ifadelerin eşlenmesi
    Alan Düzenli ifade Grubu yakala

    EventName

    \skernel \:\s. * ?\s

    \skernel \:\s (. *?) \s

    SourceMAC

    \sMAC\ = (?: [0-9a-fA- F]{2}\:){5}[0-9a-fA-F]{2}\s

    \sMAC\ = ((?: [0-9a-fA- F]{2}\:){5}[0-9a-fA-F]{2}) \s

    SourceIP

    \sSRC\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    \sSRC\=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s

    Hedef IP

    \sDST\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    \sDST\=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s

    İletişim kuralı

    \sPROTO\ = (TCP|UDP|ICMP|GRE) \s

    \sPROTO\ = (((TCP|UDP|ICMP|GRE)) \s

    SourcePort

    \sSPT\=\d{1,5}\s

    \sSPT\=(\d{1,5})\s

    DestinationPort

    \sDPT\=\d{1,5}\s

    \sDPT\=(\d{1,5})\s

  7. Örüntüleri yeni düzeye geçirin ve günlük kaynağı uzantıları belgesine grupları yakalayın.

    Aşağıdaki kod parçacığı, kullandığınız belgenin bir bölümünü gösterir.

    
    <device-extension xmlns="event_parsing/device_extension"> 
    <pattern id="EventNameFWSM_Pattern" xmlns=""><![CDATA[%FWSM[a-zA-Z\-]*\d-(\d{1,6})]]></pattern>
    <pattern id="SourceIp_Pattern" xmlns=""><![CDATA[gaddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern> 
    <pattern id="SourceIpPreNAT_Pattern" xmlns=""><![CDATA[gaddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="SourceIpPostNAT_Pattern" xmlns=""><![CDATA[laddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="DestinationIp_Pattern" xmlns=""><![CDATA[faddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="Protocol_Pattern" case-insensitive="true" xmlns=""><![CDATA[(TCP|UDP|ICMP|GRE)]]></pattern>
    <pattern id="Protocol_6_Pattern" case-insensitive="true" xmlns=""><![CDATA[protocol=6]]></pattern> 
    <pattern id="EventNameId_Pattern" xmlns=""><![CDATA[(\d{1,6})]]></pattern>