Apacheの設定の話
内容はタイトルとおりです。
Apacheの設定関係で、意外と出回ってなかったという印象なので書いておきます。
よくあるのは、IPアドレスとベーシック認証のどちらかを使用してアクセス制限するタイプです。
そもそもダイジェスト認証があまりメジャーではない(?)印象なので、尚更書いている人が少ないように思います。
ダイジェスト認証とは?
Wikiによると、以下のとおりですね。詳細は書いてあるので割愛します。
Digest認証(ダイジェストにんしょう)とは、HTTPの認証方法の一つ。ユーザ名とパスワードをMD5でハッシュ(ダイジェスト)化して送る。Basic認証では防げなかった盗聴や改竄を防ぐために考案された。
https://ja.wikipedia.org/wiki/Digest%E8%AA%8D%E8%A8%BC
要するに、ベーシック認証はセキュリティ面で不安があるので、それを解決したのがダイジェスト認証ということです。
ちなみに、ベーシック認証のなにが不安なのかというと**「ユーザーIDやパスワードの情報がほとんど加工されないまま送信される」**点です。暗号化されていないパスワードでやりとりするとか恐ろしすぎます。
それでもダイジェスト認証があまり使われてないのは
ベーシック認証がダイジェスト認証よりも広く使われている理由には、対応していないブラウザがまだあるということらしいですね。
-
ページを閲覧するユーザがある程度決まっていて、どんなブラウザを使用するか把握している
→ ダイジェスト認証 -
想定されるユーザが多岐に渡ってブラウザ環境が不明
→ ベーシック認証が無難
という解釈をしています。
環境次第でベーシック認証でいい
ベーシック認証はセキュリティ面で不安な面もありますが、SSLが確立されている場合や社内LANからのアクセスならそこまで慎重になる必要はなさそうです。
社内アクセスはIPアドレス認証し、社外からのアクセスはダイジェスト認証にする
ここまで書いた内容を考慮して、特定の社員がアクセスするページに対してこのような設定をすることにしました。
パスワードファイルを作成する
コマンドを叩くだけですが、何点か注意が必要です。
まずはApacheをインストールしたディレクトリに移動します。
htdigest -c
で新規のパスワードファイルを作ります。
htdigest -c パスワードファイル名 領域名 ユーザー名
# パスワードファイルを新規作成する場合は-cは必要です
- パスワードファイル名
絶対パスで指定します
- 領域名
後にhttpd.confのAuthNameで指定する名前になります。特に決まりはないです
- ユーザ名
ダイジェスト認証でユーザ名を聞かれたときに入力する値になります。adminがわかりやすいです
コマンドを実行すると、二度パスワードを入力せよと指示があるので入力します。
そのパスワードがダイジェスト認証のパスワードになるので忘れないようにしてください。
httpd.confに設定を書く
パスワードファイルができたら以下の設定を記述します。
ベーシック認証設定の内容とほぼ変わりません。
===
<Directory "<Directory_path>">
Order deny,allow #全拒否してから許可させるものを指定する
Allow from <社内IP> #許可するIPアドレス
Allow from <社内IP>
Allow from <社内IP>
Deny from All #すべてを拒否
#Digest
AuthType Digest #ダイジェスト認証を使うぞ宣言
AuthName "<領域名>" #htdigestで入力した領域名
Options FollowSymLinks #シンボリックリンクファイルを認識させる
AllowOverride All #上位で設定した設定値を、下位の設定で変更できるように許可を与える
AuthUserFile "/etc/httpd/conf/.htdigest" #パスワードファイル名
Require valid-user #記述されているユーザを許可する
Satisfy any #ダイジェスト認証かIP元どちらかをパスすればOKにする(defaultはAll)
</Directory>
記述が終わったら、syntaxの確認をして・・・。
/etc/init.d/httpd configtest
問題なければサービスを再起動です。
service httpd restart
これにより、社内からのアクセスはダイジェスト認証が実施されずにページへアクセスできます。
それ以外のIPアドレスから来た場合、ダイジェスト認証のポップアップがでるようになります。
参考文献
ベーシック認証Wiki
https://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC
ダイジェスト認証Wiki
https://ja.wikipedia.org/wiki/Digest%E8%AA%8D%E8%A8%BC
Apache HTTP サーバ バージョン 2.4 ドキュメント
https://httpd.apache.org/docs/2.4/ja/
Basic認証(基本認証)とDigest認証、それぞれの役割と違いについて
https://madalinazaharia.com/column/basic-authentication-and-digest-authentication/
ダイジェスト認証を設定する
https://www.adminweb.jp/apache/allow/index8.html