環境構築ガイド2
はじめに
本記事は、防御学習のために企業システムを安全に再現するための長編ハンズオンです。
扱うのは「環境構築」と「運用確認」まで。
- 対象: 初学者(仮想化、Windowsサーバ、ネットワークをこれから学ぶ方向け)
- 範囲: Proxmox / AD DS / DNS / SMBファイルサーバ / Webサーバ / ドメイン参加クライアント
- 方針: 有料無料の選択肢がある場合は無料を優先
- 目的: 再現性のあるラボを作り、復元訓練・ログ確認・運用練習ができる状態にする
0. 安全方針と前提
0-1. このラボのゴール
- 企業ITの基本構成を再現する
- ドメイン運用の基本を理解する
- 障害/インシデント時に「戻せる」運用を実践する
1. 全体構成(完成イメージ)
1-1. サーバ/端末構成
PVE-01: Proxmox VEホストDC-01: Windows Server(AD DS + DNS)FS-01: Windows Server(ファイルサーバ)WEB-01: Ubuntu + Nginx(無料構成)CL-01: Windows 11(ドメイン参加クライアント)
1-2. ネットワーク例
- 管理:
192.168.10.0/24 - サーバ:
192.168.20.0/24 - クライアント:
192.168.30.0/24
1-3. IP割当サンプル
| ノード | IP | 備考 |
|---|---|---|
| PVE-01 | 192.168.10.10 | Proxmox管理IP |
| DC-01 | 192.168.20.10 | DNSも兼任 |
| FS-01 | 192.168.20.20 | SMB共有 |
| WEB-01 | 192.168.20.30 | Nginx |
| CL-01 | 192.168.30.10 | 検証クライアント |
2. 準備物
2-1. ハードウェア目安
- 最小: 4core / 16GB RAM / 500GB SSD
- 推奨: 8core / 32GB RAM / 1TB SSD
2-2. OSイメージ
- Proxmox VE ISO
- Windows Server 評価版 ISO
- Windows 11 検証用ISO
- Ubuntu Server LTS ISO
2-3. 先に決める設計値
- VMごとのCPU/RAM/ディスク
- 固定IP
- スナップショット名規則(例:
milestone-01-ad-ready)
3. Step 1: Proxmox VE 導入(GUI + CLI)
3-1. Proxmoxインストール(物理ホスト)
- ISOでUSB作成して起動
- インストーラで
Install Proxmox VEを選択 - ディスク選択、タイムゾーン、管理パスワード、管理NICを設定
- インストール完了後に再起動
3-2. Web UIログイン
ブラウザで以下にアクセス。
https://192.168.10.10:8006
- ログイン画面で
- Realm:
Linux PAM standard authentication - User:
root - Password: インストール時に設定したもの
- Realm:
3-3. GUI初期設定(どのボタンを押すか)
- 左ペイン
Datacenterをクリック - 右側
Storageタブでlocal/local-lvmを確認 - 左ペイン
PVE-01をクリック - 上部
Updates→Refresh→Upgradeの順で実行
3-4. CLI初期設定(更新)
Proxmoxシェルで実行:
apt update
apt full-upgrade -y
reboot
確認コマンド:
pveversion -v
想定結果:
pve-managerやproxmox-veのバージョン一覧が表示される- エラーなしで表示されればOK
3-5. Linux Bridge追加(分離ネットワーク)
GUI手順:
PVE-01→System→Network- 右上
Create→Linux Bridge - 以下を入力し
Create- Name:
vmbr1 - IPv4/CIDR: 空欄(L2専用なら)
- Bridge ports: 空欄(内部利用なら)
- Name:
- 同様に
vmbr2も作成 - 右上
Apply Configuration
確認コマンド:
ip -br link | grep vmbr
想定結果:
vmbr0,vmbr1,vmbr2がUPで見える
4. Step 2: VM共通作成手順(GUI)
4-1. ISOアップロード
- 左ペイン
local (PVE-01)をクリック ISO ImagesタブUploadボタンでISOを追加
4-2. VM新規作成
- 右上
Create VM Generalタブ- VM ID: 101(例)
- Name:
DC-01
OSタブ- ISO image: Windows Server ISO
Systemタブ- BIOS:
OVMF(任意)
- BIOS:
Disksタブ- Bus/Device:
VirtIO Block - Disk size: 100GB(DC例)
- Bus/Device:
CPUタブ- Cores: 2(最小)
Memoryタブ- 4096〜8192MB
Networkタブ- Bridge:
vmbr1(サーバセグメント)
- Bridge:
Confirm→Finish
4-3. VM起動とコンソール
- 左ペインで
DC-01 - 上部
Start - 上部
Consoleでインストールを進める
4-4. 初期完了後のチェック
- OSログインができる
- NICが認識される
- 固定IP設定が反映される
5. Step 3: DC-01(AD DS + DNS)
5-1. Windows初期設定(GUI)
Server Managerを開く- 右上
Local Server Computer nameをクリックしてDC-01に変更Ethernetをクリックして固定IPを設定- IP:
192.168.20.10 - Prefix:
24 - GW:
192.168.20.1(必要な場合) - DNS:
192.168.20.10
- IP:
- 再起動
5-2. AD DS + DNS役割追加(GUI)
Server Manager- 右上
Manage→Add Roles and Features Role-based or feature-based installation- 対象サーバ
DC-01を選択 Active Directory Domain Servicesにチェック- 追加確認で
Add Features DNS ServerもチェックInstall
5-3. ドメインコントローラ昇格(GUI)
Server Managerの通知旗アイコンをクリックPromote this server to a domain controllerAdd a new forest- Root domain name:
corp.local - DSRMパスワード設定
Nextを進め、Install- 自動再起動
5-4. PowerShellでの確認コマンド
Get-ADDomain
Get-ADForest
Get-Service DNS
Resolve-DnsName dc-01.corp.local
想定結果:
DNSRoot : corp.localが表示- DNSサービスが
Running Resolve-DnsNameで192.168.20.10が返る
5-5. OU/ユーザ/グループ作成(PowerShell例)
New-ADOrganizationalUnit -Name "Servers" -Path "DC=corp,DC=local"
New-ADOrganizationalUnit -Name "Clients" -Path "DC=corp,DC=local"
New-ADOrganizationalUnit -Name "Users" -Path "DC=corp,DC=local"
New-ADGroup -Name "GG_FS_Sales_RW" -GroupScope Global -GroupCategory Security -Path "OU=Users,DC=corp,DC=local"
New-ADUser -Name "usr-taro" -SamAccountName "usr-taro" -AccountPassword (ConvertTo-SecureString "P@ssw0rd123!" -AsPlainText -Force) -Enabled $true -Path "OU=Users,DC=corp,DC=local"
Add-ADGroupMember -Identity "GG_FS_Sales_RW" -Members "usr-taro"
確認コマンド:
Get-ADOrganizationalUnit -Filter * | Select Name
Get-ADGroup -Identity GG_FS_Sales_RW
Get-ADGroupMember GG_FS_Sales_RW
想定結果:
Servers/Clients/UsersOUが見えるGG_FS_Sales_RWメンバーにusr-taroが表示
6. Step 4: FS-01(ファイルサーバ)
6-1. ドメイン参加(GUI)
Settings→System→AboutRename this PC (advanced)Change...でDomainを選択corp.localを入力- ドメイン管理者資格情報を入力
- 再起動
6-2. 共有フォルダ作成(GUI)
C:\Shares\Salesを作成- フォルダ右クリック
Properties→Sharing Advanced SharingShare this folderをチェック- Share name:
Sales PermissionsでEveryoneを削除GG_FS_Sales_RWを追加しChange/Readを許可
6-3. NTFS権限(GUI)
Properties→Security→EditGG_FS_Sales_RWを追加- 必要権限(Modify)を付与
- 個別ユーザ直接付与は避ける
6-4. PowerShellで共有作成する場合
New-Item -Path "C:\Shares\Sales" -ItemType Directory
New-SmbShare -Name "Sales" -Path "C:\Shares\Sales" -FullAccess "CORP\GG_FS_Sales_RW"
Grant-SmbShareAccess -Name "Sales" -AccountName "CORP\GG_FS_Sales_RW" -AccessRight Change -Force
確認コマンド:
Get-SmbShare -Name Sales
Get-SmbShareAccess -Name Sales
想定結果:
Name : Salesの共有が存在CORP\GG_FS_Sales_RWがChange以上を持つ
6-5. 監査有効化(GUI + コマンド)
Local Security Policyを開くAdvanced Audit Policy ConfigurationObject Access→Audit File SystemをSuccess/Failure有効化- 対象フォルダ
Security→Advanced→Auditingで監査エントリ追加
確認コマンド:
auditpol /get /subcategory:"File System"
Get-WinEvent -LogName Security -MaxEvents 20 | Select TimeCreated,Id,Message
想定結果:
File System監査が有効- アクセス操作後、Securityログに該当イベントが出る
7. Step 5: WEB-01(Ubuntu + Nginx)
7-1. Ubuntu初期設定
sudo apt update
sudo apt upgrade -y
sudo hostnamectl set-hostname WEB-01
固定IP(netplan例) /etc/netplan/00-installer-config.yaml:
network:
version: 2
ethernets:
ens18:
dhcp4: no
addresses:
- 192.168.20.30/24
routes:
- to: default
via: 192.168.20.1
nameservers:
addresses:
- 192.168.20.10
適用:
sudo netplan apply
ip a
想定結果:
ens18に192.168.20.30/24が表示
7-2. Nginx導入
sudo apt install -y nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx --no-pager
想定結果:
active (running)
7-3. テストページ作成
echo '<h1>WEB-01 OK</h1>' | sudo tee /var/www/html/index.html
curl -I http://localhost
想定結果:
HTTP/1.1 200 OK
7-4. ログ確認
sudo tail -n 20 /var/log/nginx/access.log
sudo tail -n 20 /var/log/nginx/error.log
想定結果:
access.logにアクセス記録が増えるerror.logは重大エラーなし
8. Step 6: CL-01(クライアント)
8-1. ドメイン参加
GUI手順(Windows 11):
設定→システム→バージョン情報ドメインまたはワークグループを選択ドメインを選択しcorp.local入力- ドメイン資格情報を入力
- 再起動
8-2. 動作確認コマンド
whoami
systeminfo | findstr /I "Domain"
nslookup dc-01.corp.local
klist
想定結果:
Domain: corp.localnslookupが192.168.20.10を返すklistでKerberosチケットが見える
8-3. SMB/Web確認
Test-Path "\\FS-01\Sales"
Invoke-WebRequest -Uri "http://WEB-01" -UseBasicParsing
想定結果:
Test-PathがTrueStatusCode : 200
9. Step 7: ネットワーク分離と通信ルール
9-1. 最低限の許可通信(例)
- CL-01 → DC-01: 53,88,135,389,445,464,636,3268
- CL-01 → FS-01: 445
- CL-01 → WEB-01: 80/443
- 管理端末 → 各VM: RDP/SSH/WinRMなど必要最小限
9-2. 疎通確認コマンド
クライアント側:
Test-NetConnection DC-01 -Port 53
Test-NetConnection FS-01 -Port 445
Test-NetConnection WEB-01 -Port 80
想定結果:
TcpTestSucceeded : True
Linux側:
nc -zv 192.168.20.10 53
nc -zv 192.168.20.20 445
想定結果:
succeededまたはopen相当が表示
10. Step 8: ログ可視化の下地づくり
10-1. まず揃える3点
- 時刻同期(NTP)
- ログ保存期間
- 収集対象(Security, System, SMB, Nginx)
10-2. Windowsログ確認
Get-WinEvent -LogName Security -MaxEvents 10 | Select TimeCreated,Id,ProviderName
Get-WinEvent -LogName System -MaxEvents 10 | Select TimeCreated,Id,ProviderName
想定結果:
- TimeCreated が現在時刻に近い
- イベントが継続的に出ている
10-3. Linuxログ確認
timedatectl
sudo journalctl -n 30 --no-pager
sudo tail -n 30 /var/log/nginx/access.log
想定結果:
System clock synchronized: yes- ログ時刻が他サーバと大きくズレない
11. Step 9: スナップショットと復元訓練
11-1. Proxmox GUIでスナップショット
- 左ペインでVM選択(例:
DC-01) SnapshotsタブTake Snapshot- Name:
milestone-01-ad-ready Include RAMは必要時のみTake Snapshot
11-2. CLIでスナップショット
qm listsnapshot 101
qm snapshot 101 milestone-01-ad-ready --description "AD configured"
qm listsnapshot 101
想定結果:
- スナップショット一覧に
milestone-01-ad-readyが表示
11-3. 復元手順(CLI)
qm rollback 101 milestone-01-ad-ready
確認:
qm status 101
想定結果:
- VM状態が
runningまたはstopped(設定次第) - ロールバック後にAD疎通が復旧する
12. トラブルシュート(具体コマンド付き)
12-1. ドメイン参加失敗
確認:
ipconfig /all
w32tm /query /status
nslookup corp.local
見るポイント:
- DNSがDCを向いているか
- 時刻ズレが5分以上ないか
- FQDN解決できるか
12-2. 共有アクセス拒否
確認:
whoami /groups
Get-SmbShareAccess -Name Sales
icacls C:\Shares\Sales
見るポイント:
- ユーザが想定グループに所属しているか
- 共有権限とNTFS権限が矛盾していないか
12-3. Web応答なし
確認(WEB-01):
sudo systemctl status nginx --no-pager
ss -lntp | grep ':80'
sudo ufw status
見るポイント:
- Nginxが起動中か
- ポート80待受があるか
- FWで遮断されていないか
13. まとめ
一旦、ここまでで環境構築と基本的な運用確認ができる状態になりました。