LoongCollector 安全日志接入实践:企业级防火墙场景的日志标准化采集

发布于:2025-07-31 ⋅ 阅读:(19) ⋅ 点赞:(0)

作者:羿莉(箫羿)

背景

日志标准化是安全防护的必然需求

在当今高度互联的数字环境中,网络安全威胁呈现多样化、隐蔽化和跨平台化趋势。企业需要从防火墙、终端设备、身份认证系统等多个维度采集日志,以构建完整的安全态势感知体系。然而,对于企业而言,其日志来源可能为多家安全厂商的防护产品。这些日志的来源不同、日志格式的非结构化特性、日志字段的碎片化问题等长期困扰着安全团队,导致数据整合成本高、分析效率低。

LoonCollector 可提供灵活的配置方案

LoonCollector 作为一款轻量级日志采集工具,通过兼容主流日志格式,提供多样化解析手段,为多源日志的统一接入提供了技术支撑。其设计目标不仅是“采集”,更是通过标准化接入和灵活解析规则,为后续的安全分析、威胁检测和合规审计奠定基础。下面我们将以长亭 WAF 日志、FortiGate 安全日志、Palo Alto 安全日志等企业级安全厂商防火墙日志为例开展具体的接入实践。

使用前提

  • 创建 Logstore【1】 用于日志存储、并配置相关索引【2】用于查询分析【3】
  • 在机器上安装 LoongCollector【4】、在Logstore 下创建机器组【5】

工作原理

安全厂商防火墙日志可通过 Syslog 协议将日志转发到采集机器上,再通过 LoongCollector 采集、解析写入到阿里云的 SLS 日志库中。详细工作原理参见文档【6】。

image

企业级防火墙日志接入实践

注:下文聚焦场景描述与实践验证,具体 LoongCollector 采集配置(如配置端口、 字段设置、插件处理)可根据实际部署需求补充或修改。

长亭 WAF 日志

长亭 WAF【7】(雷池 SafeLine)是长亭科技推出的智能 Web 应用防火墙,专注于提供高效、精准的 Web 安全防护。长亭 WAF 是《中国网络安全市场【8】》Web 应用防护的头部厂商之一,除企业版外,还提供社区版【9】免费试用。

启用 Syslog 外发

雷池 WAF 事件支持通过配置 Syslog 转发以 JSON 格式记录转发到第三方机器中。其日志内容包含请求协议、源 IP、端口、时间戳、主机名、请求方法、事件 ID、攻击类型、风险级别等详细信息。

  • 进入雷池的 系统设置 页面,配置 Syslog 设置 选项即可启用 Syslog 外发功能。
  • 雷池使用 UDP 协议传输 Syslog 日志,内存格式遵从 RFC-5424【10】。
  • 配置完成后,点击 测试 按钮,若 Syslog 服务器收到测试信息,则代表配置成功。

image

配置 LoongCollector 采集

上述示例中的 LoongCollector 处理插件可将长亭 WAF 日志中 syslog 默认 _content_ 字段内容展开成 Json KV 对形式,其配置详情如下,具体操作步骤参见文档【6】:

{
        "inputs": [{
            "type": "service_syslog",
            "detail": {
                "Address": "udp://0.0.0.0:5144",  #如果一台服务器转发多种日志类型,需根据不同日志类型,调整端口
                "ParseProtocol": "rfc5424"
	    }
	}],
        "processors": [{
            "detail": {
                "ExpandArray": false,
                "ExpandConnector": ".", #按需配置 
                "ExpandDepth": 0,
                "IgnoreFirstConnector": true,
                "KeepSource": false, #是否保留原字段, 按需
                "KeepSourceIfParseError": true,
                "NoKeyError": true,
                "Prefix": "", #按需配置
                "SourceKey": "_content_", #需要Json展开的原始字段名
                "UseSourceKeyAsPrefix": false # 按需配置
            },
            "type": "processor_json"
	}]
}
采集结果

示例日志采用官网日志样例【11】。

