Dela via


Resursloggar för Azure Web Application Firewall

Du kan övervaka brandväggsresurser för webbaserade program med hjälp av loggar. Du kan spara prestanda, åtkomst och andra data eller använda dem från en resurs i övervakningssyfte.

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Information om hur du kommer igång finns i Installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Diagnostikloggar

Du kan använda olika typer av loggar i Azure för att hantera och felsöka programgatewayer. Du kan komma åt vissa av de här loggarna via portalen. Alla loggar kan extraheras från Azure Blob Storage och visas i olika verktyg, till exempel Azure Monitor-loggar, Excel och Power BI. Du kan lära dig mer om de olika typerna av loggar från följande lista:

  • Aktivitetslogg: Du kan använda Azure-aktivitetsloggar för att visa alla åtgärder som skickas till din Azure-prenumeration och deras status. Aktivitetsloggposter samlas in som standard, och du kan visa dem i Azure Portal.
  • Åtkomst till resurslogg: Du kan använda den här loggen för att visa Åtkomstmönster för Application Gateway och analysera viktig information. Detta inkluderar anroparens IP-adress, begärd URL, svarsfördröjning, returkod och byte in och ut. Den här loggen innehåller enskilda poster för varje begäran och associerar den begäran till den unika Application Gateway som bearbetade begäran. Unika Application Gateway-instanser kan identifieras av egenskapen instanceId.
  • Prestandaresurslogg: Du kan använda den här loggen för att visa hur Application Gateway-instanser fungerar. Den här loggen samlar in prestandainformation för varje instans, inklusive totalt antal begäranden som hanteras, dataflöde i byte, totalt antal begäranden som hanteras, antal misslyckade begäranden och felfritt antal serverdelsinstanser. En prestandalogg samlas in var 60:e sekund. Prestandaloggen är endast tillgänglig för V1-SKU:n. För V2 SKU använder du Mått för prestandadata.
  • Brandväggsresurslogg: Du kan använda den här loggen för att visa begäranden som loggas via antingen identifierings- eller förebyggande läge för en programgateway som har konfigurerats med brandväggen för webbprogram.

Kommentar

Loggar är endast tillgängliga för resurser som distribueras i Azure Resource Manager-distributionsmodellen. Du kan inte använda loggar för resurser i den klassiska distributionsmodellen. En bättre förståelse för de två modellerna finns i artikeln Förstå Resource Manager-distribution och klassisk distribution .

Du har tre alternativ för att lagra dina loggar:

  • Storage-konto: Storage-konton passar bäst när loggarna ska lagras en längre tid och granskas vid behov.
  • Händelsehubbar: Händelsehubbar är ett bra alternativ för att integrera med andra SIEM-verktyg (säkerhetsinformation och händelsehantering) för att få aviseringar om dina resurser.
  • Azure Monitor-loggar: Azure Monitor-loggar används bäst för allmän realtidsövervakning av ditt program eller för att titta på trender.

Aktivera loggning via PowerShell

Aktivitetsloggning är automatiskt aktiverad för alla Resource Manager-resurser. Du måste aktivera åtkomst och prestandaloggning för att börja samla in de data som är tillgängliga via dessa loggar. Använd följande steg för att aktivera loggning:

  1. Anteckna resurs-ID:t för det lagringskonto där loggdata lagras. Det här värdet är av formuläret : /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name>. Du kan använda valfritt lagringskonto i din prenumeration. Du hittar den här informationen i Azure Portal.

    Portal: resurs-ID för lagringskonto

  2. Observera programgatewayens resurs-ID som loggning är aktiverad för. Det här värdet är av formuläret : /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name>. Du hittar den här informationen i Azure Portal.

    Portal: resurs-ID för application gateway

  3. Aktivera resursloggning med hjälp av följande PowerShell-cmdlet:

    Set-AzDiagnosticSetting  -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true     
    

Dricks

Aktivitetsloggar kräver inte ett separat lagringskonto. När du använder lagring för åtkomst- och prestandaloggning debiteras avgifter för tjänsten.

