iT邦幫忙

1

如何使用 Grafana Loki 收集與分析 FortiGate 防火牆日誌

  • 分享至 

  • xImage
  •  

現行的防火牆每天都會將日誌發送到 FortiAnalyzer 進行網路事件分析,不過 FortiAnalyzer 能存放的日誌天數有限。根據資通安全署指引表示,資通系統日誌應保留六個月以上,確保有足夠的跡證來進行事件根因分析。

通常我們希望日誌至少保留一年以上,才能滿足完整的年度稽核抽查,今天就來教大家如何使用 Grafana Loki 收集與分析 FortiGate 防火牆日誌。

Promtail Agent
Promtail 為 Grafana Loki 專門打造的日誌抓取程式,通常部署到需要監視的應用程式伺服器,負責將本地日誌的內容傳送到 Grafana Loki 實例。

Promtail 除了能夠抓取本地的日誌之外,也可以化身一變成為 Syslog Receiver,支援 從 TCP 或 UDP 所發送的 IETF Syslog (RFC5424) 日誌格式。

sudo nano /etc/promtail/promtail-local-config.yaml
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://your_grafana_loki_ip:3100/loki/api/v1/push

scrape_configs:
  - job_name: syslog
    syslog:
      listen_address: 0.0.0.0:1514
      listen_protocol: tcp
      idle_timeout: 60s
      label_structured_data: yes
      labels:
        job: "syslog"
    relabel_configs:
      - source_labels: ['__syslog_message_hostname']
        target_label: 'host'

主要填寫 scrape_configs 的相關資訊

  • listen_address:唯一必填的欄位,需要提供一個有效的網路位址。
  • listen_protocol:預設為 TCP 協定。可改成 UDP,但就不支援 TLS。
  • idle_timeout:用於清理閒置的 syslog 連線
  • label_structured_data:將標頭中的結構化資料轉換為內部標籤。
    例如,將來自 syslog 日誌的 __syslog_message_hostname 欄位透過 relabel_configs 被轉換為名為 host 的標籤。

記得重啟 promtail 服務

sudo service promtail restart

確定 Syslog Receiver 服務的 1514 埠號是否正常啟動

sudo netstat -ano | grep 1514
tcp6    0    0    :::1514    :::*    LISTEN    off    (0.00/0/0)

Promtail 的安裝介紹可以參考之前的文章,這邊就不再說明了。

FortiGate Firewall
接著就是到 FortiGate 將日誌傳送給 Promtail,在記錄設置的遠端日誌和存檔,可以啟用傳送日誌到 Syslog。

由於圖形介面下只能設定 Syslog 的 IP 地址 / FQDN,預設使用 UDP 與 514 埠號進行日誌傳送。

預設使用 Syslog 日誌格式

因此,我們需要透過 CLI 的方式進行設定。

config log syslogd setting
set status enable
set server "your_promtail_ip"
set mode reliable
set format rfc5424
set port 1514
end

Grafana Dashboard
我們就可以到 Grafana Dashboard 的 Explore,透過 LogQL 來查詢 Loki 的日誌了。

接收到的 RFC5424 日誌格式如下

eventtime=1732693258947845175 tz=”+0800" logid=”0001000014" type=”traffic” subtype=”local” level=”notice” vd=”root” srcip=xxxx::xxxx:xxxx:xxxx:xxxx srcport=5353 srcintf=”FortiSwitch” srcintfrole=”lan” dstip=xxxx::xx dstport=5353 dstintf=”root” dstintfrole=”undefined” sessionid=56970439 proto=17 action=”deny” policyid=0 policytype=”local-in-policy6" service=”udp/5353" trandisp=”noop” app=”udp/5353" duration=0 sentbyte=0 rcvdbyte=0 sentpkt=0 rcvdpkt=0 appcat=”unscanned” srchwvendor=”Sharp” osname=”Linux” mastersrcmac=”xx:xx:xx:xx:xx:xx” srcmac=”xx:xx:xx:xx:xx:xx” srcserver=0

透過 logfmt 解析器,我們可以很輕鬆地將日誌行的資料提取到標籤中。

{host="your_fortigate_hostname"} | logfmt

就是那麼厲害,不需用到任何的 Regex Parser。

LogQL 的介紹可以參考之前的文章,這邊就不再說明了。

接下來就是依照自己的需求來繪製儀錶板了

Syslog Forwarder
由於 Promtail 只支援 RFC5424 日誌格式,建議在 Promtail 前面部署專用的 Syslog 轉發器,例如 syslog-ng 或者 rsyslog,透過轉發器我們就可以接收處理現有的各種日誌格式和傳輸。

透過下列指令安裝 syslog-ng

sudo apt install syslog-ng

編輯組態設定

sudo nano /etc/syslog-ng/syslog-ng.conf

來源端使用 UDP 協定與 514 埠號進行日誌接收

########################
# Sources
########################
# This is the default behavior of sysklogd package
# Logs may come from unix stream, but not from another machine.
#
source s_src {
       system();
       internal();
};

# If you wish to get logs from remote machine you should uncomment
# this and comment the above source line.
#
source s_net { udp(ip(0.0.0.0) port(514)); };

目的端使用 TCP 協定與 1514 埠號進行日誌轉發

########################
# Destinations
########################
# First some standard logfile
#
destination d_loki { syslog("your_promtail_ip" transport("tcp") port(1514)); };

透過 Log Paths 將來源與目的端串起來

########################
# Log paths
########################
log { source(s_net); destination(d_loki); };

重啟 syslog-ng 服務

sudo service syslog-ng restart

確定 syslog-ng 服務的 514 埠號是否正常啟動

sudo netstat -ano | grep 514
udp    0    0    0 0.0.0.0:514    0.0.0.0:*     off    (0.00/0/0)

再將 FortiGate 的日誌傳送給 syslog-ng 即可

config log syslogd setting
set status enable
set server "your_syslog-ng_ip"
set mode udp
set port 514
end

今天的分享就到這邊,感謝收看。

參考文件

  1. https://grafana.com/docs/loki/v2.7.x/clients/promtail/scraping
  2. https://docs.fortinet.com/document/fortigate/7.0.15/cli-reference/141516630/config-log-syslogd-setting

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言