{
  "scheme": "http",                 // 请求协议为 HTTP
  "src_ip": "12.123.123.123",       // 源 IP 地址
  "src_port": 53008,                // 源端口号
  "socket_ip": "10.2.71.103",       // Socket IP 地址
  "upstream_addr": "10.2.34.20",    // 上游地址
  "req_start_time": 1712819316749,  // 请求开始时间
  "rsp_start_time": null,           // 响应开始时间
  "req_end_time": 1712819316749,    // 请求结束时间
  "rsp_end_time": null,             // 响应结束时间
  "host": "safeline-ce.chaitin.net",// 主机名
  "method": "GET",                  // 请求方法为 GET
  "query_string": "",               // 查询字符串
  "event_id": "32be0ce3ba6c44be9ed7e1235f9eebab",            // 事件 ID
  "session": "",                    // 会话
  "site_uuid": "35",                // 站点 UUID
  "site_url": "http://safeline-ce.chaitin.net:8083",         // 站点 URL
  "req_detector_name": "1276d0f467e4",                       // 请求检测器名称
  "req_detect_time": 286,           // 请求检测时间
  "req_proxy_name": "16912fe30d8f", // 请求代理名称
  "req_rule_id": "m_rule/9bf31c7ff062936a96d3c8bd1f8f2ff3",  // 请求规则 ID
  "req_location": "urlpath",        // 请求位置为 URL 路径
  "req_payload": "",                // 请求负载为空
  "req_decode_path": "",            // 请求解码路径
  "req_rule_module": "m_rule",      // 请求规则模块为 m_rule
  "req_http_body_is_truncate": 0,   // 请求 HTTP 主体
  "rsp_http_body_is_truncate": 0,   // 响应 HTTP 主体
  "req_skynet_rule_id_list": [      // 请求 Skynet 规则 ID 列表
    65595,
    65595
  ],
  "http_body_is_abandoned": 0,      // HTTP 主体
  "country": "US",                  // 国家
  "province": "",                   // 省份
  "city": "",                       // 城市
  "timestamp": 1712819316,          // 时间戳
  "payload": "",  
  "location": "urlpath",            // 位置为 URL 路径
  "rule_id": "m_rule/9bf31c7ff062936a96d3c8bd1f8f2ff3",     // 规则 ID
  "decode_path": "",                // 解码路径
  "cookie": "sl-session=Z0WLa8mjGGZPki+QHX+HNQ==",          // Cookie
  "user_agent": "PostmanRuntime/7.28.4",                    // 用户代理
  "referer": "",                    // 引用页
  "timestamp_human": "2024-04-11 15:08:36",                 // 时间戳
  "resp_reason_phrase": "",         // 响应
  "module": "m_rule",               // 模块为 m_rule
  "reason": "",                     // 原因
  "proxy_name": "16912fe30d8f",     // 代理名称
  "node": "1276d0f467e4",           // 节点
  "dest_port": 8083,                // 目标端口号
  "dest_ip": "10.2.34.20",          // 目标 IP 地址
  "urlpath": "/webshell.php",       // URL 路径
  "protocol": "http",               // 协议为 HTTP
  "attack_type": "backdoor",        // 攻击类型
  "risk_level": "high",             // 风险级别
  "action": "deny",                 // 动作
  "req_header_raw": "GET /webshell.php HTTP/1.1\r\nHost: safeline-ce.chaitin.net:8083\r\nUser-Agent: PostmanRuntime/7.28.4\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, br\r\nCache-Control: no-cache\r\nCookie: sl-session=Z0WLa8mjGGZPki+QHX+HNQ==\r\nPostman-Token: 8e67bec1-6e79-458c-8ee5-0498f3f724db\r\nX-Real-Ip: 12.123.123.123\r\nSL-CE-SUID: 35\r\n\r\n",                      // 请求头原始内容
  "body": "",                       // 主体
  "req_block_reason": "web",        // 请求阻止原因
  "req_attack_type": "backdoor",    // 请求攻击类型
  "req_risk_level": "high",         // 请求风险级别
  "req_action": "deny"              // 动作
}

