J4105マシンで遠隔地録画サーバを建てる①

はじめに

前回の記事で、Gemini Lake世代の最新SoCであるCeleron J4105を搭載したミニPCをご紹介しました。
記事中でも触れたとおり、このミニPCは東京にある実家に設置し、在京キー局およびTOKYO MXの番組を録画することを目的として設置しました。

遠隔地録画サーバを設置する

遠隔地録画サーバとは

通常、録画サーバと呼ばれるサーバは自宅内に設置し、自宅で見る番組を録画することが多いと思われます。
一方で、今回設置する録画サーバは自宅のある名古屋から約300km離れた東京都内に設置され、その操作のほぼ全てをリモートで実施することになります。
番組表確認、録画予約、録画確認、録画ファイルの視聴、ダウンロードを全てインターネット越しで実施しなければなりません。

一方で、動画ファイルを無防備にインターネット上からアクセス可能にすることは公衆送信権の侵害として著作権法違反となります
すなわち、個人で利用する用途ではないと見なされてしまいます。

そのため、LAN内で完結する自宅録画サーバとは異なり遠隔地録画サーバは綿密な計画と設計が必要となります。

用意するもの

  • 録画サーバ用のPCと周辺機器
    • 録画用のチューナー機器やカードリーダは通常の録画鯖と同じです
    • 今回はCentOS7.5とPX-S1UD、USB2-ICCRを使います
    • OS自体のセットアップは完了していることとします
      • 一般利用ユーザは辞書型攻撃耐性の高いものを用意してください
  • ポート開放等で外からアクセス可能な回線
    • v6プラスやDS-Lite環境のようなNAPTされる回線はほぼ不可能です
    • i-revoあたりの固定IP回線があるとなおヨシ(500円/月ですし)
  • Google検索力と根気

Linux OSの設定

※この作業は設置前にローカルで実施します
※作業中にSSH設定を変更するので、SSH接続での設定も避けたほうが良いです
※当然ながら以下の内容はサンプルで、私が実際に設定した値とは異なります

カーネルのアップデート

CentOS 7.5のデフォルトカーネルは 3.10.0-862 です。
PX-S1UDチューナーのドライバはカーネル3.15以降でないと含まれていないため、カーネルをアップデートします。
今回は手っ取り早く、現状の最新カーネルである 4.17.14-1 を導入します。
導入は、ELRepoのリポジトリからyum経由で行います。

最新カーネルの導入に関しては以下の2記事が大変分かりやすいのでおすすめです。

SELinuxの無効化

SELinuxは、最近のLinux系OSに搭載されたセキュリティ機能です。
OSファイルの改変を防止する感じの機能なのですが、今回はガッツリと書き換えていきますので無効にします。
$ sudo getenforce
Enforcing    # SELinuxが有効状態
$ sudo vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled    # enforcingをdisabledに変更する
$ sudo shutdown -r now    # 再起動する
$ sudo getenforce    #再起動後に確認
Disabled

SSHポート変更とアクセス制限の設定

Linux系のリモート操作と言えばtelnetかsshですが、今どきはセキュリティ面からもSSHが主流です。
が、SSHはデフォルト設定の22番ポートで待受をすると外部からものすごい攻撃を受けます。
仮に不正ログインの被害に合わなくとも、セキュリティログが汚染される上にPC自体にも負担がかかります。
そこで、SSHのポート番号を変更した上でTCP Wrapperによるホワイトリスト形式のアクセス制御で、許可したアドレス以外からの接続を拒否します。

$ sudo vi /etc/ssh/sshd_config
Port 18782    # ポート番号を変更する。0~1023は予約済みなので避けること。
PermitRootLogin no    # rootアカウントでのログインを拒否する
PasswordAuthentication no    # パスワード認証を拒否する
$ sudo vi /etc/hosts.allow
ALL : 192.168.0.0/255.255.0.0    # LAN内からのアクセスを全て許可する
ALL : .iij4u.or.jp .transix.jp    # 指定したドメインからのアクセスを許可する
$ sudo vi /etc/hosts.deny
ALL : ALL    # 許可したもの以外は全て拒否する

