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)

マイナー上がっているね