<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>cissp &#8211; polepolelife</title>
	<atom:link href="https://polepolelife.com/category/security/cissp/feed/" rel="self" type="application/rss+xml" />
	<link>https://polepolelife.com</link>
	<description>お勉強・読書などの情報をお送りします</description>
	<lastBuildDate>Tue, 21 Jul 2026 04:21:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.6</generator>
	<item>
		<title>【初心者向け】Docker Composeで作る！おうちセキュリティラボの構築とSplunkログ分析</title>
		<link>https://polepolelife.com/%e3%80%90%e5%88%9d%e5%bf%83%e8%80%85%e5%90%91%e3%81%91%e3%80%91docker-compose%e3%81%a7%e4%bd%9c%e3%82%8b%ef%bc%81%e3%81%8a%e3%81%86%e3%81%a1%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3/</link>
					<comments>https://polepolelife.com/%e3%80%90%e5%88%9d%e5%bf%83%e8%80%85%e5%90%91%e3%81%91%e3%80%91docker-compose%e3%81%a7%e4%bd%9c%e3%82%8b%ef%bc%81%e3%81%8a%e3%81%86%e3%81%a1%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3/#respond</comments>
		
		<dc:creator><![CDATA[david daichan]]></dc:creator>
		<pubDate>Tue, 21 Jul 2026 04:21:05 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cissp]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://polepolelife.com/?p=1394</guid>

					<description><![CDATA[はじめに こんにちは！今回は、手元のPC（ローカル環境）に本格的なセキュリティ・テストラボを構築する方法をご紹介します。 セキュリティの勉強をしようと思っても、攻撃を試したり防御のログを見たりする環境を用意するのは一苦労ですよね。そこで今回は、Docker Composeを使って「やられサイト」「攻撃ツール」「防御・監視ツール（SIEM/IDS）」をコマンド一発で立ち上げる環境を作ります。 さらに、構築した環境を使って、ネットワーク侵入検知システム（Suricata）のログを、統合ログ管理ツール（Splunk）に取り込んでグラフ化するところまでをステップ・バイ・ステップで解説します！ 今回構築するラボの構成 今回作成するラボ環境には、大きく分けて3つの役割を持つコンテナ群が含まれています。 これらが1つの仮想ネットワーク内で連携して動きます。 Docker Composeファイルの準備 任意のディレクトリ（例：sec-lab）を作成し、その中に以下の docker-compose.yml を作成します。 YAML 💡 連携の仕組み（Volumes） ここでのポイントは、Suricata（検知側）とSplunk（分析側）がどうやってログを受け渡しているかです。 SuricataコンテナがホストPCの]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>こんにちは！今回は、手元のPC（ローカル環境）に<strong>本格的なセキュリティ・テストラボ</strong>を構築する方法をご紹介します。</p>



<p>セキュリティの勉強をしようと思っても、攻撃を試したり防御のログを見たりする環境を用意するのは一苦労ですよね。そこで今回は、<strong>Docker Compose</strong>を使って「やられサイト」「攻撃ツール」「防御・監視ツール（SIEM/IDS）」をコマンド一発で立ち上げる環境を作ります。</p>



<p>さらに、構築した環境を使って、ネットワーク侵入検知システム（Suricata）のログを、統合ログ管理ツール（Splunk）に取り込んでグラフ化するところまでをステップ・バイ・ステップで解説します！</p>



<h2 class="wp-block-heading">今回構築するラボの構成</h2>



<p>今回作成するラボ環境には、大きく分けて3つの役割を持つコンテナ群が含まれています。</p>



<ol start="1" class="wp-block-list">
<li><strong>守る側（防御・監視）:</strong>
<ul class="wp-block-list">
<li><strong>Splunk:</strong> ログを集約・分析するSIEM（今回の主役！）</li>



<li><strong>Suricata:</strong> ネットワークのパケットを監視する次世代IDS/IPS</li>
</ul>
</li>



<li><strong>やられる側（攻撃対象）:</strong>
<ul class="wp-block-list">
<li><strong>Nginx / Postgres:</strong> 一般的なWebサーバーとデータベース</li>



<li><strong>Juice Shop:</strong> 意図的に脆弱性が作り込まれた学習用のWebアプリ</li>
</ul>
</li>



<li><strong>高度な管理・演習ツール:</strong>
<ul class="wp-block-list">
<li><strong>Vault:</strong> パスワードなどを暗号化して管理するシークレット管理</li>



<li><strong>Keycloak:</strong> 認証基盤（SSO）</li>



<li><strong>Gophish:</strong> フィッシングメール演習ツール</li>
</ul>
</li>
</ol>



<p>これらが1つの仮想ネットワーク内で連携して動きます。</p>



<h2 class="wp-block-heading"> Docker Composeファイルの準備</h2>



<p>任意のディレクトリ（例：<code>sec-lab</code>）を作成し、その中に以下の <code>docker-compose.yml</code> を作成します。</p>



<p>YAML</p>



<pre class="wp-block-code"><code>name: sec-lab

services:
  # ==========================================
  # 1. 監視対象・テスト環境（やられ側）
  # ==========================================
  target-frontend:
    image: nginx:alpine
    container_name: target-frontend
    ports:
      - "4300:80"
    volumes:
      - ./logs/nginx:/var/log/nginx

  target-db:
    image: postgres:15-alpine
    container_name: target-db
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: StrongPassword123!
      POSTGRES_DB: target_app_db
    ports:
      - "4301:5432"

  juice-shop:
    image: bkimminich/juice-shop:latest
    container_name: juice-shop
    ports:
      - "4302:3000"

  # ==========================================
  # 2. セキュリティ管理・診断環境（守る・攻める側）
  # ==========================================
  metabase:
    image: metabase/metabase:latest
    container_name: metabase
    ports:
      - "4305:3000"

  owasp-zap:
    image: zaproxy/zap-stable:latest
    container_name: owasp-zap
    command: tail -f /dev/null
    ports:
      - "4306:8080"
    volumes:
      - ./zap_wrk:/zap/wrk

  splunk:
    image: splunk/splunk:latest
    container_name: splunk
    environment:
      - SPLUNK_START_ARGS=--accept-license
      - SPLUNK_GENERAL_TERMS=--accept-sgt-current-at-splunk-com
      - SPLUNK_PASSWORD=StrongPassword123!
    ports:
      - "4307:8000"
    volumes:
      # ★ここがポイント！ホスト側のログをSplunkに読み取り専用で共有
      - ./logs/nginx:/var/log/nginx_logs:ro
      - ./logs/suricata:/var/log/suricata_logs:ro

  # ==========================================
  # 3. 高度なセキュリティ・コンポーネント
  # ==========================================
  gophish:
    image: gophish/gophish:latest
    container_name: gophish
    ports:
      - "4308:3333"
      - "4309:80"

  keycloak:
    image: quay.io/keycloak/keycloak:latest
    container_name: keycloak
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=admin
    command: start-dev
    ports:
      - "4310:8080"

  vault:
    image: hashicorp/vault:latest
    container_name: vault
    environment:
      - VAULT_DEV_ROOT_TOKEN_ID=myroot
    cap_add:
      - IPC_LOCK
    ports:
      - "4311:8200"

  suricata:
    image: jasonish/suricata:latest
    container_name: suricata
    cap_add:
      - NET_ADMIN
      - NET_RAW
      - SYS_NICE
    network_mode: "host"
    command: -i eth0
    volumes:
      # ★Suricataが検知したログをホスト側に書き出す
      - ./logs/suricata:/var/log/suricata
</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 連携の仕組み（Volumes）</h3>



<p>ここでのポイントは、<strong>Suricata（検知側）とSplunk（分析側）がどうやってログを受け渡しているか</strong>です。 SuricataコンテナがホストPCの <code>./logs/suricata</code> フォルダにログ（<code>eve.json</code>）を書き出し、それをSplunkコンテナが <code>/var/log/suricata_logs</code> として読み込むという「バケツリレー」方式をとっています。</p>



<h3 class="wp-block-heading">起動してみよう</h3>



<p>ファイルが保存できたら、以下のコマンドで一斉に起動します！</p>



<pre class="wp-block-code"><code><strong>docker compose up -d</strong>
</code></pre>



<p>少し待って <code>docker ps</code> で全てのコンテナが <code>Up</code> になっていれば準備完了です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">SplunkへのSuricataログ取り込み設定</h2>



<p>それでは、本題の<strong>Splunkでのログ分析</strong>に入りましょう。</p>



<ol start="1" class="wp-block-list">
<li>ブラウザを開き、<code>http://localhost:4307</code> にアクセスします。</li>



<li>ユーザー名 <code>admin</code>、パスワード <code>StrongPassword123!</code> でログインします。</li>
</ol>



<p>こんな感じの画面になるはずです。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="278" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-35-1024x278.png" alt="" class="wp-image-1395" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-35-1024x278.png 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-35-300x82.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-35-768x209.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-35-1536x418.png 1536w, https://polepolelife.com/wp-content/uploads/2026/03/image-35.png 2041w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">ログの入力設定</h3>



<p>初期状態のSplunkは「ログの入ったフォルダ」を知っているだけで、まだ中身を読み込んでいません。以下の手順で読み込みを指示します。</p>



<ol start="1" class="wp-block-list">
<li>画面右上の <strong>[Settings (設定)]</strong> &gt; <strong>[Data Inputs (データの入力)]</strong> をクリック。</li>
</ol>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="499" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-36-1024x499.png" alt="" class="wp-image-1396" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-36-1024x499.png 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-36-300x146.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-36-768x374.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-36.png 1049w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ol start="1" class="wp-block-list">
<li><strong>[Files &amp; Directories (ファイルとディレクトリ)]</strong> の行にある <strong>「+ Add new (新規追加)」</strong> をクリック。</li>
</ol>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="172" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-37-1024x172.png" alt="" class="wp-image-1397" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-37-1024x172.png 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-37-300x51.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-37-768x129.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-37-1536x259.png 1536w, https://polepolelife.com/wp-content/uploads/2026/03/image-37.png 1615w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ol start="1" class="wp-block-list">
<li><strong>File or Directory:</strong> に <code>/var/log/suricata_logs/eve.json</code> と入力し、Nextへ。</li>
</ol>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="293" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-38-1024x293.png" alt="" class="wp-image-1398" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-38-1024x293.png 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-38-300x86.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-38-768x220.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-38-1536x440.png 1536w, https://polepolelife.com/wp-content/uploads/2026/03/image-38.png 1760w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ol start="1" class="wp-block-list">
<li><strong>Source Type:</strong> 左側のリストから <code>Structured</code> &gt; <code>_json</code> を選択し、Nextへ。（SuricataのログはJSON形式のため）</li>
</ol>



<figure class="wp-block-image size-large"><img decoding="async" width="899" height="1024" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-39-899x1024.png" alt="" class="wp-image-1399" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-39-899x1024.png 899w, https://polepolelife.com/wp-content/uploads/2026/03/image-39-263x300.png 263w, https://polepolelife.com/wp-content/uploads/2026/03/image-39-768x875.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-39.png 908w" sizes="(max-width: 899px) 100vw, 899px" /></figure>



<ol start="1" class="wp-block-list">
<li><strong>Index:</strong> デフォルトの <code>main</code> のままで Review に進み、Submit（保存）します。</li>
</ol>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="716" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-40-1024x716.jpg" alt="" class="wp-image-1400" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-40-1024x716.jpg 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-40-300x210.jpg 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-40-768x537.jpg 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-40-1536x1074.jpg 1536w, https://polepolelife.com/wp-content/uploads/2026/03/image-40.jpg 1591w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>これで、Suricataが監視しているネットワークのログがリアルタイムにSplunkへ流れ込むようになりました！</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="352" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-40-1024x352.png" alt="" class="wp-image-1401" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-40-1024x352.png 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-40-300x103.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-40-768x264.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-40-1536x529.png 1536w, https://polepolelife.com/wp-content/uploads/2026/03/image-40.png 1717w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">脅威ログを検索してグラフ化してみよう！</h2>



<p>ログが取り込めたら、さっそく可視化（グラフ化）してみましょう。トップ画面の左上の「Splunk Enterprise」ロゴをクリックしてホームに戻り、**「Search &amp; Reporting」**を開きます。</p>



<h3 class="wp-block-heading">STEP 1: ログを検索する</h3>



<p>検索窓に以下のSPL（Splunk専用の検索言語）を入力して、右側の虫眼鏡（検索）ボタンを押します。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1011" height="343" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-41.png" alt="" class="wp-image-1402" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-41.png 1011w, https://polepolelife.com/wp-content/uploads/2026/03/image-41-300x102.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-41-768x261.png 768w" sizes="(max-width: 1011px) 100vw, 1011px" /></figure>



<pre class="wp-block-code"><code>index="main" sourcetype="_json"

index="main"
Splunkの中でデータが保存されている「本棚（データベース）」を指定しています。今回はデフォルト設定である main という本棚を探しに行け、という指示です。

sourcetype="_json"
その本棚の中から、さらに「JSON形式で書かれたログ」だけを引っ張り出してこい、という条件です。Suricataのログ（eve.json）がこの形式に該当します。</code></pre>



<p>すると、Suricataが記録した通信の生データ（JSON）がズラッと表示されるはずです。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="695" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-42-1024x695.png" alt="" class="wp-image-1403" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-42-1024x695.png 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-42-300x204.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-42-768x521.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-42-1536x1042.png 1536w, https://polepolelife.com/wp-content/uploads/2026/03/image-42.png 1696w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">イベントタイプを円グラフにする</h3>



<p>Suricataのログには「これはアラートだ」「これはただのHTTP通信だ」「これはDNSの名前解決だ」といった通信の種類（<code>event_type</code>）が記録されています。これを集計してグラフにしてみましょう。</p>



<p>検索窓に以下のコマンドを入力します。</p>



<pre class="wp-block-code"><code><strong>index="main" sourcetype="_json" | stats count by event_type</strong>


<strong>|（パイプ）
Splunkで最も重要な記号です。左側で絞り込んだ検索結果（生データ）を、右側のコマンドに「はい、次よろしく！」とバトンタッチする役割を持ちます。

stats
統計（Statistics）を計算するためのコマンドです。

count by event_type
「通信の種類（event_type）ごとに（by）、何件あったかを数えろ（count）」という指示です。これにより、「http通信が100件、dns通信が50件、alert（攻撃）が3件…」といった集計表が作られ、円グラフ化できるようになります。</strong></code></pre>



<p><em>(※ 「| (パイプ)」を使って、検索結果を <code>stats</code> コマンドに渡し、<code>event_type</code> ごとにカウントしてね、という指示です)</em></p>



<p></p>



<p>検索を実行したら、検索窓のすぐ下にある <strong>「視覚エフェクト」</strong> タブをクリックします。 左上のグラフの種類を選ぶボタンから <strong>「Pie (円グラフ)」</strong> を選択してみてください。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="855" height="961" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-43.png" alt="" class="wp-image-1404" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-43.png 855w, https://polepolelife.com/wp-content/uploads/2026/03/image-43-267x300.png 267w, https://polepolelife.com/wp-content/uploads/2026/03/image-43-768x863.png 768w" sizes="(max-width: 855px) 100vw, 855px" /></figure>



<p>通信の割合が美しい円グラフで表示されましたか？これがSIEMの基本的な使い方です！</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="731" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-44-1024x731.png" alt="" class="wp-image-1405" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-44-1024x731.png 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-44-300x214.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-44-768x548.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-44.png 1159w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">こんどは攻撃をしてみよう</h2>



<p>今度は攻撃をしてみましょう。下記の構成で行ってみます。</p>



<h3 class="wp-block-heading"> 成功したルート：コンテナを「踏み台」にした攻撃（図の太い黒線 ②〜④）</h3>



<p>裏道を通らせないために、「Dockerコンテナ（Nginx）の中から攻撃する」という作戦に変更したルートです。</p>



<ul class="wp-block-list">
<li><strong>コンテナへ潜入（②）：</strong> まず、<code>docker exec</code> コマンドを使って、仮想ネットワーク内にいるNginxコンテナに入り込みます。</li>



<li><strong>外部へ向けて攻撃（③〜④）：</strong> コンテナの中から、外部のインターネット（testmynids.org）に向けてマルウェアのテスト通信を発射します。</li>



<li><strong>必ずメインゲートを通る：</strong> コンテナから外部のインターネットへ出るためには、必ずPCのメインゲート（<code>eth0</code>）を通過しなければならないというネットワークのルールがあります。</li>
</ul>



<h3 class="wp-block-heading">検知とグラフ化の流れ（図の緑色とオレンジ色の線 ⑤〜⑥）</h3>



<p>攻撃がメインゲートを通ったことで、ついに監視員と分析システムが活躍します。</p>



<ul class="wp-block-list">
<li><strong>Suricataが発見（<img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f441.png" alt="👁" class="wp-smiley" style="height: 1em; max-height: 1em;" />）：</strong> メインゲート（<code>eth0</code>）を通過する怪しい通信を、Suricataがバッチリ捉えます。</li>



<li><strong>ログファイルに記録（⑤）：</strong> Suricataは「攻撃を発見！」というアラートを、共有フォルダにある <code>eve.json</code> というファイル（記録帳）に書き出します。</li>



<li><strong>Splunkで可視化（⑥）：</strong> 統合ログ管理ツールのSplunkが、この <code>eve.json</code> を常に監視して読み込み続けているため、最終的にあの美しいグラフとして画面に表示されました。</li>
</ul>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="739" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-45-1024x739.jpg" alt="" class="wp-image-1410" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-45-1024x739.jpg 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-45-300x217.jpg 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-45-768x554.jpg 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-45-1536x1109.jpg 1536w, https://polepolelife.com/wp-content/uploads/2026/03/image-45-2048x1478.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">ルールの設定</h3>



<p>DockerでSuricataを立ち上げた直後、実は肝心の**「どんな通信が危険なのか」というルール（ブラックリスト）を一つも持っていません。** まずはコンテナの中に最新のルールセットをダウンロードさせる必要があります。</p>



<pre class="wp-block-code"><code><strong>docker exec suricata suricata-update</strong>

8/3/2026 -- 07:06:01 - &lt;Info&gt; -- Loading /etc/suricata/update.yaml
8/3/2026 -- 07:06:01 - &lt;Info&gt; -- Using data-directory /var/lib/suricata.
...（中略）...
8/3/2026 -- 07:06:04 - &lt;Info&gt; -- Loaded 64774 rules.
8/3/2026 -- 07:06:08 - &lt;Info&gt; -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 64774; enabled: 48919; added: 0; removed 0; modified: 0
8/3/2026 -- 07:06:09 - &lt;Info&gt; -- No changes detected, exiting.
</code></pre>



<p>このように <code>Loaded XXXX rules.</code> と表示されれば成功です。その後、<code>docker restart suricata</code> で再起動してルールを読み込ませます。</p>



<h3 class="wp-block-heading">Dockerコンテナ再起動でデータが消滅する罠</h3>



<p>よし、これで検知できるぞ！と、設定ファイル（<code>docker-compose.yml</code>）をいじって再度 <code>docker compose up -d</code> を実行したとします。</p>



<p></p>



<pre class="wp-block-code"><code><strong> docker compose up -d</strong>
WARN&#91;0000] Found orphan containers (&#91;grafana sonarqube]) for this project.
&#91;+] up 10/10
 &#x2714; Container target-frontend Running                                                                         0.0s
 &#x2714; Container keycloak        Running                                                                         0.0s
 &#x2714; Container suricata        Recreated                                                                       2.2s
...
</code></pre>



<p>ここで <code>suricata Recreated</code> と出た場合、<strong>大ピンチ</strong>です！ Dockerは設定を変えてコンテナを作り直すと、中身が初期化されます。つまり、<strong>先ほど罠1で苦労してダウンロードした6万件のルールが綺麗さっぱり消滅してしまった</strong>のです。 コンテナを作り直した際は、必ずもう一度 <code>suricata-update</code> を実行するのを忘れないようにしましょう。</p>



<h3 class="wp-block-heading">同じPCからの攻撃は見えない？「チェックサムとルーティング」の壁</h3>



<p>ルールも入れた。さあ、定番のテスト用マルウェア通信（testmynids.org）を実行してアラートを確認してみます。</p>



<p><strong>【実行コマンドと実際の出力】</strong></p>



<p><strong><code>curl &lt;URL&gt;</code>（カール）</strong></p>



<ul class="wp-block-list">
<li><strong>解説:</strong> ターミナルからWebサイトにアクセスしたり、データを送信したりするコマンドです。ブラウザを使わずに通信を発生させたい時によく使います。</li>



<li><strong>オプション:</strong>
<ul class="wp-block-list">
<li><code>-s</code>（サイレントモード）: 通信の余計な進捗バーを非表示にします。</li>



<li><code>-A "名前"</code>: アクセスする際の自分の名前（User-Agent）を偽装します。今回は <code>"BlackSun"</code> という悪意あるツール名に偽装して攻撃しました。</li>
</ul>
</li>
</ul>



<pre class="wp-block-code"><code><strong> curl http://testmynids.org/uid/index.html</strong>
uid=0(root) gid=0(root) groups=0(root)

<strong> grep '"event_type":"alert"' ./logs/suricata/eve.json</strong>

</code></pre>



<p>攻撃のレスポンス（<code>uid=0(root)...</code>）は確実に返ってきているのに、Suricataのログをgrep（検索）しても<strong>何も出ません（無反応）</strong>。</p>



<p>このからくりは**「Linuxカーネルの過剰な最適化」**にあります。</p>



<ul class="wp-block-list">
<li><strong>チェックサム・オフロード:</strong> PCは計算をサボるため、パケットの確認（チェックサム）をネットワークカードに後回しにします。Suricataは「壊れたパケットだ」と勘違いして無視してしまいます。（対策：<code>command: -i eth0 -k none</code> でチェックサム無視を設定）</li>



<li><strong>ローカルルーティング:</strong> ホストPC（自分自身）から攻撃を打つと、Linuxは「外のドア（eth0の監視ポイント）」を通らずに、内部の裏道を通って通信を処理してしまうことがあります。</li>
</ul>



<p>つまり、<strong>ホストPCから直接curlを打っても、ガードマン（Suricata）の目の前を通らない</strong>のです！</p>



<h3 class="wp-block-heading">突破口は「コンテナ内部からの踏み台攻撃」！</h3>



<p>これを解決するには、<strong>別のコンテナの内部に入り込み、そこから攻撃通信を発生</strong>させます。コンテナからの通信であれば、必ず仮想ルーターを通ってeth0から出ていくため、Suricataが確実に捕捉できます。</p>



<p>Nginxコンテナ（<code>target-frontend</code>）を踏み台にして、マルウェアテスト通信と、やられサイト（Juice Shop）への攻撃を実行してみましょう。</p>



<p><strong>【実行コマンドと感動の出力】</strong></p>



<pre class="wp-block-code"><code># Nginxコンテナを踏み台にして外部のテストサイトへ通信
<strong> docker exec target-frontend curl -s http://testmynids.org/uid/index.html > /dev/null</strong>
##
####> /dev/null（リダイレクト）

##解説: コマンドの出力結果を「ブラックホール」に捨てて表示させないようにする、Linuxの便利な裏技で##す。画面をスッキリさせたい時に使います。

# Nginxコンテナを踏み台にしてJuice Shopへ攻撃（BlackSunという怪しいユーザーエージェントを使用）
<strong>docker exec target-frontend curl -s -A "BlackSun" http://juice-shop:3000/etc/passwd > /dev/null</strong>

# いざ、ログを確認！
<strong>grep '"event_type":"alert"' ./logs/suricata/eve.json</strong>
{"timestamp":"2026-03-08T07:07:47.555422+0000","flow_id":879198135428343,"in_iface":"eth0","event_type":"alert","src_ip":"18.64.122.67","src_port":80,"dest_ip":"192.168.65.3","dest_port":45658,"proto":"TCP","ip_v":4,"pkt_src":"wire/pcap","metadata":{"flowints":{"tcp.retransmission.count":2}},"alert":{"action":"allowed","gid":1,"signature_id":2100498,"rev":7,"signature":"GPL ATTACK_RESPONSE id check returned root","category":"Potentially Bad Traffic","severity":2,"metadata":{"confidence":&#91;"Medium"],"created_at":&#91;"2010_09_23"],"signature_severity":&#91;"Informational"],"updated_at":&#91;"2019_07_26"]}},"app_proto":"http","direction":"to_client","flow":{"pkts_toserver":6,"pkts_toclient":5,"bytes_toserver":496,"bytes_toclient":914,"start":"2026-03-08T07:07:47.532384+0000","src_ip":"192.168.65.3","dest_ip":"18.64.122.67","src_port":45658,"dest_port":80}}
</code></pre>



<p><strong>出ました！！！</strong> <code>"event_type":"alert"</code> とともに、<code>"signature":"GPL ATTACK_RESPONSE id check returned root"</code> というアラート名がしっかりと記録されています。これがSuricataが脅威を検知した「生きた証」です！</p>



<h3 class="wp-block-heading">最後の砦、Splunkのパーミッション（権限）の壁</h3>



<p>生ログは出た！あとはSplunkの画面で見るだけ！……と思いきや、まだ出ないことがあります。 理由は単純、<strong>Suricataが作ったログファイルを、Splunk（別のユーザー）が読み取る権限がない</strong>からです。</p>



<p><strong>【実行コマンドと実際の出力】</strong></p>



<pre class="wp-block-code"><code><strong> chmod -R 777 ./logs/suricata</strong>
chmod: changing permissions of './logs/suricata': Operation not permitted
chmod: changing permissions of './logs/suricata/eve.json': Operation not permitted

# sudoをつけて強制的に全開放する！
<strong> sudo chmod -R 777 ./logs/suricata</strong>
&#91;sudo] password for david:

</code></pre>



<p>このように <code>sudo</code> を使ってログフォルダの権限をフルオープン（777）にしてあげます。</p>



<p>そして最後に、SplunkのGUI画面から <strong>[設定] &gt; [データ入力] &gt; [ファイルとディレクトリ]</strong> に進み、手動で <code>/var/log/suricata_logs/eve.json</code> を <strong>「監視 (Monitor)」</strong> として登録します（※これをやらないとSplunkは一生ファイルを読み込みません）。</p>



<h2 class="wp-block-heading"> 完了！美しいグラフの生成へ</h2>



<p>数々の罠を乗り越え、ついにすべてのからくりが繋がりました。 Splunkの「Search &amp; Reporting」画面を開き、以下のコマンドを打ち込んでみましょう。</p>



<pre class="wp-block-code"><code><strong>index="main" sourcetype="_json" event_type="alert" | timechart count by alert.category</strong>

<strong>event_type="alert"
パイプの左側に条件を追加し、Suricataが記録した全通信の中から「これは攻撃だ（alert）」と判定されたログだけを、あらかじめ抽出しています。

timechart
時間を横軸にしたグラフ（Time Chart）を作るための強力な専用コマンドです。

count by alert.category
「アラートのカテゴリ（alert.category）ごとに、時間経過に伴う件数の推移を数えろ（count）」という指示です。これにより、「10時15分にWeb攻撃が5件、10時20分に不正ログイン試行が2件…」といった時系列データが生成され、美しい折れ線グラフや棒グラフを描画できます。
</strong></code></pre>



<p>下記のようにデータが取れていれば完成です</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="738" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/03/image-45-1024x738.png" alt="" class="wp-image-1413" srcset="https://polepolelife.com/wp-content/uploads/2026/03/image-45-1024x738.png 1024w, https://polepolelife.com/wp-content/uploads/2026/03/image-45-300x216.png 300w, https://polepolelife.com/wp-content/uploads/2026/03/image-45-768x554.png 768w, https://polepolelife.com/wp-content/uploads/2026/03/image-45.png 1118w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>



<p></p>



<h2 class="wp-block-heading">おわりに</h2>



<p>今回はDocker Composeを使ったセキュリティラボの構築と、Splunk×Suricataの基本的な連携・グラフ化について解説しました。</p>



<p>自宅のPCだけでこれだけの環境が動かせるのは、Dockerの素晴らしいところですね。次は「OWASP ZAPを使ってやられサイト（Juice Shop）を攻撃し、そのアラートをSplunkで観察する」といった攻防演習にもチャレンジしてみてください！</p>



<p></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpolepolelife.com%2F%25e3%2580%2590%25e5%2588%259d%25e5%25bf%2583%25e8%2580%2585%25e5%2590%2591%25e3%2581%2591%25e3%2580%2591docker-compose%25e3%2581%25a7%25e4%25bd%259c%25e3%2582%258b%25ef%25bc%2581%25e3%2581%258a%25e3%2581%2586%25e3%2581%25a1%25e3%2582%25bb%25e3%2582%25ad%25e3%2583%25a5%25e3%2583%25aa%25e3%2583%2586%25e3%2582%25a3%2F&amp;linkname=%E3%80%90%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91%E3%80%91Docker%20Compose%E3%81%A7%E4%BD%9C%E3%82%8B%EF%BC%81%E3%81%8A%E3%81%86%E3%81%A1%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%A9%E3%83%9C%E3%81%AE%E6%A7%8B%E7%AF%89%E3%81%A8Splunk%E3%83%AD%E3%82%B0%E5%88%86%E6%9E%90" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fpolepolelife.com%2F%25e3%2580%2590%25e5%2588%259d%25e5%25bf%2583%25e8%2580%2585%25e5%2590%2591%25e3%2581%2591%25e3%2580%2591docker-compose%25e3%2581%25a7%25e4%25bd%259c%25e3%2582%258b%25ef%25bc%2581%25e3%2581%258a%25e3%2581%2586%25e3%2581%25a1%25e3%2582%25bb%25e3%2582%25ad%25e3%2583%25a5%25e3%2583%25aa%25e3%2583%2586%25e3%2582%25a3%2F&amp;linkname=%E3%80%90%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91%E3%80%91Docker%20Compose%E3%81%A7%E4%BD%9C%E3%82%8B%EF%BC%81%E3%81%8A%E3%81%86%E3%81%A1%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%A9%E3%83%9C%E3%81%AE%E6%A7%8B%E7%AF%89%E3%81%A8Splunk%E3%83%AD%E3%82%B0%E5%88%86%E6%9E%90" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpolepolelife.com%2F%25e3%2580%2590%25e5%2588%259d%25e5%25bf%2583%25e8%2580%2585%25e5%2590%2591%25e3%2581%2591%25e3%2580%2591docker-compose%25e3%2581%25a7%25e4%25bd%259c%25e3%2582%258b%25ef%25bc%2581%25e3%2581%258a%25e3%2581%2586%25e3%2581%25a1%25e3%2582%25bb%25e3%2582%25ad%25e3%2583%25a5%25e3%2583%25aa%25e3%2583%2586%25e3%2582%25a3%2F&amp;linkname=%E3%80%90%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91%E3%80%91Docker%20Compose%E3%81%A7%E4%BD%9C%E3%82%8B%EF%BC%81%E3%81%8A%E3%81%86%E3%81%A1%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%A9%E3%83%9C%E3%81%AE%E6%A7%8B%E7%AF%89%E3%81%A8Splunk%E3%83%AD%E3%82%B0%E5%88%86%E6%9E%90" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpolepolelife.com%2F%25e3%2580%2590%25e5%2588%259d%25e5%25bf%2583%25e8%2580%2585%25e5%2590%2591%25e3%2581%2591%25e3%2580%2591docker-compose%25e3%2581%25a7%25e4%25bd%259c%25e3%2582%258b%25ef%25bc%2581%25e3%2581%258a%25e3%2581%2586%25e3%2581%25a1%25e3%2582%25bb%25e3%2582%25ad%25e3%2583%25a5%25e3%2583%25aa%25e3%2583%2586%25e3%2582%25a3%2F&#038;title=%E3%80%90%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91%E3%80%91Docker%20Compose%E3%81%A7%E4%BD%9C%E3%82%8B%EF%BC%81%E3%81%8A%E3%81%86%E3%81%A1%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%A9%E3%83%9C%E3%81%AE%E6%A7%8B%E7%AF%89%E3%81%A8Splunk%E3%83%AD%E3%82%B0%E5%88%86%E6%9E%90" data-a2a-url="https://polepolelife.com/%e3%80%90%e5%88%9d%e5%bf%83%e8%80%85%e5%90%91%e3%81%91%e3%80%91docker-compose%e3%81%a7%e4%bd%9c%e3%82%8b%ef%bc%81%e3%81%8a%e3%81%86%e3%81%a1%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3/" data-a2a-title="【初心者向け】Docker Composeで作る！おうちセキュリティラボの構築とSplunkログ分析"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://polepolelife.com/%e3%80%90%e5%88%9d%e5%bf%83%e8%80%85%e5%90%91%e3%81%91%e3%80%91docker-compose%e3%81%a7%e4%bd%9c%e3%82%8b%ef%bc%81%e3%81%8a%e3%81%86%e3%81%a1%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
