はじめに
サーバーで何か問題が発生した際、調査の一つとして設定変更や操作履歴を確認する必要があります。また、定期的なセキュリティ監査の一環として、「いつ」「誰が」「何をしたか」を記録する環境を整えることで、さまざまなリスクに対応できるようになります。
この記事では、AkamaiのLinode Object Storageを利用して監査ログを安全かつ効率的に管理する方法を解説します。
監査ログの重要性
サーバーの監査ログを記録することは、情報セキュリティや運用の観点から非常に重要な役割を果たします。以下に、監査ログ記録の必要性とそのメリットについて解説します。
セキュリティ強化と運用効率化
監査ログはシステム上の操作履歴やイベントを記録し、不正アクセスや異常行動を検出するのに役立ちます。攻撃や不正操作が発生した場合、迅速な対応と被害の最小化が可能です。
法令遵守とコンプライアンス対応
多くの業界でアクセス管理や操作履歴の記録が義務化されています。監査ログは法的証拠としても機能し、内部・外部監査への対応をスムーズにします。
効果的なログ管理のポイント
ログは増加する一方なので、効率的なログ管理も求められます。不要なログを定期的に削除するポリシーを設けたり、ログ管理ツールを導入して分析を効率化することも有効です。
それでは Linode Object Storage にサーバーの監査ログを保管して、いつでも検索・閲覧できる環境を構築していきましょう。
システム構成の概要
-
サーバー群
- 任意のLinuxサーバー
- auditd
- rsyslog
- 任意のLinuxサーバー
-
Log中継・可視化サーバー
- Ubuntu 24.04
- Fluent Bit
- OpenObserve
- Linode Object Storage(OpenObserveで管理するログの保存先)
- Ubuntu 24.04
環境構築の流れ
-
Log中継・可視化サーバーの構築
- Linode Object Storageの準備
- Ubuntuのインスタンス作成
- Fluent Bitのインストールと設定
- OpenObserveのインストールと設定
-
各サーバーの監査ログ送信設定
- auditdとaudispのインストールと設定
- rsyslogのインストールと設定
-
動作確認
- OpenObserveへのログインとログ閲覧・検索
設定手順
1. Log中継・可視化サーバーの構築
1.1 Linode Object Storageの準備
以下の記事を参考に、Object Storageを設定してください
記事内にあるCloud Access Managerの設定は不要です
今回準備が必要な項目は以下です
後ほど利用するので各項目をメモしておくとスムーズです
- Object StorageのエンドポイントURL:https://<region>.linodeobjects.com
- Bucket名:mybucketなど任意の名前
- Region名:jp-osa-1
- Object Storage の Access Key & Secret Key (Read/Write権限)
- 監査ログを保管するディレクトリとそのPath:/logsなど任意のディレクトリ名
Linode Object StorageのエンドポイントURLは以下のような形式になっています。
https://<label(Bucket)>.<region>.linodeobjects.com
メモに残す際、「label(bucket)」部分は不要ですので削除してください。
1.2 Ubuntuインスタンスの作成
今回はUbuntu 24.04のインスタンスを作成します
新規インスタンスの作成
Akamai Cloud Computingのダッシュボードで「Create Linode」をクリックし、以下の設定を行います
- Region: Asia (JP, Osaka (jp-osa))
- OS(Image):Ubuntu 24.04 LTS
- Linode Plan:ニーズに合わせたプランを選択します
(例:SharedプランやDedicatedプランなど) - rootパスワード:rootパスワードを設定します
Ubuntu 24.04の作成実行
すべての設定を確認したら、画面一番下の「Create Linode」ボタンを押して、インスタンスを作成します。このプロセスには数分かかることがあります。LinodeがUbuntu 24.04を選択したリージョンにデプロイし、準備が整うまで待ちます。
完了後は速やかに以下の記事を参考にsshの設定をセキュアな状態へ変更してください
Firewallの設定
こちらの記事を参考にし、作成したUbuntuインスタンスにFirewallを適用してください
Inbound Ruleを追加し特定のIPのみインターネットからのアクセスを許可します
以下のポートは、ご自身の利用されるグローバルIPアドレスのみ許可します
- TCP/22
- TCP/5080
以下のポートは監査ログを送信するサーバーの送信元IPアドレスのみ許可します
- TCP/5140
1.3 Fluent Bitのインストールと設定
ここからは、ログ、メトリック、トレースを収集・加工するオープンソース エージェントである Fluent Bit と、ログのオブザーバービリティ(Logs, Metrics, Traces) 、を一元管理・可視化するプラットフォームの OpenObserve をインストール・設定していきます。
Fluent BitとOpenObserve用のユーザーを作成しsudo権限を付与
sudo adduser hoge
sudo gpasswd -a hoge sudo
Fluent Bitをインストール
apt-getでインストールするため、Server GPG key を追加します
sudo curl https://packages.fluentbit.io/fluentbit.key | gpg --dearmor -o /usr/share/keyrings/fluentbit-keyring.gpg
Source listに APT server entryを追加します
sudo vi /etc/apt/sources.list
一番下の行に以下を追記
deb [signed-by=/usr/share/keyrings/fluentbit-keyring.gpg] https://packages.fluentbit.io/ubuntu/${CODENAME} \\${CODENAME} main
${CODENAME}は、Ubuntu 24.04の場合「noble」に置き換えて追記
リポジトリデータベースを更新し最新バージョンをインストールを実行します
sudo apt-get update
sudo apt-get install fluent-bit
v3.1.10 のインストールが完了(2024年11月5日時点)
参考:https://docs.fluentbit.io/manual/installation/linux/ubuntu
1.4 Fluent Bitを設定
Fluent Bitの設定ファイル/etc/fluent-bit/fluent-bit.confを開き、INPUTとOUTPUTを設定します
sudo vi /etc/fluent-bit/fluent-bit.conf
デフォルト設定の以下の行を削除し、今回必要な設定を追加します
#削除するデフォルト設定
[INPUT]
name cpu
tag cpu.local
# Read interval (sec) Default: 1
interval_sec 1
[OUTPUT]
name stdout
match *
#追加する設定
[INPUT] #Fluent Bitへの入力設定を定義する
Name syslog #入力形式の指定
Parser syslog-rfc3164 #rfc3164形式のSyslogをパースする設定
Path /tmp/in_syslog #TCP用Unix ソケット ファイルの絶対パスを設定
Listen 0.0.0.0 #待受IPアドレスの指定、0.0.0.0はany指定
Port 5140 #待受ポート番号の指定
Mode tcp #Syslogのプロトコルタイプを指定
Tag audit_log #この入力設定にタグ名を指定
[OUTPUT] #Fluent Bitからの出力設定を定義する
Name http #出力形式の指定
Host 127.0.0.1 #出力先IPの指定(OpenObserveのIPアドレスを指定)
Port 5080 #出力先ポートの指定(OpenObserveのポートを指定)
URI /api/default/audit_logs/_json #送信先APIエンドポイントURLの指定
Format json #送信するデータフォーマットの指定
tls Off #httpsで通信するかの指定
HTTP_User hoge@hoge.hoge #OpenObserveのログインユーザーIDの指定
HTTP_Passwd hogehogehoge #OpenObserveのログインパスワードの指定
Match audit_log #入力設定との関連付け用にタグ名を指定
設定ファイルを保存し閉じる
参考:https://docs.fluentbit.io/manual/pipeline/outputs/openobserve
systemdでFluent Bitサービスを起動しステータスを確認
sudo systemctl start fluent-bit
sudo systemctl status fluent-bit
● fluent-bit.service - Fluent Bit
Loaded: loaded (/usr/lib/systemd/system/fluent-bit.service; enabled; preset: enabled)
Active: active (running) since Wed 2024-XX-XX XX:XX:XX UTC; 17h ago
Docs: https://docs.fluentbit.io/manual/
Main PID: 30303 (fluent-bit)
Tasks: 5 (limit: 2276)
Memory: 4.0M (peak: 4.7M)
CPU: 7.924s
CGroup: /system.slice/fluent-bit.service
systemed でFluent Bit サービスの自動起動を設定します
sudo systemctl enable fluent-bit
1.5 OpenObserveのインストールと設定
OpenObserveのインストール
以下から最新のOpenObserveをダウンロードし、/usr/local/binに解凍したファイルを置きます
https://github.com/openobserve/openobserve/releases
wget https://github.com/openobserve/openobserve/releases/download/v0.13.1-rc2/openobserve-v0.13.1-rc2-linux-amd64.tar.gz
ダウンロードした圧縮ファイルを /usr/local/bin/ へ解凍します
OpenObserveのバイナリファイルは以下に配置されます
- /usr/local/bin/openobserve
sudo tar zxvf ./openobserve-v0.13.1-rc2-linux-amd64.tar.gz -C /usr/local/bin
実行権限を付与し、v0.13.1-rc2のインストール完了(2024年11月5日時点)
sudo chmod +x /usr/local/bin/openobserve
OpenObserveのsystemd用のユニットファイルを作成
sudo vi /etc/systemd/system/openobserve.service
以下の内容を記載し、保存して閉じます
[Unit]
Description=The OpenObserve server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=simple
LimitNOFILE=65535
EnvironmentFile=/etc/openobserve.env
ExecStart=/usr/local/bin/openobserve
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemed をリロードして OpenObserve サービスの有効化と自動起動を設定します
systemctl daemon-reload
systemctl enable openobserve
参考:https://openobserve.ai/docs/operator-guide/systemd/#create-systemd-service-file
OpenObserveの設定ファイルを作成
sudo vi /etc/openobserve.env
以下の内容を記載し、保存して閉じます
ZO_ROOT_USER_EMAIL=hoge@hoge.hoge #OpenObserveのログインユーザーIDを設定(任意のメールアドレスを指定
ZO_ROOT_USER_PASSWORD=hogehogehoge #OpenObserveのログインパスワードを設定(任意のパスワード文字列を指定
#以下はLinode Object Storageへログを保管するための設定
ZO_LOCAL_MODE_STORAGE=s3 #ログの保存先を指定(S3互換のため
ZO_S3_SERVER_URL=https://<region>.linodeobjects.com #Linode Object StorageのエンドポイントURLを指定
ZO_S3_REGION_NAME=jp-osa-1 #Object StorageのRegionを指定(日本の場合は2024/11/07時点「jp-osa-1」のみ
ZO_S3_ACCESS_KEY=00XX00XX00XX00XX00XX #Linode Object StorageのACCESS KEYを指定
ZO_S3_SECRET_KEY=QQ99QQ99QQ99QQ99QQ99QQ99QQ99QQ99QQ99QQ99 #Linode Object StorageのSECRET KEYを指定
ZO_S3_BUCKET_NAME=mybucket #Linode Object Storageに作成したBucket名を指定
ZO_S3_BUCKET_PREFIX=hoge/ #上記Bucket内に作成したディレクトリ名を指定(この設定は必須ではありません
Linode Object StorageのエンドポイントURLは以下のような形式になっています。
https://<label(Bucket)>.<region>.linodeobjects.com
ZO_S3_SERVER_URLに指定する際、「label(bucket)」部分は不要ですので削除してください。
OpenObserveを起動しステータスを確認する
sudo systemctl start openobserve
sudo systemctl status openobserve
● openobserve.service - The OpenObserve server
Loaded: loaded (/etc/systemd/system/openobserve.service; enabled; preset: enabled)
Active: active (running) since Wed 2024-XX-XX XX:XX:XX UTC; 17h ago
Main PID: 30330 (openobserve)
Tasks: 23 (limit: 2276)
Memory: 428.2M (peak: 447.5M)
CPU: 1min 51.439s
CGroup: /system.slice/openobserve.service
2. 各サーバーの監査ログ送信設定
2.1 auditdとaudispのインストールと設定
監査ログを記録しておきたい重要なサーバーにsshでログインして、syslog転送のための設定を行います
auditdとaudispをインストール
auditdとaudispを以下のコマンドでインストールします ※以下は、ubuntuを想定したコマンド
apt update
apt install auditd
apt-get update
apt-get install audispd-plugins
auditdの設定ファイル/etc/audit/auditd.confを開き、log_formatとdispatcherを設定します
sudo vi /etc/audit/auditd.conf
以下を変更または追記し、保存して閉じます
log_format = ENRICHED # またはRAW
dispatcher = /sbin/audispd
audispdを通じてsyslog転送するには、/etc/audit/plugins.d/syslog.conf または /etc/audisp/plugins.d/syslog.conf ファイルを編集します
sudo vi /etc/audit/plugins.d/syslog.conf
以下のように編集することでauditログのsyslog転送準備が完了です
active = yes
direction = out
path = /sbin/audisp-syslog
type = always
args = LOG_INFO LOG_LOCAL5
format = string
rsyslogのインストールと設定
リポジトリデータベースを更新し、rsyslogをインストールを実行します
sudo apt-get update
sudo apt-get install rsyslog
rsyslogの設定ファイル /etc/rsyslog.d/50-default.conf を開き、auditログをFluent Bitへ転送するための設定をします
sudo vi /etc/rsyslog.d/50-default.conf
以下を一番下の行に追記し、保存して閉じます
local5.* @@<Fluent BitサーバーのIPアドレス>:5140 #@@はTCP転送、@はUDP転送です
もし、auditログをローカルディスクに保存したくない場合は以下の設定も同時に行うことで、ローカルへのログ出力を停止できます。
#*.*;auth,authpriv.none -/var/log/syslog #デフォルトのこちらの行をコメントアウト
*.*;local5.none;auth,authpriv.none -/var/log/syslog #「local5.none;」を追記したこちらの行を追加
auditdおよびrsyslogサービスを再起動
sudo systemctl restart auditd
sudo systemctl restart rsyslog
3. 動作確認
3.1 OpenObserveで監査ログの閲覧と検索
OpenObserveへアクセスしログイン
http://<UbuntuサーバーのIP>:5080/ へブラウザーでアクセスします
/etc/openobserve.env で指定したログインIDとパスワードを入力しログインします
OpenObserveで監査ログの受信状況を確認
ホームの以下の赤枠のリンクをクリックし、ストリームメニューへ移動します
OpenObserveで監査ログを閲覧・検索
確認したいタイムレンジを選択し、クエリー実行
過去〇〇形式の指定
検索したい文字列を入力し、クエリー実行
左上の「Query Editor」に検索したい文字列を入力し、「クエリーを実行」をクリックすることでログの検索が可能です
過去15分間のログに対する「type=SERVICE」の検索結果
過去2日間のログに対する「type=SERVICE」の検索結果
Linode Object Storageに格納した大量のログへ検索を行っても、数秒で結果を取得できました
今回のLog中継・可視化サーバーのLinode Planは「Shared 2GB」で構築しました
まとめ
サーバーの監査ログを記録することは、セキュリティ対策、法令遵守、そしてシステム運用の効率化といった多くの面で組織にメリットをもたらします。特に、セキュリティインシデントの増加が懸念される現代では、監査ログの有効活用がますます重要となっています。
SaaSのSIEMサービスやログ可視化サービスは敷居が高く、なかなか利用できないケースもあると思いますので、OSS(オープンソースソフトウェア)を上手く活用し、もしもの時に備えていきましょう。
Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください
関連記事
アカマイ・テクノロジーズ合同会社のQiitaではAkamai Cloud Computing Services関連など開発者向けの記事を記載しております