早速契約しちゃいました。今のレンタルサーバが 4 月までなのでそれまでに環境を整えていこうと思います。
ServersMan@VPS には Airdisplay という、ブラウザから VPS にログインする機能(実際はajaxtermそのもの)がありますが、ちょっといじってみたところ、URLさえ知っていれば誰でもログインプロンプトまで表示できてしまうという仕様だと分かりました。
うーん。この仕様で大丈夫なんだろうか・・。
さらに、ServersMan@VPS の Entry プランでは pty の上限が 8 までなので、ブラウザで8つ表示させるだけで、本当の SSH 接続すらできなくなってしまうようです。怖い怖い・・。
基本 SSH でしか接続しないので ajaxterm 自体を無効化しようかとも思いましたが、設定をミスって外部からの SSH 接続ができなくなった時のための手段として残しておくことにしました。
こういう時のために以前使った VPS では管理コンソールからゲスト OS の tty に接続できる仕組みがあったんですが、ServersMan@VPS には無いみたい・・。
# 設定ミスで sshd が起動しない状態になったらどうするんだろ?
ajaxterm からの接続は localhost からの SSH 接続になるので PAM などでログイン制限をかけやすいので、適切に設定すれば大丈夫かなと。
ということで、ある程度安心して ajaxterm を使えるように以下の変更を行うことにしました。
- https 必須で http からのアクセスは拒絶 (パスワードやタイプした文字が暗号化されるように)
- Basic 認証を追加 (SSL 必須なのでBasic認証でも平文が流れることはない)
- デフォルトの URLを変更 (少しでもアタックされにくいように)
これらの変更を行うため、 /etc/httpd/conf.d/proxy_ajaxterm.conf を以下のように変更しました。赤字が変更部分です。
<IfModule mod_proxy.c> <Proxy *> Order deny,allow Deny from all Allow from all </Proxy> ProxyPass /AIRDISPLAY/ http://localhost:8022/ ProxyPassReverse /AIRDISPLAY/ http://localhost:8022/ <Location /AIRDISPLAY/> Order allow,deny Allow from all AuthType Basic AuthName "ajaxterm_user" AuthUserFile /var/www/ajaxterm-htpasswd require valid-user # Reject non-SSL requests SSLRequireSSL </Location> </IfModule>
AIRDISPLAY の部分は URL になるので適当に変更してください。
続いて、パスワードファイルを作成します。
# htpasswd -c /var/www/ajaxterm-htpasswd USERNAME
USERNAME も適当に。上記コマンドを実行するとパスワードを聞かれるので入力してください。
作業が終わったら apache を再起動します。
# service httpd restart
これで作業完了。
ちゃんと動作するか確認します。
https://ホスト名/AIRDISPLAY/ でアクセス認証ダイアログが表示され、USERNAME と入力したパスワードで認証をパスすることを確認できれば OK です。
さらに http://ホスト名/AIRDISPLAY で接続できないことも確認しておきます。
これで少しはアタックされにくくなったはず。