Squidプロキシサーバの設定

Proxyサーバは、HTTP/HTTPS/FTP/GOPHER/WAISの代理アクセスサーバで、クライアントがHTTP/HTTPS通信を行う場合、Proxyでリソースをキャッシュする事によりアクセスの高速化や、リソースへのアクセス制御、アクセスロギングなどに役立ちます。

 

また、リバースProxyを利用するとHTTPサーバのリソースをキャッシュし、クライアントからのアクセスをProxyが返す事によるアクセスの高速化や、リクエストを複数のHTTPサーバに分散される事なども可能になります。

 

おそらく、Linuxを利用する場合では、Proxyサーバで最もポピュラーな物はSquidでしょう。

今回は、CentOS-5でSquidを利用した例に付いて記載します。

 

Squidのインストール

CentOSでは、Squidのパッケージが提供されているため、今回はそれを利用します。

yum install squid

 


Squidの基本設定

ここでは、Squidに最低限の設定をしてProxyサーバとして動作させます。設定ファイルは、/etc/squid/squid.confです。

*設定ファイルの変更点のみ記載します。

/etc/squid/squid.conf

ポート設定

Squidサービスを提供するポートを指定します。今回は、3128ポートを利用します。

http_port 3128

 

ICPポートの設定

分散キャッシュを利用しない場合は、以下の値を設定する事により、ネットワークに余計なトラフィックを流さなくなります。

icp_port 0

 

ネットワーク制限の設定

デフォルト設定では、localhostのみがProxyサーバを利用可能になっていると思います。

そこで、ローカルネットワークからも利用出来るように変更します。

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 localnet src 192.168.1.0/255.255.255.0 <---この行を追加
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443

#http_access allow our_networks
http_access allow localnet <---この行を追加
# And finally deny all other access to this proxy
http_access allow localhost
http_access deny all

aclの書式は、acl [名前] [要素] [値] です。詳細は後記します。

この設定で、最低限プロキシサーバとして動作する設定は終了です。

 

Squidを起動して動作確認をしてください。

/etc/init.d/squid start

 

なお、自動起動の設定は以下の通りです。

chkconfig squid on

 


Squidの設定項目

基本設定では、最低限の設定を行っただけですが、ここではその他の設定項目を紹介します。

 

アクセスの設定

プロキシサーバを使用している端末のローカルIPアドレスを隠す

# forwarded_for on
forwarded_for off

 

エラー画面の日本語表示

クライアントのエラーは、デフォルトでは英語のエラーページが表示されますので、日本語に変更します。

#Default:
# error_directory /usr/share/squid/errors/English
error_directory /usr/share/squid/errors/Japanese

 

FTP接続時のanonymouseユーザのパスワードを設定

FTPサーバにanonymouse接続した場合に、anonymouseユーザパスワードとして、有効なメールアドレスを設定します。

#Default:
# ftp_user Squid@
ftp_user info@domainname

 

FTP接続方式の設定

パッシブFTP接続を利用するかどうか指定します。ファイアウォールの設定を確認する必要がありますが、通常はon(パッシブ接続)でかまいません。

#Default:
# ftp_passive on

 

FTPサーバの正当性チェック

接続しているFTPサーバのIPアドレスのチェックをするか指定します。

onの場合、データを要求したサーバと、データを送受信しているサーバのIPアドレスが同一かチェックします。

#Default:
# ftp_sanitycheck on

 

 

管理の設定

管理者用メールアドレスの設定

クライアントに対してエラー画面を表示する管理者アドレスや、Squidのキャッシュ機能が停止した場合などに知らせる、管理者のメールアドレスを設定します。

#Default:
# cache_mgr root
cache_mgr info@dmainname

 

ホスト名の設定

クライアントに対してエラー画面を表示する場合などに利用するホスト名の設定です。

デフォルトでは、gethostname()の返り値が利用されます。

#Default:
# none
visible_hostname proxy.domainname

なお、複数のSquidを利用しており、同じvisible_hostnameを利用する場合は、管理のためにユニークなunique_hostnameも設定する必要があります。

visible_hostname proxy.domainname
unique_hostname server1.domainname

 

Squidの実行ユーザとグループの設定

Squidを実行するユーザとグループの設定です。通常変更する必要はありません。

#Default:
# cache_effective_user squid
#Default:
# cache_effective_group squid

 

 

