AWSに設置したphpMyAdminにBasic認証を設定/特定のIPアドレスによる制限
AWSで、ELB→EC2の環境にphpMyAdminを設置しました。
yumコマンドですぐ設置できた。
phpMyAdmin – Bringing MySQL to the web
OSとウェブサーバは、Amazon Linux + Apache2.4です。
まずは、Basic認証を設定してみます。
phpMyAdminをyumでインストールした場合、設定ファイルは以下になります。
/etc/httpd/conf.d/phpMyAdmin.conf
変更前の状態
Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin <Directory /usr/share/phpMyAdmin/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 127.0.0.1 Require ip ::1 </RequireAny> </IfModule> #(略)
Basic認証を設定
#(略) <RequireAny> AuthType Basic AuthName "Secret Zone" AuthUserFile /etc/httpd/conf.d/phpMyAdmin.htpasswd Require valid-user </RequireAny> #(略)
phpMyAdmin.htpasswdを設置して完成です。
さて、毎回認証情報を入力するのもめんどくさいので、特定のIP制限からアクセスされた場合はBasic認証を表示せず、そのままサービスにアクセスできるようにします。
通常は、
<RequireAny> Require ip 999.999.999.999 </RequireAny>
と記載すればOKなのですが、ELB+EC2の場合、EC2のApacheにはELBのIPアドレスでアクセスされるため、上記では動きません。
調べてみたところ、http2.4にはmod_remoteipというモジュールが標準で含まれていて、こちらを利用することで、本当のアクセスもとのIPアドレスが取得できるようになります。
Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin # ↓追加 RemoteIPHeader X-Forwarded-For <Directory /usr/share/phpMyAdmin/> AddDefaultCharset UTF-8 AllowOverride All <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> AuthType Basic AuthName "Secret Zone" AuthUserFile /etc/httpd/conf.d/phpMyAdmin.htpasswd Require valid-user # ↓追加 Require ip 999.999.999.999 </RequireAny> #(略)
RequireAnyタグについて
RequireAll:定義されているすべての条件に一致
RequireAny:定義されている、いずれか1つ以上の条件に一致
RequireNone:すべてに該当しない
上記の例の場合、RequireAnyで定義しているため、Basic認証か許可されたIPアドレスどちらかをクリアできればサービスにアクセスすることができます。
では、また。