連載
» 2009年04月08日 00時00分 UPDATE

実践でも役立つLPICドリル(11):Apache&Squidアクセス制御/ユーザー認証の設定 (2/4)

[大竹龍史,ナレッジデザイン]

今回のディストリビューション: 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メソッドを定義
(例)aclの基本的な設定例

httpプロトコルのCONNECTメソッドについて

 CONNECTメソッドはプロキシサーバにトンネリングを要求するメソッドです。SSLなどで暗号化されたデータを送る場合に利用されます。

http_accessディレクティブの書式:

http_access allow|deny [!]acl名
(注)acl名を複数指定することもできます。この場合、acl名の論理積(AND)となります。

 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
(例)月曜と金曜の9:00-17:00をacl名 MF9-17として定義し、その時間帯でのアクセスを許可する

【4】プロキシサーバSquidのユーザー認証の設定方法を把握

 ユーザーがプロキシサーバSquidを利用するとき、Squidがユーザー名とパスワードを要求し、正しく入力したユーザーだけがアクセスできるよう、ユーザー認証の設定を行うことができます。

図2 Squidユーザー認証画面の例 図2 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
(例)acl名がbasic_ncsaで認証されたユーザーに対して、acl名MF9-17の時間帯でアクセスを許可する
http_access allow basic_ncsa & MF9-17
(注)squidのバージョンによって & を付ける書式もあります

(1)Apache HTTP サーバ バージョン 2.2 ドキュメント

(2)RFC2617

(3)/etc/squid/squid.conf.default:
(注)CentOS 5.2では、squidパッケージに含まれています。

(4)Squid User's guide

(5)Squid Tutorial

【参考】

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。