本記事では FortiGate 50E のシステムログを CentOS7.6 の rsyslog に転送する方法を記載します。
「syslog や rsyslog ってなに?」「まずは Linux 同士でシステムログを転送してみたい」という方は以下の記事を参照してみてください。
Syslog について。ファシリティ/シビアリティ/プライオリティの違い
なお、FortiGate は 192.0.2.254、シスログサーバは 192.0.2.10 の IP アドレスを事前に割り当てています。
FortiGateの設定
FortiGate 側の設定は「ログ&レポート」の「ログ設定」から「ログを 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に固定されています
デフォルトは 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” として記録されているっぽいんですよねぇ。誰か知っている人がいたら教えてください。