ファイアウォールの設定

CentOS7からはfirewall-cmdを使って簡単にファイアウォール設定ができるようになりました。
とは言え、Ubuntuのufwほどではないですが……。
SSH、Mirakurun、EPGStationが利用するポート以外はすべて閉じておきます。
というのも、先に設定したTCP Wrapperでは制御できないものも多く、そもそもデフォルトでは通信は拒否されているためです。

$ sudo systemctl enable firewalld    # ファイアウォールを自動起動に
$ sudo systemctl start firewalld    # ファイアウォールを有効化
$ sudo firewall-cmd --permanent --add-port=18782/tcp    # SSHのポート
$ sudo firewall-cmd --permanent --add-port=40772/tcp    # Mirakurunのポート
$ sudo firewall-cmd --permanent --add-port=8888/tcp    # EPGStationのポート
$ sudo firewall-cmd --permanent --remove-service=ssh    # デフォルトのSSHポートを閉じる
$ sudo firewall-cmd --reload

公開鍵認証によるSSHログイン設定

先ほど、SSHのパスワード認証を拒否する設定を行いました。
パスワード認証はリスト型攻撃や辞書型攻撃に脆弱なため、鍵暗号方式によるログインが安全でおすすめです。
一般的にはRSA 2048bitの公開鍵暗号が使われますが、これはすでに安全とは言い切れずなおかつパフォーマンスもいまいちです。
そこで、今回はパフォーマンスと安全性がより強力なed25519方式の暗号鍵を使います。
秘密鍵を漏らさない自信がある場合はEnter連打で良いですが、不安な場合はpassphraseに適当なパスフレーズを入れましょう。

$ ssh-keygen -t ed25519
Enter file in which to save the key (/home/*****/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
$ cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys    # 鍵リストに追加する
/home/*****/.ssh フォルダ内の id_ed25519 ファイルがログイン時に使用する秘密鍵ファイルになります。
ログイン時に使用するコンピュータにコピーしておきます。

その他の設定(時刻同期、ネットワークアドレス設定など)

ここまでの設定でセキュリティ面の設定は終了ですが、利便性のためにも追加の設定をします。
録画サーバ的に1秒でもズレると困るのが内部時計ですので、より正確なNTPサーバと同期するようにします。
$ sudo vi /etc/chrony.conf
# server 0.centos.pool.ntp.org iburst    # centos.pool.ntp.org 行を削除する
server ntp1.jst.mfeed.ad.jp iburst    # インターネットマルチフィード社のNTPサーバを指定
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst
また、ネットワークアドレスをDHCPで取得する設定の場合、ルーターの再起動などでIPアドレスが変わってしまう可能性があります。
ルータ側でDHCP設定を変更しても良いですが、OS側でも設定可能です
$ sudo nmcli connection show
NAME    UUID                                  TYPE      DEVICE
enp1s0  88bc6cae-d7e2-4e94-9fe2-cee0878cda72  ethernet  enp1s0
$ sudo nmcli connection modify enp1s0 ipv4.method manual
$ sudo nmcli connection modify enp1s0 ipv4.addresses 192.168.1.200/24
$ sudo nmcli connection modify enp1s0 ipv4.gateway 192.168.1.1
$ sudo nmcli connection modify enp1s0 ipv4.dns 192.168.1.1
$ sudo systemctl restart network

その他、ログローテーションの設定など(/etc/logrotate.conf)を編集するのもアリでしょう。

次の記事では、録画機器のセットアップを行います。
低スペサーバでは厳しいffmpegのビルド等も行います。
CentOS7システム管理ガイドsystemd/NetworkManager/Firewalld徹底攻略
デージーネット
秀和システム
売り上げランキング: 93,243

コメント