Graylog なるツールがあります。ログ解析を唄うツールです。ログ解析ができます!
っていうと、なーんも考えずにインストールすればできるぜ、いえーい!って思っちゃうでしょうけど、そんな甘いものではありません。
というか世の中に統合ログ解析ツールを唄うツールが結構ありますが、どれもお気楽なものがないんですよね。結局はログメッセージを人間が見て、どうやって分割して集計しようか?って考えて、正規表現とかをゴリゴリ書いてよーやく解析できるようになります。
IT 系の展示会とかセミナーとか行くと、嫌というほど「誰でも簡単にログ解析できてセキュリティ向上できます!」って言われるんですが、話聞いてみると、「嘘つけ!」って言いたくなるのばっかりで(とボヤいてもしょうがない)
とまぁ、製品買ってもアレなものばっかりなら、OSSでやりましょ!
Graylog は日本語の情報が少なくて、どーやって使うんだ??と悩むんですが、DesigNet なる SIer さんが日本語マニュアルを公開されてますんで、これが参考になります。
さて、動かしてみたスクリーンショットがこんな感じ。インターネット接続をになってる Fortigate のログのうち、deny されたトラフィックを集計してみました。Netherlandsってオランダのことなんですね。なんでオランダからこんなにアタック着てるんだ??
インストール
さて、まずはインストールしましょ。
私が構築するんだから、とーぜん 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 モジュールを作ります
ここはまぁ、作ればいいので、作ってくださいませ
解析パターンの作成
さぁ、いよいよ本題。ログメッセージを解析するための設定だなんだをつくります。ここからは、あくまで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 はこんな感じ。
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]メニューを選択して、ログの検索画面をだし、
この画面のような操作をして [Show top values] メニューを選択してみてください。この場合であれば、SERVICE の集計表が表示されます。
コメントする