6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ApacheでIPアドレス認証かダイジェスト認証のどちらかでアクセス制限させる

Posted at

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

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?