aktivera loggning via Azure Portal

  1. Leta reda på din resurs i Azure-portalen och välj Diagnostikinställningar.

    För Application Gateway är tre loggar tillgängliga:

    • Åtkomstlogg
    • Prestandalogg
    • Brandväggslogg
  2. Välj Lägg till diagnostikinställning.

  3. Sidan Diagnostikinställning innehåller inställningarna för resursloggarna. I det här exemplet lagrar Log Analytics loggarna. Du kan också använda en händelsehubb, ett lagringskonto eller en partnerlösning för att spara resursloggarna.

    Skärmbild som visar diagnostikinställningar.

  4. Ange ett namn för inställningarna, bekräfta inställningarna och välj Spara.

Aktivitetslogg

Azure genererar aktivitetsloggen som standard. Loggarna bevaras i 90 dagar i Azure-händelseloggarkivet. Läs mer om dessa loggar genom att läsa artikeln Visa händelser och aktivitetsloggar .

Åtkomstlogg

Åtkomstloggen genereras endast om du har aktiverat den på varje Application Gateway-instans, enligt beskrivningen i föregående steg. Data lagras i det lagringskonto som du angav när du aktiverade loggningen. Varje åtkomst till Application Gateway loggas i JSON-format, enligt följande exempel för v1:

Värde beskrivning
instanceId Application Gateway-instans som hanterade begäran.
clientIP Ursprunglig IP-adress för begäran.
clientPort Ursprungsport för begäran.
httpMethod HTTP-metod som används av begäran.
requestUri URI för den mottagna begäran.
RequestQuery Server-Routed: Serverdelspoolinstans som skickades begäran.
X-AzureApplicationGateway-LOG-ID: Korrelations-ID som används för begäran. Den kan användas för att felsöka trafikproblem på serverdelsservrarna.
SERVER-STATUS: HTTP-svarskod som Application Gateway tog emot från serverdelen.
UserAgent Användaragent från HTTP-begärandehuvudet.
httpStatus HTTP-statuskod som returneras till klienten från Application Gateway.
httpVersion HTTP-versionen av begäran.
receivedBytes Storleken på det mottagna paketet i byte.
sentBytes Storleken på det paket som skickas i byte.
timeTaken Hur lång tid (i millisekunder) som det tar för en begäran att bearbetas och dess svar skickas. Detta beräknas som intervallet från den tidpunkt då Application Gateway tar emot den första byte av en HTTP-begäran till den tidpunkt då svarssändningen slutförs. Det är viktigt att observera att fältet Tidsåtgång vanligtvis innehåller den tid då paketen för begäran och svar färdas över nätverket.
sslEnabled Om kommunikationen till serverdelspoolerna använde TLS/SSL. Giltiga värden är på och av.
värd Värdnamnet som begäran har skickats till serverdelsservern med. Om serverdelsvärdnamnet åsidosätts kommer det här namnet att återspegla det.
originalHost Värdnamnet som begäran togs emot med av Application Gateway från klienten.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "timestamp": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "ApplicationGatewayRole_IN_0",
        "clientIP": "191.96.249.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=874f1f0f-6807-41c9-b7bc-f3cfa74aa0b1&SERVER-STATUS=404",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "host": "www.contoso.com",
        "originalHost": "www.contoso.com"
    }
}

För Application Gateway och WAF v2 visar loggarna lite mer information:

Värde beskrivning
instanceId Application Gateway-instans som hanterade begäran.
clientIP Ursprunglig IP-adress för begäran.
clientPort Ursprungsport för begäran.
httpMethod HTTP-metod som används av begäran.
requestUri URI för den mottagna begäran.
UserAgent Användaragent från HTTP-begärandehuvudet.
httpStatus HTTP-statuskod som returneras till klienten från Application Gateway.
httpVersion HTTP-versionen av begäran.
receivedBytes Storleken på det mottagna paketet i byte.
sentBytes Storleken på det paket som skickas i byte.
timeTaken Hur lång tid (i millisekunder) som det tar för en begäran att bearbetas och dess svar skickas. Detta beräknas som intervallet från den tidpunkt då Application Gateway tar emot den första byte av en HTTP-begäran till den tidpunkt då svarssändningen slutförs. Det är viktigt att observera att fältet Tidsåtgång vanligtvis innehåller den tid då paketen för begäran och svar färdas över nätverket.
sslEnabled Om kommunikationen till serverdelspoolerna använde TLS. Giltiga värden är på och av.
sslCipher Chiffersvit som används för TLS-kommunikation (om TLS är aktiverat).
sslProtocol TLS-protokoll som används (om TLS är aktiverat).
serverRouted Serverdelsservern som programgatewayen dirigerar begäran till.
serverStatus HTTP-statuskod för serverdelsservern.
serverResponseLatency Svarstiden för svaret från serverdelsservern.
värd Adress som anges i värdhuvudet för begäran.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "time": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "appgw_1",
        "clientIP": "191.96.249.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "sslCipher": "",
        "sslProtocol": "",
        "serverRouted": "104.41.114.59:80",
        "serverStatus": "200",
        "serverResponseLatency": "0.023",
        "host": "www.contoso.com",
    }
}

