サンプルラボ:授業ですぐ使えるコンテナーラボと VM ラボ
ここにあるラボはどれもブラウザーで動き、各生徒に専用のコピーと隣のターミナルを用意するので、インストールするものはなく、生徒自身のパソコンを壊す心配もありません。それぞれに、このマニュアル内の専用ページがあり、手順、何を提出させるか、そして GitHub のソースが載っています。ソースはフォークして変更できます。
compose ファイルで書かれたコンテナーラボと VM ラボがあり、VM ラボでは各生徒に Ubuntu のマシンが1台ずつ渡されます。どれも「起動」して試せますし、モジュールにコピーして課題として出すこともできます。
データベースと API
PostgreSQL と PostgREST:Postgres データベースと、すべてのテーブルを REST エンドポイントにする Web API です。ターミナルには psql と curl があります。SQL、REST、ボリューム、バックアップを学べます。
MySQL と phpMyAdmin:8つのテーブルと数百行からなるショップのサンプルデータベースが入った MySQL と、すでにサインイン済みの phpMyAdmin です。最初の SELECT からサブクエリやトランザクションまで、13個の SQL 演習があります。
バージョン管理
Git と Gitea:生徒専用の Git サーバーです。ターミナルからクローン、コミット、プッシュするリポジトリがあり、その結果を GitHub のような Web 画面で確認できます。GitHub のアカウントは不要です。
Web アプリケーションのセキュリティ
OWASP Juice Shop、DVWA、WebGoat:あえて脆弱に作られた3つの Web アプリで、それぞれ生徒専用の非公開コピーで動きます。生徒はアプリを攻撃し、弱点を説明し、証拠を提出します。概要ページの「セキュリティラボ」では、守るべき決まりと、コースのどこに置くのがよいかを扱っています。
OWASP Mutillidae II は、データベースとディレクトリサービスを備えた、あえて脆弱に作られた2つ目の PHP アプリです。OWASP WrongSecrets は、コードや設定に隠された誤った秘密情報を生徒に探させて、シークレット管理を教えます。「SQL インジェクション:見つけて直す」は、当社の小さな脆弱アプリを生徒が攻撃し、そのあとで修正する演習です。
DevOps と Web サーバー
Web サーバーの堅牢化:弱い設定の nginx サイトを、ターミナルから見つけて直します。PASS か FAIL を返すチェック付きです。Docker の基本:1つのサービスが壊れた小さなスタックで、生徒はログを読み、コンテナー内でコマンドを実行し、直して再起動します。可観測性:Prometheus と Grafana が小さな Web サーバーを監視し、生徒がアラートルールを書きます。
Linux 管理とセキュリティ運用
Linux 管理、インシデント対応、Ansible は VM ラボで、生徒に Ubuntu のマシンが1台ずつ渡され、README が付きます。Linux 管理には、ユーザー、共有フォルダー、cron の設定、サービスファイルの4つの小さな課題があります。インシデント対応では、侵害されたマシンのログ一式を調べ、Ansible では、マシンを設定する playbook を生徒が仕上げます。どれも、保存されたマシンを採点するチェックが付いています。
コンピューターネットワーク
スタティックルーティング、OSPF、BGP:小さなネットワークのルーターとホストをすべて生徒の1台の VM の中に作り、ルーターは FRRouting を動かす3つの VM ラボです。ラボを採点してくれるチェックが付いています。
NAT ゲートウェイ、DHCP と DNS、VLAN、WireGuard も同じ形でさらに掘り下げます。マスカレードとポートフォワードを備えた NAT ゲートウェイ、dnsmasq による DHCP と DNS のサーバー、VLAN のためのスイッチと router on a stick、2拠点間の WireGuard トンネルです。
すべてのラボの基本レッスン
どのラボにも、そのラボで進める小さなレッスンがあります。最初の6つのコンテナーラボにはそれぞれ2つあります。Git Basics と Git Basics 2、SQL Basics と SQL Basics 2、API Basics と API Basics 2、Juice Shop Basics と Juice Shop Basics 2、DVWA Basics と DVWA Basics 2、WebGoat Basics と WebGoat Basics 2 です。ほかには1つずつあります。Static Routing Basics、OSPF Basics、BGP Basics、Mutillidae Basics、WrongSecrets Basics、SQL Injection Fix Basics、Web Server Hardening Basics、Docker Basics、Observability Basics、Linux Administration Basics、Privilege Escalation Basics、Incident Response Basics、Hadoop Basics、Spark Basics、Kafka Basics、Valkey Basics、Ansible Basics、NAT Basics、DHCP and DNS Basics、VLAN Basics、WireGuard Basics です。ラボで進めるレッスンには、言葉による手順と、生徒自身のターミナルにコマンドを入力する「実行」ボタンがあり、コンテナーでも Ubuntu VM でも動くので、教員はレッスンとは何か、ラボに何ができるかの両方を確かめられます。どれも意図的に短くしてあります。
どこからでも使えます。無料の個人アカウントには、そのすべてがホームにある Basics モジュールで配布され、どの学校もライブラリの Basics フォルダから自分のモジュールにコピーでき、新しい学校ではサンプルモジュールの Basics (Sample)、Database (Sample)、Lab Basics (Sample)、Networking Basics (Sample)、Security Labs (Sample)、DevOps Labs (Sample)、Linux Labs (Sample) に入っています。

