FortiGate のログを CentOS7 のシスログサーバへ転送する方法

本記事では FortiGate 50E のシステムログを CentOS7.6 の rsyslog に転送する方法を記載します。
「syslog や rsyslog ってなに?」「まずは Linux 同士でシステムログを転送してみたい」という方は以下の記事を参照してみてください。

Syslog について。ファシリティ/シビアリティ/プライオリティの違い rsyslog を使用してシスログサーバを構築する方法

なお、FortiGate は 192.0.2.254、シスログサーバは 192.0.2.10 の IP アドレスを事前に割り当てています。

FortiGateの設定

FortiGate 側の設定は「ログ&レポート」の「ログ設定」から「ログを Syslog へ送る」を有効にしてシスログサーバの IP アドレスを入力するだけです。

デフォルトはメモリのみ

Syslog を有効にして IP を指定

設定できたかどうかを CLI からも確認してみます。

FG-FIREWALL # config log syslogd setting

FG-FIREWALL (setting) # show

config log syslogd setting

    set status enable

    set server “192.0.2.10”

end

CLI にも反映されていることは確認できましたが、これではファシリティやシビアリティがわかりません。

実は FortiGate はファシリティが「local7」、シビアリティが「information」として定義されています。これは設定変更可能ですが、一旦そのままにしておきます。

FortiGateではSyslogのファシリティがLocal7に固定されています

FORTINET よくある質問 | SB C&S より引用

デフォルトは information なのでほとんどのログを記録する設定になっています。

FortiGate完全攻略 より引用

シスログサーバの設定

先述したように今回はシスログサーバとして CentOS7.6 を用意しています。CentOS7.6 は rsyslog が標準搭載されているため、インストール等は必要ありません。rsyslog の設定ファイルを2行だけコメント解除するだけです。

【/etc/rsyslog.conf】

 

$ModLoad imudp    #コメント解除

$UDPServerRun 514    #コメント解除

local7.* /var/log/boot.log    #デフォルトのまま

なお、シスログサーバの firewalld は停止するか、適切に穴あけを行ってください。

ログの発生テスト

ログがシスログサーバへ転送されるかをテストします。以下のコマンドを FortiGate の CLI で実行してください。

# diagnose log test

シスログサーバでログを確認します。ファシリティ、シビアリティは変更していないので /var/log/boot.log に記録されているはずです。

【/var/log/boot.log】

 

Aug 15 10:36:35 192.0.2.254 date=2019-08-15 time=15:14:29 devname=”FG-FIREWALL” devid=”FGT50E0123456789″ logid=”0100032001″ type=”event” subtype=”system” level=”information” vd=”root” eventtime=1565849669 logdesc=”Admin login successful” sn=”1565849669″ user=”admin” ui=”ssh(192.0.2.30)” method=”ssh” srcip=192.0.2.30 dstip=192.0.2.254 action=”login” status=”success” reason=”none” profile=”super_admin” msg=”Administrator admin logged in successfully from ssh(192.0.2.30)”

ログが記録されていました。上記はログの一文を抜粋したものです。

その他の細々とした設定

ログの転送自体はできたので、後は必要に応じて設定を変更していきます。

TCPで送信する方法

FortiGate はシステムログを UDP で転送するのがデフォルトの動作です。なのでシスログサーバ側でも UDP を許可していました。設定変更することで TCP で転送することも可能です。

FortiGateの設定

FortiGate の CLI で以下の設定を行います。

FG-FIREWALL # config log syslogd setting

FG-FIREWALL (setting) # set mode reliable

Port changed to default (514)

FG-FIREWALL (setting) # show

config log syslogd setting

    set status enable

    set server “192.0.2.10”

    set mode reliable

end

以上です。ちなみに、mode は udp と reliable、legacy-reliable があるのですが、legacy-reliable だと TCP でも UDP でもログが受信できないんですよね。何のためにあるんだろうか…。

補足
legacy-reliable ですが、どうやら以前の FortiGate が利用していた TCP での syslog 転送方式のようです。つまり過去の方式との互換性の為「legacy-reliable」とう形式で残ったみたいですね。今で言う legacy-reliable は特殊な転送方式らしく rsyslog だと標準で対応できないため仕方なく UDP で syslog を送信していた時代があったようです。

シスログサーバの設定

以下の2行をコメント解除してください。UDP の方の設定はコメントアウトしてもいいです。

【/etc/rsyslog.conf】

 

$ModLoad imtcp

$InputTCPServerRun 514

ファシリティとシビアリティを変更する方法

ファシリティとシビアリティを「local0.warning」に変更してみます。実運用ではまず変更する箇所ですね。

FortiGateの設定

FG-FIREWALL # config log syslogd setting

FG-FIREWALL (setting) # set facility local0

FG-FIREWALL (setting) # show

config log syslogd setting

    set status enable

    set server “192.0.2.10”

    set facility local0

end

 

FG-FIREWALL # config log syslogd filter
FG-FIREWALL (filter) # set severity warning
FG-FIREWALL (filter) # show
    config log syslogd filter
    set severity warning
end

※シビアリティの変更は setting ではなく filter なので注意してください。

シスログサーバの設定

以下の行を追記してください。

【/etc/rsyslog.conf】

 

# Firewall log

local0.* /var/log/fw.log

設定変更後にログ発生テストを行った際の結果が以下です。

[root@SYSLOG-SV ~]# cat /var/log/fw.log | grep info
Aug 16 14:13:04 192.0.2.254 date=2019-08-16 time=14:13:28 devname=”FG-FIREWALL” devid=”FGT50E0123456789″ logid=”0954024576″ type=”utm” subtype=”dlp” eventtype=”dlp” level=”warning” vd=”root” eventtime=1565932408 filteridx=0 filtertype=”credit-card” filtercat=”file” severity=”info” policyid=1 sessionid=40007 epoch=0 eventid=0 user=”user” group=”group” srcip=1.1.1.1 srcport=40007 srcintf=”lan” srcintfrole=”lan” dstip=2.2.2.2 dstport=20 dstintf=”lan2″ dstintfrole=”undefined” proto=6 vrf=32 service=”MM1″ filetype=”unknown” direction=”incoming” action=”block” hostname=”host” url=”/ww.abcd.com”
[root@SYSLOG-SV ~]#

出力行の量的に FortiGate の information ログが転送されていないことは確かですが、FortiGate の warning が severity=”info” として記録されているっぽいんですよねぇ。誰か知っている人がいたら教えてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)