Prestandalogg

Prestandaloggen genereras endast om du har aktiverat den på varje Application Gateway-instans, enligt beskrivningen i föregående steg. Data lagras i det lagringskonto som du angav när du aktiverade loggningen. Prestandaloggdata genereras inom 1 minuts intervall. Den är endast tillgänglig för V1-SKU:n. För V2 SKU använder du Mått för prestandadata. Följande data loggas:

Värde beskrivning
instanceId Application Gateway-instans för vilken prestandadata genereras. För en programgateway med flera instanser finns det en rad per instans.
healthyHostCount Antal felfria värdar i serverdelspoolen.
unHealthyHostCount Antal värdar som inte är felfria i serverdelspoolen.
requestCount Antal begäranden som hanteras.
svarstid Genomsnittlig svarstid (i millisekunder) för begäranden från instansen till serverdelen som hanterar begäranden.
failedRequestCount Antal misslyckade begäranden.
dataflöde Genomsnittligt dataflöde sedan den senaste loggen, mätt i byte per sekund.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayPerformance",
    "time": "2016-04-09T00:00:00Z",
    "category": "ApplicationGatewayPerformanceLog",
    "properties":
    {
        "instanceId":"ApplicationGatewayRole_IN_1",
        "healthyHostCount":"4",
        "unHealthyHostCount":"0",
        "requestCount":"185",
        "latency":"0",
        "failedRequestCount":"0",
        "throughput":"119427"
    }
}

Kommentar

Svarstiden beräknas från den tidpunkt då den första byte av HTTP-begäran tas emot till den tidpunkt då http-svarets sista byte skickas. Det är summan av Application Gateway-bearbetningstiden plus nätverkskostnaden för serverdelen, plus den tid som serverdelen tar att bearbeta begäran.

Brandväggslogg

Brandväggsloggen genereras endast om du har aktiverat den för varje programgateway, enligt beskrivningen i föregående steg. Den här loggen kräver också att brandväggen för webbprogram har konfigurerats på en programgateway. Data lagras i det mål som du angav när du aktiverade loggningen. Följande data loggas:

Värde beskrivning
instanceId Application Gateway-instans för vilken brandväggsdata genereras. För en programgateway med flera instanser finns det en rad per instans.
clientIp Ursprunglig IP-adress för begäran.
requestUri URL för den mottagna begäran.
ruleSetType Regeluppsättningstyp. Det tillgängliga värdet är OWASP.
ruleSetVersion Regeluppsättningsversion som används. Tillgängliga värden är 2.2.9 och 3.0.
ruleId Regel-ID för utlösande händelse.
meddelande Användarvänligt meddelande för utlösande händelse. Mer information finns i informationsavsnittet.
åtgärd Principläge: Identifiering identifierad
-
– Det här är den enda åtgärden för WAF när du är i identifieringsläge. Alla villkor för en viss regel matchades och begäran loggades och skickades sedan till serverdelen.

Principläge: Skydd
- tillåts – Alla villkor matchades för en viss regel och begäran skickades till serverdelen.
- Blockerad – Alla villkor matchades för en viss regel och begäran blockerades.
- Matchad – Ett/flera villkor matchades för en viss regel, men beslutet att blockera eller godkänna begäran behöver ytterligare utvärdering och utvärderas baserat på den slutliga regeln för avvikelsebedömning.

Principläge: JS-utmaning
- JSChallengeIssued: Utfärdad på grund av saknad/ogiltig utmaningsrensning, saknat svar.

