# ファイアウォール設定

## ファイアウォール設定 早見表

### MiniPremホスト側

| 項目                                          | 共通               | P2P追加                            | TURN/STUN追加               |
| ------------------------------------------- | ---------------- | -------------------------------- | ------------------------- |
| SSH                                         | ✅ TCP 22         | -                                | -                         |
| デジタルヒューマン プラットフォーム、Azure TTS / ElevenLabsなど | ✅ TCP 443 OUT    | -                                | -                         |
| DNS                                         | ✅ UDP/TCP 53 OUT | -                                | -                         |
| HTTP/HTTPS                                  | ✅ TCP 80/443 OUT | -                                | -                         |
| P2P接続                                       | -                | ✅ UDP 49152-65535 IN from 表示端末IP | -                         |
| STUN/TURN                                   | -                | -                                | ✅ UDP 3478 OUT/IN         |
| TURN TLS                                    | -                | -                                | ⚠️ TCP 5349 OUT           |
| WebRTC（TURN）                                | -                | -                                | ⚠️ UDP 49152-65535 OUT/IN |

### 表示端末側

| 項目                 | 共通               | P2P追加                            | TURN/STUN追加            |
| ------------------ | ---------------- | -------------------------------- | ---------------------- |
| デジタルヒューマン プラットフォーム | ✅ TCP 443 OUT    | -                                | -                      |
| DNS                | ✅ UDP/TCP 53 OUT | -                                | -                      |
| HTTP/HTTPS         | ✅ TCP 80/443 OUT | -                                | -                      |
| P2P接続              | -                | ✅ UDP 49152-65535 OUT（通常は既に許可済み） | -                      |
| STUN/TURN          | -                | -                                | ✅ UDP 3478 OUT         |
| TURN TLS           | -                | -                                | ⚠️ TCP 5349 OUT        |
| WebRTC（TURN）       | -                | -                                | ⚠️ UDP 49152-65535 OUT |

***

## 1. 共通設定（基本インフラ）

**すべての構成で必要な基本設定**

### **1.1 MiniPremホスト側（Rennyサーバー）**

| プロトコル   | ポート     | 方向  | 宛先/送信元                                                                                        | 用途                                               | 優先度    |
| ------- | ------- | --- | --------------------------------------------------------------------------------------------- | ------------------------------------------------ | ------ |
| **TCP** | **22**  | IN  | 管理端末IP                                                                                        | SSH管理アクセス                                        | **必須** |
| **TCP** | **443** | OUT | <p><em>.uneeq.io</em><br>\*\*.digitalhumans.ne.jp<br>\*.hosted-experience.jp</p>              | <p>デジタルヒューマン プラットフォームシグナリング<br>WebSocket接続確立</p> | **必須** |
| **TCP** | **443** | OUT | <p>japaneast.tts.speech.microsoft.com<br>\*.tts.speech.microsoft.com<br>api.elevenlabs.io</p> | Azure TTS や ElevenLabs などの音声合成を使用する場             | **必須** |
| **UDP** | **53**  | OUT | DNSサーバー                                                                                       | DNS名前解決                                          | **必須** |
| **TCP** | **53**  | OUT | DNSサーバー                                                                                       | DNS名前解決（TCP fallback）                            | **必須** |
| **TCP** | **80**  | OUT | Anywhere                                                                                      | HTTP（パッケージ更新など）                                  | 推奨     |
| **TCP** | **443** | OUT | Anywhere                                                                                      | HTTPS（汎用）                                        | 推奨     |

**UFW設定例（共通部分）**

```bash
#!/bin/bash
# 共通設定（すべての構成で必須）

# SSH（管理端末からのみ許可を推奨）
sudo ufw allow 22/tcp comment 'SSH management'
# または特定IPからのみ: sudo ufw allow from <管理端末IP> to any port 22 proto tcp

# デジタルヒューマン プラットフォーム（WebSocketシグナリング）
sudo ufw allow out 443/tcp comment 'デジタルヒューマン プラットフォーム + Azure TTS'

# DNS
sudo ufw allow out 53/udp comment 'DNS query'
sudo ufw allow out 53/tcp comment 'DNS query TCP'

# HTTP/HTTPS（汎用）
sudo ufw allow out 80/tcp comment 'HTTP'
# 443は既に設定済み

# デフォルトポリシー（推奨）
sudo ufw default deny incoming
sudo ufw default allow outgoing
```

