DLNAのコンテンツにアクセス制限をする話
今回はDLNAで公開しているコンテンツ、観られたくないモノもありますね。
最大の理想はペアレンタルコントロールが理想ですが
端末に年齢制限設定をしてコンテンツに指定年齢を入れればOKみたいな
コンテンツにそんなタグを付けられたっけ?となってしまうわけです。
だったら、サービスに制限が出来るか?
パスワード認証などがあればいいのですが、サービスにはそんな制限が出来ません。
そうするとどうするか?
プレイヤのサービス一覧に表示されなきゃ再生は出来ない
つまりは、以下の配信サービスを作り、見せたくないコンテンツのサービスにアクセス出来なくする
・見せたいコンテンツを配信するサービス
・見せないコンテンツを配信するサービス
苦肉の策です
先のネタでminidlnaをdockerで生成する方法を書いたとおり、無尽蔵にサービスは作れますので…
制限を掛ける方法はありますが、再生できる端末を決めます。
具体的にはFirewall(iptables)にてで制限します
手順
minidlnaで作成します
設定の項目説明は略!設定項目の例はこちら(下にあります)
ここでのポイントは必ず特権モードを有効にしてください
関連:特権モードがない場合の動作
作成できましたら端末に入ります
関連 : ufwを採用しない理由
iptablesのインストール
bash-5.1# apk add iptables
インストール後の状況確認
bash-5.1# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
視聴できる端末を追加する
端末 : 192.168.1.77
全部拒否して
bash-5.1# iptables -P INPUT DROP
制限許可を追加
bash-5.1# iptables -A INPUT -s 192.168.1.77 -j ACCEPT
bash-5.1# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all — 192.168.1.77 anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
これで、この端末以外はサービスを確認できない状態になります
もっと深くはiptablesの詳細を調べましょう!
枠外
minidlnaの構築設定
docker image : vladgh/minidlna:latest
name : minidlna-movie
env
MINIDLNA_FRIENDLY_NAME : movie
MINIDLNA_MEDIA_DIR : V,/mnt/nfs/
※ メディア種別 A:audio / V:video
networks
host name : minidlna-movie
ネットワークモード : Bridge
IP 192.168.1.207
□ 特権モードでコンテナを実行する。
端末制限(ip)の場合は必ず指定
共有フォルダ
ホストからのボリューム マウントポイント
/movie/movie | /mnt/nfs/movie 読み取り専用 |
特権モードがない場合の動作
この方法では特権モードでの動作が必要です特権モードがない場合の動作を書いておきます。
ufwの場合
とりあえず、インストール
謎だが、ip6tablesも必要なのかな
参考 : https://wiki.alpinelinux.org/wiki/Uncomplicated_Firewall
/ # apk add ip6tables ufw
現状を確認…
/ # ufw status
ERROR: problem running iptables: iptables v1.8.7 (legacy): can’t initialize iptables table `filter’: Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
権限なしで怒られます
iptbalesの場合
インストールして
bash-5.1# apk add iptables
現状を確認…
/ # iptables -L
iptables v1.8.7 (legacy): can’t initialize iptables table `filter’: Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
権限なしで怒られます
ufwを採用しない理由
今回は制限にiptablesを利用しましたが当初はufwを利用予定でした。
でも、使えなかったのでメモしておきます
特権モードでコンテナを作成します。
インストールします
/ # apk add ip6tables ufw
現状を確認します
bash-5.1# ufw status
Status: inactive
FIrewallを有効にします
bash-5.1# ufw enable
ERROR: problem running ufw-init
modprobe: can’t change directory to ‘/lib/modules’: No such file or directory
modprobe: can’t change directory to ‘/lib/modules’: No such file or directory
modprobe: can’t change directory to ‘/lib/modules’: No such file or directory
iptables-restore v1.8.7 (legacy): Couldn’t load match `limit’:No such file or directory
Error occurred at line: 63
Try `iptables-restore -h’ or ‘iptables-restore –help’ for more information.
iptables-restore v1.8.7 (legacy): Couldn’t load match `limit’:No such file or directory
Error occurred at line: 8
Try `iptables-restore -h’ or ‘iptables-restore –help’ for more information.
Problem loading ipv6 (skipping)
Problem running ‘/etc/ufw/before.rules’
Problem running ‘/etc/ufw/user.rules’
エラーになります
なんか、iptablesがなさそうなので追加
bash-5.1# apk add iptables
OK: 132 MiB in 107 packages
FIrewallを有効にします
bash-5.1# ufw enable
ERROR: initcaps
[Errno 2] modprobe: can’t change directory to ‘/lib/modules’: No such file or directory
ip6tables v1.8.7 (legacy): can’t initialize ip6tables table `filter’: Table does not exist (do you need to insmod?)
Perhaps ip6tables or your kernel needs to be upgraded.
とりあえず変わったが、ip6tablesとkernelがミスマッチか;;
ステータスを確認すると
bash-5.1# ufw status
ERROR: problem running ip6tables
ですよねぇ〜
アップグレードして…
bash-5.1# apk upgrade
以下略…ってかミスります。
imageを上げるべきでしょうw
状況を確認すると
/ # uname -a
Linux minidlna-movie 4.14.24-qnap #1 SMP Mon Jul 26 01:49:01 CST 2021 x86_64 Linux
/ # cat /etc/alpine-release
3.14.0
カレントのバージョン…
Current Alpine Version 3.14.1 (Released Aug 05, 2021)
マイナー上がっているね