Ubuntu 24.04にZeekネットワークセキュリティモニタリングツールをインストールする方法
このチュートリアルはこれらのOSバージョンのために存在します
- Ubuntu 24.04 (ノーブルナンバット)
- Ubuntu 22.04(ジャミー・ジェリーフィッシュ)
このページで
- 前提条件
- Zeekのインストール
- Zeekの設定
- zeek-cutを使用してZeekログを解析する
- Zeekの出力をJSONに設定する
- jqを使ってZeek JSONフォーマットを解析する
- 結論
Zeek(以前のBro)は、ネットワークセキュリティ監視のための無料でオープンソースのプラットフォームです。これは、疑わしいまたは悪意のある活動を調査する強力なパッシブネットワークトラフィックアナライザーです。Zeekはネットワークセキュリティモニター(NSM)として使用でき、セキュリティドメインからパフォーマンス測定やトラブルシューティングまで、幅広いトラフィック分析をサポートしています。
このチュートリアルでは、Ubuntu 24.04サーバーにZeekネットワークセキュリティ監視ツールをインストールする方法を学びます。また、Zeekをクラスターモードで実行する方法、'zeek-cut'コマンドを使用してZeekログを解析する方法、'jq'ユーティリティを使用してZeek JSONログを生成および解析する方法も学びます。
前提条件
始める前に、次のものを用意してください:
- Ubuntu 24.04サーバー
- 管理者権限を持つ非ルートユーザー
Zeekのインストール
ZeekはUnix系オペレーティングシステム用のネットワークセキュリティ監視ツールです。複数の方法でインストールできます。この例では、OpenSUSEビルドサービスからAPTパッケージマネージャを使用して、Ubuntu 24.04サーバにZeekをインストールします。
まず、以下のコマンドを実行して、ZeekリポジトリをUbuntuシステムに追加します。
echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
以下のコマンドを使用して、ZeekリポジトリのGPGキーをダウンロードして追加してください。
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_24.04/Release.key | \
gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
Zeek GPGキーとリポジトリが追加されたら、以下の'apt<&47;em>'コマンドを実行してUbuntuパッケージを更新します。
sudo apt update
以下の'apt<&47;em>'コマンドを実行して、'zeek<&47;em>'パッケージを確認できます。複数のZeekバージョンが表示されます。
sudo apt search zeek
sudo apt-cache policy zeek
次に、以下の「apt」コマンドを使用してZeekをインストールします。この例では、Zeek LTSをインストールします。
sudo apt install zeek
インストールを確認するには、'Y'を入力してください。
インストールが完了したら、'&47;opt&47;zeek&47;bin<&47;em>'ディレクトリを、'~&47;.bashrc<&47;em>'ファイルを通じてシステムのPATHに追加します。そして、'~&47;.bashrc<&47;em>'ファイルを再読み込みして新しい変更を適用します。これで、ターミナルを通じてZeekコマンドラインを実行できるようになります。
echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc
source ~/.bashrc
最後に、以下の「zeek」コマンドを実行して、Zeekのバージョンと基本的なコマンドおよびオプションを確認してください。
zeek --version
zeek --help
次のような出力が表示されます:
Zeekの設定
Zeekがインストールされた後、インフラストラクチャ上でZeekがどのように動作するかを設定する必要があります。Zeekをスタンドアロンモードまたはクラスターモードで実行することを選択できます。大規模な展開の場合、Zeekコンポーネントが別々のサーバーにインストールされるクラスターモードを使用できます。このテストの目的のために、単一のサーバーを使用してクラスターモードでZeekを設定し実行します。
次の'ip \'コマンドを使用してサーバーのIPアドレスを確認してください。この例では、UbuntuサーバーのIPアドレスは'192.168.10.60 \'です。
ip a
'&47;opt&47;zeek&47;etc&47;networks.cfg<&47;em>'を'nano<&47;em>'エディタで開きます。
sudo nano /opt/zeek/etc/networks.cfg
ターゲットサーバーのネットワークサブネットを以下のように入力してください。
192.168.10.0/24 Local Network
作業が完了したら、ファイルを保存してエディタを終了してください。
今、/opt/zeek/etc/node.cfgのZeekノード設定をnanoを使って開いてください。
sudo nano /opt/zeek/etc/node.cfg
次の行をコメントアウトしてZeekのスタンドアロンモードを無効にします。デフォルトでは、Zeekはデフォルトの「localhost」とネットワークインターフェース「eth0」でスタンドアロンモードで実行されています。
#[zeek]
#type=standalone
#host=localhost
#interface=eth0
以下の設定を貼り付けて、単一のサーバー内でクラスター モードで Zeek を実行します。Ubuntu サーバーの IP アドレスに変更することを確認してください。以下のように、Zeek のクラスター モードには、logger<&47;em>、manager<&47;em>、proxy<&47;em>、および workers<&47;em> などの複数のコンポーネントがあります。
# logger
[zeek-logger]
type=logger
host=192.168.10.60
# manager
[zeek-manager]
type=manager
host=192.168.10.60
# proxy
[zeek-proxy]
type=proxy
host=192.168.10.60
# worker
[zeek-worker]
type=worker
host=192.168.10.60
interface=eth0
# worker localhost
[zeek-worker-lo]
type=worker
host=localhost
interface=lo
完了したら、ファイルを保存してエディタを終了してください。
次に、以下の「zeekctl」コマンドを実行して、Zeekの構文を確認してください。適切な設定がされていれば、「スクリプトは正常です」という出力が表示されます。
zeekctl check
今、あなたのZeekインストールをデプロイするために、'deploy<&47;em>'コマンドを実行してください。これにより、Zeekロガー、マネージャー、プロキシ、およびワーカーが起動します。
zeekctl deploy
以下のコマンドで各Zeekコンポーネントを確認できます。
zeekctl status
以下の出力では、各Zeekコンポーネントが実行されているのがわかります。これは、Zeekクラスターの単一ノードのデプロイメントが成功したことを意味します。
zeek-cutを使用してZeekログを解析する
Zeekをインストールして展開したので、ネットワークのログファイルは「/opt/zeek/logs/current」ディレクトリに生成されます。知っておくべき複数のZeekログファイルがあります。このセクションでは、TSV(タブ区切り値)形式でログを生成するために「zeek-cut」ユーティリティを使用する方法を学びます。
以下のコマンドで、Zeekログディレクトリ「/opt/zeek/logs/current」を確認してください。
ls -ah /opt/zeek/logs/current/
次のような複数のログファイルが表示されます:
- conn.log:TCPとUDPの接続ログ。このログファイルは、タイムスタンプ、接続時間、サービスなどの最も有用な情報を提供します。
- dns.log: DNS(ドメインネームシステム)ログファイル
- http.log.log: ハイパーテキスト転送プロトコル(HTTP)ログ
- ssh.log: SSH接続を追跡するためのセキュアシェル(SSH)ログ。
- ssl.log: HTTPSログも含まれるセキュアソケットレイヤー(SSL)ログ
次に、'&47;opt&47;zeek&47;logs&47;current<&47;em>'ディレクトリに移動し、'cat<&47;em>'コマンドを実行してZeekログを表示し、出力を'zeek-cut<&47;em>'コマンドでパースしてTSV(タブ区切り値)形式に変換できます。
cd /opt/zeek/logs/current/
cat dns.log | zeek-cut id.orig_h query answers
cat dns.log | zeek-cut query answers id.orig_h
この例では、フィールド「id.orig_h」、「query」、および「answers」からの値を示します。
次のように'zeek-cut<&47;em>'コマンドを使用して、TSVログを処理し、同様の出力を得ることもできます。
zeek-cut id.orig_h query answers < dns.log
Zeekの出力をJSONに設定する
ZeekはTSVやJSONを含む複数のログ形式をサポートしています。このセクションでは、JSON形式でZeekログを生成する方法を学びます。次に、ログを簡単に読むために、コマンドラインの'jq'を使用してJSONログを解析する方法を学びます。
次の「nano」エディタで「/opt/zeek/share/zeek/site/local.zeek」を開いてZeekの設定を行います。
sudo nano /opt/zeek/share/zeek/site/local.zeek
出力ログをJSONに有効にするには、次の行のコメントを解除してください。
@load policy/tuning/json-logs
ファイルを保存してエディタを終了します。
以下の「zeekctl」コマンドを実行して、変更を適用し展開してください。そして、プロセスが完了すると、ZeekによってJSONログ形式が生成されます。
zeekctl deploy
Zeekのデプロイ中に次の出力が表示されます。
次に、以下の「cat」コマンドを実行してZeekログファイルを確認します。Zeekログが現在JSON形式であることがわかります。
cat /opt/zeek/logs/current/dns.log
jqを使ってZeek JSONフォーマットを解析する
以下の'apt'コマンドを使用して'jq<&47;em>'パッケージをインストールします。
sudo apt install jq -y
インストールが完了したら、'&47;opt&47;zeek&47;logs&47;current'ディレクトリに'cd'コマンドで移動します。
cd /opt/zeek/logs/current/
JSON形式のログを解析するには、以下の'jq'コマンドを実行してください。
jq . dns.log
コンパクトな出力を得たい場合は、次のように'-c'オプションを使用してください。
jq . -c dns.log
最後に、以下の「jq」コマンドを使用してJSONログファイルを指定することもできます。
jq -c '[."id.orig_h", ."query", ."answers"]' dns.log
結論
おめでとうございます!Ubuntu 24.04サーバーにZeekネットワークモニタリングツールのインストールが完了しました。単一ノード/サーバーでのZeekクラスターモードの展開方法、TSV(タブ区切り値)形式を生成するための「zeek-cut」ユーティリティを使用したZeekログの解析、JSON形式でのZeekログの生成、そして「jq」ユーティリティを使用したJSONログの解析を学びました。ここから、JSONログやZeekログをGraylogやELK/EFKスタックなどの集中ログシステムに送信することで次のステップに進むことができます。