Graylog で Fortigate のログを眺めてみる

| コメント(0) | トラックバック(0)

Graylog なるツールがあります。ログ解析を唄うツールです。ログ解析ができます!

っていうと、なーんも考えずにインストールすればできるぜ、いえーい!って思っちゃうでしょうけど、そんな甘いものではありません。

というか世の中に統合ログ解析ツールを唄うツールが結構ありますが、どれもお気楽なものがないんですよね。結局はログメッセージを人間が見て、どうやって分割して集計しようか?って考えて、正規表現とかをゴリゴリ書いてよーやく解析できるようになります。

IT 系の展示会とかセミナーとか行くと、嫌というほど「誰でも簡単にログ解析できてセキュリティ向上できます!」って言われるんですが、話聞いてみると、「嘘つけ!」って言いたくなるのばっかりで(とボヤいてもしょうがない)

とまぁ、製品買ってもアレなものばっかりなら、OSSでやりましょ!

Graylog は日本語の情報が少なくて、どーやって使うんだ??と悩むんですが、DesigNet なる SIer さんが日本語マニュアルを公開されてますんで、これが参考になります。

さて、動かしてみたスクリーンショットがこんな感じ。インターネット接続をになってる Fortigate のログのうち、deny されたトラフィックを集計してみました。Netherlandsってオランダのことなんですね。なんでオランダからこんなにアタック着てるんだ??

graylog.png


インストール

さて、まずはインストールしましょ。

私が構築するんだから、とーぜん FreeBSD です。Ports から必要なものをインストールします

  • sysutils/graylog
  • databases/mongodb36
  • textproc/elasticsearch5
  • sysutils/pwgen

けっこーデカイものばっかりなんで、24時間以上かかるかも?なお、pwgen は一回実行して結果を設定ファイルに書くだけなんで、別マシンで動いててもいいです。

Elasticsearch とか MongoDB なんていう NOSQL ツール郡を使います。Graylog 本体も Java で動いてたりします。つまり、リソース食いです。2vCPU、4GB 与えないと起動に失敗したりするくらいに。

プロセス起動

設定ファイルを設定して、プロセスを起動しましょう。

設定ファイルの書き方は他に説明してくれてるサイトがあるので、そちらを参照で。参考1 / 参考2 / 参考3

MogoDB は設定不要でした。

Elasticsearch はクラスターの設定が必要です。設定ファイルは /usr/local/etc/elasticsearch/elasticsearch.yml

cluster.name: graylog

この一行があれば大丈夫みたいです。

Graylog の設定。こっちはわりと面倒です。設定ファイルは /usr/local/etc/graylog/graylog.conf

is_master = true
node_id_file = /usr/local/etc/graylog/node-id
password_secret = ****
root_password_sha2 = ****
http_bind_address = 0.0.0.0:9000

ここで pwgen を使います。password_secret のところに、pwgen -N 1 -s 96 を実行した結果を書きます。

root_password_sha2 には、echo -n PASSWORD | shasum -a 256 を実行した結果を書きます。

あとは /etc/rc.conf に追記しましょ。

elasticsearch_enable="YES"
mongod_enable="YES"
graylog_enable="YES"

メンドクサイから、これで OS を再起動しちゃえー

Input モジュールを作る

SyslogUDP の Input モジュールを作ります

ここはまぁ、作ればいいので、作ってくださいませ

graylog-input.png解析パターンの作成

さぁ、いよいよ本題。ログメッセージを解析するための設定だなんだをつくります。ここからは、あくまでFortigate のログを解析するための話なんで、Fortigate が出すログメッセージに特化した内容です。

メニューから [System]-[Grok Patterns]を選択してマッチングパターンを登録します。

とりあえずこの三つ。他にも作るべきものはあると思うんですが、いったんこれで。コピペしたい人用に、テキストも置いておきます。

FG_APPNAME [A-Za-z.]+
FG_CUNTORYNAME [A-Za-z\s]+
FG_SERVICE [A-Za-z0-9\/\-.]+

つぎに、Input モジュールにパターンを登録します。Input モジュール設定画面にある、[Manage extractors] ボタンを押します。最終的に作る extractors はこんな感じ。

extractors.pngで、一個のextractorの書き方はこんな感じ。

extractor.png設定内容を文字列でも書き出しておきましょう。

SrcIP srcip=%{IPV4:SRC}
Src-cuntry srccountry="%{FG_CUNTORYNAME:SRC_CUNTORY}"
Service service="%{FG_SERVICE:SERVICE}"

実際のログファイルと見比べて解釈してください。たとえば、ログ本文中に service="Local-Proxy" という文字列が含まれていたとすると、3個目のルールにマッチして、「Local-Proxy」という文字列が、SERVICE という項目として抽出されます。

そのまま使ってみたいというキトクな方用に、Export したファイルを置いておきます。とーーーぜんですけど、無保証でよろしく。extractors.json

解析結果の表示

最後に解析結果を表示します。

[Search]メニューを選択して、ログの検索画面をだし、

Fields.pngこの画面のような操作をして [Show top values] メニューを選択してみてください。この場合であれば、SERVICE の集計表が表示されます。

トラックバック(0)

トラックバックURL: http://horliy.seri.gr.jp/MTcgi/mt-tb.cgi/105

コメントする

このブログ記事について

このページは、ほーりーが2020年7月 2日 12:32に書いたブログ記事です。

ひとつ前のブログ記事は「Cosmo Communicator のバッテリー管理バグに対応」です。

次のブログ記事は「Python3でPostgreSQLに入れた画像ファイルをCGIで表示する」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。