Azure Web Application Firewall monitorozása és naplózása

Az Azure Web Application Firewall (WAF) monitorozása és naplózása az Azure Monitor és az Azure Monitor naplóival való naplózással és integrációval érhető el.

Azure Monitor

A Front Door WAF-naplója integrálva van az Azure Monitorral. Az Azure Monitor lehetővé teszi a diagnosztikai adatok, köztük a WAF-riasztások és -naplók nyomon követését. A WAF-monitorozást a Portál Diagnosztika lapján, a Front Door-erőforráson belül, az infrastruktúrán keresztül, a kód megközelítéseként, vagy közvetlenül az Azure Monitor szolgáltatás használatával konfigurálhatja.

A Azure Portal lépjen a Front Door erőforrástípusra. A bal oldali Figyelési/metrikák lapon hozzáadhatja a WebApplicationFirewallRequestCount elemet a WAF-szabályoknak megfelelő kérések számának nyomon követéséhez. Egyéni szűrők hozhatók létre művelettípusok és szabálynevek alapján.

WAFMetrics

Naplók és diagnosztika

A WAF és a Front Door részletes jelentést nyújt az egyes kérésekről és az általa észlelt fenyegetésekről. A naplózás integrálva van az Azure diagnosztikai naplóival és riasztásaival. Ezek a naplók integrálhatók az Azure Monitor-naplókkal.

WAFDiag

Ha a naplózás engedélyezve van, és egy WAF-szabály aktiválódik, a rendszer egyszerű szövegben naplózza az egyező mintákat a WAF-házirend viselkedésének elemzéséhez és hibakereséséhez. Kizárások használatával finomhangolhatja a szabályokat, és kizárhat minden olyan adatot, amelyet ki szeretne zárni a naplókból. További információ: Webalkalmazási tűzfalkizárási listák az Azure Front Doorban.

A Front Door kétféle naplót biztosít: hozzáférési naplókat és WAF-naplókat.

Hozzáférési naplók

A FrontDoorAccessLog tartalmazza a Front Dooron áthaladó összes kérést. A Front Door hozzáférési naplóval kapcsolatos további információkért, beleértve a naplós sémát is, tekintse meg az Azure Front Door naplóit.

A FrontdoorAccessLog tartalmazza a Front Dooron áthaladó összes kérést. A Front Door hozzáférési naplóval kapcsolatos további információkért, beleértve a naplós sémát, tekintse meg a metrikák és naplók monitorozását az Azure Front Doorban (klasszikus) ismertető témakört.

Az alábbi példa lekérdezés a hozzáférési napló bejegyzéseit adja vissza:

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorAccessLog"
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorAccessLog"

Az alábbiakban egy példanapló-bejegyzés látható:

{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontDoorAccessLog",
  "operationName": "Microsoft.Cdn/Profiles/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}
{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontdoorAccessLog",
  "operationName": "Microsoft.Network/FrontDoor/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}

WAF-naplók

A FrontDoorWebApplicationFirewallLog waf-szabálynak megfelelő kéréseket tartalmaz.

A FrontdoorWebApplicationFirewallLog tartalmaz minden olyan kérést, amely megfelel egy WAF-szabálynak.

Az alábbi táblázat az egyes kérelmekhez naplózott értékeket mutatja be:

Tulajdonság Leírás
Művelet A kérésen végrehajtott művelet. A naplók az összes művelettel rendelkező kéréseket tartalmazzák. A metrikák a napló kivételével az összes művelettel rendelkező kéréseket tartalmazzák.
ClientIP A kérést küldő ügyfél IP-címe. Ha volt fejléc X-Forwarded-For a kérelemben, az ügyfél IP-címe a fejlécmezőből származik.
Ügyfélport A kérést küldő ügyfél IP-portja.
Részletek A kérelem további részletei, beleértve az észlelt fenyegetéseket is.
matchVariableName: A kérelem HTTP-paraméterneve megfeleltetett, például fejlécnevek (legfeljebb 100 karakter).
matchVariableValue: Az egyezést kiváltó értékek (legfeljebb 100 karakter).
Gazdagép A Host kérelem fejléce.
Szabályzat A kérést feldolgozó WAF-szabályzat neve.
PolicyMode A WAF-szabályzat műveleti módja. A lehetséges értékek a következők: Prevention és Detection.
RequestUri A kérelem teljes URI-ja.
Szabálynév Annak a WAF-szabálynak a neve, amelyet a kérelem megfelelt.
SocketIP A WAF által látott forrás IP-cím. Ez az IP-cím a TCP-munkameneten alapul, és nem veszi figyelembe a kérésfejléceket.
TrackingReference A Front Door által kiszolgált kérést azonosító egyedi referenciasztring. Ezt az értéket a rendszer elküldi az ügyfélnek a X-Azure-Ref válaszfejlécben. Ezt a mezőt akkor használja, ha egy adott kérést keres a naplóban.

Az alábbi példa lekérdezés a Front Door WAF által blokkolt kéréseket mutatja be:

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorWebApplicationFirewallLog" 
| where action_s == "Block" 
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorWebApplicationFirewallLog"
| where action_s == "Block"

Az alábbiakban egy példanapló-bejegyzés látható, amely tartalmazza a kérés letiltását:

{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Cdn/Profiles/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}
{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Network/FrontDoorWebApplicationFirewallLog/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}

Következő lépések