calibreとは(wikipedia参照)である。
calibre-server自身にも起動時の --username オプションと --password オプションによるBasic認証は有しているのですが、私のDebian 8.3(jessie)環境なぜか 正しいユーザ名とパスワードを入力すると HTTP error 500 (Internal Server Error)になってしまいました。間違ったパスワードを入力するとしっかり弾かれるので、全く機能していないわけではなさそうです。
私の秘密のライブラリをセキュリティなしに世界に向けて発信するわけにもいかないので、apacheと組み合わせてなんとかパスワードをかけた顛末です。
やったこと
- https://MyServer/配下のコンテンツはapacheによりBasic認証を必要とさせる
- apacheが https://MyServer/calibre/ に来たアクセスを http://localhost:8765/に転送し、クライアントとcalibre-server間のproxyになる
- calibre-serverをport=8765で起動する
- http://MyServer:8765/で直接外部からアクセスできないようにする
apacheのBasic認証
あちらこちらのblogやVPS構築指南に書かれている通り。ここではとりあえす省略。.htaccess と .htpasswd を使った標準的なものです。
apacheのReverse Proxy設定
apacheのReverse Proxyモジュールを有効にする。# a2enmod proxy # a2enmod proxy_http # a2enmod rewrite # ls -l /etc/apache2/mods-enabled/ | grep proxy lrwxrwxrwx 1 root root 28 Feb 13 19:58 proxy.conf -> ../mods-available/proxy.conf lrwxrwxrwx 1 root root 33 Feb 13 19:58 proxy_http.load -> ../mods-available/proxy_http.load lrwxrwxrwx 1 root root 28 Feb 13 19:58 proxy.load -> ../mods-available/proxy.load
virtual hostの設定ファイルに以下を追加。
<Location /calibre> AuthUserFile /var/www/.htpasswd AuthName "Enter Password" AuthType Basic Require user USERNAME </Location> RewriteEngine on RewriteRule ^/calibre/(.*) http://localhost:8765/calibre/$1 [proxy] RewriteRule ^/calibre http://localhost:8765 [proxy] SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1
apacheを再起動して設定を反映。
# /etc/init.d/apache2 restart
Proxyを使用する場合は Directory ディレクティブではなく、Location ディレクティブ を使用する必要があります。
また、指定した "/calibre" は calibre-serverの --url-prefixオプションと同じにしておかなければいけません。
calibre-server起動
実際にはスクリプトを書いてstop/start/restartさせていますが、startの部分だけを抜き出すとこんな感じになります。(複数行に見えても実際は1行で入力します)/usr/bin/calibre-server --url-prefix /calibre --port=8765 --with-library=/home/user/calibre/calibre_library/ --daemonize
直接アクセスの禁止
apache(ssl)は443番ポート、calibre-serverは8765番ポートでそれぞれ待ち受けているので、http://MyServer:8765/ で直接アクセスされてしまうと認証なしにcalibre-serverに接続できてしまいます。それを抑止するために、iptablesにて 外部からの8765番ポートへの接続は抑止し、8765番ポートは自分自身(localhost)からのアクセスだけを許可するようにします。
今回はサーバ自身でアクセス制御を行いましたが、ファイアウォールなどの(Amazon EC2であればセキュリティグループのような)NW機器があればそれを利用して不要な通信をブロックしても良いでしょう。# iptables -A INPUT -i lo -j ACCEPT # iptables -A INPUT -p tcp -m tcp --dport 8765 -j DROP # iptables-save # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere DROP tcp -- anywhere anywhere tcp dpt:8765 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
以上、calibre-server の認証を apacheの認証で行う、でした。
Have Fun!
参考にさせていただいたwebサイト
calibre package in Ubuntu: Calibre content server crashes
calibre本家: Integrating the calibre content server into other servers
リバースプロキシとBasic認証の併用時の注意点
さくらインターネット: iptablesの設定方法
赤星大好き |
0 件のコメント:
コメントを投稿