検索
連載

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

本連載は、Linux 認定試験 LPICに対応しています。一般的なLinuxユーザーレベルのトピックは省略し、システム管理とサーバ管理の内容を取り上げています。また、LPIC対策だけでなく、関連するトピックについて系統的な理解を問う問題も出題しています。連載の特徴は、対象となるプログラムのバージョンを可能な限り明記していること、比較的新しくまとまった解説がまだ少ないトピック、重要だが理解しにくいトピックを優先して取り上げていることです。問題を解き、その解説を読むことにより実践でLinuxを活用できる力を身に付けます。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

今回のディストリビューション: 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 © ITmedia, Inc. All Rights Reserved.

ページトップに戻る