采集结果如下,可见日志已经被解析成正常 json 的 KV 对模式,并且例如 req_header_raw 等字段也得到正确转义展示。用户后续可基于规整后日志创建索引,查询分析、告警可视化等。

image

image

Fortigate 日志接入

Fortinet【12】是全球网络安全领域的头部厂商,其核心定位为 “集成化安全架构” 的倡导者。FortiGate【13】 是 Fortinet 公司推出的下一代防火墙(NGFW),集成了防火墙、IPS、VPN、沙箱、WAF 等多种安全功能,支持从中小型企业到数据中心的全场景安全防护。

配置 syslog 转发

可以参考文档【14】进行 FortiGate 日志配置 Syslog 转发,除默认格式外,还支持转发 CEF 格式和 CSV 格式。

image

采集默认格式日志
飞塔默认格式日志样例

下文中的 FortiGate 日志示例为 Web 过滤日志,更多日志类型可参考官网文档【15】。

date=2019-05-13 time=16:29:45 logid="0316013056" type="utm" subtype="webfilter" eventtype="ftgd_blk" level="warning" vd="vdom1" eventtime=1557790184975119738 policyid=1 sessionid=381780 srcip=10.1.100.11 srcport=44258 srcintf="port12" srcintfrole="undefined" dstip=185.244.31.158 dstport=80 dstintf="port11" dstintfrole="undefined" proto=6 service="HTTP" hostname="morrishittu.ddns.net" profile="test-webfilter" action="blocked" reqtype="direct" url="/" sentbyte=84 rcvdbyte=0 direction="outgoing" msg="URL belongs to a denied category in policy" method="domain" cat=26 catdesc="Malicious Websites" crscore=30 craction=4194304 crlevel="high"
采集配置和结果

可按照下面配置内容(去除注释)创建 FortiGate 日志的采集和配置。

{
    "inputs": [
        {
            "Type": "service_syslog",//接收fortigate转发的syslog日志
            "Address": "udp://0.0.0.0:9002",
            "ParseProtocol": "rfc5424",
            "IgnoreParseFailure": true
        }
    ],
    "processors": [
        {
            "Type": "processor_split_key_value", //按照健对值模式展开
            "ErrIfSourceKeyNotFound": true,
            "ErrIfSeparatorNotFound": true,
            "Quote": "\"", //配置引用符号'"'
            "SourceKey": "_content_",//syslog转发的原始字段
            "Delimiter": " ",//健对值之间按照空格分割
            "KeepSource": false,
            "UseSourceKeyAsPrefix": false,
            "ErrIfKeyIsEmpty": true,
            "Separator": "=",//健与值之间通过'='分割
            "DiscardWhenSeparatorNotFound": false
        }
    ]
}

采集结果如下,日志得到了正确的规整和展开,例如值 URL belongs to a denied category in policy 也因为正确配置引用符号 '"',正确映射到 msg 字段。

image

采集 CEF 格式日志

CEF【16】 (Common Event Format)是由 ArcSight 提出的一种标准化日志格式,专为安全事件设计,用于统一不同设备生成的安全日志格式,便于 SIEM(安全信息与事件管理)系统解析。CEF 格式参考如下:

Jan 11 10:25:39 host CEF:Version|Device Vendor|Device Product|Device Version|Device Event Class ID|Name|Severity|[Extension]
飞塔 CEF 格式日志样例

下面是飞塔 CEF 格式的流量日志示例,来源 Fortigate 官网【13】。

