Network Firewall 日志

Network Firewall 日志

AWS Network Firewall 提供三种类型的日志,用于全面了解网络流量和安全事件

1. 告警日志(alert-log)

捕获与具有 alert 操作的有状态规则匹配的流量,或在检查期间生成告警的规则。

使用场景: 检测威胁、监控可疑活动、调整规则

关键字段: event_typesrc_ipdest_ipalert.signaturealert.severity

{
  "firewall_name": "egress-and-east-west-firewall"
  "availability_zone": "us-east-1a"
  "event_timestamp": "1699564800"
  "event": {
    "timestamp": "2024-11-09T10:30:00.123456+0000"
    "flow_id": 123456789
    "event_type": "alert"
    "src_ip": "10.1.1.50"
    "src_port": 54321
    "dest_ip": "203.0.113.10"
    "dest_port": 80
    "proto": "TCP"
    "alert": {
      "action": "allowed"
      "signature_id": 2024001
      "rev": 1
      "signature": "ET MALWARE Suspicious User-Agent"
      "category": "Potentially Bad Traffic"
      "severity": 2
    }
    "http": {
      "hostname": "malicious-domain.example.com"
      "url": "/malware/payload.exe"
      "http_user_agent": "BadBot/1.0"
      "http_method": "GET"
      "protocol": "HTTP/1.1"
      "length": 0
    }
  }
}

2. 流量日志(flow-log)

记录通过防火墙的所有流量的网络流量信息。

使用场景: 流量模式分析、基线建立、容量规划

关键字段: src_ipdest_ipprotoapp_protonetflow.bytesnetflow.pkts

{
  "firewall_name": "egress-and-east-west-firewall"
  "availability_zone": "us-east-1a"
  "event_timestamp": "1762671650"
  "event": {
    "timestamp": "2025-11-09T07:00:50.245040+0000"
    "flow_id": 192941910554151
    "event_type": "netflow"
    "src_ip": "13.218.199.213"
    "src_port": 123
    "dest_ip": "10.1.1.60"
    "dest_port": 43518
    "proto": "UDP"
    "app_proto": "ntp"
    "netflow": {
      "pkts": 1
      "bytes": 76
      "start": "2025-11-09T06:58:48.307066+0000"
      "end": "2025-11-09T06:58:48.310483+0000"
      "age": 0
      "min_ttl": 251
      "max_ttl": 251
    }
  }
}

3. TLS 日志(tls-log)

在启用 TLS 检查时,提供有关 TLS 连接的详细信息,包括证书验证结果和错误。

使用场景: 检测 SNI 欺骗、监控证书验证失败、识别 TLS 连接问题

关键字段: snisrc_ipdest_iptls_error.error_message

{
    "firewall_name": "egress-and-east-west-firewall"
    "availability_zone": "us-east-1a"
    "event_timestamp": 1763164421
    "event": {
        "timestamp": "2025-11-14T23:53:41.788600Z"
        "src_ip": "10.1.1.100"
        "src_port": "33482"
        "dest_ip": "44.220.93.206"
        "dest_port": "443"
        "sni": "checkip.amazonaws.com"
        "tls_error": {
            "error_message": "Error in connection to Server: Certificate verification failed."
        }
    }
}

此日志显示了一次被阻止的 SNI 欺骗尝试,其中客户端在 SNI 字段中请求了 checkip.amazonaws.com,但服务器提供的证书不匹配。Network Firewall 由于证书验证失败而自动阻止了该连接。

查看日志

  1. 导航至 CloudWatch 控制台

  2. 选择 Logs > Log groups

image-20260228130107014

选择一个 Network Firewall 日志组, 选择一个日志流以查看条目:

image-20260228130214787

image-20260228130242520

CloudWatch Logs Insights分析

可以通过使用 CloudWatch Logs Insights 直接查询日志来获得更深入的洞察。让我们分析 TLS 流量,以了解我们的环境正在与哪些域进行通信以及传输了多少数据。

导航到 CloudWatch 控制台,选择 Logs > Logs Insights,并同时选择 Network Firewall 日志组(/aws/networkfirewall/alert/aws/networkfirewall/flow)。

image-20260228190900421

Network Firewall 在告警日志中捕获 TLS 服务器名称指示(SNI),在流日志中捕获传输字节数。这些是独立的日志条目,但对于给定的连接,两者共享相同的 flow_id。此查询使用 flow_id 关联两个日志源的数据,并显示传输到每个唯一域的总字节数:

fields @timestamp
| filter event.app_proto="tls"
| stats sum(event.netflow.bytes) as flowBytes, 
        latest(event.tls.sni) as sni 
        by event.flow_id
| stats sum(flowBytes) as totalBytes, count(*) as flowCount by sni
| sort by totalBytes desc

该查询首先按 flow_id 聚合以将 SNI 与字节数关联,然后按域汇总所有字节数。结果显示我们的环境与哪些外部服务通信最多,以及大部分流量的去向。

Network Firewall 为同一连接流生成不同的日志条目。当建立 TLS 连接时,我们将看到:

  • 包含 TLS 元数据(如 event.tls.sni(域名))但没有字节数的告警日志条目
  • 包含 event.netflow.bytes(传输数据)但没有 TLS SNI 信息的流日志条目

两种日志类型共享相同的 event.flow_id,它唯一标识连接。挑战在于我们不能简单地按 SNI 分组并汇总字节数,因为它们存在于不同的日志条目中。

image-20260228191030164

顶级阻断规则分析

另一个有用的分析是识别哪些安全规则在阻断流量方面最为活跃。这有助于我们了解防火墙正在防护哪些威胁,以及哪些规则提供了最大价值。

使用此查询查看丢弃或拒绝流量最多的顶级规则:

filter event.verdict.action in ['DROP', 'REJECT'] or event.alert.action in ['blocked', 'dropped']
| stats count(*) as blockCount by event.alert.signature
| sort blockCount desc
| limit 20

此查询过滤所有被阻断的流量(无论是丢弃还是拒绝),并按规则签名(规则名称)分组,显示哪些规则被最频繁触发。结果有助于识别我们最活跃的安全规则,并了解防火墙正在阻断哪些类型的流量。

image-20260228191139442