### **1.2 表示端末側（クライアント）**

| プロトコル   | ポート     | 方向  | 宛先/送信元                                                                                                                         | 用途                                                          | 優先度    |
| ------- | ------- | --- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------- | ------ |
| **TCP** | **443** | OUT | <p><em>.uneeq.io</em><br><strong>.digitalhumans.ne.jp</strong><br><em>.digitalhumans-demo.jp</em><br>.hosted-experience.jp</p> | <p>デジタルヒューマン プラットフォームシグナリング<br>WebSocket接続確立<br>静的コンテンツ</p> | **必須** |
| **UDP** | **53**  | OUT | DNSサーバー                                                                                                                        | DNS名前解決                                                     | **必須** |
| **TCP** | **53**  | OUT | DNSサーバー                                                                                                                        | DNS名前解決（TCP fallback）                                       | **必須** |
| **TCP** | **80**  | OUT | Anywhere                                                                                                                       | HTTP                                                        | 推奨     |
| **TCP** | **443** | OUT | Anywhere                                                                                                                       | HTTPS                                                       | 推奨     |

**UFW設定例（共通部分）**

表示端末がWindowsやmacOSなどの場合は読み替えて設定してください。

```bash
#!/bin/bash
# 共通設定（表示端末側）

# デジタルヒューマン プラットフォーム（WebSocketシグナリング）
sudo ufw allow out 443/tcp comment 'デジタルヒューマン プラットフォーム'

# DNS
sudo ufw allow out 53/udp comment 'DNS query'
sudo ufw allow out 53/tcp comment 'DNS query TCP'

# HTTP/HTTPS（汎用）
sudo ufw allow out 80/tcp comment 'HTTP'
sudo ufw allow out 443/tcp comment 'HTTPS'

# デフォルトポリシー（推奨）
sudo ufw default deny incoming
sudo ufw default allow outgoin2. P2P接続時の追加設定
```

***

## 2. **同一ネットワーク内または直接接続（P2P）可能な環境**

### 2.1 MiniPremホスト側（Rennyサーバー）

**必須ポート**

| プロトコル   | ポート             | 方向 | 送信元    | 用途                               | 優先度    |
| ------- | --------------- | -- | ------ | -------------------------------- | ------ |
| **UDP** | **49152-65535** | IN | 表示端末IP | WebRTC P2Pメディアストリーム音声・映像・データチャネル | **必須** |

**実際の動作**

```
表示端末                                    MiniPremホスト
UDP 53872（動的割り当て） ←―直接接続/P2P―→ UDP 49152（動的割り当て）
                                          ↑この範囲への接続許可が必須
                                          
直接接続/P2P接続が出来るのは、MiniPremと表示端末が、同一端末であること、あるいは同じネットワーク（間にNATやVLAN等で区切られておらず、互いにプライベートIPアドレスで直接通信できるネットワーク）である事が条件です。
```

**UFW設定例（P2P追加分）**

```bash
#!/bin/bash
# P2P接続時の追加設定（MiniPremホスト側）

# 表示端末のIPアドレスを設定
CLIENT_IP="192.168.200.100"  # ← 実際の表示端末IPに変更

# 方法1: 表示端末からのすべての通信を許可（推奨・最もシンプル）
sudo ufw allow from ${CLIENT_IP} comment "P2P from client ${CLIENT_IP}"

# 方法2: 高位動的ポート範囲のみ許可（より厳格）
# sudo ufw allow from ${CLIENT_IP} to any port 49152:65535 proto udp comment "P2P WebRTC from client"

# IPv6の場合も同様に設定（必要に応じて）
# CLIENT_IPV6="fddf:6257:ea18:94b5:86ef:4cce:1dbf:2cee"  # ← 実際のIPv6に変更
# sudo ufw allow from ${CLIENT_IPV6} comment "P2P from client IPv6"

sudo ufw reload
```