Dec 27 11:12:30 FGT-A-LOG CEF: 0|Fortinet|Fortigate|v6.0.3|00013|traffic:forward accept|3|deviceExternalId=FGT5HD3915800610 FTNTFGTlogid=0000000013 cat=traffic:forward FTNTFGTsubtype=forward FTNTFGTlevel=notice FTNTFGTvd=vdom1 FTNTFGTeventtime=1545937950 src=10.1.100.11 spt=58843 deviceInboundInterface=port12 FTNTFGTsrcintfrole=undefined dst=172.16.200.55 dpt=53 deviceOutboundInterface=port11 FTNTFGTdstintfrole=undefined FTNTFGTpoluuid=c2d460aa-fe6f-51e8-9505-41b5117dfdd4 externalId=440 proto=17 act=accept FTNTFGTpolicyid=1 FTNTFGTpolicytype=policy app=DNS FTNTFGTdstcountry=Reserved FTNTFGTsrccountry=Reserved FTNTFGTtrandisp=snat sourceTranslatedAddress=172.16.200.1 sourceTranslatedPort=58843 FTNTFGTappid=16195 FTNTFGTapp=DNS FTNTFGTappcat=Network.Service FTNTFGTapprisk=elevated FTNTFGTapplist=g-default FTNTFGTduration=180 out=70 in=528 FTNTFGTsentpkt=1 FTNTFGTrcvdpkt=1 FTNTFGTcustom_name1=HN123456 FTNTFGTcustom_name2=accounting_dpt
采集配置
{
    "inputs": [
        {
            "Type": "service_syslog",//接收飞塔CEF格式日志
            "Address": "udp://0.0.0.0:9003",
            "ParseProtocol": "rfc5424",
            "IgnoreParseFailure": true
        }
    ],
    "processors": [
        {
            "Type": "processor_parse_delimiter_native",
            "SourceKey": "content",
            "Separator": "|",//基于分割符提取CEF具体字段
            "Quote": "\"", //引用符为'"'
            "Keys": [
                "time", //对应内容为Dec 27 11:12:30 FGT-A-LOG CEF: 0
                "Vendor",
                "Product",
                "Version",
                "Signature_ID",
                "Name",
                "Severity",
                "Extension" //对应Severity后续字段
            ],
            "KeepingSourceWhenParseFail": true
        },
        {
            "Type": "processor_split_key_value",
            "ErrIfSourceKeyNotFound": true,
            "ErrIfSeparatorNotFound": true,
            "Quote": "\"",//引用符
            "SourceKey": "Extension",//基于Extension字段进行健对值展开
            "Delimiter": " ",//分割不同健值对
            "KeepSource": false,
            "ErrIfKeyIsEmpty": true,
            "Separator": "=",//分割健与值
            "DiscardWhenSeparatorNotFound": false
        },
        {
            "Type": "processor_regex",
            "FullMatch": false,
            "SourceKey": "time", //对应Dec 27 11:12:30 FGT-A-LOG CEF: 0
            "Regex": "^([A-Z][a-z]{2}\\s+\\d{1,2}\\s+\\d{2}:\\d{2}:\\d{2})\\s+(\\S+)\\s+CEF:\\s*(\\d+)",
            "Keys": [
                "Time",//提取时间
                "Host",//提取主机
                "CEF_Version"//提取CEF版本
            ],
            "KeepSource": false,
            "KeepSourceIfParseError": true,
            "NoKeyError": false,
            "NoMatchError": true
        }
    ]
}
采集结果

image

Palo Alto Network 日志接入

Palo Alto Networks【17】是全球领先的网络安全企业, 是安全领域的市场领导者。Palo Alto 以下一代防火墙(NGFW【18】) 为核心,构建了覆盖网络、云、终端、物联网(IoT)的全方位安全解决方案,被广泛认为是网络安全领域的创新标杆。

配置 syslog 转发

为了采集 Palo Alto NGFW 日志,我们首先创建一个 Syslog server 的配置(FQDN、端口、传输协议等),然后配置 Syslog 转发日志类型,证书等。详细配置可以参考 Palo Alto Networks 的防火墙文档配置【19】。

image

配置 LoongCollector 采集

