Apache2.4でDigest認証を設定する

Digest認証設定する機会があったので、備忘録も兼ねて手順を紹介して行きたいと思います。

Digest認証を設定した時の環境

  • OS:Amazon Linux AMI release 2017.09
  • Webサーバ:Apache 2.4

今回は、AWSEC2で作成したサーバにDigest認証を設定しました。

本当はクライアント認証かけようとかと思ってたんですが、検証用に作った環境なので、とりあえずDigest認証だけで逃げる感じで・・・。

では、早速Digest認証を設定する手順を説明していきたいと思います!

Digest認証のファイルを作成する

下記コマンドを実行してDigest認証ファイルを作成します。

$ sudo htdigest -c /path/to/documentroot/.htdigest 'Digest Name' 【ID】
Adding password for 【ID】 in realm digest.
New password:【パスワード】
Re-type new password:【パスワード】

htdigestコマンド実行時のパスはドキュメントルートを指定します。利用している環境によって適宜変更してください。

【ID】と【パスワード】にはDigest認証時に利用するIDとパスワードを設定します。

Digest認証に利用するモジュール【mod_auth_digest】が有効になっているか確認する。

まず、mod_auth_digest.soというファイルが存在するかをチェックします。

/etc/httpd/modulesの中身を確認してmod_auth_digest.soというファイルが存在するか確認します。

なければ、apxsを使ってmod_auth_digest.soをコンパイルしてインストールしたりしないといけないみたいですが、今回はApache2.4インストール時にデフォルトでインストールされてたので、コンパイル〜インストールの方法については今回は説明を省きます。

次に、mod_auth_digest.soLoadModuleされてるか確認します。

私の環境では、/etc/httpd/conf.modules.d/00-base.confの中にLoadModuleの記述がありました。

なければ、/etc/conf.dの中にdigest.confを作成するなりして、その中に下記の記述を行いましょう。

LoadModule auth_digest_module modules/mod_auth_digest.so

Apacheの設定ファイルとしてDigest認証に関する設定ファイルを追加する

Digest認証用のApacheの設定ファイルを作成します。

$ sudo vim /etc/httpd/conf.d/digest.conf

<Directory "/var/www/html/">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
      AuthType Digest
      AuthName "Digest Name"
      AUthUserFile "/path/to/documentroot/.htdigest"
      Require valid-user
</Directory>

Apacheを再起動する

Apacheを再起動しないと設定が反映されないので、忘れずにApacheを再起動します。

$ sudo service httpd restart

ページにアクセスした時に、こんな感じにIDをパスワードが要求されて、Digest認証ファイル作成時に設定した【ID】と【パスワード】を入力して認証されれば設定完了です。

特定のIPアドレスからのアクセス時にはDigest認証をスキップする

例えば、社外からのアクセスはDigest認証したいけど、社内からのアクセスの場合はDigest認証なしでページを表示したい場合などに、この設定を行います。

Digest認証をスキップしたいIPアドレスを設定していきます。

/etc/httpd/conf.d/digest.confの設定に下記を追加します。

Satisfy Any                                                           
Order deny,allow                                                      
deny from all                                                         
Allow from XXX.XXX.XXX.XXX NNN.NNN.NNN.NNN

設定の全文はこんな感じになります。

<Directory "/var/www/html/">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
      AuthType Digest
      AuthName "Digest Name"
      AUthUserFile "/path/to/documentroot/.htdigest"
      Require valid-user
      Satisfy Any                                                           
      Order deny,allow                                                      
      deny from all                                                         
      Allow from XXX.XXX.XXX.XXX NNN.NNN.NNN.NNN
</Directory>

Allow fromIPアドレスを指定すると、該当するIPアドレスからのアクセスに対してDigest認証をスキップさせることができるようになります。

最後に

Digest認証を設定することで、お手軽にセキュリティ対応することができるようになります。社内で使ってるサイトとか、検証環境とかでそこまでのセキュリテイレベルが求められない場合や、あらかじめ利用者にIDとパスワードとかを連絡できる場合とかには十分使えるんじゃないかと思います。

そうじゃないと、SSHにしてクライアント認証キーを配布してとか、かなり手間がかかるセキュリテイ対策しないといけなくなっちゃうんで…。

この辺は労力に見合った効果が得られるかなどを考慮して、どのようにアクセス制御をかけるのかを検討していけば良いかと思います。