**注意事項**

* ✅ **STUN/TURN（UDP 3478, TCP 5349）ならびに** **UDP 22000-23000は不要**（TURNサーバー側のポート）**は不要**
* ✅ 表示端末のIPアドレスを正確に指定すること
* ✅ IPv6使用時はIPv6アドレスも許可すること

### 2.2 表示端末側（クライアント）

**必須ポート**

| プロトコル   | ポート             | 方向  | 宛先            | 用途                  | 優先度 |
| ------- | --------------- | --- | ------------- | ------------------- | --- |
| **UDP** | **49152-65535** | OUT | MiniPremホストIP | WebRTC P2Pメディアストリーム | 必須  |

**UFW設定例（P2P追加分）**

表示端末がWindowsやmacOSなどの場合は読み替えて設定してください。

```bash
#!/bin/bash
# P2P接続時の追加設定（表示端末側）

# 通常、Outboundはデフォルトで許可されているため、追加設定不要
# ただし、デフォルトポリシーがDENYの場合は以下を追加：

# MiniPremホストのIPアドレスを設定
SERVER_IP="192.168.200.200"  # ← 実際のMiniPremホストIPに変更

# MiniPremホストへのUDP通信を許可
sudo ufw allow out to ${SERVER_IP} proto udp comment "P2P to MiniPrem"

# IPv6の場合も同様
# SERVER_IPV6="fddf:6257:ea18:94b5:4ce:b204:305f:a541"  # ← 実際のIPv6に変更
# sudo ufw allow out to ${SERVER_IPV6} proto udp comment "P2P to MiniPrem IPv6"

sudo ufw reload
```

**注意事項**

* ✅ ほとんどの環境でOutboundはデフォルト許可のため、追加設定不要
* ✅ 接続元のため**Inbound開放は不要**
* ✅ **STUN/TURN（UDP 3478, TCP 5349）は不要**

***

## 3. TURN/STUN使用時の追加設定

**異なるネットワーク間またはNAT越え接続が必要な環境**

### 3.1 MiniPremホスト側（Rennyサーバー）

**必須ポート**

| プロトコル   | ポート             | 方向  | 宛先/送信元                                      | 用途                             | 優先度    |
| ------- | --------------- | --- | ------------------------------------------- | ------------------------------ | ------ |
| **UDP** | **3478**        | OUT | <p>\*.turn.uneeq.io<br>turn.us.uneeq.io</p> | STUN/TURNNAT Traversal、ICE候補収集 | **必須** |
| **UDP** | **3478**        | IN  | <p>\*.turn.uneeq.io<br>turn.us.uneeq.io</p> | STUN/TURN応答                    | **必須** |
| **TCP** | **5349**        | OUT | <p>\*.turn.uneeq.io<br>turn.us.uneeq.io</p> | TURN over TLSセキュアなフォールバック      | 推奨     |
| **UDP** | **49152-65535** | OUT | \*.turn.uneeq.io                            | WebRTCメディア（TURN経由）             | **必須** |
| **UDP** | **49152-65535** | IN  | \*.turn.uneeq.io                            | WebRTCメディア受信（TURN経由）           | **必須** |

**実際の動作（TURN経由）**

```
MiniPremホスト              TURNサーバー                表示端末
UDP 49152-65535   ←―→   UDP 22000-23000   ←―→   UDP 49152-65535
   (動的)                   (TURN側)                 (動的)
    │                         │                       │
    └─ UDP 3478でSTUN/TURN接続確立 ─────────────────────┘
インダイレクト / 間接接続が必要なのは、MiniPremと表示端末が別のネットワークに属しており、NAT越えを行うって通信する場合に使用します。通常のサービスにおける通信方式はこちらです。
```

**UFW設定例（TURN/STUN追加分）**

