通常、Proxyにてユーザ認証を行うような運用は少ないと思いますが、セキュリティを心配する企業や学校などではProxyを利用する際に、ユーザ側にIDによる認証を求める運用を行うケースもあります。 大規模な組織では、ユーザ管理やユーザ情報の一元化の為にLDAPサーバを既に構築している場合も有ることでしょう。
Squid には、LDAPを使った認証プログラムが用意されており、これを使ってSquidを利用できるユーザの認証を行うことが可能になっています。これによりユーザ情報自体はSquidと別のサーバに持たせた運用形態になるため、セキュリティ的にも安全性が高める事が可能になります。
SquidからLDAPを使う方法には、バージョンによって使うモジュールが違うようですが、Squid2.5以降にはベーシック認証と同じ場所にLDAP認証に関するモジュールとして、"ldap_auth"と"squid_ldap_group"が存在する筈です。
更にSquidをPAMの使えるOSで起動する場合、PAMを経由してLDAPへのアクセス方法も考えられますが、この方法はLDAPというよりPAMの説明になるため、本資料には記述しませんのであしからず。(PAM認証で記述する予定です)
次の図のように、LDAPサーバが存在する環境に Proxy として Squid を構築し、ユーザ認証として LDAP を使った認証によって Proxy をクライアントから使えるようにします。
ユーザがクライアントからHTTPをリクエスト(①)し、それをSquidが受け取ると最初にユーザ認証が働きます。 クライアントに表示された認証ダイアログボックスでユーザIDとパスワードを入力(②)すると、SquidはこれをLDAPサーバに問い合わせ(③)て、ユーザが実際にLDAPサーバ上に存在するなら、リクエストされたHTTPを実際のリクエスト先のWebサーバへと送ります。(④)
ldap_authを使った認証は、認証サーバとしてLDAPを使っている事以外は設定箇所を含めて、ベーシック認証と同じ方法になります。
つまり、ユーザIDとパスワードをクリアテキストでSquidで渡すと、これをSquidはLDAPサーバに問い合わせる訳です。(LDAPパケットは暗号化されてない事に注意してください)
設定は、 squid.conf の以下の部分を編集していきます。
上記の設定を行う事で、LDAPサーバ(ldap-server.robata.org)からベース識別名が"dc=robata,dc=org"に属するユーザを検索するようになります。 この時、-fオプションでLDAPサーバから検索するオブジェクトクラスとして一般的な"posixAccount"の情報にある「uid」を使うようにしています。 (このあたりの詳しい意味についてはLDAPの解説書をご覧くださ)
参考: