- 🗒️server.yml - サーバー設定
- 🗒️tuners.yml - チューナー設定
- 🗒️channels.yml - チャンネル設定
- Mirakurun は LAN 内専用サーバーです。
- デフォルト設定でアクセス元をプライベート IP のみに制限しています。
- 任意のホスト名・ドメイン上のページからのアクセスを禁止しています。 → DNS Rebinding / CSRF 攻撃対策
hostname
: Web UI にアクセスするためのホスト名を設定してください。allowOrigins
: 必要に応じて、許可するホスト名・ドメインを明示的に設定してください。
- 複数の手法を組み合わせて攻撃のリスクを緩和しています。
- 無暗に全てのドメインから API アクセスできるようにしたり、リバースプロキシの下に置かないでください。下記のような攻撃に対して脆弱になります。
- 認証済みの BASIC 認証やセッション情報などを流用して攻撃する手法が存在します。
- 最近はブラウザ自体もある程度保護していますが、過信しないでください。
- リバースプロキシで HTTPS 化した場合、ブラウザ自体と Mirakurun の保護機能をいくつかバイパスする可能性があり、逆に危険度が増します。 → 保護されたコンテキスト
- 代わりに VPN や SSH トンネル、トンネルサービスを活用してください。
- 一部のトンネルサービスは
allowIPv4CidrRanges
の設定が必要です。第三者がアクセスできないように注意して設定してください。
- 一部のトンネルサービスは
DNS Rebinding 攻撃: 攻撃者が管理するドメインで最初に正規サイトを返し、TTL期限後に攻撃者のサーバーを指すように変更する攻撃。これによりブラウザの同一オリジンポリシーを迂回し、ブラウザ経由で LAN 内のサーバーに不正アクセスする攻撃。
XSS/CSRF 攻撃: 攻撃者が悪意のあるコードをウェブサイトに埋め込み、ブラウザ経由で LAN 内のサーバーに不正アクセスする攻撃。
- 攻撃例:
- チューナーコマンド等を利用して任意のコードを実行
- サーバーに不正なコードを仕込み、botnet 化
- 上記はあくまで攻撃の一例です。ブラウザやミドルウェアの脆弱性等により、日々様々な攻撃手法が考えられています。
- 近年増加傾向の Web ベースのアプリでは、ブラウザと同様の攻撃が可能な場合があります。注意しましょう。
📛 Web UI 設定一部対応
- 環境変数:
SERVER_CONFIG_PATH
- Docker ホスト (デフォルト):
/opt/mirakurun/config/server.yml
- Linux (レガシー):
/usr/local/etc/mirakurun/server.yml
プロパティ (🗒️server.yml) | 環境変数 (🐋Docker) | タイプ | デフォルト | 説明 |
---|---|---|---|---|
logLevel |
LOG_LEVEL |
Integer | 2 |
ログレベル (-1 : FATAL から 3 : DEBUG) |
maxLogHistory |
MAX_LOG_HISTORY |
Integer | 1000 |
ログの最大保持行数 |
path |
- | String, null | 🗒️/var/run/mirakurun.sock |
Unix Socket Path ※Docker ではデフォルトパスに固定 |
port |
- | Integer, null | 40772 |
サーバーポート ※Docker ではコンテナ側 40772 固定 |
hostname |
HOSTNAME |
String | localhost |
ホスト名 |
disableIPv6 |
- | Boolean | false |
IPv6の無効化 ※Docker では常に無効 |
jobMaxRunning |
JOB_MAX_RUNNING |
Integer | 論理コア数 / 2, 最低 1, 最大 100 | 同時実行できる最大ジョブ数 |
jobMaxStandby |
JOB_MAX_STANDBY |
Integer | 論理コア数 - 1, 最低 1, 最大 100 | 同時実行できる最大ジョブ準備数 |
maxBufferBytesBeforeReady |
MAX_BUFFER_BYTES_BEFORE_READY |
Integer | 8388608 |
準備完了前の最大バッファサイズ (バイト) ※番組開始の頭が欠ける場合は増やす |
eventEndTimeout |
EVENT_END_TIMEOUT |
Integer | 1000 |
イベント終了タイムアウト (ミリ秒) ※番組終了が誤判定される場合は長くする |
programGCJobSchedule |
PROGRAM_GC_JOB_SCHEDULE |
String | 45 * * * * |
番組一覧の GC スケジュール (cron 風形式) |
epgGatheringJobSchedule |
EPG_GATHERING_JOB_SCHEDULE |
String | 20,50 * * * * |
EPG 収集スケジュール (cron 風形式) |
epgRetrievalTime |
EPG_RETRIEVAL_TIME |
Integer | 600000 |
EPG 取得時間 (ミリ秒) |
logoDataInterval |
LOGO_DATA_INTERVAL |
Integer | 604800000 |
ロゴデータ更新間隔 (ミリ秒) |
disableEITParsing |
DISABLE_EIT_PARSING |
Boolean | false |
|
disableWebUI |
DISABLE_WEB_UI |
Boolean | false |
|
allowIPv4CidrRanges |
ALLOW_IPV4_CIDR_RANGES |
String[] | ["10.0.0.0/8", "127.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"] |
|
allowIPv6CidrRanges |
ALLOW_IPV6_CIDR_RANGES |
String[] | ["fc00::/7"] |
|
allowOrigins |
ALLOW_ORIGINS |
String[] | ["https://mirakurun-secure-contexts-api.pages.dev"] |
|
allowPNA |
ALLOW_PNA |
Boolean | true |
🧪PNA/LNA 許可設定 (実験中) |
tsplayEndpoint |
TSPLAY_ENDPOINT |
String | https://mirakurun-secure-contexts-api.pages.dev/tsplay/ |
🧪TSPlay エンドポイント (実験中) |
💯 Web UI 設定完全対応
- 環境変数:
TUNERS_CONFIG_PATH
- Docker ホスト (デフォルト):
/opt/mirakurun/config/tuners.yml
- Linux (レガシー):
/usr/local/etc/mirakurun/tuners.yml
# 配列
- name: チューナー識別名 # String
types: # (GR|BS|CS|SKY)[]
- GR
- BS
- CS
- SKY
# chardev/dvb用
# "<template>"は`commandVars[template]`または"(空)"に置き換えられます *@4.0.0~
command: cmd <channel> --arg1 --arg2 <exampleArg1> <exampleArg2>... # String
# dvb用
dvbDevicePath: /dev/dvb/adapter/dvr/path # String
# リモートMirakurunとの多重化用
remoteMirakurunHost: 192.168.x.x # String
remoteMirakurunPort: 40772 # Integer
remoteMirakurunDecoder: false # Boolean
# 以下はオプション
decoder: cmd # String
isDisabled: false # Boolean
必要に応じてCAS処理コマンドを指定します。
# 参考: MPEG-2 TS の流れ
+-------------+ +----------+ +---------+ +--------+
| TunerDevice | -> | TSFilter | -> | decoder | -> | (user) |
+-------------+ +----------+ +---------+ +--------+
RAW STRIPPED DESCRAMBLED
# これは実装例です。テスト用のみ。
sudo npm install arib-b25-stream-test -g --unsafe-perm
💯 Web UI 設定完全対応
- 環境変数:
CHANNELS_CONFIG_PATH
- Docker ホスト (デフォルト):
/opt/mirakurun/config/channels.yml
- Linux (レガシー):
/usr/local/etc/mirakurun/channels.yml
# 配列
- name: チャンネル識別名 # String
type: GR # 列挙型 [GR|BS|CS|SKY]
channel: '0' # String
# 以下はオプション
serviceId: 1234 # Integer - 指定しない場合、サービスは自動的にスキャンされます。
tsmfRelTs: 1 # 数値: 1~15
commandVars: # オプションのコマンド変数 *@4.0.0~
satellite: EXAMPLE-SAT4A
space: 0
freq: 12345
polarity: H
exampleArg1: -arg0 -arg1=example
exampleArg2: -arg2 "引用符を使用して空白を含むことができます"
isDisabled: false # Boolean