```bash
#!/bin/bash
# TURN/STUN使用時の追加設定（MiniPremホスト側）

# STUN/TURN（最重要）
sudo ufw allow out 3478/udp comment 'STUN/TURN - NAT Traversal'
sudo ufw allow in 3478/udp comment 'STUN/TURN response'

# TURN over TLS（フォールバック）
sudo ufw allow out 5349/tcp comment 'TURN over TLS'

# WebRTCメディア（TURN経由）
# 注意: すべてのIPから許可するとセキュリティリスクがあります
# 可能であれば、TURNサーバーのIPアドレスを指定してください
sudo ufw allow out 49152:65535/udp comment 'WebRTC media via TURN (out)'
sudo ufw allow in 49152:65535/udp comment 'WebRTC media via TURN (in)'

sudo ufw reload
```

**注意事項**

* ✅ **UDP 22000-23000は開放不要**（TURNサーバー側のポート）
* ✅ P2P接続が優先され、TURN/STUNはフォールバックとして使用される

### 3.2 表示端末側（クライアント）

**必須ポート**

| プロトコル   | ポート             | 方向  | 宛先                                          | 用途                     | 優先度    |
| ------- | --------------- | --- | ------------------------------------------- | ---------------------- | ------ |
| **UDP** | **3478**        | OUT | <p>\*.turn.uneeq.io<br>turn.us.uneeq.io</p> | STUN/TURNNAT Traversal | **必須** |
| **TCP** | **5349**        | OUT | <p>\*.turn.uneeq.io<br>turn.us.uneeq.io</p> | TURN over TLS          | 推奨     |
| **UDP** | **49152-65535** | OUT | \*.turn.uneeq.io                            | WebRTCメディア（TURN経由）     | **必須** |

**UFW設定例（TURN/STUN追加分）**

表示端末がWindowsやmacOSなどの場合は読み替えて設定してください。

```bash
#!/bin/bash
# TURN/STUN使用時の追加設定（表示端末側）

# 通常、Outboundはデフォルトで許可されているため、追加設定不要の場合が多い
# ただし、厳格なファイアウォールの場合は以下を追加：

# STUN/TURN
sudo ufw allow out 3478/udp comment 'STUN/TURN'

# TURN over TLS（フォールバック）
sudo ufw allow out 5349/tcp comment 'TURN over TLS'

# WebRTCメディア（TURN経由）
sudo ufw allow out 49152:65535/udp comment 'WebRTC media via TURN'

sudo ufw reload
```

**注意事項**

* ✅ ほとんどの環境でOutboundはデフォルト許可のため、追加設定不要
* ✅ Inbound開放は不要（接続元のため）
* ✅ TURNサーバーへの接続が必要なため、STUN/TURNポートは必須

***

## 4. 設定スクリプト

### 4.1 完全な設定スクリプト（P2P接続）

**MiniPremホスト側**

```bash
#!/bin/bash
# MiniPrem P2P接続 - 完全なファイアウォール設定

set -e

# 設定値
CLIENT_IP="192.168.200.100"  # ← 表示端末のIPに変更
ADMIN_IP="192.168.200.10"   # ← 管理端末のIPに変更（SSH用）

echo "MiniPrem P2P接続 - ファイアウォール設定開始"

# 既存ルールのバックアップ
sudo ufw status numbered > /root/ufw_backup_$(date +%Y%m%d_%H%M%S).txt

# デフォルトポリシー
sudo ufw default deny incoming
sudo ufw default allow outgoing

# === 共通設定 ===

# SSH（管理端末からのみ）
sudo ufw allow from ${ADMIN_IP} to any port 22 proto tcp comment 'SSH from admin'

# デジタルヒューマン プラットフォーム + Azure TTS（TCP 443）
sudo ufw allow out 443/tcp comment 'デジタルヒューマン プラットフォーム + Azure TTS'

# DNS
sudo ufw allow out 53/udp comment 'DNS query'
sudo ufw allow out 53/tcp comment 'DNS query TCP'

# HTTP（オプション）
sudo ufw allow out 80/tcp comment 'HTTP'

# === P2P接続用設定 ===

# 表示端末からのP2P接続を許可
sudo ufw allow from ${CLIENT_IP} comment "P2P from client ${CLIENT_IP}"

# 設定を反映
sudo ufw reload

# 状態確認
echo ""
echo "========================================="
echo "設定完了 - 現在の状態:"
echo "========================================="
sudo ufw status numbered

echo ""
echo "✅ P2P接続用のファイアウォール設定が完了しました"
```

**表示端末側**

表示端末がWindowsやmacOSなどの場合は読み替えて設定してください。

```bash
#!/bin/bash
# 表示端末 P2P接続 - 完全なファイアウォール設定

set -e

echo "表示端末 P2P接続 - ファイアウォール設定開始"

# 既存ルールのバックアップ
sudo ufw status numbered > /root/ufw_backup_$(date +%Y%m%d_%H%M%S).txt

# デフォルトポリシー
sudo ufw default deny incoming
sudo ufw default allow outgoing

# === 共通設定 ===

# デジタルヒューマン プラットフォーム（TCP 443）
sudo ufw allow out 443/tcp comment 'デジタルヒューマン プラットフォーム'

# DNS
sudo ufw allow out 53/udp comment 'DNS query'
sudo ufw allow out 53/tcp comment 'DNS query TCP'

# HTTP/HTTPS
sudo ufw allow out 80/tcp comment 'HTTP'

# === P2P接続用設定 ===
# 通常、Outboundはデフォルトで許可されているため、追加設定不要

# 設定を反映
sudo ufw reload

# 状態確認
echo ""
echo "========================================="
echo "設定完了 - 現在の状態:"
echo "========================================="
sudo ufw status numbered

echo ""
echo "✅ P2P接続用のファイアウォール設定が完了しました"
```

### 4.2 完全な設定スクリプト（TURN/STUN使用）

**MiniPremホスト側**

```bash
#!/bin/bash
# MiniPrem TURN/STUN使用 - 完全なファイアウォール設定

set -e

# 設定値
ADMIN_IP="192.168.200.10"   # ← 管理端末のIPに変更（SSH用）
# TURN_SERVER_IP="203.0.113.10"  # ← TURNサーバーIPが分かる場合は設定

echo "MiniPrem TURN/STUN使用 - ファイアウォール設定開始"

# 既存ルールのバックアップ
sudo ufw status numbered > /root/ufw_backup_$(date +%Y%m%d_%H%M%S).txt

# デフォルトポリシー
sudo ufw default deny incoming
sudo ufw default allow outgoing

# IPv6サポート
sudo sed -i 's/IPV6=no/IPV6=yes/' /etc/default/ufw

# === 共通設定 ===

# SSH（管理端末からのみ）
sudo ufw allow from ${ADMIN_IP} to any port 22 proto tcp comment 'SSH from admin'

# デジタルヒューマン プラットフォーム + Azure TTS（TCP 443）
sudo ufw allow out 443/tcp comment 'デジタルヒューマン プラットフォーム + Azure TTS'

# DNS
sudo ufw allow out 53/udp comment 'DNS query'
sudo ufw allow out 53/tcp comment 'DNS query TCP'

# HTTP（オプション）
sudo ufw allow out 80/tcp comment 'HTTP'

# === TURN/STUN使用時の設定 ===

# STUN/TURN
sudo ufw allow out 3478/udp comment 'STUN/TURN'
sudo ufw allow in 3478/udp comment 'STUN/TURN response'

# TURN over TLS
sudo ufw allow out 5349/tcp comment 'TURN over TLS'

# WebRTCメディア（TURN経由）
# 注意: セキュリティリスクがあるため、可能であればTURNサーバーIPを指定
if [ -n "${TURN_SERVER_IP}" ]; then
    # TURNサーバーIPが設定されている場合
    sudo ufw allow from ${TURN_SERVER_IP} to any port 49152:65535 proto udp comment 'WebRTC from TURN'
    sudo ufw allow out to ${TURN_SERVER_IP} port 49152:65535 proto udp comment 'WebRTC to TURN'
else
    # TURNサーバーIPが不明な場合（すべて許可）
    sudo ufw allow out 49152:65535/udp comment 'WebRTC media via TURN (out)'
    sudo ufw allow in 49152:65535/udp comment 'WebRTC media via TURN (in)'
    echo "⚠️  警告: UDP 49152-65535をすべてのIPから許可しています"
fi

# 設定を反映
sudo ufw reload

# 状態確認
echo ""
echo "========================================="
echo "設定完了 - 現在の状態:"
echo "========================================="
sudo ufw status numbered

echo ""
echo "✅ TURN/STUN使用時のファイアウォール設定が完了しました"
```