Palo Alto Networks 防火墙可转发至外部服务器的各类日志【20】(例如流量日志、威胁日志、 URL 过滤日志,数据过滤日志等)的标准字段,包括严重性等级、自定义格式及转义序列。为便于解析,所有字段均采用逗号作为分隔符:每个字段均为逗号分隔值(CSV)字符串。FUTURE_USE 标签表示该字段在当前 syslog 接收场景中暂未启用。

原始转发日志示例

下文是原始转发日志示例(内容已脱敏)

Feb 27 10:25:14 xxxx-X01xxxx.xxx.com 1,2025/02/27 10:25:14,026701001784,THREAT,vulnerability,2816,2025/02/27 10:25:14,30.**.***.192,142.***.**.227,113.**.**.129,142.***.**.227,LAN-To-WAN,,,ssl,vsys1,Inside,Outside,ae1,ethernet1/3,Global Log Forwarding to PlatformTest,2025/02/27 10:25:14,631169,1,25970,443,47499,443,0x402400,tcp,alert,"xxxxxx-xxx-xxxx-xx.xxxx.xxxxxx.com/",Non-RFC Compliant SSL Traffic on Port 443(56112),content-delivery-networks,informational,client-to-server,7365339184546050694,0x8000000000000000,United States,United States,,,0,,,0,,,,,,,,0,57,34,99,0,,SIP-PA03,,,,,0,,0,,N/A,protocol-anomaly,AppThreat-xxxx-xxxx,0x0,0,4294967295,,,cxxxxxx3-xxxx-xxxx-xxxxx-bxxxxxx1xxxx,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2025-02-27T10:25:14.811+08:00,,,,encrypted-tunnel,networking,browser-based,4,"used-by-malware,able-to-transfer-file,has-known-vulnerability,tunnel-other-application,pervasive-use",,ssl,no,no,,,NonProxyTraffic
配置采集

用户可配置本地服务器的 rsyslog 接收日志,并将 Palo Alto 日志存储到 /var/log/rsyslog/ 下的日志文件中。然后配置 LoongCollector 文件采集方式采集日志, 通过 SPL【21】 语句的 parse-csv 指令【22】处理日志【23】字段。

image

* |parse-csv content as FUTURE_USE, Receive_Time, Serial_Number, Type, Threat_Content_Type, FUTURE_USE_1, Generated_Time, Source_Address, Destination_Address, NAT_Source_IP, NAT_Destination_IP, Rule_Name, Source_User, Destination_User,Application,Virtual_System,Source_Zone,Destination_Zone,Inbound_Interface,Outbound_Interface,Log_Action,FUTURE_USE_2,Session_ID,Repeat_Count,Source_Port,Destination_Port,NAT_Source_Port,NAT_Destination_Port,Flags,IP_Protocol,Action,URL_Filename,Threat_ID,Category,Severity,Direction,Sequence_Number,Action_Flags,Source_Location,Destination_Location,FUTURE_USE_3,Content_Type,PCAP_ID,File_Digest,Cloud,URL_Index,User_Agent,File_Type,X_Forwarded_For,Referer,Sender,Subject,Recipient,Report_ID,Device_Group_Hierarchy_Level_1,Device_Group_Hierarchy_Level_2,Device_Group_Hierarchy_Level_3,Device_Group_Hierarchy_Level_4,Virtual_System_Name,Device_Name,FUTURE_USE_4,Source_VM_UUID,Destination_VM_UUID,HTTP_Method,Tunnel_ID_IMSI,Monitor_Tag_IMEI,Parent_Session_ID,Parent_Start_Time,Tunnel_Type,Threat_Category,Content_Version,FUTURE_USE_5,SCTP_Association_ID,Payload_Protocol_ID,HTTP_Headers,URL_Category_List,Rule_UUID,HTTP_2_Connection,Dynamic_User_Group_Name,XFF_Address,Source_Device_Category,Source_Device_Profile,Source_Device_Model,Source_Device_Vendor,Source_Device_OS_Family,Source_Device_OS_Version,Source_Hostname,Source_MAC_Address,Destination_Device_Category,Destination_Device_Profile,Destination_Device_Model,Destination_Device_Vendor,Destination_Device_OS_Family,Destination_Device_OS_Version,Destination_Hostname,Destination_MAC_Address,Container_ID,POD_Namespace,POD_Name,Source_External_Dynamic_List,Destination_External_Dynamic_List,Host_ID,Serial_Number_2,Domain_EDL,Source_Dynamic_Address_Group,Destination_Dynamic_Address_Group,Partial_Hash,High_Resolution_Timestamp,Reason,Justification,A_Slice_Service_Type,Application_Subcategory,Application_Category,Application_Technology,Application_Risk,Application_Characteristic,Application_Container,Tunneled_Application,Application_SaaS,Application_Sanctioned_State,Cloud_Report_ID,Cluster_Name,Flow_Type | project-away content 
采集与解析结果