キャッシュの設定

キャッシュメモリの設定

キャッシュには、メモリのキャッシュとディスクのキャッシュが利用されますが、当然メモリの方が高速に動作します。このため、cache_mem値をあげる事は多くの場合効果的です。

#Default:
# cache_mem 8 MB

 

キャッシュサイズの設定

キャッシュするファイルの最大サイズを指定します。キャッシュさせる対象に合わせて変更します。

#Default:
# maximum_object_size_in_memory 8 KB

 

最小キャッシュサイズの設定

キャッシュするファイルの最小サイズを指定します。

通常のhttpキャッシュサーバとして利用する場合は、変更する必要は無いと思います。

#Default:
# minimum_object_size 0 KB

 

キャッシュファイルの設定

ファイルに保存するキャッシュの設定です。

#Default:
# cache_dir ufs /var/spool/squid 100 16 256

 

書式:cachedir [ファイルシステムタイプ] [キャッシュディレクトリ] [サイズ] [レベル1] [レベル2]

 

[ファイルシステムタイプ]

デフォルトでufsが設定されています。Linuxで利用する場合は変更する必要はありません。

 

[キャッシュディレクトリ]

キャッシュファイルを作成するディレクトリを指定します。

 

[サイズ]

キャッシュファイルのサイズをMBで指定します。利用環境に応じて変更してください。

 

[レベル1]

ディレクトリを分割するサブディレクトリの数を指定します。[サイズ]を変更した場合は、変更した比率に合わせて分割するディレクトリ数を変更します。

 

[レベル2]

レベル1で分割したディレクトリをさらにいくつのディレクトリに分割するか指定します。デフォルトは256で特に変更する必要はありません。

なお、キャッシュディレクトリを複数のディスクに分散させる事により高速化が可能です。

その場合は、cache_dirディレクティブを複数記載します。

 

 

ログの設定

ログ形式の指定

Squidでは通常独自の形式でアクセスログを出力しますが、Apache互換の形式で出力するように変更します。

見通しが良くなるとともに、Apacheのログ解析ソフトを利用しアクセスログの解析も可能になります。

#access_log /var/log/squid/access.log squid
access_log /var/log/squid/access.log auto

#Default:
# emulate_httpd_log off
emulate_httpd_log on

 

ログローテションの設定

CentOSのパッケージでは、logrotateによる設定が入っており、デフォルトではその設定に従う事になります。

ただし、Squidは独自にログローテションの機構が組み込まれているため、これを利用する事も可能です。

Squid独自のログローテションを利用するには、以下の設定を変更します。

#Default:
# logfile_rotate 0
logfile_rotate 7

この設定では、6つの旧ファイルを残しながらローテションします。

ローテション対象のファイルは、access.log,cache.log,store.logです。

なお、ローテションを実行するには、以下のコマンドを利用します。

/usr/sbin/squid -k rotate

cronに登録しておくと良いでしょう。

0	0	*	*	*	/usr/sbin/squid -k rotate

なお、CentOSにはlogrotatedでローテションする為に/etc/logrotate.d/squidがありますので注意してください。

 

 

アクセスコントロールの設定

Squidでのアクセスコントロールの設定方法です。

アクセスコントロールは、aclで定義をしてhttp_accessで制御します。

aclの書式は、acl [name] [type] [value] です。

なお、[value]に外部ファイルを指定して利用する事も可能です。

[name]は、識別出来る一位の値を設定します。

[type]は以下の中から選択します。

type 説明
src アクセス元のIPアドレス
dst アクセス先のIPアドレス
srcdomain アクセス元のドメイン
dstdomain アクセス先のドメイン
url_regex URLのパターン
urlpath_regex URLパスのパターン
time 日付時刻
port ポート番号
proto プロトコル
method HTTPメソッド
browser ブラウザ
req_mime_type リクエストするMIMEタイプ
rep_mime_type ダウンロードするMIMEタイプ

[value]の書式は、選択した[type]により異なります。

アクセスコントロールの例

いくつか、アクセスコントロールの設定例を示します。

ローカルネットワークからProxyを利用可能にする

acl localnet src 192.168.1.0/255.255.255.0
http_access allow localnet

 

特定のドメインへのアクセスを禁止する

acl lockdom1 dstdomain examples.com
http_access deny lockdom1

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">