Apache&Squidアクセス制御/ユーザー認証の設定:実践でも役立つLPICドリル(11)(2/4 ページ)
本連載は、Linux 認定試験 LPICに対応しています。一般的なLinuxユーザーレベルのトピックは省略し、システム管理とサーバ管理の内容を取り上げています。また、LPIC対策だけでなく、関連するトピックについて系統的な理解を問う問題も出題しています。連載の特徴は、対象となるプログラムのバージョンを可能な限り明記していること、比較的新しくまとまった解説がまだ少ないトピック、重要だが理解しにくいトピックを優先して取り上げていることです。問題を解き、その解説を読むことにより実践でLinuxを活用できる力を身に付けます。
今回のディストリビューション: CentOS 5.2
■問題を解く鍵 【3】【4】
【3】プロキシサーバSquidのアクセス制御の設定方法を把握
Squidのアクセス制御の設定は次の2段階で行います。
(1)aclディレクティブで制御の対象を定義する
(2)http_accessディレクティブでアクセス対象への許可あるいは拒否を設定する
aclディレクティブの書式は次のようになります。
acl acl名 aclタイプ 引数
acl名には、任意の分かりやすい名前を付けます。
aclタイプには、主に次のようなものがあります。
src、dst、time、url_regex、port、proto、method、proxy_auth
acl all src 0.0.0.0/0.0.0.0 # すべての発信元ホスト acl manager proto cache_object # キャッシュされたオブジェクト情報へのアクセス acl localhost src 127.0.0.1/255.255.255.255 # 発信元ローカルホスト acl SSL_ports port 443 # https acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 1025-65535 # 未定義ポート番号 acl CONNECT method CONNECT # CONNECTメソッドを定義
●httpプロトコルのCONNECTメソッドについて
CONNECTメソッドはプロキシサーバにトンネリングを要求するメソッドです。SSLなどで暗号化されたデータを送る場合に利用されます。
http_accessディレクティブの書式:
http_access allow|deny [!]acl名
http_accessのデフォルトの動作は次のようになります。
- http_accessの指定が一切ない場合、リクエストは拒否される。
- http_accessの指定に一致しないリクエストは、最後のhttp_access行のallow/denyの反対になる。
- 最終行が許可(allow)の指定なら、一致しないリクエストは拒否(deny)される。
- 最終行が拒否(deny)の指定なら、一致しないリクエストは許可(allow)される。
- 最後のhttp_access行を次のように書くと設定が分かりやすくなる。
http_access allow all あるいは http_access deny all
(例)http_accessの基本的な設定例
# cachemgrアクセス(キャッシュされたオブジェクト情報へのアクセス)はローカルホストからのみ許可する。
http_access allow manager localhost http_access deny manager
# acl名Safe_portsで定義したポート以外へのリクエストを拒否する。
http_access deny !Safe_ports
# SSLポート以外へのCONNECTメソッドのリクエストは拒否する。
http_access deny CONNECT !SSL_ports
# ローカルホストからのアクセスは許可する。
http_access allow localhost
# そのほかのアクセスはすべて拒否する。
http_access deny all
クライアントからリクエストされたURLに対する正規表現(Regular Expression)によるパターンマッチングで、アクセス制御することもできます。この場合、aclタイプはurl_regexを指定します。
aclの書式:
acl acl名 url_regex 正規表現
デフォルトでは正規表現の指定は大文字/小文字を識別します。大文字/小文字を識別しない場合は-i(ignore)オプションを指定します。
acl acl名 url_regex -i 正規表現
acl eduSite url_regex "http://.*\knowd\.com"
時間帯によるアクセス制御もできます。この場合、aclタイプはtimeを指定します。
aclの書式:
acl acl名 time 曜日指定 開始(時:分)-終了(時:分)
曜日の指定は次のようになります。
S(日:Sunday)、M(月:Monday)、T(火:Tuesday)、W(水:Wednesday)、H(木:Thursday)、F(金:Friday)、A(土: Saturday)
acl MF9-17 time MF 9:00-17:00 http_access allow MF9-17
【4】プロキシサーバSquidのユーザー認証の設定方法を把握
ユーザーがプロキシサーバSquidを利用するとき、Squidがユーザー名とパスワードを要求し、正しく入力したユーザーだけがアクセスできるよう、ユーザー認証の設定を行うことができます。
Squidの認証方式にはBasic認証、Digest認証、NTLM認証(Windows NT LAN Manager認証)があります。設定はauth_paramディレクティブにより、認証方式と認証プログラムを指定し、aclディレクティブとhttp_accessディレクティブで認証ユーザーのアクセスを許可します。
この場合、aclディレクティブではaclタイプproxy_authを指定します。ここでは例として、ユーザー名とパスワードを平文でやりとりするBasic認証方式で、NCSAスタイルの認証ヘルパープログラムncsa_authを使用する設定を取り上げます。
(例)
htpasswdコマンドでユーザー認証ファイル/etc/squid/passwdを作成し、ユーザーuser01を登録する。
# htpasswd -c /etc/squid/passwd user01
ユーザーuser02も追加して登録する。
# htpasswd /etc/squid/passwd user02
次に設定ファイルsquid.confを編集する。
# auth_paramディレクティブにより、認証ヘルパープログラムとユーザー認証ファイルを指定する。
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
# aclディレクティブによりaclタイプ proxy_authを使用してユーザーuser01をacl名basic_ncsa として定義する。
acl basic_ncsa proxy_auth user01
# ユーザー名にREQUIREDを指定すると、ユーザー認証ファイルに登録されたすべてのユーザーとなる。
acl basic_ncsa proxy_auth REQUIRED
# 指定したユーザーによるアクセスを許可する。
http_access allow basic_ncsa
認証されたユーザーに対して、特定の時間帯を指定してアクセスを許可・拒否することもできる。
http_access allow basic_ncsa MF9-17
http_access allow basic_ncsa & MF9-17
(1)Apache HTTP サーバ バージョン 2.2 ドキュメント
(2)RFC2617
(3)/etc/squid/squid.conf.default:
(注)CentOS 5.2では、squidパッケージに含まれています。
Copyright © ITmedia, Inc. All Rights Reserved.