フルスタックエンジニアを目指して

いろいろやってみるブログ

プロキシサーバ(Squid)にDigest認証を実装する

SquidにDigest認証を導入してみます。

前回はSquidにBasic認証を導入してみましたが、今回はSquidにDigest認証機能を実装します。なお、Digest認証モジュールはSquidのバージョンによって格納場所やファイル名が異なりますので注意が必要です。

 

Basic認証とDigest認証の違い

そもそもですが、Basic認証とDigest認証の違いについて触れておきます。

Basic認証はRFC2617で定められたHTTPを利用した認証方式です。UserIDとPasswordの単純な紐づけ認証となります。

Digest認証も基本的な仕組みはBasic認証と同じですが、サーバとクライアント間でパスワードを平文でやりとりするBasic認証と異なり、Digest認証では、パスワードが暗号化されます。Basic認証とDigest認証の違いはこの暗号化されるかどうかだけのようです。

Digest認証を導入する

/etc/squid/squid.confを編集します。

#vi /etc/squid/squid.conf

auth_param digest program /usr/lib64/squid/digest_pw_auth /etc/squid/passwd
auth_param digest children 20 startup=0 idle=1
auth_param digest realm Squid proxy-caching web server
auth_param digest nonce_garbage_interval 5 minutes
auth_param digest nonce_max_duration 30 minutes
auth_param digest nonce_max_count 50

auth_param digest program」で認証モジュールのPATHとパスワードファイルのPATHを指定します。その他のオプションはSquidWikiなどを参考に適切に設定してください。realmは好みですが、ユーザがわかりやすいものを設定した方がよいでしょう。

 

Digest認証用のパスワードファイルを作成する

Basic認証の場合、パスワードファイルはハッシュ化されなければなりませんでしたが、Digest認証の場合は平文でパスワードファイルを作成すればよいです。逆に、ハッシュ化してしまうとDigest認証は動きません。

参考:SquidプロキシでDigest認証 | まったりせのインフラ構築メモ

なお、パスワードファイルは隠しファイルでも問題ありません。

# vi /etc/squid/passwd

testuser:password

 

アクセステスト

ブラウザにプロキシサーバを設定して、任意のWEBサイトにアクセスすると認証のポップアップが上がってくるので、パスワードファイルに記載したユーザ名とパスワードを入力するとアクセスが可能になります。

 

ログの見方

プロキシサーバへの認証が成功すると、Squidのaccesslogに認証したユーザ名でログが表示されるようになります。逆に、認証が失敗した場合はHTTPステータスコード「407」エラーとしてログに載るようになります。なお、407エラーとなったユーザ名はログに載らないので、IP等から追いかける必要があります。