rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

Synology DS-216J WebStationでリコーTHETAの全天球写真を観せる

2018-01-04 18:52:00 | DS-216J
RICOH THETAの全天球写真データをJavaScriptを使って操作する事ができる。Synology DS-216Jに「WebStation」パッケージをインストールし、既にLet's Encryptから取得済みのサーバ証明書を使い、SSL(https)専用となるよう設定し、RICOH THETA m-15のデータ操作を試みる。また、http(ポート80)は、Let's Encryptの証明書更新だけで使用し、その他のアクセスは、httpsへリダイレクトする。https(ポート443)は、ユーザ制限(Basic認証)が必要とするよう設定するためLet's Encryptからのアクセスだけ制限無しで対応可能とする。Let's Encryptの更新に備える設定を参考とした。

WebStationのインストール

このパッケージをインストールする


インストール後、DSMのメインメニューからこのアイコンをクリックして起動


状態


全般設定


PHP設定


仮想ホスト設定


DSM(Disk Station Manager)、File Station、Photo Station(PHP7が必要)共にNGINXがhttpエンジンに使われている。Web Stationをインストール前は、http(ポート80)にアクセスするとhttp(ポート5000)にリダイレクトされDSMが表示される。同様にhttps(ポート443)は、https(ポート5001)へリダイレクトされ、Synologyの自己署名サーバ証明書が提示されていた。この状態で、Let's Encryptの証明書を取得設定を行った。Synologyの自己署名サーバ証明書は、Let'sEncryptのサーバ証明書で置き換えとしている。
「Web Station」をインストールすることで、http(ポート80)及びhttps(ポート443)で、新たなドキュメントルートページが追加され、DSMへのリダイレクトが行われなくなった。


