Ubuntu 14.04+Nginxにたった3ステップでセキュアなphpmyadminを設定する方法
国内のブログではリバースプロキシ設定の紹介と共にapt-getでphpmyadminをインストールし、phpmyadmin.example.comといったURLに設定する方法が紹介されています。 紹介されているやり方そのままだと誰でもphpmyadminのログインページにアクセスできてしまい、攻撃から守るのはデフォルトのパスワード認証のみとなっています。 それはちょっと頼りないですよね。 もうちょっと凝ったやり方を簡単にできる方法が海外のサイトで紹介されていたので超意訳で紹介します。
元記事:
How To Install and Secure phpMyAdmin with Nginx on an Ubuntu 14.04 Server | DigitalOcean
前提としてUbuntu14.04+Nginx+MySQL+PHPのLEMP環境がインストールされている状態とします。
ステップ1 phpMyadminのインストール
$ sudo apt-get update $ sudo apt-get install phpmyadmin
インストールする際にphpMyadminが使用するデータベースを作成していいか尋ねられますので、[YES]を選択。 rootパスワードを求められた後、pmaユーザーが使用するパスワードを求められるので、適当に打ち込む。 インストールが完了されるので、nginxの公開ルートディレクトリにシンボリックリンクを貼ります。
$ sudo ln -s /usr/share/phpmyadmin /var/www/yourdomain.com/public_html
続いてPHP5モジュールのmcryptを有効化し、PHP-FPMをリスタートします。
$ sudo php5enmod mcrypt $ sudo service php5-fpm restart
これをしておかないとmcryptのエラーが出ます。 この段階でhttp://yourdomain.com/phpmyadminにアクセスし、phpmyadminにrootユーザーでログインしてみます。 WordPressを使うならこの段階でWP用のユーザーとテーブルを作成しておくといいでしょう。後でもいいですが。
phpmyadminをセキュアにする
phpmyadminはMySQLを管理する非常に優れた手段なため、多くのサーバー管理者が使用しています。 そのため、phpmyadminのURLに簡単にアクセスでき、パスワード認証があるだけでは攻撃者の格好の的となります。 URLを秘匿しBASIC認証を設けることで、攻撃にさらされるリスクを減らした方が賢明です。
ステップ2 URLを隠す
phpmyadminという文字列を使うことは避けましょう。シンボリックリンクによって簡単に設定できます。
$ cd /var/www/yourdomain.com/public_html $ ls -l lrwxrwxrwx 1 root root 21 Aug 6 10:50 phpmyadmin -> /usr/share/phpmyadmin
このphpmyadminディレクトリをシンボリックリンクにすることで、ボットからの攻撃を避けます。
$ sudo mv phpmyadmin nothingtosee $ ls -l lrwxrwxrwx 1 root root 21 Aug 6 10:50 nothingtosee -> /usr/share/phpmyadmin
これでhttp://yourdomain.com/phpmyadminにアクセスすると404エラーが出ます。 http://yourdomain.com/notingtoseeにアクセスするとphpmyadminの管理画面が出るはずです。
ステップ3 BASIC認証を設ける
http://www.yourdomain.com/notihingtoseeのページにBASIC認証を設置します。 まずはSSLパスワードを発行します。
$ openssl passwd パスフレーズを入力
O5az.RSPzd.HEとかこんな感じのパスワードができます。 これをコピー
$ sudo vim /etc/nginx/pma-pass yourusername:O5az.RSPzd.HE
保存して終了。 次はNginxのサーバー設定に追記します。
server { === location / { try_files $uri $uri/ =404; } location /nothingtosee { auth_basic "Admin Login"; auth_basic_user_file /etc/nginx/pma_pass; } === }
これでhttp://yourdomain.com/notingtoseeにアクセスするとBASIC認証が出てきます。 設定したユーザー名とパスフレーズを打ち込めばログイン画面に進めます。
以上でURLの秘匿に加えてBASIC認証を備えたphpMyadminとなりました。 うまくいけばこのままエラーも何もなく使えるはずです。