image

image

image

总结

LoonCollector 的接入实践表明,统一多源日志采集并非简单的“管道”功能,而是需要考虑格式的兼容性和扩展性,可以有效帮助减少企业安全分析中的“数据孤岛”问题,尤其在威胁分析和合规性场景中表现出显著优势。未来,随着云原生架构的普及,除防火墙产品外,可基于 LoonCollector 采集其他安全场景日志,并以此为基础 ,通过 SLS 智算引擎进行后续存储、查询、分析、可视化。 对于安全团队而言,选择一款既能适配当前需求、又能面向未来扩展的日志采集工具,将成为构建全面防御体系的关键一步。

【1】管理Logstore

https://help.aliyun.com/zh/sls/manage-a-logstore/

【2】配置相关索引

https://help.aliyun.com/zh/sls/create-indexes

【3】索引模式查询与分析

https://help.aliyun.com/zh/sls/query-and-analyze-logs-in-index-mode/

【4】安装LoongCollector

https://help.aliyun.com/zh/sls/loongcollector-installation-and-management/

【5】创建机器组

https://help.aliyun.com/zh/sls/loongcollector-machine-group

【6】采集Linux系统Syslog

https://help.aliyun.com/zh/sls/collect-syslogs

【7】长亭WAF

https://waf-ce.chaitin.cn/

【8】《2024年中国网络安全市场全景图》发布

https://www.secrss.com/articles/67755

【9】长亭WAF社区版

https://github.com/chaitin/SafeLine

【10】RFC-5424

https://www.rfc-editor.org/rfc/rfc5424.html

【11】官网日志样例

https://help.waf-ce.chaitin.cn/node/01973fc6-e276-7c80-85ec-70b5d5863d60

【12】Fortinet

https://www.fortinet.com/

【13】FortiGate

https://docs.fortinet.com/product/fortigate/7.6

【14】参考文档

https://docs.fortinet.com/document/fortigate/7.4.0/administration-guide/250999/log-settings-and-targets

【15】官方文档

https://docs.fortinet.com/document/fortigate/7.2.3/administration-guide/986892/sample-logs-by-log-type

【16】CEF

https://docs.nxlog.co/integrate/cef-logging.html

【17】Palo Alto Networks

https://docs.paloaltonetworks.com/

【18】NGFW

https://docs.paloaltonetworks.com/ngfw/getting-started/get-started-with-ngfws

【19】文档配置

https://docs.paloaltonetworks.com/pan-os/10-2/pan-os-admin/monitoring/use-syslog-for-monitoring/configure-syslog-monitoring

【20】各类日志

https://docs.paloaltonetworks.com/pan-os/10-2/pan-os-admin/monitoring/use-syslog-for-monitoring/syslog-field-descriptions

【21】SPL语法

https://help.aliyun.com/zh/sls/spl-overview/

【22】SPL指令

https://help.aliyun.com/zh/sls/spl-instruction

【23】使用Logtail SPL解析日志

https://help.aliyun.com/zh/sls/use-logtail-spl-to-parse-logs


网站公告

今日签到

点亮在社区的每一天
去签到