Den här loggen skapas när en klient begär åtkomst till ett webbprogram för första gången och inte har ifrågasatts tidigare. Den här klienten tar emot JS-utmaningssidan och fortsätter att beräkna JS-utmaningen. Vid lyckad beräkning beviljas klienten giltighetscookien.

- JSChallengePass: Godkänd på grund av ett giltigt utmaningssvar.

Den här loggen skapas när en klient löser JS-utmaningen och skickar begäran på nytt med rätt svar. I det här fallet validerar Azure WAF cookien och fortsätter att bearbeta de återstående reglerna utan att generera någon annan JS-utmaning.

- JSChallengeValid: Loggad/genomströmning på grund av giltig utmaning

Den här loggen skapas när en klient tidigare har löst en utmaning. I det här fallet loggar Azure WAF begäran och fortsätter att bearbeta de återstående reglerna.

- JSChallengeBlock: Blockerad

Den här loggen skapas när en JS-utmaningsberäkning misslyckas.
webbplats Webbplats som loggen genererades för. För närvarande visas endast Global eftersom reglerna är globala.
information Information om utlösande händelse.
details.message Beskrivning av regeln.
details.data Specifika data som hittades i begäran som matchade regeln.
details.file Konfigurationsfil som innehöll regeln.
details.line Radnummer i konfigurationsfilen som utlöste händelsen.
värddatornamn Programgatewayens värdnamn eller IP-adress.
transactionId Unikt ID för en viss transaktion som hjälper till att gruppera flera regelöverträdelser som inträffat inom samma begäran.
policyId Unikt ID för brandväggsprincipen som är associerad med Application Gateway, Lyssnare eller Sökväg.
policyScope Platsen för principen – värden kan vara "Global", "Lyssnare" eller "Plats".
policyScopeName Namnet på objektet där principen tillämpas.
{
  "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
  "operationName": "ApplicationGatewayFirewall",
  "time": "2017-03-20T15:52:09.1494499Z",
  "category": "ApplicationGatewayFirewallLog",
  "properties": {
      "instanceId": "ApplicationGatewayRole_IN_0",
      "clientIp": "52.161.109.147",
      "requestUri": "/",
      "ruleSetType": "OWASP",
      "ruleSetVersion": "3.0",
      "ruleId": "920350",
      "ruleGroup": "920-PROTOCOL-ENFORCEMENT",
      "message": "Host header is a numeric IP address",
      "action": "Matched",
      "site": "Global",
      "details": {
        "message": "Warning. Pattern match \"^[\\\\d.:]+$\" at REQUEST_HEADERS:Host ....",
        "data": "127.0.0.1",
        "file": "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
        "line": "791"
      },
      "hostname": "127.0.0.1",
      "transactionId": "16861477007022634343",
      "policyId": "/subscriptions/1496a758-b2ff-43ef-b738-8e9eb5161a86/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
      "policyScope": "Listener",
      "policyScopeName": "httpListener1"
    }
  }
}

Visa och analysera aktivitetsloggar

Du kan visa och analysera aktivitetsloggdata med någon av följande metoder:

Visa och analysera åtkomst-, prestanda- och brandväggsloggar

Azure Monitor-loggar kan samla in räknar- och händelseloggfilerna från ditt Blob Storage-konto. Där finns visualiseringar och kraftfulla sökfunktioner när du ska analysera dina loggar.

Du kan också ansluta till ditt lagringskonto och hämta JSON-loggposter för åtkomst- och prestandaloggar. När du har laddat ned JSON-filerna kan du konvertera dem till CSV-format och visa dem i Excel, Power BI eller något annat verktyg för visualisering av data.

Dricks

Om du är bekant med Visual Studio och kan grunderna i att ändra värden för konstanter och variabler i C# så kan du använda verktygen för loggkonvertering från GitHub.

Analysera åtkomstloggar via GoAccess

Vi har publicerat en Resource Manager-mall som installerar och kör den populära GoAccess-logganalysen för Application Gateway-åtkomstloggar. GoAccess tillhandahåller värdefull HTTP-trafikstatistik som unika besökare, begärda filer, värdar, operativsystem, webbläsare, HTTP-statuskoder med mera. Mer information finns i Readme-filen i resource manager-mallmappen i GitHub.

Nästa steg