**表示端末側**

表示端末がWindowsやmacOSなどの場合は読み替えて設定してください。

```bash
#!/bin/bash
# 表示端末 TURN/STUN使用 - 完全なファイアウォール設定

set -e

echo "表示端末 TURN/STUN使用 - ファイアウォール設定開始"

# 既存ルールのバックアップ
sudo ufw status numbered > /root/ufw_backup_$(date +%Y%m%d_%H%M%S).txt

# デフォルトポリシー
sudo ufw default deny incoming
sudo ufw default allow outgoing

# IPv6サポート
# sudo sed -i 's/IPV6=no/IPV6=yes/' /etc/default/ufw

# === 共通設定 ===

# デジタルヒューマン プラットフォーム（TCP 443）
sudo ufw allow out 443/tcp comment 'デジタルヒューマン プラットフォーム'

# DNS
sudo ufw allow out 53/udp comment 'DNS query'
sudo ufw allow out 53/tcp comment 'DNS query TCP'

# HTTP/HTTPS
sudo ufw allow out 80/tcp comment 'HTTP'

# === TURN/STUN使用時の設定 ===

# STUN/TURN
sudo ufw allow out 3478/udp comment 'STUN/TURN'

# TURN over TLS
sudo ufw allow out 5349/tcp comment 'TURN over TLS'

# WebRTCメディア（TURN経由）
sudo ufw allow out 49152:65535/udp comment 'WebRTC media via TURN'

# 設定を反映
sudo ufw reload

# 状態確認
echo ""
echo "========================================="
echo "設定完了 - 現在の状態:"
echo "========================================="
sudo ufw status numbered

echo ""
echo "✅ TURN/STUN使用時のファイアウォール設定が完了しました"
```

***

## 5. 検証方法

### **5.1 設定確認**

```bash
# UFW状態確認
sudo ufw status numbered

# 特定ポートの確認
sudo ufw status numbered | grep -E "(3478|5349|49152|443)"

# ログ確認
sudo tail -f /var/log/ufw.log
```

### **5.2 接続テスト**

**P2P接続の確認**

```bash
# 表示端末からMiniPremホストへのUDP接続テスト
nc -u -v -z <MiniPremホストIP> 49152

# MiniPremホストで待ち受け確認
ss -unap | grep -E "49[0-9]{3}|5[0-9]{4}|6[0-5]{4}"
```

**TURN/STUN接続の確認**

```bash
# STUNサーバーへの接続テスト
nc -u -v -z turn.uneeq.io 3478

# TURNサーバーへの接続テスト（TCP）
nc -v -z turn.uneeq.io 5349
```

### 5.4 chrome://webrtc-internals/での確認

ブラウザで デジタルヒューマンを表示した状態で`chrome://webrtc-internals/` を開いて確認:

```jsx
// P2P接続の場合
"googLocalCandidateType": "host"
"googRemoteCandidateType": "host"
"iceConnectionState": "connected"

// TURN経由の場合
"googLocalCandidateType": "relay"
"googRemoteCandidateType": "relay"
"iceConnectionState": "connected"

// 使用ポート確認
"googLocalAddress": "192.168.200.200:49152"
"googRemoteAddress": "192.168.200.100:53872"
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digitalhumans.jp/dev/miniprem/miniprem-firewall.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
