メインコンテンツへスキップ
見出し画像

侵入の気配に、どこで気づく?|自宅ネットワークのSyslog・Fluentd・Elasticsearch・ElastAlert監視【番外編】

    この記事で分かること

    • ネットワーク機器とVMのログを一か所に集める理由

    • Syslog/Fluentd/Elasticsearch/Kibana/ElastAlertの役割の違い

    • 実際に公開サービスへ届いた探索リクエストを、どう読むか

    • Gmail・Slack通知の前に必要な「検知条件」と「ログ到達確認」

    • ログが見えない状態を「異常なし」と誤認しないための考え方

    ⏪ 前の記事:#10 サーバからInternetへ自由に出さない|内部SquidでOutbound通信を制御する

    侵入する側は、こちらが管理画面を開くまで待ってくれない

    Webサービスをインターネットに公開した。80/443を開け、UCG-Fiber、FortiGate、HAProxy、Proxy/検査系を通す入口も作った。

    けれど、公開して分かったのは「入口を作れば、使いに来るのは利用者だけではない」ということだ。

    ログには、こんなリクエストが混ざる。

    /.git/objects/...
    PROPFIND
    .../eval-stdin.php
    GeoServer系の探索
    CGI Path Traversal系の探索
    

    うちにGeoServerがあるかどうか、先に尋ねてくれるわけではない。自動化されたスキャンは、使っているかどうか分からないソフトウェアの入口を次々に試す。

    もちろん、探索されたことと侵入されたことは違う。403が記録されたからといって、別経路も含めてすべて安全だとは言い切れない。

    ここで疑問が湧いた。

    侵入の兆候が出た時、自分はいつ、どこで気づけるんだろう?

    FortiGateを毎日開いて、次にUniFi、ESXi、Linux、NAS、Proxyの管理画面を順番に回るのか。寝ている間は誰が見る?

    防御の次に必要だったのは、観測する場所を一つに寄せ、怪しい挙動を人間へ知らせることだった。

    ネットワーク機器はSyslog、VMはFluentd。入口が違っても、集約先は一つ

    我が家には性格の違う機器が混ざっている。

    UCG-Fiber、FortiGate、UniFiのSwitchやAP。ESXi、NAS。Linuxを中心とする各VM。公開サービスを動かすサーバーもある。

    ネットワーク機器などはSyslogで収集サーバーへ送る。OS・認証ログなどVM側のログは、Fluentdの収集・転送も使う。実際の送り方は機器ごとに異なるが、最後はElasticsearchで扱えるようにする。

    画像
    FortiGate / UCG-Fiber / Switch / ESXi / NAS
                      │
                    Syslog
                      ▼
              rsyslog(収集サーバー)
                      │
                      ├── 必要な振り分け・中継
                      ▼
                   Fluentd  ◀── VMのOS/認証/アプリログなど
                      │
                      ▼
                Elasticsearch
                      ├──────── Kibana(人が調べる)
                      └──────── ElastAlert(条件で検知する)
                                          │
                                          ▼
                                     Gmail / Slack
    

    ※論理的な役割を簡略化した図。実際には機器・ログ種別により収集・転送の経路が異なる。公開用に実IP・ホスト名は省略した。

    重要なのは、どの画面にログが保存されているかを覚える仕事をやめたこと。

    例えば「アクセスが急増した」と感じた時、Proxyの記録だけでなく、Firewallの通信、OSの認証イベント、対象サービスのエラーを同じ時間軸で見られる可能性が生まれる。

    Kibanaは調べるため、ElastAlertは気づくため

    Elasticsearchはログを貯め、検索できる場所。

    Kibanaは、それを人間が検索・可視化する場所だ。時刻や機器、送信元、イベントの種類を条件にして前後関係を追える。

    でも、Kibanaに表示できることと、リアルタイムに気づけることは別。

    そこで、同じElasticsearchのインデックスに対してElastAlertであらかじめ決めた条件を評価する。現在の通知先にはGmailとSlackも使っている。

    画像

    この役割分担なら、通知が来たあと「何が条件に当たったのか」「直前から何が増えたのか」をKibana側へ戻って調査できる。

    例えば、認証失敗、通常と異なるアクセスの集中、エラーの急増といった挙動は監視・検知の対象として考えられる。ただし、実際に何を検知するかは個々のルール次第で、ここに挙げた全パターンが現在稼働中のルールだと断定するものではない。

    過去の構築検証ではElastAlert 2のコンテナ稼働、Elasticsearchへの検索、模擬認証イベントのルール一致と検知履歴を確認した。これは検知の配線が成立することの検証であり、実際の侵入を検知した実績とは区別しておく。

    そして通知にも条件がいる。単発の怪しいリクエストを全部メールにしたら、今度は大量の通知に埋もれる。件数、時間幅、再通知の間隔、重要度を決めなければ、便利な監視はすぐノイズになる。

    「怪しい通信」より先に、何を確認するべきか

    #9で書いた TCP_DENIED/403 は、Squid側で拒否した記録であって、ClamAVがウイルスを検出した証拠ではない。

    同じように、ElastAlertがルールに一致したとしても、それだけで「侵入成功」とはならない。

    自分が確認したいのは三つ。

    どこで観測されたのか。 Firewallなのか、Proxyなのか、OSなのか。

    何が起きたのか。 単なる探索なのか、認証失敗の繰り返しなのか、認証成功まで進んだのか。

    その後どうなったのか。 Backendに届いたか、別の宛先への通信が増えたか、サービス側に異常が出たか。

    この前後関係をつなげられると、単独のログにはない意味が見える。ただし、ログがない層や記録できない挙動まで見えるわけではない。

    そして最大の落とし穴。「ログが来ていない」のに正常に見える

    集約サーバーを作るとき、自分はここにもハマった。

    rsyslogd -N1 は正常。受信ポートのListenerもいる。なのに、ある送信元のログが届かない。

    原因は一つではなかった。FortiGateのPolicy Based Routingが内部ログサーバー宛て通信まで上流側へ誘導していたこともある。Ubiquitiのログ振り分けでは、ファイル用のTemplateがあってもRuleが足りない。ESXiでは管理IPの思い込みが送信元の識別を狂わせた。

    一つずつ潰し、機器ごとのSyslogを集約できた時は、ログが「貯まる」以前に送られ、届き、正しく分類されることが必要だと痛感した。

    VM側でも、Fluentdのプロセスが起動していることと、実際のOSログを読めることは別だった。権限やログローテーションを含めて考えないと、最初は動いても後から収集が途絶える。

    画像

    収集サーバーが正常でも、特定の機器のログが途切れていたら、その機器については観測できていない。

    沈黙は安全の証拠ではない。

    防御することと、気づくことは別

    Firewallで入口を制御する。VLANで家族の生活と実験場の境界を分ける。ProxyとClamAVで通過する通信・コンテンツを検査する。

    それでも、万一の時に何が起きたかを追えなければ、対処は勘頼みになる。

    だから自宅のログを一つに集めて、Kibanaで調べ、ElastAlertで決めた不審な挙動を検知し、GmailとSlackで自分に知らせる。

    これは「絶対侵入されない家」の宣言ではない。

    侵入を試みられたとき、気づく材料を失わないための仕組みだ。

    画像

    次回は、その出発点であるSyslogが届かなかった話へ戻る。

    ⏩ 次の記事:#11 ログが来ない原因はログサーバではなかった|FortiGate・Ubiquiti・ESXi・NASのSyslog集約

     
     
    ベンチャー→SES13年→現メガベンのインフラエンジニア。 自宅NW要塞でAI・Kubernetes・Local LLM・GPUを飼育中。 AIに開発を壊されて学んだ「任せ方・止め方・戻し方」を、成功談より失敗談多めで投下します。 Amazonアソシエイト参加

    あなたへのおすすめ