NGINX設定変更ファイルの調査
ssh接続でNGINXの設定ファイルの調査を行なって観た。「/etc/nginx」が存在しているが、「/etc.defaults/nginx」「/usr/local/etc/nginx」などもある。リンクなどのファイル構造の確認、どのような手順でnginxが起動されるか、起動シーメンスなどの確認も必要そうだ。
「/etc/rc.d」が無い。どうも「upstart」が使われているようだ。「/etc/init/root-file-system.conf」にstartupマーク。このファイルから起動が始まる。また、init起動設定ファイル(.conf)中で「/usr/syno/sbin/synoservicectl」などSynologyのユーティリティで起動が制御されている。詳細不明だが、最終的に/etc/init/nginx.confでnginxが起動される。使用される設定ファイルは、「/etc/nginx/nginx.conf」。
「/usr/syno/etc/rc.sysv」に「nginx-conf-generator.sh」などがある。このスクリプトでは、「/var/tmp/nginx/nginx.conf」を「/usr/syno/share/nginx/*.mustache」ファイル群から生成している。「/etc/nginx/nginx.conf」との関連は不明。
「/etc/nginx/nginx.conf」に設定を加えても、アップデートなどで再生成され、追加設定がクリアされる。2017年12月18日にアップデータが配信されアップデートした。「/etc/nginx/nginx.conf」に加えてあった設定は、無くなっていた。どこのウェブページで紹介されていたのか忘れてしまったが、セキュリティアップデートでnginx.confが再生成され、設定情報が失われる記述があったような気がする。
DSMとWebStationツールで「/etc/nginx/nginx.conf」がどのように設定されるか確認することにした。

/etc/nginx/nginx.confの内容
「nginx.conf」は、DSMとFileStationが初期状態でインストールされており、PhotoStationとWebStationを追加インストールした状態とで、「events」、「 http」、「 server」セクションで変化しないようだ(PhotoStationインストール前後での確認をしていないが)。各パッケージがインストールされるとinclude先の設定ファイルもインストールされる。includeされるファイルは、存在しなかったり、存在しても内容の無いファイルだったりする。

「httpセクション」でデフォルトサーバのサーバ証明書が定義されている。Let'sEncrypt発行の証明書と置換えを指定すると「fullchain.pem/privkey.pem」のフィアル内容がSynology自己署名証明書と入れ替わる。デフォルトサーバや仮想サーバに設定するサーバ証明書は、DSMのセキュリティ・証明書・構成で選択設定ができる。デフォルトサーバのサービス名は、「システムデフォルト」。

「ds216j.xxxxx(Default certificate)」は、追加機能で生成した。生成した証明書をエクスポートして得られる「syno-ca-cert.pem」をルート証明書としてホームネットワーク内からアクセスするブラウザにインストールすることで、「ds216j.xxxxx」サーバ証明書を有効と認識する。もちろんホームネットワーク内で使用するDNSに「ds216j.xxxxx」のAレコードが登録されている事が必要。
DSMとFileStationは、ホームネトワーク内からアクセス(インターネットからは、一度VPN接続してから接続)とし、ホームネットワーク内CA発行のサーバ証明書を使用することとした。
PhotoStationの機能は、デフォルトサーバ(ポート80/443)に追加されるため、インターネットからアクセスさせるには、サーバ証明書を変更するかPhotoStationを仮想サーバ上で扱うように設定する必要がある。DSMのセキュリティ・証明書・構成からPhotoStationにサーバ証明書を選択設定する事が出来ない(サービス名にPhotoStationが表示されない)。仮想サーバ設定でもPhotoStation機能を加える設定ファイルのincude設定ができない。
PhotoStation機能を任意のサーバ名を持つサーバ上で設定する事を検討する必要がある。

「WebStation」をインストールすると「app.d/.location.webstation.conf」と「app.d/server.webstation.conf」「app.d/server.webstation-vhost.conf」が生成される。server.webstaton.confは、unix socket名「webstation_default.sock」で待受けるサーバが定義されている。http/80ポート及びhttps/443ポートで待ち受けるデフォルトサーバから、それぞれポート5000及びポート5001へリダイレクトされる前にこのソケットポートへproxy passされる。
「app.d/server.webstation-vhost.conf」は、WebStation機能で設定される仮想サーバの情報が設定される。仮想サーバは、http/80ポートとhttps/443ポートを独立して設定する事ができない。ポート番号は、指定設定できる。

最終的な設定(/etc/nginx/nginx.conf)
「WebStation」の仮想サーバ設定を参考にして、「サーバ名 XXX.YYY.netvolante.jp」「http/80ポートとhttps/443ポートのサーバを定義」「サーバ証明書は、Let'sEncryptから得た証明書を使用」「Let'sEncryptの自動更新に対応」「http
/80ポートへの接続は、https/443ポートへリダイレクト」「特定のディレクトリは、Basic認証を設定」「PhotoStationをhttps/443ポートで対応設定」とする。
仮想サーバは、「app.d/server.*.conf」でincludeされるが、同様に、上記設定を「sites-enabled/*」からinclude設定する事とした。「/etc/nginx/sites-enabled」は、「/usr/local/etc/nginx/sites-enabled」へのリンクとなっている。フォルダ内の全てのファイルがincludeで/etc/nginx/nginx.confのhttpセクションに組み込まれる。セキュリティアップデートでこのフォルダ内が保持されるか不明だが、セキュリティアップデートで確認する事とする。

設定したconfファイルがこれ

①は、サーバ証明書の設定。「/usr/local/etc/certificate/VPNCenter/OpenVPN/fullchain.pem」と「privkey.pem」は、DSMのセキュリティ・証明書・構成でサービス名「VPN Server」にLet'sEncrypt発行の証明書を選択し設定するとLet'sEncrypt発行の証明書が組み込まれる。「OpenVPN用の設定」を利用する。
②は、ブラウザがStrict Tranport Securityによりhttps(ssl)接続が強制されるのを防ぐ設定。この設定をしてSTS対応ブラウザがhttps接続に自動切替するのを防ぎ、Let'sEncryptのhttp/80ポート接続の確認を行う。確認後は、STS設定を有効にする。Let'Encrypt関連の設定は、「/usr/syno/share/nginx/LetsEncrypt.mustache」の内容がhttp/ポート80及びhttps/443ポートserverセクションに組み込まれる。⑤が設定内容。
③は、Basic認証の設定で「/tus/」ディレクトリ以下にアクセスすると認証が求められる。
④は、http/80ポートへの接続をLet'sEncrypt関連接続を除きhttps/443ポートへリダイレクトする設定。
https/443ポートの「include conf.d/www.*.conf;」は、PhotoStation関連の設定を組み込む。これで、デフォルトサーバ以外のサーバーでPhotoStationが利用できるようになる。

Basic認証用アカウントファイル(auth_basic_user_file)のディレクトリ
一度認証するとその情報をキャッシュするブラウザがある(多くはキャッシュする-SafariやIEなど)。このようなブラウザで認証ディレクトリの確認を行う場合、認証情報をクリアしてから確認するのが良い。
Basic認証用のアカウントファイルを「tus」として「/etc/nginx」に配置。DS-216J上にapacheをインストールしていないため「htpasswd」の代わりに「sudo echo "ユーザーID:$(openssl passwd -apr1 パスワード)" > /etc/nginx/tus」で認証用アカウントファイルを作成した。DS-216J上のopensslは、「openssl 1.0.2n-fips」。
DS-216Jのnginxは、uid=httpで起動される。confファイルで指定されていない。起動時のオプションかコンパイル時に指定されているのかもしれない。認証用アカウントファイルは、「uid:gid=root:root(ugo=640)」で問題なく利用できる。

Basic認証は、指定するディレクトリ毎に異なるユーザIDから生成された認証用アカウントファイルで利用したいため、アカウントファイルを「/etc/nginx/auth」ディレクトリに纏めて配置し、basic_auth_user_fileで指定するよう設定した。
このような設定を行うと、Basic認証でアカウントファイルが読み取れなくなり認証に失敗する。
nginxサイトのadmin guideを参照すると問題なさそう。。。DS-216J上のnginxの問題か?
認証用アカウントファイルは、「/etc/nginx」に配置利用せざるを得ない。。。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Synology DS-216Jのディレク... | トップ | Panasonic KX-FKN511-A Digit... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

DS-216J」カテゴリの最新記事