どれもブラウザーで動かせます
コンテナーラボはコンテナーのページから起動します。Git ラボと SQL ラボはアカウントなしで、ほかのラボは無料アカウントで起動できます。VM ラボはラボ課題としてモジュールに追加し、ラボのページのサンプルから起動します。
- コンテナーのページを開く. バーの「つくる」を開き、「コンテナーを実行」を選びます。ページは誰でも開けて、Git ラボと SQL ラボはアカウントなしで起動できます。ほかのラボには無料アカウントが必要です。アカウントを作成してサインインし、「起動」を押します。
- サンプルの「起動」を押す. 「サンプルラボ」のカードにすべてのコンテナーラボが並んでいます。「起動」で1回の操作で実行でき、「先にファイルを編集」で起動する前に変更できます。
- 課題として出す. ラボを「コンテナーラボ」または「Ubuntu VM ラボ」としてモジュールにコピーし、公開して自分のコピーで試してから、ほかの課題と同じように配布します。

コードは公開されています
どのラボも GitHub の mitsurutech 配下の公開リポジトリにあり、README に授業の内容が載っています。compose ファイルとラボの定義は MIT ライセンスです。コピーして、変更して、授業に使ってください。中のアプリケーション、Juice Shop、DVWA、WebGoat などはそれぞれのライセンスのままで、各プロジェクトのイメージから取得しており、当社が再配布することはありません。
- lab-sample:PostgreSQL と PostgREST
- lab-mysql-phpmyadmin:MySQL と phpMyAdmin
- lab-git-gitea:Git と Gitea
- lab-juice-shop:OWASP Juice Shop
- lab-dvwa:DVWA
- lab-webgoat:WebGoat と WebWolf
- lab-netlab:スタティックルーティング、OSPF、BGP
- lab-mutillidae:OWASP Mutillidae II
- lab-wrongsecrets:OWASP WrongSecrets
- lab-sqli-fix:SQL インジェクション、見つけて直す
- lab-harden-nginx:Web サーバーの堅牢化
- lab-docker-basics:Docker の基本
- lab-observability:Prometheus と Grafana
- lab-hadoop:Hadoop の HDFS と MapReduce
- lab-spark:Apache Spark
- lab-kafka:Apache Kafka
- lab-valkey:キーバリューストア Valkey
- lab-linux-admin:Linux 管理
- lab-linux-privesc:Linux の権限昇格
- lab-incident-response:インシデント対応
- lab-ansible-basics:Ansible
- lab-nat-gateway:NAT ゲートウェイ
- lab-dhcp-dns: DHCP と DNS
- lab-vlans:VLAN
- lab-wireguard:WireGuard
よくある質問
- 生徒は何かをインストールする必要がありますか?
- いいえ。ラボはどれも当社のマシンで動き、隣にターミナルがあるブラウザーで開きます。生徒のパソコンには何もインストールしません。
- ラボを変更したり、自分で作ったりできますか?
- はい。リポジトリをフォークしてラボをそのフォークに向けるか、ファイルをページ上で書くラボにコピーします。compose ファイルに書けることは、コンテナーラボのガイドにあります。
- ラボごとにレッスンはありますか?
- はい。どのラボにも、そのラボで進める短い基本レッスンがあり、最初の6つのコンテナーラボにはさらに2つ目があって、すべての個人アカウントとすべての学校が無料で使えます。VM ラボでは、「実行」がUbuntu VM のターミナルに入力されます。
- ラボは自動で採点されますか?
- ほとんどの VM ラボは自動です。それぞれに、生徒の保存されたマシンに対して実行するチェックスクリプトがあります。Linux 権限昇格ラボは例外で、そのマシン上の生徒はどんな証拠も偽造できるため、文章での提出を教員が読みます。コンテナーラボは、生徒が提出した内容から教員が採点し、Web サーバー堅牢化ラボのように、生徒自身が実行するチェックを持つものもあります。
- プラットフォームの外でも使えますか?
- コンテナーラボは自分のマシンで docker compose を使って動かせ、方法は各 README にあります。VM ラボは、このプラットフォームの VM ラボ用の定義です。